In case someone finds this in the ml archive by googling: The problem was that I had missed adding a pci id for the lpc/isa bridge, which reserves ports 0x0000-0x0fff:
static void vt8237r_read_resources(device_t dev) { [...] res = new_resource(dev, 1); res->base = 0x0UL; res->size = 0x1000UL; res->limit = 0xffffUL; res->flags = IORESOURCE_IO | IORESOURCE_ASSIGNED | IORESOURCE_FIXED; }
Tobias Diedrich wrote:
Scott Duplichan wrote:
]PCI: 00:01.0 bridge ctrl <- 0017 ]PCI: 00:01.0 cmd <- 04 ]PCI: 00:02.0 bridge ctrl <- 0003 ]PCI: 00:02.0 cmd <- 00 ]PCI: 00:03.0 bridge ctrl <- 0003 ]PCI: 00:03.0 cmd <- 07 ][hang] ] ]00:03.0 is one of the onboard pcie devices. ] ]-- ]Tobias PGP: http://8ef7ddba.uguu.de
The write of 07 enables memory bars, I/O bars, and bus master for that device. You could try to dump the config space for that device to see if memory and I/O bars are reasonable. Knowing MTRRs and TOM would let you confirm the memory bars point to UC-IO.
Ok, it's a problem with the resource allocator. It's allocating io 0x000-0xfff to this bridge, and the existing 'avoid legacy ports' checks don't seem to catch this.
|Done setting resources. |Show resources in subtree (Root Device)...After assigning values. |[...] | PCI: 00:03.0 child on link 0 PCI: 03:00.0 | PCI: 00:03.0 resource base 0 size 1000 align 12 gran 12 limit ffff flags 60080102 index 1c | PCI: 00:03.0 resource base fecbffff size 0 align 20 gran 20 limit fecbffff flags 60081202 in | PCI: 00:03.0 resource base f0000000 size 100000 align 20 gran 20 limit fecbffff flags 600802 | PCI: 03:00.0 | PCI: 03:00.0 resource base 10 size 8 align 3 gran 3 limit ffff flags 60000100 index 10 | PCI: 03:00.0 resource base 20 size 4 align 2 gran 2 limit ffff flags 60000100 index 14 | PCI: 03:00.0 resource base 18 size 8 align 3 gran 3 limit ffff flags 60000100 index 18 | PCI: 03:00.0 resource base 24 size 4 align 2 gran 2 limit ffff flags 60000100 index 1c | PCI: 03:00.0 resource base 0 size 10 align 4 gran 4 limit ffff flags 60000100 index 20 | PCI: 03:00.0 resource base f0000000 size 400 align 10 gran 10 limit fecbffff flags 60000200 | PCI: 00:03.1 child on link 0 PCI: 04:00.0 | PCI: 00:03.1 resource base 1000 size 1000 align 12 gran 12 limit ffff flags 60080102 index 1
The devices/device.c has two checks to defend legacy ports in compute_resources and allocate_resources:
| if (resource->flags & IORESOURCE_IO) { | /* Don't allow potential aliases over the legacy PCI | * expansion card addresses. The legacy PCI decodes | * only 10 bits, uses 0x100 - 0x3ff. Therefore, only | * 0x00 - 0xff can be used out of each 0x400 block of | * I/O space. | */ | if ((base & 0x300) != 0) { | base = (base & ~0x3ff) + 0x400; | } | /* Don't allow allocations in the VGA I/O range. | * PCI has special cases for that. | */ | else if ((base >= 0x3b0) && (base <= 0x3df)) { | base = 0x3e0; | } | }
This doesn't prevent the bridge from getting allocated 0x0000-0x0fff.
I added | /* exclude 0x0000 - 0x0400 legacy range */ | if (base <= 0x400) { | base = 0x400; | }
and now it's booting and handing off to seabios (but video card init doesn't seem to work).
|Done setting resources. |Show resources in subtree (Root Device)...After assigning values. |[...] | PCI: 00:03.0 child on link 0 PCI: 03:00.0 | PCI: 00:03.0 resource base 1000 size 1000 align 12 gran 12 limit ffff flags 60080102 index 1 | PCI: 00:03.0 resource base fecbffff size 0 align 20 gran 20 limit fecbffff flags 60081202 in | PCI: 00:03.0 resource base f0000000 size 100000 align 20 gran 20 limit fecbffff flags 600802 | PCI: 03:00.0 | PCI: 03:00.0 resource base 1010 size 8 align 3 gran 3 limit ffff flags 60000100 index 10 | PCI: 03:00.0 resource base 1020 size 4 align 2 gran 2 limit ffff flags 60000100 index 14 | PCI: 03:00.0 resource base 1018 size 8 align 3 gran 3 limit ffff flags 60000100 index 18 | PCI: 03:00.0 resource base 1024 size 4 align 2 gran 2 limit ffff flags 60000100 index 1c | PCI: 03:00.0 resource base 1000 size 10 align 4 gran 4 limit ffff flags 60000100 index 20 | PCI: 03:00.0 resource base f0000000 size 400 align 10 gran 10 limit fecbffff flags 60000200 | PCI: 00:03.1 child on link 0 PCI: 04:00.0 | PCI: 00:03.1 resource base 2000 size 1000 align 12 gran 12 limit ffff flags 60080102 index 1 | PCI: 00:03.1 resource base fecbffff size 0 align 20 gran 20 limit fecbffff flags 60081202 in | PCI: 00:03.1 resource base f0100000 size 100000 align 20 gran 20 limit fecbffff flags 600802 |[...] |Start bios (version pre-0.6.2-20101020_194120-nukunuku) |Found mainboard ASUS M2V |Found CBFS header at 0xfffffc6e |Ram Size=0xdfff0000 (0x0000000100000000 high) |Relocating init from 0x000e9330 to 0xdffd6880 (size 38496) |CPU Mhz=1001 |Found 1 cpu(s) max supported 1 cpu(s) |Copying MPTABLE from 0xdfff0400/dfff0410 to 0x000fda50 |SMBIOS ptr=0x000fda30 table=0xdffefed0 |Scan for VGA option rom |EHCI init on dev 00:10.4 (regs=0xf0300010) |Found 0 lpt ports |Found 2 serial ports |ATA controller 0 at 1f0/3f4/0 (irq 14 dev 79) |ATA controller 1 at 170/374/0 (irq 15 dev 79) |ATA controller 2 at 1010/1020/0 (irq 0 dev 300) |ATA controller 3 at 1018/1024/0 (irq 0 dev 300) |ata1-1: Pioneer DVD-ROM ATAPIModel DVD-106S 0122 ATAPI-5 DVD/CD |PS2 keyboard initialized |All threads complete. |Scan for option roms |Press F12 for boot menu.
-- Tobias PGP: http://8ef7ddba.uguu.de
-- coreboot mailing list: coreboot@coreboot.org http://www.coreboot.org/mailman/listinfo/coreboot