aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-integrator
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2013-03-19 14:58:49 -0400
committerLinus Walleij <linus.walleij@linaro.org>2013-06-03 02:04:41 -0400
commitae9daf2d00ee103b257a1f3b4ea9c575b708fe7a (patch)
tree8ac127b66bb592e0016dedb3d0f4e6161c7b6972 /arch/arm/mach-integrator
parent01ef31053ddda5d5aee86dca61193d1395273d53 (diff)
ARM: integrator: move static ioremapping into PCIv3 driver
Try to make this driver self-contained by moving the ioremapping into the driver. Acked-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'arch/arm/mach-integrator')
-rw-r--r--arch/arm/mach-integrator/include/mach/platform.h22
-rw-r--r--arch/arm/mach-integrator/integrator_ap.c17
-rw-r--r--arch/arm/mach-integrator/pci_v3.c48
-rw-r--r--arch/arm/mach-integrator/pci_v3.h2
4 files changed, 51 insertions, 38 deletions
diff --git a/arch/arm/mach-integrator/include/mach/platform.h b/arch/arm/mach-integrator/include/mach/platform.h
index 62fa119bc393..306d025d9730 100644
--- a/arch/arm/mach-integrator/include/mach/platform.h
+++ b/arch/arm/mach-integrator/include/mach/platform.h
@@ -305,28 +305,6 @@
305/* KMI definitions are now in include/asm-arm/hardware/amba_kmi.h -- rmk */ 305/* KMI definitions are now in include/asm-arm/hardware/amba_kmi.h -- rmk */
306 306
307/* ------------------------------------------------------------------------ 307/* ------------------------------------------------------------------------
308 * Where in the memory map does PCI live?
309 * ------------------------------------------------------------------------
310 * This represents a fairly liberal usage of address space. Even though
311 * the V3 only has two windows (therefore we need to map stuff on the fly),
312 * we maintain the same addresses, even if they're not mapped.
313 *
314 */
315#define PHYS_PCI_MEM_BASE 0x40000000 /* 512M to xxx */
316/* unused 256M from A0000000-AFFFFFFF might be used for I2O ???
317 */
318#define PHYS_PCI_IO_BASE 0x60000000 /* 16M to xxx */
319/* unused (128-16)M from B1000000-B7FFFFFF
320 */
321#define PHYS_PCI_CONFIG_BASE 0x61000000 /* 16M to xxx */
322/* unused ((128-16)M - 64K) from XXX
323 */
324#define PHYS_PCI_V3_BASE 0x62000000
325
326#define PCI_MEMORY_VADDR IOMEM(0xe8000000)
327#define PCI_CONFIG_VADDR IOMEM(0xec000000)
328
329/* ------------------------------------------------------------------------
330 * Integrator Interrupt Controllers 308 * Integrator Interrupt Controllers
331 * ------------------------------------------------------------------------ 309 * ------------------------------------------------------------------------
332 * 310 *
diff --git a/arch/arm/mach-integrator/integrator_ap.c b/arch/arm/mach-integrator/integrator_ap.c
index 6375657493d0..16f3196efdb4 100644
--- a/arch/arm/mach-integrator/integrator_ap.c
+++ b/arch/arm/mach-integrator/integrator_ap.c
@@ -56,10 +56,10 @@
56#include <asm/mach/arch.h> 56#include <asm/mach/arch.h>
57#include <asm/mach/irq.h> 57#include <asm/mach/irq.h>
58#include <asm/mach/map.h> 58#include <asm/mach/map.h>
59#include <asm/mach/pci.h>
60#include <asm/mach/time.h> 59#include <asm/mach/time.h>
61 60
62#include "common.h" 61#include "common.h"
62#include "pci_v3.h"
63 63
64/* Base address to the AP system controller */ 64/* Base address to the AP system controller */
65void __iomem *ap_syscon_base; 65void __iomem *ap_syscon_base;
@@ -77,9 +77,6 @@ void __iomem *ap_syscon_base;
77 77
78/* 78/*
79 * Logical Physical 79 * Logical Physical
80 * e8000000 40000000 PCI memory PHYS_PCI_MEM_BASE (max 512M)
81 * ec000000 61000000 PCI config space PHYS_PCI_CONFIG_BASE (max 16M)
82 * fee00000 60000000 PCI IO PHYS_PCI_IO_BASE (max 16M)
83 * ef000000 Cache flush 80 * ef000000 Cache flush
84 * f1000000 10000000 Core module registers 81 * f1000000 10000000 Core module registers
85 * f1100000 11000000 System controller registers 82 * f1100000 11000000 System controller registers
@@ -128,23 +125,13 @@ static struct map_desc ap_io_desc[] __initdata __maybe_unused = {
128 .pfn = __phys_to_pfn(INTEGRATOR_AP_GPIO_BASE), 125 .pfn = __phys_to_pfn(INTEGRATOR_AP_GPIO_BASE),
129 .length = SZ_4K, 126 .length = SZ_4K,
130 .type = MT_DEVICE 127 .type = MT_DEVICE
131 }, {
132 .virtual = (unsigned long)PCI_MEMORY_VADDR,
133 .pfn = __phys_to_pfn(PHYS_PCI_MEM_BASE),
134 .length = SZ_16M,
135 .type = MT_DEVICE
136 }, {
137 .virtual = (unsigned long)PCI_CONFIG_VADDR,
138 .pfn = __phys_to_pfn(PHYS_PCI_CONFIG_BASE),
139 .length = SZ_16M,
140 .type = MT_DEVICE
141 } 128 }
142}; 129};
143 130
144static void __init ap_map_io(void) 131static void __init ap_map_io(void)
145{ 132{
146 iotable_init(ap_io_desc, ARRAY_SIZE(ap_io_desc)); 133 iotable_init(ap_io_desc, ARRAY_SIZE(ap_io_desc));
147 pci_map_io_early(__phys_to_pfn(PHYS_PCI_IO_BASE)); 134 pci_v3_early_init();
148} 135}
149 136
150#ifdef CONFIG_PM 137#ifdef CONFIG_PM
diff --git a/arch/arm/mach-integrator/pci_v3.c b/arch/arm/mach-integrator/pci_v3.c
index 059ac4e8a67e..a3cefdebd136 100644
--- a/arch/arm/mach-integrator/pci_v3.c
+++ b/arch/arm/mach-integrator/pci_v3.c
@@ -34,10 +34,28 @@
34#include <mach/platform.h> 34#include <mach/platform.h>
35#include <mach/irqs.h> 35#include <mach/irqs.h>
36 36
37#include <asm/mach/map.h>
37#include <asm/signal.h> 38#include <asm/signal.h>
38#include <asm/mach/pci.h> 39#include <asm/mach/pci.h>
39#include <asm/irq_regs.h> 40#include <asm/irq_regs.h>
40 41
42#include "pci_v3.h"
43
44/*
45 * Where in the memory map does PCI live?
46 *
47 * This represents a fairly liberal usage of address space. Even though
48 * the V3 only has two windows (therefore we need to map stuff on the fly),
49 * we maintain the same addresses, even if they're not mapped.
50 */
51#define PHYS_PCI_MEM_BASE 0x40000000 /* 512M */
52#define PHYS_PCI_IO_BASE 0x60000000 /* 16M */
53#define PHYS_PCI_CONFIG_BASE 0x61000000 /* 16M */
54#define PHYS_PCI_V3_BASE 0x62000000 /* 64K */
55
56#define PCI_MEMORY_VADDR IOMEM(0xe8000000)
57#define PCI_CONFIG_VADDR IOMEM(0xec000000)
58
41/* 59/*
42 * V3 Local Bus to PCI Bridge definitions 60 * V3 Local Bus to PCI Bridge definitions
43 * 61 *
@@ -851,7 +869,6 @@ static int __init pci_v3_probe(struct platform_device *pdev)
851 return -ENODEV; 869 return -ENODEV;
852 } 870 }
853 871
854 vga_base = (unsigned long)PCI_MEMORY_VADDR;
855 pci_common_init(&pci_v3); 872 pci_common_init(&pci_v3);
856 873
857 return 0; 874 return 0;
@@ -869,3 +886,32 @@ static int __init pci_v3_init(void)
869} 886}
870 887
871subsys_initcall(pci_v3_init); 888subsys_initcall(pci_v3_init);
889
890/*
891 * Static mappings for the PCIv3 bridge
892 *
893 * e8000000 40000000 PCI memory PHYS_PCI_MEM_BASE (max 512M)
894 * ec000000 61000000 PCI config space PHYS_PCI_CONFIG_BASE (max 16M)
895 * fee00000 60000000 PCI IO PHYS_PCI_IO_BASE (max 16M)
896 */
897static struct map_desc pci_v3_io_desc[] __initdata __maybe_unused = {
898 {
899 .virtual = (unsigned long)PCI_MEMORY_VADDR,
900 .pfn = __phys_to_pfn(PHYS_PCI_MEM_BASE),
901 .length = SZ_16M,
902 .type = MT_DEVICE
903 }, {
904 .virtual = (unsigned long)PCI_CONFIG_VADDR,
905 .pfn = __phys_to_pfn(PHYS_PCI_CONFIG_BASE),
906 .length = SZ_16M,
907 .type = MT_DEVICE
908 }
909};
910
911int __init pci_v3_early_init(void)
912{
913 iotable_init(pci_v3_io_desc, ARRAY_SIZE(pci_v3_io_desc));
914 vga_base = (unsigned long)PCI_MEMORY_VADDR;
915 pci_map_io_early(__phys_to_pfn(PHYS_PCI_IO_BASE));
916 return 0;
917}
diff --git a/arch/arm/mach-integrator/pci_v3.h b/arch/arm/mach-integrator/pci_v3.h
new file mode 100644
index 000000000000..755fd29fed4a
--- /dev/null
+++ b/arch/arm/mach-integrator/pci_v3.h
@@ -0,0 +1,2 @@
1/* Simple oneliner include to the PCIv3 early init */
2extern int pci_v3_early_init(void);