[coreboot] Resource allocator problem? (was: Re: Want to participate in ASUS M2V(K8T890/VT8237A) testing)

Tobias Diedrich ranma+coreboot at tdiedrich.de
Wed Nov 10 14:37:31 CET 2010


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 at coreboot.org
> http://www.coreboot.org/mailman/listinfo/coreboot

-- 
Tobias						PGP: http://8ef7ddba.uguu.de




More information about the coreboot mailing list