I'm confused about the propagation of resource values. Most of it seems to be happening correctly, but it's not quite there. <br><br>in the dts I see domain@0 which I assume is PCI_DOMAIN: 0000 in the log. The problem is that although the resource for PCI_DOMAIN 0000 resource 02 get set correctly to [0xfd000000 - 0xfe1fffff], PCI: 00:18.0 has no corresponding resource. That seems wrong.<br>
<br>How can the resources for the domain be getting set correctly when it's child's resources aren't?<br><br>Am I asking the wrong questions? It's taking a long time tracing all the indirection in the code.<br>
<br>Thanks,<br>Myles <br><br>/{<br> mainboard_vendor = "AMD";<br> mainboard_name = "Serengeti";<br> cpus { };<br> apic@0 {<br> }; <br> domain@0 {<br> /config/("northbridge/amd/k8/domain");<br>
pci@1,0{<br> };<br> /* guesses; we need a real lspci */<br> pci0@18,0 {<br> /config/("northbridge/amd/k8/pci");<br> pci@0,0 {<br> /config/("southbridge/amd/amd8111/pci.dts");<br>
pci@1,0{<br> /config/("southbridge/amd/amd8111/nic.dts");<br> enabled = "0";<br> };<br>8< --------------- SNIP ------------------------------------------------------<br>
<br><br>Here's a snippet of a verbose log from serengeti v3:<br> read_resources: root(Root Device) dtsname domain_0 have_resources 1 enabled 1<br> read_resources: root(Root Device) read_resources bus 0 link: 0 done<br>
PCI_DOMAIN: 0000: resource 0 base: 00001000 limit: 00000000 flags = 0000ffff mask = 00000000, type = 40000100<br> PCI_DOMAIN: 0000: resource 1 base: 01200000 limit: 00000000 flags = ffffffff mask = 000000fc, type = 40001200<br>
PCI_DOMAIN: 0000: resource 1 base: 01200000 limit: 00000000<br> PCI_DOMAIN: 0000: resource 2 base: 00000000 limit: 00000000 flags = febfffff mask = 00000000, type = 40000200<br> PCI_DOMAIN: 0000: resource 2 base: 00000000 limit: 00000000<br>
Root Device in loop base: fd000000 bridge->base: fd000000<br> PCI_DOMAIN: 0000 02 * [0xfd000000 - 0xfe1fffff] mem<br> Root Device MEM base: fe200000 bridge->base: fd000000<br> PCI_DOMAIN: 0000: resource 0 base: 00001000 limit: 00000000 flags = 0000ffff mask = 00000000, type = 40000100<br>
PCI_DOMAIN: 0000: resource 1 base: 01200000 limit: 00000000 flags = ffffffff mask = 000000fc, type = 40001200<br> PCI_DOMAIN: 0000: resource 1 base: 01200000 limit: 00000000<br> PCI_DOMAIN: 0000: resource 2 base: fd000000 limit: 00000000 flags = febfffff mask = 00000000, type = 40000200<br>
PCI_DOMAIN: 0000: resource 2 base: fd000000 limit: 00000000<br> Root Device in loop base: fe200000 bridge->base: fd000000<br> PCI_DOMAIN: 0000 01 * [0xfe200000 - 0xfe1fffff] prefmem<br> Root Device MEM base: fe200000 bridge->base: fd000000<br>
PCI_DOMAIN: 0000: resource 0 base: 00001000 limit: 00000000 flags = 0000ffff mask = 00000000, type = 40000100<br> PCI_DOMAIN: 0000: resource 1 base: fe200000 limit: 00000000 flags = ffffffff mask = 000000fc, type = 40001200<br>
PCI_DOMAIN: 0000: resource 1 base: fe200000 limit: 00000000<br> PCI_DOMAIN: 0000: resource 2 base: fd000000 limit: 00000000 flags = febfffff mask = 00000000, type = 40000200<br> PCI_DOMAIN: 0000: resource 2 base: fd000000 limit: 00000000<br>
Root Device size: 01200000<br> Root Device base: fd000000<br> Root Device after align_up base: fd000000<br> Root Device compute_allocate_mem: base: fe200000 bridge->base: fd000000 size: 01200000 align: 24 gran: 0 done<br>
root_dev_set_resources is the failure here?<br> root_dev_set_resources bus->dev Root Device <br> root_dev_set_resources MEM resource base fd000000 size 0 align 1200000<br> gran 0 limit 18 flags 0 <br><br>
At this point the Root device has the memory resource with a reasonable base.<br><br> root(Root Device) assign_resources, bus 0 link: 0<br> cpus: Unknown device path type: 0<br> cpus() skipped<br> apic_0(APIC: 00) skipped<br>
domain_0(PCI_DOMAIN: 0000) assign_resources<br> k8_pci_domain_set_resources<br> PCI: 00:18.0: resource 0 base: 00000000 limit: 00000000 flags = ffffffff mask = 000000ff, type = 00001200<br> PCI: 00:18.0: resource 0 base: 00000000 limit: 00000000<br>
PCI: 00:18.0 best is NULL new->base: 00000000 <br> PCI: 00:18.0: resource 1 base: 00001000 limit: 00000000 flags = 0000ffff mask = 00000000, type = 40000100<br> PCI: 00:18.0: resource 2 base: 00000000 limit: 00000000 flags = febfffff mask = 00000000, type = 40000200<br>
PCI: 00:18.0: resource 2 base: 00000000 limit: 00000000<br> PCI: 00:18.0 best is NULL new->base: 00000000 <br> PCI: 00:18.0: resource 3 base: 00003000 limit: 00000000 flags = 0000ffff mask = 00000000, type = 40000100<br>
PCI: 00:18.0: resource 4 base: 00000000 limit: 00000000 flags = ffffffff mask = 000000ff, type = 00001200<br> PCI: 00:18.0: resource 4 base: 00000000 limit: 00000000<br> PCI: 00:18.0 best is NULL new->base: 00000000 <br>
PCI: 00:18.0: resource 5 base: 01200000 limit: 00000000 flags = ffffffff mask = 000000ff, type = 40000200<br> PCI: 00:18.0: resource 5 base: 01200000 limit: 00000000<br> PCI: 00:18.0 best is NULL new->base: 01200000 <br>
better!<br> find_pci_tolm: tolm=01200000<br> 1: pci_tolm=01200000<br> 1: mmio_basek=00004800<br> 2: mmio_basek=00004800<br> 3: mmio_basek=00000000<br> node 0 : mmio_basek=00000000, basek=00000300, limitk=00040000<br>
domain_0(PCI_DOMAIN: 0000) assign_resources, bus 0 link: 0<br> domain_0_pci0_18_0(PCI: 00:18.0) assign_resources<br> amdk8_set_resources: nodeid 0<br> <br><br><br>