[coreboot] Questions about the resource allocator of PCI

Hamo hamo.by at gmail.com
Thu Jul 28 13:44:01 CEST 2011


On Thu, Jul 28, 2011 at 7:00 PM, Patrick Georgi
<Patrick.Georgi at secunet.com> wrote:
> For static regions, we have IORESOURCE_FIXED. Look up that symbol in the
> coreboot code to see how it's used.
>
> You will need to determine a good place for where to define those,
> either per board (eg. mainboard.c) or per coreboot device driver
> (whereever these drivers belong to).
>
Thanks Patrick. Thanks for your quick reply. I tried your idea by
adding those resources to the PCI DOMAIN 0:
	int idx = 1;
	struct resource *iores;
	iores = new_resource(dev, idx++);
	iores->base = (resource_t)0x43000000;
	iores->size = (resource_t)(16 << 20);
	iores->flags = IORESOURCE_IO | IORESOURCE_FIXED | IORESOURCE_ASSIGNED;
	iores->limit = 0xffffffffUL;

	struct resource *memres1;
	memres1 = new_resource(dev, idx++);
	memres1->base = (resource_t)0x50000000;
	memres1->size = (resource_t)(256 << 20);
	memres1->flags = IORESOURCE_MEM | IORESOURCE_FIXED | IORESOURCE_ASSIGNED;
	memres1->limit = 0xffffffffUL;
	
	struct resource *memres2;
	memres2 = new_resource(dev, idx++);
	memres2->base = (resource_t)0x60000000;
	memres2->size = (resource_t)(256 << 20);
	memres2->flags = IORESOURCE_MEM | IORESOURCE_PREFETCH |
IORESOURCE_FIXED | IORESOURCE_ASSIGNED;
	memres2->limit = 0xffffffffUL;

resources reading show this:
Show resources in subtree (Root Device)...After reading.
 Root Device child on link 0 PCI_DOMAIN: 0000
 Root Device resource base 0 size 8000000 align 0 gran 0 limit 0 flags
e0004200 index 0
  PCI_DOMAIN: 0000 child on link 0 PCI: 00:0b.0
  PCI_DOMAIN: 0000 resource base 43000000 size 1000000 align 0 gran 0
limit ffffffff flags c0000100 index 10000000
  PCI_DOMAIN: 0000 resource base 50000000 size 10000000 align 0 gran 0
limit ffffffff flags c0000200 index 10000100
  PCI_DOMAIN: 0000 resource base 60000000 size 10000000 align 0 gran 0
limit ffffffff flags c0001200 index 10000200
   PCI: 00:0b.0
   PCI: 00:0c.0
   PCI: 00:0c.0 resource base 0 size 100 align 8 gran 8 limit ffff
flags 100 index 10
   PCI: 00:0c.0 resource base 0 size 400 align 10 gran 10 limit
ffffffff flags 200 index 14
   PCI: 00:0c.0 resource base 0 size 2000 align 13 gran 13 limit
ffffffff flags 200 index 18

But after assigning, it shows:
Show resources in subtree (Root Device)...After assigning values.
 Root Device child on link 0 PCI_DOMAIN: 0000
 Root Device resource base 0 size 8000000 align 0 gran 0 limit 0 flags
e0004200 index 0
  PCI_DOMAIN: 0000 child on link 0 PCI: 00:0b.0
  PCI_DOMAIN: 0000 resource base 43000000 size 1000000 align 0 gran 0
limit ffffffff flags c0000100 index 10000000
  PCI_DOMAIN: 0000 resource base 50000000 size 10000000 align 0 gran 0
limit ffffffff flags c0000200 index 10000100
  PCI_DOMAIN: 0000 resource base 60000000 size 10000000 align 0 gran 0
limit ffffffff flags c0001200 index 10000200
   PCI: 00:0b.0
   PCI: 00:0c.0
   PCI: 00:0c.0 resource base 0 size 100 align 8 gran 8 limit ffff
flags 100 index 10
   PCI: 00:0c.0 resource base 0 size 400 align 10 gran 10 limit
ffffffff flags 200 index 14
   PCI: 00:0c.0 resource base 0 size 2000 align 13 gran 13 limit
ffffffff flags 200 index 18

I think I misunderstanding your idea. Could you please explain it in detail?




More information about the coreboot mailing list