[LinuxBIOS] r2776 - in trunk/LinuxBIOSv2/src: devices northbridge/amd/amdk8 southbridge/nvidia/mcp55

svn at openbios.org svn at openbios.org
Fri Sep 14 16:58:34 CEST 2007


Author: stepan
Date: 2007-09-14 16:58:33 +0200 (Fri, 14 Sep 2007)
New Revision: 2776

Modified:
   trunk/LinuxBIOSv2/src/devices/hypertransport.c
   trunk/LinuxBIOSv2/src/northbridge/amd/amdk8/early_ht.c
   trunk/LinuxBIOSv2/src/northbridge/amd/amdk8/incoherent_ht.c
   trunk/LinuxBIOSv2/src/northbridge/amd/amdk8/northbridge.c
   trunk/LinuxBIOSv2/src/southbridge/nvidia/mcp55/mcp55_enable_rom.c
   trunk/LinuxBIOSv2/src/southbridge/nvidia/mcp55/mcp55_enable_usbdebug_direct.c
Log:
More range for HT_CHAIN_UNITID_BASE and HT_CHAIN_END_UNITID_BASE.

For example: in C51/MCP55 or C51/MCP51

Will allow
1. C51 at 0x10 to 0x14, and MCP at 0 to 4
2. C51 at 1 to 4, and MCP at 7 to 0x0a

The reason is c51/mcp51/mcp55 reported unitid is 0x0f (far beyond it
needed), and will prevent us from putting them on bus 0.

Typical values for c51/mcp55 or c51/mcp51:
HT_CHAIN_UNITID_BASE = 0x10 # for C51
HT_CHAIN_END_UNITID_BASE = 0 # for mcp

If only have mcp with c51, 
HT_CHAIN_UNITID_BASE = 0 # for MCP
#HT_CHAIN_END_UNITID_BASE = 0 # default value 0x20

Signed-off-by: Yinghai Lu <yinghai.lu at amd.com>
Acked-by: Stefan Reinauer <stepan at coresystems.de>



Modified: trunk/LinuxBIOSv2/src/devices/hypertransport.c
===================================================================
--- trunk/LinuxBIOSv2/src/devices/hypertransport.c	2007-09-14 00:09:29 UTC (rev 2775)
+++ trunk/LinuxBIOSv2/src/devices/hypertransport.c	2007-09-14 14:58:33 UTC (rev 2776)
@@ -383,14 +383,14 @@
 	struct ht_link prev;
 	device_t last_func = 0;
 	int ht_dev_num = 0;
-	unsigned temp_unitid;
-	unsigned not_use_count;
+	unsigned max_unitid;
 
-#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
+#if HT_CHAIN_END_UNITID_BASE != 0x20
         //let't record the device of last ht device, So we can set the Unitid to HT_CHAIN_END_UNITID_BASE
         unsigned real_last_unitid; 
         uint8_t real_last_pos;
 	device_t real_last_dev;
+	unsigned end_used = 0;
 #endif
 
 	/* Restore the hypertransport chain to it's unitialized state */
@@ -410,7 +410,7 @@
 	
 	/* If present assign unitid to a hypertransport chain */
 	last_unitid = min_unitid -1;
