Messages in this thread |  | | Date | Mon, 21 Aug 2000 11:45:31 +0100 | From | Philipp Rumpf <> | Subject | Re: Updated Linux 2.4 issues page |
| |
On Sun, Aug 20, 2000 at 10:07:05PM -0400, Jeff Garzik wrote: > Russell King wrote: > > Can the address taken by ioremap() be clarified please? Is it supposed to > > be a PCI address, or a so-called "physical" address (corresponding to the > > address on the bus between the CPU and the host bridge, which may have > > other devices hung on it)? > > I've always heard and assumed ioremap takes a bus address...
Yes, but on which bus ? A PCI bus address isn't always sufficient, think about the following setup:
CPU ----- PCI0 | --- PCI1
where PCI0 translates accesses to memory bus address 0x2 0000 0000 - 0x2 ffff ffff to PCI bus addresses 0x0000 0000 - 0xffff ffff, and PCI1 translates accesses to 0x3 0000 0000 - 0x3 ffff ffff to PCI bus addresses 0x0000 0000 - 0xffff ffff.
You can't handle everything with PCI bus addresses. I think you'd agree code like this (though it is rather common) is buggy:
u32 address; void *mmio;
pci_read_config_dword(pcidev, PCI_BASE_ADDRESS_0, &address); mmio = ioremap(address, 0x10000);
and there's no real difference between this code and assuming ioremap takes a PCI bus address. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
|  |