Messages in this thread | | | Date | Mon, 11 Nov 2002 20:05:39 +0300 | From | Ivan Kokshaysky <> | Subject | Re: CFT/RFC: New cardbus resource allocation |
| |
On Thu, Nov 07, 2002 at 10:37:12AM +0000, Russell King wrote: > On Thu, Nov 07, 2002 at 01:25:40PM +0300, Ivan Kokshaysky wrote: > > Looks quite reasonable. > > Note that we don't need 2 similar functions in setup-res.c - > > pci_assign_resource() can be easily converted to use your > > pci_alloc_parent_resource(), and pci_assign_bus_resource() can > > be killed then. > > I looked at that and decided it wasn't practical. pci_assign_resource() > needs the parent resource to pass it down to the architecture specific > layers. Unfortunately, trying to get that out of > pci_alloc_parent_resource() makes the API rather disgusting IMHO.
Sigh. The API is already broken - passing parent resource to pcibios_update_resource() is not only pointless (since we have res->parent), but extremely misleading. Almost all architectures declare void pcibios_update_resource(struct pci_dev *dev, struct resource *root, ^^^^ struct resource *res, int resource)
Obviously root != parent. Vast majority of archs do not use `root' arg, but some do:
mips64/mips-boards/generic/pci.c mips64/sgi-ip27/ip27-pci.c mips/ite-boards/generic/it8172_pci.c mips/mips-boards/generic/pci.c ia64/pci/pci.c
All of these use exactly the same code:
pcibios_update_resource(struct pci_dev *dev, struct resource *root, struct resource *res, int resource) { unsigned long where, size; u32 reg;
where = PCI_BASE_ADDRESS_0 + (resource * 4); size = res->end - res->start; pci_read_config_dword(dev, where, ®); reg = (reg & size) | (((u32)(res->start - root->start)) & ~size); pci_write_config_dword(dev, where, reg); }
Which is wrong if the `root' is a pointer to the PCI or CardBus bridge resource.
The arg 2 to pcibios_update_resource() must be removed...
Ivan. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |