diff options
author | Timothy Pearson <tpearson@raptorengineeringinc.com> | 2015-03-21 15:11:58 -0500 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2015-03-27 17:07:06 +0100 |
commit | b337c1d1f5a2baef4445a221ad0534bf047f25fc (patch) | |
tree | b0841e82a24a3cb5fde7452c74deaad1919083e4 /src/northbridge/amd/amdfam10 | |
parent | ebbb0d4105d7df2358ef572677a39147c577d7c5 (diff) |
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>
Diffstat (limited to 'src/northbridge/amd/amdfam10')
-rw-r--r-- | src/northbridge/amd/amdfam10/acpi.c | 36 |
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; } } |