diff options
author | Chris Metcalf <cmetcalf@tilera.com> | 2010-11-02 16:05:10 (GMT) |
---|---|---|
committer | Chris Metcalf <cmetcalf@tilera.com> | 2010-11-24 18:13:49 (GMT) |
commit | f02cbbe657939489347cbda598401a56913ffcbd (patch) | |
tree | 0d21e68d899958e6549f908b0c715c6f37200027 /arch/tile/include/asm/io.h | |
parent | e5a06939736277c54a68ae275433db55b99d187c (diff) | |
download | linux-f02cbbe657939489347cbda598401a56913ffcbd.tar.xz |
pci root complex: support for tile architecture
This change enables PCI root complex support for TILEPro. Unlike
TILE-Gx, TILEPro has no support for memory-mapped I/O, so the PCI
support consists of hypervisor upcalls for PIO, DMA, etc. However,
the performance is fine for the devices we have tested with so far
(1Gb Ethernet, SATA, etc.).
The <asm/io.h> header was tweaked to be a little bit more aggressive
about disabling attempts to map/unmap IO port space. The hacky
<asm/pci-bridge.h> header was rolled into the <asm/pci.h> header
and the result was simplified. Both of the latter two headers were
preliminary versions not meant for release before now - oh well.
There is one quirk for our TILEmpower platform, which accidentally
negotiates up to 5GT and needs to be kicked down to 2.5GT.
Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
Diffstat (limited to 'arch/tile/include/asm/io.h')
-rw-r--r-- | arch/tile/include/asm/io.h | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/arch/tile/include/asm/io.h b/arch/tile/include/asm/io.h index ee43328..d3cbb9b 100644 --- a/arch/tile/include/asm/io.h +++ b/arch/tile/include/asm/io.h @@ -55,9 +55,6 @@ extern void iounmap(volatile void __iomem *addr); #define ioremap_writethrough(physaddr, size) ioremap(physaddr, size) #define ioremap_fullcache(physaddr, size) ioremap(physaddr, size) -void __iomem *ioport_map(unsigned long port, unsigned int len); -extern inline void ioport_unmap(void __iomem *addr) {} - #define mmiowb() /* Conversion between virtual and physical mappings. */ @@ -189,12 +186,22 @@ static inline void memcpy_toio(volatile void __iomem *dst, const void *src, * we never run, uses them unconditionally. */ -static inline int ioport_panic(void) +static inline long ioport_panic(void) { panic("inb/outb and friends do not exist on tile"); return 0; } +static inline void __iomem *ioport_map(unsigned long port, unsigned int len) +{ + return (void __iomem *) ioport_panic(); +} + +static inline void ioport_unmap(void __iomem *addr) +{ + ioport_panic(); +} + static inline u8 inb(unsigned long addr) { return ioport_panic(); |