diff options
| author | Rob Herring <rob.herring@calxeda.com> | 2012-07-10 00:26:58 -0400 |
|---|---|---|
| committer | Rob Herring <rob.herring@calxeda.com> | 2012-07-26 10:10:03 -0400 |
| commit | 0b9b18e0166d8925ed222335efbc3cfd66aa882f (patch) | |
| tree | d10fe7312e7873d1f9474b51a133a58782bf54ce | |
| parent | e7adf1e0a5ed7d15a9ed8679a59156118f4a63c4 (diff) | |
ARM: mv78xx0: use fixed pci i/o mapping
Move mv78xx0 PCI to fixed i/o mapping and remove io.h. This changes the PCI
bus addresses from the cpu address to 0 based. It appears that there is
translation h/w for this, but its untested.
Signed-off-by: Rob Herring <rob.herring@calxeda.com>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
| -rw-r--r-- | arch/arm/Kconfig | 1 | ||||
| -rw-r--r-- | arch/arm/mach-mv78xx0/addr-map.c | 3 | ||||
| -rw-r--r-- | arch/arm/mach-mv78xx0/common.c | 5 | ||||
| -rw-r--r-- | arch/arm/mach-mv78xx0/include/mach/io.h | 24 | ||||
| -rw-r--r-- | arch/arm/mach-mv78xx0/include/mach/mv78xx0.h | 21 | ||||
| -rw-r--r-- | arch/arm/mach-mv78xx0/pcie.c | 110 |
6 files changed, 45 insertions, 119 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index c61e0a41d799..1b7faa5a085d 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
| @@ -571,7 +571,6 @@ config ARCH_MV78XX0 | |||
| 571 | select PCI | 571 | select PCI |
| 572 | select ARCH_REQUIRE_GPIOLIB | 572 | select ARCH_REQUIRE_GPIOLIB |
| 573 | select GENERIC_CLOCKEVENTS | 573 | select GENERIC_CLOCKEVENTS |
| 574 | select NEED_MACH_IO_H | ||
| 575 | select PLAT_ORION | 574 | select PLAT_ORION |
| 576 | help | 575 | help |
| 577 | Support for the following Marvell MV78xx0 series SoCs: | 576 | Support for the following Marvell MV78xx0 series SoCs: |
diff --git a/arch/arm/mach-mv78xx0/addr-map.c b/arch/arm/mach-mv78xx0/addr-map.c index 62b53d710efd..7764d9386f2a 100644 --- a/arch/arm/mach-mv78xx0/addr-map.c +++ b/arch/arm/mach-mv78xx0/addr-map.c | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include <linux/mbus.h> | 13 | #include <linux/mbus.h> |
| 14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
| 15 | #include <plat/addr-map.h> | 15 | #include <plat/addr-map.h> |
| 16 | #include <mach/mv78xx0.h> | ||
| 16 | #include "common.h" | 17 | #include "common.h" |
| 17 | 18 | ||
| 18 | /* | 19 | /* |
| @@ -81,7 +82,7 @@ void __init mv78xx0_setup_pcie_io_win(int window, u32 base, u32 size, | |||
| 81 | int maj, int min) | 82 | int maj, int min) |
| 82 | { | 83 | { |
| 83 | orion_setup_cpu_win(&addr_map_cfg, window, base, size, | 84 | orion_setup_cpu_win(&addr_map_cfg, window, base, size, |
| 84 | TARGET_PCIE(maj), ATTR_PCIE_IO(min), -1); | 85 | TARGET_PCIE(maj), ATTR_PCIE_IO(min), 0); |
| 85 | } | 86 | } |
| 86 | 87 | ||
| 87 | void __init mv78xx0_setup_pcie_mem_win(int window, u32 base, u32 size, | 88 | void __init mv78xx0_setup_pcie_mem_win(int window, u32 base, u32 size, |
diff --git a/arch/arm/mach-mv78xx0/common.c b/arch/arm/mach-mv78xx0/common.c index b4c53b846c9c..20826449e61b 100644 --- a/arch/arm/mach-mv78xx0/common.c +++ b/arch/arm/mach-mv78xx0/common.c | |||
| @@ -135,11 +135,6 @@ static struct map_desc mv78xx0_io_desc[] __initdata = { | |||
| 135 | .length = MV78XX0_CORE_REGS_SIZE, | 135 | .length = MV78XX0_CORE_REGS_SIZE, |
| 136 | .type = MT_DEVICE, | 136 | .type = MT_DEVICE, |
| 137 | }, { | 137 | }, { |
| 138 | .virtual = MV78XX0_PCIE_IO_VIRT_BASE(0), | ||
| 139 | .pfn = __phys_to_pfn(MV78XX0_PCIE_IO_PHYS_BASE(0)), | ||
| 140 | .length = MV78XX0_PCIE_IO_SIZE * 8, | ||
| 141 | .type = MT_DEVICE, | ||
| 142 | }, { | ||
| 143 | .virtual = MV78XX0_REGS_VIRT_BASE, | 138 | .virtual = MV78XX0_REGS_VIRT_BASE, |
| 144 | .pfn = __phys_to_pfn(MV78XX0_REGS_PHYS_BASE), | 139 | .pfn = __phys_to_pfn(MV78XX0_REGS_PHYS_BASE), |
| 145 | .length = MV78XX0_REGS_SIZE, | 140 | .length = MV78XX0_REGS_SIZE, |
diff --git a/arch/arm/mach-mv78xx0/include/mach/io.h b/arch/arm/mach-mv78xx0/include/mach/io.h deleted file mode 100644 index c7d9d00d8fc1..000000000000 --- a/arch/arm/mach-mv78xx0/include/mach/io.h +++ /dev/null | |||
| @@ -1,24 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-mv78xx0/include/mach/io.h | ||
| 3 | * | ||
| 4 | * This file is licensed under the terms of the GNU General Public | ||
| 5 | * License version 2. This program is licensed "as is" without any | ||
| 6 | * warranty of any kind, whether express or implied. | ||
| 7 | */ | ||
| 8 | |||
| 9 | #ifndef __ASM_ARCH_IO_H | ||
| 10 | #define __ASM_ARCH_IO_H | ||
| 11 | |||
| 12 | #include "mv78xx0.h" | ||
| 13 | |||
| 14 | #define IO_SPACE_LIMIT 0xffffffff | ||
| 15 | |||
| 16 | static inline void __iomem *__io(unsigned long addr) | ||
| 17 | { | ||
| 18 | return (void __iomem *)((addr - MV78XX0_PCIE_IO_PHYS_BASE(0)) | ||
| 19 | + MV78XX0_PCIE_IO_VIRT_BASE(0)); | ||
| 20 | } | ||
| 21 | |||
| 22 | #define __io(a) __io(a) | ||
| 23 | |||
| 24 | #endif | ||
diff --git a/arch/arm/mach-mv78xx0/include/mach/mv78xx0.h b/arch/arm/mach-mv78xx0/include/mach/mv78xx0.h index e807c4c52a0b..bd03fed1128e 100644 --- a/arch/arm/mach-mv78xx0/include/mach/mv78xx0.h +++ b/arch/arm/mach-mv78xx0/include/mach/mv78xx0.h | |||
| @@ -29,15 +29,15 @@ | |||
| 29 | * | 29 | * |
| 30 | * virt phys size | 30 | * virt phys size |
| 31 | * fe400000 f102x000 16K core-specific peripheral registers | 31 | * fe400000 f102x000 16K core-specific peripheral registers |
| 32 | * fe700000 f0800000 1M PCIe #0 I/O space | 32 | * fee00000 f0800000 64K PCIe #0 I/O space |
| 33 | * fe800000 f0900000 1M PCIe #1 I/O space | 33 | * fee10000 f0900000 64K PCIe #1 I/O space |
| 34 | * fe900000 f0a00000 1M PCIe #2 I/O space | 34 | * fee20000 f0a00000 64K PCIe #2 I/O space |
| 35 | * fea00000 f0b00000 1M PCIe #3 I/O space | 35 | * fee30000 f0b00000 64K PCIe #3 I/O space |
| 36 | * feb00000 f0c00000 1M PCIe #4 I/O space | 36 | * fee40000 f0c00000 64K PCIe #4 I/O space |
| 37 | * fec00000 f0d00000 1M PCIe #5 I/O space | 37 | * fee50000 f0d00000 64K PCIe #5 I/O space |
| 38 | * fed00000 f0e00000 1M PCIe #6 I/O space | 38 | * fee60000 f0e00000 64K PCIe #6 I/O space |
| 39 | * fee00000 f0f00000 1M PCIe #7 I/O space | 39 | * fee70000 f0f00000 64K PCIe #7 I/O space |
| 40 | * fef00000 f1000000 1M on-chip peripheral registers | 40 | * fd000000 f1000000 1M on-chip peripheral registers |
| 41 | */ | 41 | */ |
| 42 | #define MV78XX0_CORE0_REGS_PHYS_BASE 0xf1020000 | 42 | #define MV78XX0_CORE0_REGS_PHYS_BASE 0xf1020000 |
| 43 | #define MV78XX0_CORE1_REGS_PHYS_BASE 0xf1024000 | 43 | #define MV78XX0_CORE1_REGS_PHYS_BASE 0xf1024000 |
| @@ -46,11 +46,10 @@ | |||
| 46 | #define MV78XX0_CORE_REGS_SIZE SZ_16K | 46 | #define MV78XX0_CORE_REGS_SIZE SZ_16K |
| 47 | 47 | ||
| 48 | #define MV78XX0_PCIE_IO_PHYS_BASE(i) (0xf0800000 + ((i) << 20)) | 48 | #define MV78XX0_PCIE_IO_PHYS_BASE(i) (0xf0800000 + ((i) << 20)) |
| 49 | #define MV78XX0_PCIE_IO_VIRT_BASE(i) (0xfe700000 + ((i) << 20)) | ||
| 50 | #define MV78XX0_PCIE_IO_SIZE SZ_1M | 49 | #define MV78XX0_PCIE_IO_SIZE SZ_1M |
| 51 | 50 | ||
| 52 | #define MV78XX0_REGS_PHYS_BASE 0xf1000000 | 51 | #define MV78XX0_REGS_PHYS_BASE 0xf1000000 |
| 53 | #define MV78XX0_REGS_VIRT_BASE 0xfef00000 | 52 | #define MV78XX0_REGS_VIRT_BASE 0xfd000000 |
| 54 | #define MV78XX0_REGS_SIZE SZ_1M | 53 | #define MV78XX0_REGS_SIZE SZ_1M |
| 55 | 54 | ||
| 56 | #define MV78XX0_PCIE_MEM_PHYS_BASE 0xc0000000 | 55 | #define MV78XX0_PCIE_MEM_PHYS_BASE 0xc0000000 |
diff --git a/arch/arm/mach-mv78xx0/pcie.c b/arch/arm/mach-mv78xx0/pcie.c index 2e56e86b6d68..26a059b4f472 100644 --- a/arch/arm/mach-mv78xx0/pcie.c +++ b/arch/arm/mach-mv78xx0/pcie.c | |||
| @@ -15,6 +15,7 @@ | |||
| 15 | #include <asm/mach/pci.h> | 15 | #include <asm/mach/pci.h> |
| 16 | #include <plat/pcie.h> | 16 | #include <plat/pcie.h> |
| 17 | #include <plat/addr-map.h> | 17 | #include <plat/addr-map.h> |
| 18 | #include <mach/mv78xx0.h> | ||
| 18 | #include "common.h" | 19 | #include "common.h" |
| 19 | 20 | ||
| 20 | struct pcie_port { | 21 | struct pcie_port { |
| @@ -23,16 +24,13 @@ struct pcie_port { | |||
| 23 | u8 root_bus_nr; | 24 | u8 root_bus_nr; |
| 24 | void __iomem *base; | 25 | void __iomem *base; |
| 25 | spinlock_t conf_lock; | 26 | spinlock_t conf_lock; |
| 26 | char io_space_name[16]; | ||
| 27 | char mem_space_name[16]; | 27 | char mem_space_name[16]; |
| 28 | struct resource res[2]; | 28 | struct resource res; |
| 29 | }; | 29 | }; |
| 30 | 30 | ||
| 31 | static struct pcie_port pcie_port[8]; | 31 | static struct pcie_port pcie_port[8]; |
| 32 | static int num_pcie_ports; | 32 | static int num_pcie_ports; |
| 33 | static struct resource pcie_io_space; | 33 | static struct resource pcie_io_space; |
| 34 | static struct resource pcie_mem_space; | ||
| 35 | |||
| 36 | 34 | ||
| 37 | void __init mv78xx0_pcie_id(u32 *dev, u32 *rev) | 35 | void __init mv78xx0_pcie_id(u32 *dev, u32 *rev) |
| 38 | { | 36 | { |
| @@ -40,102 +38,59 @@ void __init mv78xx0_pcie_id(u32 *dev, u32 *rev) | |||
| 40 | *rev = orion_pcie_rev((void __iomem *)PCIE00_VIRT_BASE); | 38 | *rev = orion_pcie_rev((void __iomem *)PCIE00_VIRT_BASE); |
| 41 | } | 39 | } |
| 42 | 40 | ||
| 41 | u32 pcie_port_size[8] = { | ||
| 42 | 0, | ||
| 43 | 0x30000000, | ||
| 44 | 0x10000000, | ||
| 45 | 0x10000000, | ||
| 46 | 0x08000000, | ||
| 47 | 0x08000000, | ||
| 48 | 0x08000000, | ||
| 49 | 0x04000000, | ||
| 50 | }; | ||
| 51 | |||
| 43 | static void __init mv78xx0_pcie_preinit(void) | 52 | static void __init mv78xx0_pcie_preinit(void) |
| 44 | { | 53 | { |
| 45 | int i; | ||
