YhLu YhLu@tyan.com writes:
Eric,
I mean in the amdk8_scan_chains, you need to put
config_busses &= 0x000fc88; config_busses |= (3 << 0) | /* rw enable, no device compare */ (( nodeid & 7) << 4) | (( link & 3 ) << 8) | ((dev->link[link].secondary) << 16) | ((dev->link[link].subordinate) << 24); f1_write_config32(config_reg, config_busses);
before
/* Now we can scan all of the subordinate busses i.e. the
chain on the hypertranport link */ max = hypertransport_scan_chain(&dev->link[link], max);
Right. Sorry. That is what I thought I had done (and actually did in my internal tree). Somehow I modified the wrong line...
I have fixed that and committed it.
This is the diff. Let's see what idiot mistake I will make this time...
Index: northbridge.c =================================================================== RCS file: /cvsroot/freebios/freebios2/src/northbridge/amd/amdk8/northbridge.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- northbridge.c 6 Dec 2003 00:11:56 -0000 1.9 +++ northbridge.c 8 Dec 2003 21:48:01 -0000 1.10 @@ -5,6 +5,7 @@ #include <part/sizeram.h> #include <device/device.h> #include <device/pci.h> +#include <device/pci_ids.h> #include <device/hypertransport.h> #include <device/chip.h> #include <stdlib.h> @@ -233,8 +234,12 @@ ((unsigned int)(dev->link[link].subordinate) << 16)); pci_write_config32(dev, dev->link[link].cap + 0x14, busses);
- config_busses &= 0x0000ffff; - config_busses |= ((dev->link[link].secondary) << 16) | + config_busses &= 0x000fc88; + config_busses |= + (3 << 0) | /* rw enable, no device compare */ + (( nodeid & 7) << 4) | + (( link & 3 ) << 8) | + ((dev->link[link].secondary) << 16) | ((dev->link[link].subordinate) << 24); f1_write_config32(config_reg, config_busses);
@@ -256,13 +261,7 @@ ((unsigned int) (dev->link[link].subordinate) << 16); pci_write_config32(dev, dev->link[link].cap + 0x14, busses);
- config_busses &= 0x000fc88; - config_busses |= - (3 << 0) | /* rw enable, no device compare */ - (( nodeid & 7) << 4) | - (( link & 3 ) << 8) | - ((dev->link[link].secondary) << 16) | - ((dev->link[link].subordinate) << 24); + config_busses = (config_busses & 0x00ffffff) | (dev->link[link].subordinate << 24); f1_write_config32(config_reg, config_busses); #if 1 printk_debug("Hypertransport scan link done\n"); @@ -469,7 +468,7 @@ unsigned int amdk8_scan_root_bus(device_t root, unsigned int max) { unsigned reg; - /* Unmap all of HT chains */ + /* Unmap all of the HT chains */ for(reg = 0xe0; reg <= 0xec; reg += 4) { f1_write_config32(reg, 0); }