pci_bus_for_each_resource, transparent bridges and rsrc_nonstatic.c

Dominik Brodowski linux at dominikbrodowski.net
Sun Mar 28 07:45:59 EDT 2010


On Sat, Mar 27, 2010 at 08:03:40PM +0100, Peter Stuge wrote:
> Dominik Brodowski wrote:
> > can we safely trust BIOS authors to get it right?
> 
> As a long time member of the coreboot project I can assure you that
> the answer to that is "No!!"

Thanks. Jesse, Bjorn: recalling my mesage of 22 March 2010, what's your
opinion on the two options spelled out there:

| (1) The best way seems to be to skip all resources of type
| PCI_SUBTRACTIVE_DECODE, but this flag is only stored in
| struct pci_bus_resource, which is hard to access, and nonexistent for the
| first four resources. Actually, the "flag" field is unused otherwise. Could
| we set res->flags |= PCI_SUBTRACTIVE_DECODE instead? (it probably needs to
| be != 0x1 then, but anyways). Then it's trivial in rsrc_nonstatic.c
| 
| (2) An alternative would be to
|
| diff --git a/drivers/pcmcia/rsrc_nonstatic.c b/drivers/pcmcia/rsrc_nonstatic.c
| index ba3a53e..b0e60a1 100644
| --- a/drivers/pcmcia/rsrc_nonstatic.c
| +++ b/drivers/pcmcia/rsrc_nonstatic.c
| @@ -933,7 +933,8 @@ static int nonstatic_autoadd_resources(struct pcmcia_socket *s)
|                 return -EINVAL;
|  #endif
| 
| -       pci_bus_for_each_resource(s->cb_dev->bus, res, i) {
| +       for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++) {
| +               res = s->cb_dev->bus->resource[i];
|                 if (!res)
|                         continue;

Best,
	Dominik



More information about the linux-pcmcia mailing list