summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimothy Pearson <tpearson@raptorengineeringinc.com>2015-03-21 15:11:58 -0500
committerPatrick Georgi <pgeorgi@google.com>2015-03-27 17:07:06 +0100
commitb337c1d1f5a2baef4445a221ad0534bf047f25fc (patch)
treeb0841e82a24a3cb5fde7452c74deaad1919083e4
parentebbb0d4105d7df2358ef572677a39147c577d7c5 (diff)
downloadcoreboot-b337c1d1f5a2baef4445a221ad0534bf047f25fc.tar.xz
northbridge/amd/amdfam10: Properly implement SLIT generation
Change-Id: I973abf2224762bf7a53d71177544ade15db50cba Signed-off-by: Timothy Pearson <tpearson@raptorengineeringinc.com> Reviewed-on: http://review.coreboot.org/8856 Tested-by: build bot (Jenkins) Tested-by: Raptor Engineering Automated Test Stand <noreply@raptorengineeringinc.com> Reviewed-by: Edward O'Callaghan <edward.ocallaghan@koparo.com>
-rw-r--r--src/northbridge/amd/amdfam10/acpi.c36
1 files changed, 23 insertions, 13 deletions
diff --git a/src/northbridge/amd/amdfam10/acpi.c b/src/northbridge/amd/amdfam10/acpi.c
index 9ffea36aa0..c6e004c97d 100644
--- a/src/northbridge/amd/amdfam10/acpi.c
+++ b/src/northbridge/amd/amdfam10/acpi.c
@@ -132,18 +132,30 @@ unsigned long acpi_fill_srat(unsigned long current)
unsigned long acpi_fill_slit(unsigned long current)
{
- /* need to find out the node num at first */
- /* fill the first 8 byte with that num */
- /* fill the next num*num byte with distance, local is 10, 1 hop mean 20, and 2 hop with 30.... */
-
- struct sys_info *sysinfox = (struct sys_info *)((CONFIG_RAMTOP) - sizeof(*sysinfox));
- u8 *ln = sysinfox->ln;
-
+ /* Implement SLIT algorithm in BKDG Rev. 3.62 ยง 2.3.6.1
+ * Fill the first 8 bytes with the node number,
+ * then fill the next num*num byte with the distance,
+ * Distance entries vary with topology; the local node
+ * is always 10.
+ *
+ * Fully connected:
+ * Set all non-local nodes to 16
+ *
+ * Partially connected; with probe filter:
+ * Set all non-local nodes to 10+(num_hops*6)
+ *
+ * Partially connected; without probe filter:
+ * Set all non-local nodes to 13
+ *
+ * FIXME
+ * The partially connected cases are not implemented;
+ * once a means is found to detect partially connected
+ * topologies, implement the remaining cases.
+ */
u8 *p = (u8 *)current;
int nodes = sysconf.nodes;
int i,j;
- u32 hops;
memset(p, 0, 8+nodes*nodes);
*p = (u8) nodes;
@@ -151,12 +163,10 @@ unsigned long acpi_fill_slit(unsigned long current)
for(i=0;i<nodes;i++) {
for(j=0;j<nodes; j++) {
- if(i==j) {
+ if(i==j)
p[i*nodes+j] = 10;
- } else {
- hops = (((ln[i*NODE_NUMS+j]>>4) & 0x7)+1);
- p[i*nodes+j] = hops * 2 + 10;
- }
+ else
+ p[i*nodes+j] = 16;
}
}