diff options
author | Arnd Bergmann <arnd@arndb.de> | 2012-02-29 22:36:27 -0500 |
---|---|---|
committer | Rob Herring <rob.herring@calxeda.com> | 2012-07-26 10:10:02 -0400 |
commit | 5b334eb2a9422f4658f353a550db10b8a6b691f9 (patch) | |
tree | aa22fb56eb8475dbf58bf593ae704663ca343f5d /arch/arm/mach-iop13xx | |
parent | 0a4b8c654615be5dd12d67e951446095bef8b565 (diff) |
iop13xx: use more regular PCI I/O space handling
iop13xx confuses I/O port numbers with physical addresses, which breaks
legacy ISA I/O access behind PCI bridges and makes it unnecessarily hard
to unify the inb/outb accessors with other platforms. This removes the
special-casing and just puts all I/O ports into a single 128KB virtually
mapped I/O port range starting at port zero.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/arm/mach-iop13xx')
-rw-r--r-- | arch/arm/mach-iop13xx/include/mach/io.h | 6 | ||||
-rw-r--r-- | arch/arm/mach-iop13xx/include/mach/iop13xx.h | 12 | ||||
-rw-r--r-- | arch/arm/mach-iop13xx/io.c | 27 | ||||
-rw-r--r-- | arch/arm/mach-iop13xx/pci.c | 12 |
4 files changed, 12 insertions, 45 deletions
diff --git a/arch/arm/mach-iop13xx/include/mach/io.h b/arch/arm/mach-iop13xx/include/mach/io.h index f13188518025..e197cb8994ac 100644 --- a/arch/arm/mach-iop13xx/include/mach/io.h +++ b/arch/arm/mach-iop13xx/include/mach/io.h | |||
@@ -19,10 +19,10 @@ | |||
19 | #ifndef __ASM_ARM_ARCH_IO_H | 19 | #ifndef __ASM_ARM_ARCH_IO_H |
20 | #define __ASM_ARM_ARCH_IO_H | 20 | #define __ASM_ARM_ARCH_IO_H |
21 | 21 | ||
22 | #define IO_SPACE_LIMIT 0xffffffff | 22 | #include <mach/iop13xx.h> |
23 | 23 | ||
24 | #define __io(a) __iop13xx_io(a) | 24 | #define IO_SPACE_LIMIT (IOP13XX_PCIE_IO_WINDOW_SIZE + IOP13XX_PCIX_IO_WINDOW_SIZE - 1) |
25 | 25 | ||
26 | extern void __iomem * __iop13xx_io(unsigned long io_addr); | 26 | #define __io(a) (IOP13XX_PCIX_LOWER_IO_VA + ((a) & IO_SPACE_LIMIT)) |
27 | 27 | ||
28 | #endif | 28 | #endif |
diff --git a/arch/arm/mach-iop13xx/include/mach/iop13xx.h b/arch/arm/mach-iop13xx/include/mach/iop13xx.h index e190dcd7d72d..d3777dbc2e8b 100644 --- a/arch/arm/mach-iop13xx/include/mach/iop13xx.h +++ b/arch/arm/mach-iop13xx/include/mach/iop13xx.h | |||
@@ -69,17 +69,15 @@ extern unsigned long get_iop_tick_rate(void); | |||
69 | * 0x8000.0000 + 928M 0x2.8000.0000 (ioremap) PCIE outbound memory window | 69 | * 0x8000.0000 + 928M 0x2.8000.0000 (ioremap) PCIE outbound memory window |
70 | * | 70 | * |
71 | * IO MAP | 71 | * IO MAP |
72 | * 0x1000 + 64K 0x0.fffb.1000 0xfec6.1000 PCIX outbound i/o window | 72 | * 0x1000 + 64K 0x0.fffb.1000 0xfed6.1000 PCIX outbound i/o window |
73 | * 0x1000 + 64K 0x0.fffd.1000 0xfed7.1000 PCIE outbound i/o window | 73 | * 0x1000 + 64K 0x0.fffd.1000 0xfed7.1000 PCIE outbound i/o window |
74 | */ | 74 | */ |
75 | #define IOP13XX_PCIX_IO_WINDOW_SIZE 0x10000UL | 75 | #define IOP13XX_PCIX_IO_WINDOW_SIZE 0x10000UL |
76 | #define IOP13XX_PCIX_LOWER_IO_PA 0xfffb0000UL | 76 | #define IOP13XX_PCIX_LOWER_IO_PA 0xfffb0000UL |
77 | #define IOP13XX_PCIX_LOWER_IO_VA 0xfec60000UL | 77 | #define IOP13XX_PCIX_LOWER_IO_VA 0xfed60000UL |
78 | #define IOP13XX_PCIX_LOWER_IO_BA 0x0UL /* OIOTVR */ | 78 | #define IOP13XX_PCIX_LOWER_IO_BA 0x0UL /* OIOTVR */ |
79 | #define IOP13XX_PCIX_IO_BUS_OFFSET 0x1000UL | 79 | #define IOP13XX_PCIX_IO_BUS_OFFSET 0x1000UL |
80 | #define IOP13XX_PCIX_UPPER_IO_PA (IOP13XX_PCIX_LOWER_IO_PA +\ | 80 | #define IOP13XX_PCIX_UPPER_IO_BA (IOP13XX_PCIX_LOWER_IO_BA +\ |
81 | IOP13XX_PCIX_IO_WINDOW_SIZE - 1) | ||
82 | #define IOP13XX_PCIX_UPPER_IO_VA (IOP13XX_PCIX_LOWER_IO_VA +\ | ||
83 | IOP13XX_PCIX_IO_WINDOW_SIZE - 1) | 81 | IOP13XX_PCIX_IO_WINDOW_SIZE - 1) |
84 | #define IOP13XX_PCIX_IO_PHYS_TO_VIRT(addr) (u32) ((u32) addr -\ | 82 | #define IOP13XX_PCIX_IO_PHYS_TO_VIRT(addr) (u32) ((u32) addr -\ |
85 | (IOP13XX_PCIX_LOWER_IO_PA\ | 83 | (IOP13XX_PCIX_LOWER_IO_PA\ |
@@ -108,10 +106,6 @@ extern unsigned long get_iop_tick_rate(void); | |||
108 | #define IOP13XX_PCIE_LOWER_IO_VA 0xfed70000UL | 106 | #define IOP13XX_PCIE_LOWER_IO_VA 0xfed70000UL |
109 | #define IOP13XX_PCIE_LOWER_IO_BA 0x0UL /* OIOTVR */ | 107 | #define IOP13XX_PCIE_LOWER_IO_BA 0x0UL /* OIOTVR */ |
110 | #define IOP13XX_PCIE_IO_BUS_OFFSET 0x1000UL | 108 | #define IOP13XX_PCIE_IO_BUS_OFFSET 0x1000UL |
111 | #define IOP13XX_PCIE_UPPER_IO_PA (IOP13XX_PCIE_LOWER_IO_PA +\ | ||
112 | IOP13XX_PCIE_IO_WINDOW_SIZE - 1) | ||
113 | #define IOP13XX_PCIE_UPPER_IO_VA (IOP13XX_PCIE_LOWER_IO_VA +\ | ||
114 | IOP13XX_PCIE_IO_WINDOW_SIZE - 1) | ||
115 | #define IOP13XX_PCIE_UPPER_IO_BA (IOP13XX_PCIE_LOWER_IO_BA +\ | 109 | #define IOP13XX_PCIE_UPPER_IO_BA (IOP13XX_PCIE_LOWER_IO_BA +\ |
116 | IOP13XX_PCIE_IO_WINDOW_SIZE - 1) | 110 | IOP13XX_PCIE_IO_WINDOW_SIZE - 1) |
117 | #define IOP13XX_PCIE_IO_PHYS_TO_VIRT(addr) (u32) ((u32) addr -\ | 111 | #define IOP13XX_PCIE_IO_PHYS_TO_VIRT(addr) (u32) ((u32) addr -\ |
diff --git a/arch/arm/mach-iop13xx/io.c b/arch/arm/mach-iop13xx/io.c index 3c364198db9c..851dc8f2b6b5 100644 --- a/arch/arm/mach-iop13xx/io.c +++ b/arch/arm/mach-iop13xx/io.c | |||
@@ -23,25 +23,6 @@ | |||
23 | 23 | ||
24 | #include "pci.h" | 24 | #include "pci.h" |
25 | 25 | ||
26 | void * __iomem __iop13xx_io(unsigned long io_addr) | ||
27 | { | ||
28 | void __iomem * io_virt; | ||
29 | |||
30 | switch (io_addr) { | ||
31 | case IOP13XX_PCIE_LOWER_IO_PA ... IOP13XX_PCIE_UPPER_IO_PA: | ||
32 | io_virt = (void *) IOP13XX_PCIE_IO_PHYS_TO_VIRT(io_addr); | ||
33 | break; | ||
34 | case IOP13XX_PCIX_LOWER_IO_PA ... IOP13XX_PCIX_UPPER_IO_PA: | ||
35 | io_virt = (void *) IOP13XX_PCIX_IO_PHYS_TO_VIRT(io_addr); | ||
36 | break; | ||
37 | default: | ||
38 | BUG(); | ||
39 | } | ||
40 | |||
41 | return io_virt; | ||
42 | } | ||
43 | EXPORT_SYMBOL(__iop13xx_io); | ||
44 | |||
45 | static void __iomem *__iop13xx_ioremap_caller(unsigned long cookie, | 26 | static void __iomem *__iop13xx_ioremap_caller(unsigned long cookie, |
46 | size_t size, unsigned int mtype, void *caller) | 27 | size_t size, unsigned int mtype, void *caller) |
47 | { | 28 | { |
@@ -67,12 +48,6 @@ static void __iomem *__iop13xx_ioremap_caller(unsigned long cookie, | |||
67 | (cookie - IOP13XX_PBI_LOWER_MEM_RA), | 48 | (cookie - IOP13XX_PBI_LOWER_MEM_RA), |
68 | size, mtype, __builtin_return_address(0)); | 49 | size, mtype, __builtin_return_address(0)); |
69 | break; | 50 | break; |
70 | case IOP13XX_PCIE_LOWER_IO_PA ... IOP13XX_PCIE_UPPER_IO_PA: | ||
71 | retval = (void *) IOP13XX_PCIE_IO_PHYS_TO_VIRT(cookie); | ||
72 | break; | ||
73 | case IOP13XX_PCIX_LOWER_IO_PA ... IOP13XX_PCIX_UPPER_IO_PA: | ||
74 | retval = (void *) IOP13XX_PCIX_IO_PHYS_TO_VIRT(cookie); | ||
75 | break; | ||
76 | case IOP13XX_PMMR_PHYS_MEM_BASE ... IOP13XX_PMMR_UPPER_MEM_PA: | 51 | case IOP13XX_PMMR_PHYS_MEM_BASE ... IOP13XX_PMMR_UPPER_MEM_PA: |
77 | retval = (void *) IOP13XX_PMMR_PHYS_TO_VIRT(cookie); | 52 | retval = (void *) IOP13XX_PMMR_PHYS_TO_VIRT(cookie); |
78 | break; | 53 | break; |
@@ -99,8 +74,6 @@ static void __iop13xx_iounmap(volatile void __iomem *addr) | |||
99 | goto skip; | 74 | goto skip; |
100 | 75 | ||
101 | switch ((u32) addr) { | 76 | switch ((u32) addr) { |
102 | case IOP13XX_PCIE_LOWER_IO_VA ... IOP13XX_PCIE_UPPER_IO_VA: | ||
103 | case IOP13XX_PCIX_LOWER_IO_VA ... IOP13XX_PCIX_UPPER_IO_VA: | ||
104 | case IOP13XX_PMMR_VIRT_MEM_BASE ... IOP13XX_PMMR_UPPER_MEM_VA: | 77 | case IOP13XX_PMMR_VIRT_MEM_BASE ... IOP13XX_PMMR_UPPER_MEM_VA: |
105 | goto skip; | 78 | goto skip; |
106 | } | 79 | } |
diff --git a/arch/arm/mach-iop13xx/pci.c b/arch/arm/mach-iop13xx/pci.c index 861cb12ef436..1bb905adb3dd 100644 --- a/arch/arm/mach-iop13xx/pci.c +++ b/arch/arm/mach-iop13xx/pci.c | |||
@@ -1042,8 +1042,8 @@ int iop13xx_pci_setup(int nr, struct pci_sys_data *sys) | |||
1042 | << IOP13XX_ATUX_PCIXSR_FUNC_NUM; | 1042 | << IOP13XX_ATUX_PCIXSR_FUNC_NUM; |
1043 | __raw_writel(pcixsr, IOP13XX_ATUX_PCIXSR); | 1043 | __raw_writel(pcixsr, IOP13XX_ATUX_PCIXSR); |
1044 | 1044 | ||
1045 | res[0].start = IOP13XX_PCIX_LOWER_IO_PA + IOP13XX_PCIX_IO_BUS_OFFSET; | 1045 | res[0].start = IOP13XX_PCIX_LOWER_IO_BA + IOP13XX_PCIX_IO_BUS_OFFSET; |
1046 | res[0].end = IOP13XX_PCIX_UPPER_IO_PA; | 1046 | res[0].end = IOP13XX_PCIX_UPPER_IO_BA; |
1047 | res[0].name = "IQ81340 ATUX PCI I/O Space"; | 1047 | res[0].name = "IQ81340 ATUX PCI I/O Space"; |
1048 | res[0].flags = IORESOURCE_IO; | 1048 | res[0].flags = IORESOURCE_IO; |
1049 | 1049 | ||
@@ -1052,7 +1052,7 @@ int iop13xx_pci_setup(int nr, struct pci_sys_data *sys) | |||
1052 | res[1].name = "IQ81340 ATUX PCI Memory Space"; | 1052 | res[1].name = "IQ81340 ATUX PCI Memory Space"; |
1053 | res[1].flags = IORESOURCE_MEM; | 1053 | res[1].flags = IORESOURCE_MEM; |
1054 | sys->mem_offset = IOP13XX_PCIX_MEM_OFFSET; | 1054 | sys->mem_offset = IOP13XX_PCIX_MEM_OFFSET; |
1055 | sys->io_offset = IOP13XX_PCIX_LOWER_IO_PA; | 1055 | sys->io_offset = IOP13XX_PCIX_LOWER_IO_BA; |
1056 | break; | 1056 | break; |
1057 | case IOP13XX_INIT_ATU_ATUE: | 1057 | case IOP13XX_INIT_ATU_ATUE: |
1058 | /* Note: the function number field in the PCSR is ro */ | 1058 | /* Note: the function number field in the PCSR is ro */ |
@@ -1063,8 +1063,8 @@ int iop13xx_pci_setup(int nr, struct pci_sys_data *sys) | |||
1063 | 1063 | ||
1064 | __raw_writel(pcsr, IOP13XX_ATUE_PCSR); | 1064 | __raw_writel(pcsr, IOP13XX_ATUE_PCSR); |
1065 | 1065 | ||
1066 | res[0].start = IOP13XX_PCIE_LOWER_IO_PA + IOP13XX_PCIE_IO_BUS_OFFSET; | 1066 | res[0].start = IOP13XX_PCIE_LOWER_IO_BA + IOP13XX_PCIE_IO_BUS_OFFSET; |
1067 | res[0].end = IOP13XX_PCIE_UPPER_IO_PA; | 1067 | res[0].end = IOP13XX_PCIE_UPPER_IO_BA; |
1068 | res[0].name = "IQ81340 ATUE PCI I/O Space"; | 1068 | res[0].name = "IQ81340 ATUE PCI I/O Space"; |
1069 | res[0].flags = IORESOURCE_IO; | 1069 | res[0].flags = IORESOURCE_IO; |
1070 | 1070 | ||
@@ -1073,7 +1073,7 @@ int iop13xx_pci_setup(int nr, struct pci_sys_data *sys) | |||
1073 | res[1].name = "IQ81340 ATUE PCI Memory Space"; | 1073 | res[1].name = "IQ81340 ATUE PCI Memory Space"; |
1074 | res[1].flags = IORESOURCE_MEM; | 1074 | res[1].flags = IORESOURCE_MEM; |
1075 | sys->mem_offset = IOP13XX_PCIE_MEM_OFFSET; | 1075 | sys->mem_offset = IOP13XX_PCIE_MEM_OFFSET; |
1076 | sys->io_offset = IOP13XX_PCIE_LOWER_IO_PA; | 1076 | sys->io_offset = IOP13XX_PCIE_LOWER_IO_BA; |
1077 | sys->map_irq = iop13xx_pcie_map_irq; | 1077 | sys->map_irq = iop13xx_pcie_map_irq; |
1078 | break; | 1078 | break; |
1079 | default: | 1079 | default: |