[coreboot-gerrit] Patch set updated for coreboot: 034553d northbridge/amd/amdfam10: Properly implement SLIT generation

Timothy Pearson (tpearson@raptorengineeringinc.com) gerrit at coreboot.org
Sun Mar 22 00:31:20 CET 2015


Timothy Pearson (tpearson at raptorengineeringinc.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/8856

-gerrit

commit 034553d2c690d7217eb572dc3626628a3d5c0f5a
Author: Timothy Pearson <tpearson at raptorengineeringinc.com>
Date:   Sat Mar 21 15:11:58 2015 -0500

    northbridge/amd/amdfam10: Properly implement SLIT generation
    
    Change-Id: I973abf2224762bf7a53d71177544ade15db50cba
    Signed-off-by: Timothy Pearson <tpearson at raptorengineeringinc.com>
---
 src/northbridge/amd/amdfam10/acpi.c | 36 +++++++++++++++++++++++-------------
 1 file changed, 23 insertions(+), 13 deletions(-)

diff --git a/src/northbridge/amd/amdfam10/acpi.c b/src/northbridge/amd/amdfam10/acpi.c
index 9ffea36..c6e004c 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;
 		}
 	}
 



More information about the coreboot-gerrit mailing list