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 <[EMAIL PROTECTED]>
Acked-by: Stefan Reinauer <[EMAIL PROTECTED]>



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


-- 
linuxbios mailing list
linuxbios@linuxbios.org
http://www.linuxbios.org/mailman/listinfo/linuxbios

Reply via email to