-	next_unitid = min_unitid;
+	max_unitid = next_unitid = min_unitid;
 	do {
 		uint8_t pos;
 		uint16_t flags;
@@ -478,26 +478,27 @@
 		flags &= ~0x1f; /* mask out base Unit ID */
 
 		count = (flags >> 5) & 0x1f; /* get unit count */
-		not_use_count = 0;
-		temp_unitid = next_unitid;
-#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
+#if HT_CHAIN_END_UNITID_BASE != 0x20
 		if(offset_unitid) {
-			if((next_unitid+count)>=0x20) {
-		                temp_unitid = HT_CHAIN_END_UNITID_BASE;
-				//still use the old next_unitid
-				not_use_count = 1;
+			if(next_unitid > (max_devfn>>3)) { // max_devfn will be (0x17<<3)|7 or (0x1f<<3)|7
+				if(!end_used) {
+			                next_unitid = HT_CHAIN_END_UNITID_BASE;
+					end_used = 1;
+				} else {
+					goto out;
+				}
 			}
 
 		} 
 #endif
 
-                flags |= temp_unitid & 0x1f;
+                flags |= next_unitid & 0x1f;
                 pci_write_config16(dev, pos + PCI_CAP_FLAGS, flags);
 
 		/* Update the Unitd id in the device structure */
 		static_count = 1;
 		for(func = dev; func; func = func->sibling) {
-			func->path.u.pci.devfn += (temp_unitid << 3);
+			func->path.u.pci.devfn += (next_unitid << 3);
 			static_count = (func->path.u.pci.devfn >> 3) 
 				- (dev->path.u.pci.devfn >> 3) + 1;
 			last_func = func;
@@ -508,20 +509,22 @@
 		if (count < static_count) {
 			count = static_count;
 		}
-		if(!not_use_count) 
-			next_unitid +=  count;
 
 		/* Update the Unitid of the next device */
-		ht_unitid_base[ht_dev_num] = temp_unitid;
+		ht_unitid_base[ht_dev_num] = next_unitid;
 		ht_dev_num++;
 
-#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
-		if(offset_unitid) {
+#if HT_CHAIN_END_UNITID_BASE != 0x20
+		if (offset_unitid) {
         	        real_last_pos = pos;
-			real_last_unitid = temp_unitid;
+			real_last_unitid = next_unitid;
 			real_last_dev = dev;
 		}
 #endif
+		next_unitid +=  count;
+		if (next_unitid > max_unitid) {
+			max_unitid = next_unitid;
+		}
 
 		/* Setup the hypetransport link */
 		bus->reset_needed |= ht_setup_link(&prev, dev, pos);
@@ -531,7 +534,8 @@
 			dev->vendor, dev->device, 
 			(dev->enabled? "enabled": "disabled"), next_unitid);
 
-	} while((last_unitid != next_unitid) && (next_unitid <= 0x1f /*(max_devfn >> 3)*/ ));
+	} while (last_unitid != next_unitid);
+ out:
  end_of_chain:
 #if OPT_HT_LINK == 1
 	if(bus->reset_needed) {
@@ -542,8 +546,8 @@
 	}
 #endif
 
-#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
-        if(offset_unitid && (ht_dev_num>1) && (real_last_unitid != HT_CHAIN_END_UNITID_BASE) ) {
+#if HT_CHAIN_END_UNITID_BASE != 0x20
+        if(offset_unitid && (ht_dev_num>1) && (real_last_unitid != HT_CHAIN_END_UNITID_BASE)  && !end_used) {
                 uint16_t flags;
                 int i;
 		device_t last_func = 0;
@@ -559,15 +563,18 @@
 
 		ht_unitid_base[ht_dev_num-1] = HT_CHAIN_END_UNITID_BASE; // update last one
 		
-                next_unitid = real_last_unitid;
+		printk_debug(" unitid: %04x --> %04x\n",
+				real_last_unitid, HT_CHAIN_END_UNITID_BASE);
+
         }
 #endif
+	next_unitid = max_unitid;
 
-	if (next_unitid > 0x1f) {
-		next_unitid = 0x1f;
+	if (next_unitid > 0x20) {
+		next_unitid = 0x20;
 	}
-	if( (bus->secondary == 0) && (next_unitid > 0x17)) { 
-		next_unitid = 0x17; /* avoid K8 on bus 0 */
+	if( (bus->secondary == 0) && (next_unitid > 0x18)) { 
+		next_unitid = 0x18; /* avoid K8 on bus 0 */
 	}
 
 	/* Die if any leftover Static devices are are found.  

Modified: trunk/LinuxBIOSv2/src/northbridge/amd/amdk8/early_ht.c
===================================================================
--- trunk/LinuxBIOSv2/src/northbridge/amd/amdk8/early_ht.c	2007-09-14 00:09:29 UTC (rev 2775)
+++ trunk/LinuxBIOSv2/src/northbridge/amd/amdk8/early_ht.c	2007-09-14 14:58:33 UTC (rev 2776)
@@ -13,22 +13,23 @@
 	 * links needs to be programed to point at bus 0.
 	 */
 	unsigned next_unitid, last_unitid;
-	unsigned temp_unitid;
-	unsigned not_use_count;
-#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
+	device_t dev;
+#if HT_CHAIN_END_UNITID_BASE != 0x20
 	//let't record the device of last ht device, So we can set the Unitid to HT_CHAIN_END_UNITID_BASE
 	unsigned real_last_unitid;
 	uint8_t real_last_pos;
 	int ht_dev_num = 0; // except host_bridge
+	uint8_t end_used = 0;
 #endif
 
+	dev = PCI_DEV(0,0,0);
 	next_unitid = HT_CHAIN_UNITID_BASE;
 	do {
 		uint32_t id;
 		uint8_t hdr_type, pos;
 		last_unitid = next_unitid;
 
-		id = pci_read_config32(PCI_DEV(0,0,0), PCI_VENDOR_ID);
+		id = pci_read_config32(dev, PCI_VENDOR_ID);
 		/* If the chain is enumerated quit */
 		if (((id & 0xffff) == 0x0000) || ((id & 0xffff) == 0xffff) ||
 			(((id >> 16) & 0xffff) == 0xffff) ||
@@ -37,73 +38,102 @@
 			break;
 		}
 
-		hdr_type = pci_read_config8(PCI_DEV(0,0,0), PCI_HEADER_TYPE);
+		hdr_type = pci_read_config8(dev, PCI_HEADER_TYPE);
 		pos = 0;
 		hdr_type &= 0x7f;
 
 		if ((hdr_type == PCI_HEADER_TYPE_NORMAL) ||
 			(hdr_type == PCI_HEADER_TYPE_BRIDGE)) 
 		{
-			pos = pci_read_config8(PCI_DEV(0,0,0), PCI_CAPABILITY_LIST);
+			pos = pci_read_config8(dev, PCI_CAPABILITY_LIST);
 		}
 		while(pos != 0) {
 			uint8_t cap;
-			cap = pci_read_config8(PCI_DEV(0,0,0), pos + PCI_CAP_LIST_ID);
+			cap = pci_read_config8(dev, pos + PCI_CAP_LIST_ID);
 			if (cap == PCI_CAP_ID_HT) {
 				uint16_t flags;
 				/* Read and write and reread flags so the link
 				 * direction bit is valid.
 				 */
-				flags = pci_read_config16(PCI_DEV(0,0,0), pos + PCI_CAP_FLAGS);
-				pci_write_config16(PCI_DEV(0,0,0), pos + PCI_CAP_FLAGS, flags);
-				flags = pci_read_config16(PCI_DEV(0,0,0), pos + PCI_CAP_FLAGS);
+				flags = pci_read_config16(dev, pos + PCI_CAP_FLAGS);
+				pci_write_config16(dev, pos + PCI_CAP_FLAGS, flags);
+				flags = pci_read_config16(dev, pos + PCI_CAP_FLAGS);
 				if ((flags >> 13) == 0) {
 					unsigned count;
 					unsigned ctrl, ctrl_off;
+					device_t devx;
 
-					flags &= ~0x1f;
-					count = (flags >> 5) & 0x1f;
-					not_use_count = 0;
-					temp_unitid = next_unitid;
-#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
-					if ( (count + next_unitid) >= 0x20) { 
-						temp_unitid = HT_CHAIN_END_UNITID_BASE;
-						not_use_count = 1;
+#if HT_CHAIN_END_UNITID_BASE != 0x20
+					if(next_unitid>=0x18) { // don't get mask out by k8, at this time BSP, RT is not enabled, it will response from 0x18,0--0x1f.
+						if(!end_used) {
+							next_unitid = HT_CHAIN_END_UNITID_BASE;
+							end_used = 1;
+						} else {
+							goto out;
+						}
 					} 
-					real_last_unitid = temp_unitid;
+					real_last_unitid = next_unitid;
 					real_last_pos = pos;
 					ht_dev_num++;
 #endif
-					flags |= temp_unitid & 0x1f;
-					if(!not_use_count) 
-						next_unitid += count;
 
+					flags &= ~0x1f;
+					flags |= next_unitid & 0x1f;
+					count = (flags >> 5) & 0x1f;
+
+					devx = PCI_DEV(0, next_unitid, 0);
+					pci_write_config16(dev, pos + PCI_CAP_FLAGS, flags);
+
+					next_unitid += count;
+
+					flags = pci_read_config16(devx, pos + PCI_CAP_FLAGS);
 					/* Test for end of chain */
 					ctrl_off = ((flags >> 10) & 1)?
-						PCI_HT_CAP_SLAVE_CTRL1 : PCI_HT_CAP_SLAVE_CTRL0;
-					ctrl = pci_read_config16(PCI_DEV(0,0,0), pos + ctrl_off);
-					/* Is this the end of the hypertransport chain.
-					 * or has the link failed?
-					 */
-					if (ctrl & ((1 << 6)|(1 << 4))) {
-						next_unitid = 0x20;
-					}
-					
-					pci_write_config16(PCI_DEV(0, 0, 0), pos + PCI_CAP_FLAGS, flags);
+						PCI_HT_CAP_SLAVE_CTRL0 : PCI_HT_CAP_SLAVE_CTRL1; // another end
+
+					do {
+						ctrl = pci_read_config16(devx, pos + ctrl_off);
+						/* Is this the end of the hypertransport chain? */
+						if (ctrl & (1 << 6)) {
+							goto out;
+						}
+
+						if (ctrl & ((1 << 4) | (1 << 8))) {
+						       /*
+							* Either the link has failed, or we have
+							* a CRC error.
+							* Sometimes this can happen due to link
+							* retrain, so lets knock it down and see
+							* if its transient
+							*/
+							ctrl |= ((1 << 4) | (1 <<8)); // Link fail + Crc
+							pci_write_config16(devx, pos + ctrl_off, ctrl);
+							ctrl = pci_read_config16(devx, pos + ctrl_off);
+							if (ctrl & ((1 << 4) | (1 << 8))) {
+								// can not clear the error
+								break;
+							}
+						}
+					} while((ctrl & (1 << 5)) == 0);
+	
 					break;
 				}
 			}
-			pos = pci_read_config8(PCI_DEV(0, 0, 0), pos + PCI_CAP_LIST_NEXT);
+			pos = pci_read_config8(dev, pos + PCI_CAP_LIST_NEXT);
 		}
-	} while((last_unitid != next_unitid) && (next_unitid <= 0x1f));
+	} while(last_unitid != next_unitid);
 
-#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
-	if((ht_dev_num>1) && (real_last_unitid != HT_CHAIN_END_UNITID_BASE)) {
+out:
+	;
+
+#if HT_CHAIN_END_UNITID_BASE != 0x20
+	if((ht_dev_num>1) && (real_last_unitid != HT_CHAIN_END_UNITID_BASE) && !end_used) {
 		uint16_t flags;
-		flags = pci_read_config16(PCI_DEV(0,real_last_unitid,0), real_last_pos + PCI_CAP_FLAGS); 
+		dev = PCI_DEV(0,real_last_unitid, 0);
+		flags = pci_read_config16(dev, real_last_pos + PCI_CAP_FLAGS); 
                 flags &= ~0x1f;
                 flags |= HT_CHAIN_END_UNITID_BASE & 0x1f;
-		pci_write_config16(PCI_DEV(0, real_last_unitid, 0), real_last_pos + PCI_CAP_FLAGS, flags);
+		pci_write_config16(dev, real_last_pos + PCI_CAP_FLAGS, flags);
 	}
 #endif
 

Modified: trunk/LinuxBIOSv2/src/northbridge/amd/amdk8/incoherent_ht.c
===================================================================
--- trunk/LinuxBIOSv2/src/northbridge/amd/amdk8/incoherent_ht.c	2007-09-14 00:09:29 UTC (rev 2775)
+++ trunk/LinuxBIOSv2/src/northbridge/amd/amdk8/incoherent_ht.c	2007-09-14 14:58:33 UTC (rev 2776)
@@ -314,12 +314,6 @@
 
 	new_bus = bus;
 
-#if 0
-#if CONFIG_USE_PRINTK_IN_CAR
-	printk_debug("bus_num=%02x\r\n", bus);
-#endif
-#endif
-
 	for (devfn = 0; devfn <= 0xff; devfn++) { 
 	        uint8_t hdr_type;
 	        uint16_t class;
@@ -330,14 +324,6 @@
                 hdr_type = pci_read_config8(dev, PCI_HEADER_TYPE);
                 class = pci_read_config16(dev, PCI_CLASS_DEVICE);
 
-#if 0
-#if CONFIG_USE_PRINTK_IN_CAR
-		if(hdr_type !=0xff ) {
-			printk_debug("dev=%02x fn=%02x hdr_type=%02x class=%04x\r\n", 
-				(devfn>>3)& 0x1f, (devfn & 0x7), hdr_type, class);
-		}
-#endif
-#endif
 		switch(hdr_type & 0x7f) {  /* header type */
 		        case PCI_HEADER_TYPE_BRIDGE:
 		                if (class  != PCI_CLASS_BRIDGE_PCI) goto bad;
@@ -420,18 +406,17 @@
 
 	uint8_t next_unitid, last_unitid;
 	unsigned uoffs;
-	uint8_t temp_unitid;
-	unsigned not_use_count;
 
 #if RAMINIT_SYSINFO == 0
 	int reset_needed = 0;
 #endif
 
-#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
+#if HT_CHAIN_END_UNITID_BASE != 0x20
         //let't record the device of last ht device, So we can set the Unitid to HT_CHAIN_END_UNITID_BASE
         unsigned real_last_unitid;
         uint8_t real_last_pos;
 	int ht_dev_num = 0;
+	uint8_t end_used = 0;
 #endif
 
 	uoffs = PCI_HT_HOST_OFFS;
@@ -491,37 +476,37 @@
 			break;
 		}
 
-		/* Update the Unitid of the current device */
-		flags = pci_read_config16(dev, pos + PCI_CAP_FLAGS);
-                /* Compute the number of unitids consumed */
-                count = (flags >> 5) & 0x1f;
-		flags &= ~0x1f; /* mask out the base Unit ID */
 
-		not_use_count = 0;
-		temp_unitid = next_unitid;
-#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
+#if HT_CHAIN_END_UNITID_BASE != 0x20
 		if(offset_unitid) {
-			if( (next_unitid + count) >= 0x20) {
-		                temp_unitid = HT_CHAIN_END_UNITID_BASE;
-				// keep to use the old next_unitid
-				not_use_count = 1;
+			if(next_unitid>= (bus ? 0x20:0x18) ) {
+				if(!end_used) {
+			                next_unitid = HT_CHAIN_END_UNITID_BASE;
+					end_used = 1;
+				} else {
+					goto out;
+				}
+				
 			} 
         	        real_last_pos = pos;
-			real_last_unitid = temp_unitid;
+			real_last_unitid = next_unitid;
 			ht_dev_num++;
 		} 
 #endif
-
-		flags |= temp_unitid & 0x1f;
+		/* Update the Unitid of the current device */
+		flags = pci_read_config16(dev, pos + PCI_CAP_FLAGS);
+		flags &= ~0x1f; /* mask out the base Unit ID */
+		flags |= next_unitid & 0x1f;
 		pci_write_config16(dev, pos + PCI_CAP_FLAGS, flags);
 
+                /* Compute the number of unitids consumed */
+                count = (flags >> 5) & 0x1f;
+
 		/* Note the change in device number */
-		dev = PCI_DEV(bus, temp_unitid, 0);
+		dev = PCI_DEV(bus, next_unitid, 0);
 
-		if(!not_use_count) 
-	                next_unitid += count;
+                next_unitid += count;
 
-
 		/* Find which side of the ht link we are on,
 		 * by reading which direction our last write to PCI_CAP_FLAGS
 		 * came from.
@@ -550,12 +535,13 @@
 		upos = pos;
 		uoffs = ( offs != PCI_HT_SLAVE0_OFFS ) ? PCI_HT_SLAVE0_OFFS : PCI_HT_SLAVE1_OFFS;
 
-	} while((last_unitid != next_unitid) && (next_unitid <= 0x1f));
+	} while (last_unitid != next_unitid );
 
+out:
 end_of_chain: ;
 	
-#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
-        if(offset_unitid && (ht_dev_num>1) && (real_last_unitid != HT_CHAIN_END_UNITID_BASE) ) {
+#if HT_CHAIN_END_UNITID_BASE != 0x20
+        if(offset_unitid && (ht_dev_num>1) && (real_last_unitid != HT_CHAIN_END_UNITID_BASE) && !end_used ) {
                 uint16_t flags;
 		int i;
                 flags = pci_read_config16(PCI_DEV(bus,real_last_unitid,0), real_last_pos + PCI_CAP_FLAGS);
@@ -594,7 +580,7 @@
 #endif
 {
 	unsigned offset_unitid = 0;
-#if HT_CHAIN_UNITID_BASE != 1
+#if ((HT_CHAIN_UNITID_BASE != 1) || (HT_CHAIN_END_UNITID_BASE != 0x20))
         offset_unitid = 1;
 #endif
 
@@ -607,7 +593,7 @@
         /* Make certain the HT bus is not enumerated */
         ht_collapse_previous_enumeration(0, 0);
 
-#if HT_CHAIN_UNITID_BASE != 1
+#if ((HT_CHAIN_UNITID_BASE != 1) || (HT_CHAIN_END_UNITID_BASE != 0x20))
         offset_unitid = 1;
 #endif
 
@@ -655,7 +641,7 @@
 		uint8_t val;
 		unsigned devn = 1;
 
-        #if HT_CHAIN_UNITID_BASE != 1
+	#if ((HT_CHAIN_UNITID_BASE != 1) || (HT_CHAIN_END_UNITID_BASE != 0x20))
                 #if SB_HT_CHAIN_UNITID_OFFSET_ONLY == 1
                 if(i==0) // to check if it is sb ht chain
                 #endif
@@ -788,7 +774,7 @@
 		pci_write_config32( PCI_DEV(0, devpos,0), regpos , dword);
 	
 
-        #if HT_CHAIN_UNITID_BASE != 1
+	#if ((HT_CHAIN_UNITID_BASE != 1) || (HT_CHAIN_END_UNITID_BASE != 0x20))
                 #if SB_HT_CHAIN_UNITID_OFFSET_ONLY == 1
                 if(i==0) // to check if it is sb ht chain
                 #endif

Modified: trunk/LinuxBIOSv2/src/northbridge/amd/amdk8/northbridge.c
===================================================================
--- trunk/LinuxBIOSv2/src/northbridge/amd/amdk8/northbridge.c	2007-09-14 00:09:29 UTC (rev 2775)
+++ trunk/LinuxBIOSv2/src/northbridge/amd/amdk8/northbridge.c	2007-09-14 14:58:33 UTC (rev 2776)
@@ -111,6 +111,7 @@
 		unsigned ht_unitid_base[4]; // here assume only 4 HT device on chain
                 unsigned max_bus;
                 unsigned min_bus;
+		unsigned max_devfn;
 
 		dev->link[link].cap = 0x80 + (link *0x20);
 		do {
@@ -212,8 +213,14 @@
 		for(i=0;i<4;i++) {
 			ht_unitid_base[i] = 0x20;
 		}
-		max = hypertransport_scan_chain(&dev->link[link], 0, 0xbf, max, ht_unitid_base, offset_unitid);
 
+		if (min_bus == 0) 
+			max_devfn = (0x17<<3) | 7;
+		else
+			max_devfn = (0x1f<<3) | 7;
+
+		max = hypertransport_scan_chain(&dev->link[link], 0, max_devfn, max, ht_unitid_base, offset_unitid);
+
 		/* We know the number of busses behind this bridge.  Set the
 		 * subordinate bus number to it's real value
 		 */
@@ -250,12 +257,10 @@
 	unsigned offset_unitid = 0;
         nodeid = amdk8_nodeid(dev);
 	
-
-
         if(nodeid==0) {
                 sblink = (pci_read_config32(dev, 0x64)>>8) & 3;
 #if SB_HT_CHAIN_ON_BUS0 > 0
-	#if HT_CHAIN_UNITID_BASE != 1
+	#if ((HT_CHAIN_UNITID_BASE != 1) || (HT_CHAIN_END_UNITID_BASE != 0x20))
                 offset_unitid = 1;
         #endif
 		max = amdk8_scan_chain(dev, nodeid, sblink, sblink, max, offset_unitid ); // do sb ht chain at first, in case s2885 put sb chain (8131/8111) on link2, but put 8151 on link0
@@ -267,7 +272,7 @@
 		if( (nodeid == 0) && (sblink == link) ) continue; //already done
 #endif
 		offset_unitid = 0;
-	        #if HT_CHAIN_UNITID_BASE != 1
+		#if ((HT_CHAIN_UNITID_BASE != 1) || (HT_CHAIN_END_UNITID_BASE != 0x20))
 	                #if SB_HT_CHAIN_UNITID_OFFSET_ONLY == 1
 			if((nodeid == 0) && (sblink == link))
 			#endif
@@ -276,6 +281,7 @@
 
 		max = amdk8_scan_chain(dev, nodeid, link, sblink, max, offset_unitid);
         }
+
         return max;
 }
 

Modified: trunk/LinuxBIOSv2/src/southbridge/nvidia/mcp55/mcp55_enable_rom.c
===================================================================
--- trunk/LinuxBIOSv2/src/southbridge/nvidia/mcp55/mcp55_enable_rom.c	2007-09-14 00:09:29 UTC (rev 2775)
+++ trunk/LinuxBIOSv2/src/southbridge/nvidia/mcp55/mcp55_enable_rom.c	2007-09-14 14:58:33 UTC (rev 2776)
@@ -21,7 +21,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
-#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
+#if HT_CHAIN_END_UNITID_BASE != 0x20
 	#define MCP55_DEVN_BASE	HT_CHAIN_END_UNITID_BASE
 #else
 	#define MCP55_DEVN_BASE	HT_CHAIN_UNITID_BASE

Modified: trunk/LinuxBIOSv2/src/southbridge/nvidia/mcp55/mcp55_enable_usbdebug_direct.c
===================================================================
--- trunk/LinuxBIOSv2/src/southbridge/nvidia/mcp55/mcp55_enable_usbdebug_direct.c	2007-09-14 00:09:29 UTC (rev 2775)
+++ trunk/LinuxBIOSv2/src/southbridge/nvidia/mcp55/mcp55_enable_usbdebug_direct.c	2007-09-14 14:58:33 UTC (rev 2776)
@@ -21,7 +21,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
-#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
+#if HT_CHAIN_END_UNITID_BASE != 0x20
 	#define MCP55_DEVN_BASE	HT_CHAIN_END_UNITID_BASE
 #else
 	#define MCP55_DEVN_BASE	HT_CHAIN_UNITID_BASE





More information about the coreboot mailing list