YhLu YhLu@tyan.com writes:
The optimize_link make The link CPU0 to CPU1: in CPU0 side(link0) is 16x800 and CPU1 side(link0) is 16x800
I don't know if 1Ghz is actually supported between cpus. AMD never mentions it, at least I had not seen that it was supported when I wrote that code. So I erred on the side of caution and limited things to what is documented as supported.
but the scan_ht_chain change CPU0 side(link0) is 16x600
An 8131 does not operate reliably at over 600Mhz. Read the errata. The 8131 does advertise that it can go at 800Mhz though.
it must think it is connected to 8111 or something.
I believe these cap come from ht_read_freq_cap. And they are explicitly set:
Here is the general version in devices/hypertransport.c. The amdk8 versions are a little more abbreviated.
static unsigned ht_read_freq_cap(device_t dev, unsigned pos) { /* Handle bugs in valid hypertransport frequency reporting */ unsigned freq_cap;
freq_cap = pci_read_config16(dev, pos); freq_cap &= ~(1 << HT_FREQ_VENDOR); /* Ignore Vendor HT frequencies */
/* AMD 8131 Errata 48 */ if ((dev->vendor == PCI_VENDOR_ID_AMD) && (dev->device == PCI_DEVICE_ID_AMD_8131_PCIX)) { freq_cap &= ~(1 << HT_FREQ_800Mhz); } /* AMD 8151 Errata 23 */ if ((dev->vendor == PCI_VENDOR_ID_AMD) && (dev->device == PCI_DEVICE_ID_AMD_8151_SYSCTRL)) { freq_cap &= ~(1 << HT_FREQ_800Mhz); } /* AMD K8 Unsupported 1Ghz? */ if ((dev->vendor == PCI_VENDOR_ID_AMD) && (dev->device == 0x1100)) { freq_cap &= ~(1 << HT_FREQ_1000Mhz); } return freq_cap; }
I hope this helps,
Eric