aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-vexpress
diff options
context:
space:
mode:
authorPawel Moll <pawel.moll@arm.com>2012-01-25 10:37:29 -0500
committerPawel Moll <pawel.moll@arm.com>2012-02-23 10:09:42 -0500
commit98ed4ceb93ba22268f35ebcbb7de0cb1c7e70231 (patch)
tree4d9433a8e99ad43c3be377a6e44e54ef5d9a1ec4 /arch/arm/mach-vexpress
parentb01543dfe67bb1d191998e90d20534dc354de059 (diff)
ARM: vexpress: Get rid of MMIO_P2V
This patch gets rid of the MMIO_P2V and __MMIO_P2V macros, defining constant virtual base for motherboard and tile peripherals instead. Additionally, in preparation for the new motherboard memory map, the motherboard peripherals are using base pointers calculated in runtime, instead of compile-time calculated values. Signed-off-by: Pawel Moll <pawel.moll@arm.com>
Diffstat (limited to 'arch/arm/mach-vexpress')
-rw-r--r--arch/arm/mach-vexpress/core.h9
-rw-r--r--arch/arm/mach-vexpress/ct-ca9x4.c58
-rw-r--r--arch/arm/mach-vexpress/include/mach/ct-ca9x4.h3
-rw-r--r--arch/arm/mach-vexpress/include/mach/motherboard.h52
-rw-r--r--arch/arm/mach-vexpress/platsmp.c5
-rw-r--r--arch/arm/mach-vexpress/v2m.c68
6 files changed, 97 insertions, 98 deletions
diff --git a/arch/arm/mach-vexpress/core.h b/arch/arm/mach-vexpress/core.h
index f4397159c17..3508f6ef78e 100644
--- a/arch/arm/mach-vexpress/core.h
+++ b/arch/arm/mach-vexpress/core.h
@@ -1,6 +1,3 @@
1#define __MMIO_P2V(x) (((x) & 0xfffff) | (((x) & 0x0f000000) >> 4) | 0xf8000000)
2#define MMIO_P2V(x) ((void __iomem *)__MMIO_P2V(x))
3
4#define AMBA_DEVICE(name,busid,base,plat) \ 1#define AMBA_DEVICE(name,busid,base,plat) \
5struct amba_device name##_device = { \ 2struct amba_device name##_device = { \
6 .dev = { \ 3 .dev = { \
@@ -17,3 +14,9 @@ struct amba_device name##_device = { \
17 .irq = IRQ_##base, \ 14 .irq = IRQ_##base, \
18 /* .dma = DMA_##base,*/ \ 15 /* .dma = DMA_##base,*/ \
19} 16}
17
18/* 2MB large area for motherboard's peripherals static mapping */
19#define V2M_PERIPH 0xf8000000
20
21/* Tile's peripherals static mappings should start here */
22#define V2T_PERIPH 0xf8200000
diff --git a/arch/arm/mach-vexpress/ct-ca9x4.c b/arch/arm/mach-vexpress/ct-ca9x4.c
index b1e87c184e5..a2f7d5d3ca4 100644
--- a/arch/arm/mach-vexpress/ct-ca9x4.c
+++ b/arch/arm/mach-vexpress/ct-ca9x4.c
@@ -30,57 +30,29 @@
30 30
31#include <plat/clcd.h> 31#include <plat/clcd.h>
32 32
33#define V2M_PA_CS7 0x10000000
34
35static struct map_desc ct_ca9x4_io_desc[] __initdata = { 33static struct map_desc ct_ca9x4_io_desc[] __initdata = {
36 { 34 {
37 .virtual = __MMIO_P2V(CT_CA9X4_MPIC), 35 .virtual = V2T_PERIPH,
38 .pfn = __phys_to_pfn(CT_CA9X4_MPIC), 36 .pfn = __phys_to_pfn(CT_CA9X4_MPIC),
39 .length = SZ_16K, 37 .length = SZ_8K,
40 .type = MT_DEVICE, 38 .type = MT_DEVICE,
41 }, {
42 .virtual = __MMIO_P2V(CT_CA9X4_SP804_TIMER),
43 .pfn = __phys_to_pfn(CT_CA9X4_SP804_TIMER),
44 .length = SZ_4K,
45 .type = MT_DEVICE,
46 }, {
47 .virtual = __MMIO_P2V(CT_CA9X4_L2CC),
48 .pfn = __phys_to_pfn(CT_CA9X4_L2CC),
49 .length = SZ_4K,
50 .type = MT_DEVICE,
51 }, 39 },
52}; 40};
53 41
54static void __init ct_ca9x4_map_io(void) 42static void __init ct_ca9x4_map_io(void)
55{ 43{
44 iotable_init(ct_ca9x4_io_desc, ARRAY_SIZE(ct_ca9x4_io_desc));
56#ifdef CONFIG_LOCAL_TIMERS 45#ifdef CONFIG_LOCAL_TIMERS
57 twd_base = MMIO_P2V(A9_MPCORE_TWD); 46 twd_base = ioremap(A9_MPCORE_TWD, SZ_32);
58#endif 47#endif
59 iotable_init(ct_ca9x4_io_desc, ARRAY_SIZE(ct_ca9x4_io_desc));
60} 48}
61 49
62static void __init ct_ca9x4_init_irq(void) 50static void __init ct_ca9x4_init_irq(void)
63{ 51{
64 gic_init(0, 29, MMIO_P2V(A9_MPCORE_GIC_DIST), 52 gic_init(0, 29, ioremap(A9_MPCORE_GIC_DIST, SZ_4K),
65 MMIO_P2V(A9_MPCORE_GIC_CPU)); 53 ioremap(A9_MPCORE_GIC_CPU, SZ_256));
66}
67
68#if 0
69static void __init ct_ca9x4_timer_init(void)
70{
71 writel(0, MMIO_P2V(CT_CA9X4_TIMER0) + TIMER_CTRL);
72 writel(0, MMIO_P2V(CT_CA9X4_TIMER1) + TIMER_CTRL);
73
74 sp804_clocksource_init(MMIO_P2V(CT_CA9X4_TIMER1), "ct-timer1");
75 sp804_clockevents_init(MMIO_P2V(CT_CA9X4_TIMER0), IRQ_CT_CA9X4_TIMER0,
76 "ct-timer0");
77} 54}
78 55
79static struct sys_timer ct_ca9x4_timer = {
80 .init = ct_ca9x4_timer_init,
81};
82#endif
83
84static void ct_ca9x4_clcd_enable(struct clcd_fb *fb) 56static void ct_ca9x4_clcd_enable(struct clcd_fb *fb)
85{ 57{
86 v2m_cfg_write(SYS_CFG_MUXFPGA | SYS_CFG_SITE_DB1, 0); 58 v2m_cfg_write(SYS_CFG_MUXFPGA | SYS_CFG_SITE_DB1, 0);
@@ -201,7 +173,7 @@ static void __init ct_ca9x4_init(void)
201 int i; 173 int i;
202 174
203#ifdef CONFIG_CACHE_L2X0 175#ifdef CONFIG_CACHE_L2X0
204 void __iomem *l2x0_base = MMIO_P2V(CT_CA9X4_L2CC); 176 void __iomem *l2x0_base = ioremap(CT_CA9X4_L2CC, SZ_4K);
205 177
206 /* set RAM latencies to 1 cycle for this core tile. */ 178 /* set RAM latencies to 1 cycle for this core tile. */
207 writel(0, l2x0_base + L2X0_TAG_LATENCY_CTRL); 179 writel(0, l2x0_base + L2X0_TAG_LATENCY_CTRL);
@@ -217,9 +189,17 @@ static void __init ct_ca9x4_init(void)
217} 189}
218 190
219#ifdef CONFIG_SMP 191#ifdef CONFIG_SMP
192static void *ct_ca9x4_scu_base __initdata;
193
220static void __init ct_ca9x4_init_cpu_map(void) 194static void __init ct_ca9x4_init_cpu_map(void)
221{ 195{
222 int i, ncores = scu_get_core_count(MMIO_P2V(A9_MPCORE_SCU)); 196 int i, ncores;
197
198 ct_ca9x4_scu_base = ioremap(A9_MPCORE_SCU, SZ_128);
199 if (WARN_ON(!ct_ca9x4_scu_base))
200 return;
201
202 ncores = scu_get_core_count(ct_ca9x4_scu_base);
223 203
224 if (ncores > nr_cpu_ids) { 204 if (ncores > nr_cpu_ids) {
225 pr_warn("SMP: %u cores greater than maximum (%u), clipping\n", 205 pr_warn("SMP: %u cores greater than maximum (%u), clipping\n",
@@ -235,7 +215,7 @@ static void __init ct_ca9x4_init_cpu_map(void)
235 215
236static void __init ct_ca9x4_smp_enable(unsigned int max_cpus) 216static void __init ct_ca9x4_smp_enable(unsigned int max_cpus)
237{ 217{
238 scu_enable(MMIO_P2V(A9_MPCORE_SCU)); 218 scu_enable(ct_ca9x4_scu_base);
239} 219}
240#endif 220#endif
241 221
diff --git a/arch/arm/mach-vexpress/include/mach/ct-ca9x4.h b/arch/arm/mach-vexpress/include/mach/ct-ca9x4.h
index a34d3d4faae..2260fde8661 100644
--- a/arch/arm/mach-vexpress/include/mach/ct-ca9x4.h
+++ b/arch/arm/mach-vexpress/include/mach/ct-ca9x4.h
@@ -22,9 +22,6 @@
22#define CT_CA9X4_SYSWDT (0x1e007000) 22#define CT_CA9X4_SYSWDT (0x1e007000)
23#define CT_CA9X4_L2CC (0x1e00a000) 23#define CT_CA9X4_L2CC (0x1e00a000)
24 24
25#define CT_CA9X4_TIMER0 (CT_CA9X4_SP804_TIMER + 0x000)
26#define CT_CA9X4_TIMER1 (CT_CA9X4_SP804_TIMER + 0x020)
27
28#define A9_MPCORE_SCU (CT_CA9X4_MPIC + 0x0000) 25#define A9_MPCORE_SCU (CT_CA9X4_MPIC + 0x0000)
29#define A9_MPCORE_GIC_CPU (CT_CA9X4_MPIC + 0x0100) 26#define A9_MPCORE_GIC_CPU (CT_CA9X4_MPIC + 0x0100)
30#define A9_MPCORE_GIT (CT_CA9X4_MPIC + 0x0200) 27#define A9_MPCORE_GIT (CT_CA9X4_MPIC + 0x0200)
diff --git a/arch/arm/mach-vexpress/include/mach/motherboard.h b/arch/arm/mach-vexpress/include/mach/motherboard.h
index 0a3a3751840..b4c498c1dbe 100644
--- a/arch/arm/mach-vexpress/include/mach/motherboard.h
+++ b/arch/arm/mach-vexpress/include/mach/motherboard.h
@@ -39,33 +39,30 @@
39#define V2M_CF (V2M_PA_CS7 + 0x0001a000) 39#define V2M_CF (V2M_PA_CS7 + 0x0001a000)
40#define V2M_CLCD (V2M_PA_CS7 + 0x0001f000) 40#define V2M_CLCD (V2M_PA_CS7 + 0x0001f000)
41 41
42#define V2M_SYS_ID (V2M_SYSREGS + 0x000) 42/*
43#define V2M_SYS_SW (V2M_SYSREGS + 0x004) 43 * Offsets from SYSREGS base
44#define V2M_SYS_LED (V2M_SYSREGS + 0x008) 44 */
45#define V2M_SYS_100HZ (V2M_SYSREGS + 0x024) 45#define V2M_SYS_ID 0x000
46#define V2M_SYS_FLAGS (V2M_SYSREGS + 0x030) 46#define V2M_SYS_SW 0x004
47#define V2M_SYS_FLAGSSET (V2M_SYSREGS + 0x030) 47#define V2M_SYS_LED 0x008
48#define V2M_SYS_FLAGSCLR (V2M_SYSREGS + 0x034) 48#define V2M_SYS_100HZ 0x024
49#define V2M_SYS_NVFLAGS (V2M_SYSREGS + 0x038) 49#define V2M_SYS_FLAGS 0x030
50#define V2M_SYS_NVFLAGSSET (V2M_SYSREGS + 0x038) 50#define V2M_SYS_FLAGSSET 0x030
51#define V2M_SYS_NVFLAGSCLR (V2M_SYSREGS + 0x03c) 51#define V2M_SYS_FLAGSCLR 0x034
52#define V2M_SYS_MCI (V2M_SYSREGS + 0x048) 52#define V2M_SYS_NVFLAGS 0x038
53#define V2M_SYS_FLASH (V2M_SYSREGS + 0x03c) 53#define V2M_SYS_NVFLAGSSET 0x038
54#define V2M_SYS_CFGSW (V2M_SYSREGS + 0x058) 54#define V2M_SYS_NVFLAGSCLR 0x03c
55#define V2M_SYS_24MHZ (V2M_SYSREGS + 0x05c) 55#define V2M_SYS_MCI 0x048
56#define V2M_SYS_MISC (V2M_SYSREGS + 0x060) 56#define V2M_SYS_FLASH 0x03c
57#define V2M_SYS_DMA (V2M_SYSREGS + 0x064) 57#define V2M_SYS_CFGSW 0x058
58#define V2M_SYS_PROCID0 (V2M_SYSREGS + 0x084) 58#define V2M_SYS_24MHZ 0x05c
59#define V2M_SYS_PROCID1 (V2M_SYSREGS + 0x088) 59#define V2M_SYS_MISC 0x060
60#define V2M_SYS_CFGDATA (V2M_SYSREGS + 0x0a0) 60#define V2M_SYS_DMA 0x064
61#define V2M_SYS_CFGCTRL (V2M_SYSREGS + 0x0a4) 61#define V2M_SYS_PROCID0 0x084
62#define V2M_SYS_CFGSTAT (V2M_SYSREGS + 0x0a8) 62#define V2M_SYS_PROCID1 0x088
63 63#define V2M_SYS_CFGDATA 0x0a0
64#define V2M_TIMER0 (V2M_TIMER01 + 0x000) 64#define V2M_SYS_CFGCTRL 0x0a4
65#define V2M_TIMER1 (V2M_TIMER01 + 0x020) 65#define V2M_SYS_CFGSTAT 0x0a8
66
67#define V2M_TIMER2 (V2M_TIMER23 + 0x000)
68#define V2M_TIMER3 (V2M_TIMER23 + 0x020)
69 66
70 67
71/* 68/*
@@ -117,6 +114,7 @@
117 114
118int v2m_cfg_write(u32 devfn, u32 data); 115int v2m_cfg_write(u32 devfn, u32 data);
119int v2m_cfg_read(u32 devfn, u32 *data); 116int v2m_cfg_read(u32 devfn, u32 *data);
117void v2m_flags_set(u32 data);
120 118
121/* 119/*
122 * Core tile IDs 120 * Core tile IDs
diff --git a/arch/arm/mach-vexpress/platsmp.c b/arch/arm/mach-vexpress/platsmp.c
index 124ffb16909..a1ed6d68597 100644
--- a/arch/arm/mach-vexpress/platsmp.c
+++ b/arch/arm/mach-vexpress/platsmp.c
@@ -14,7 +14,6 @@
14#include <linux/io.h> 14#include <linux/io.h>
15 15
16#include <mach/motherboard.h> 16#include <mach/motherboard.h>
17#define V2M_PA_CS7 0x10000000
18 17
19#include "core.h" 18#include "core.h"
20 19
@@ -43,7 +42,5 @@ void __init platform_smp_prepare_cpus(unsigned int max_cpus)
43 * until it receives a soft interrupt, and then the 42 * until it receives a soft interrupt, and then the
44 * secondary CPU branches to this address. 43 * secondary CPU branches to this address.
45 */ 44 */
46 writel(~0, MMIO_P2V(V2M_SYS_FLAGSCLR)); 45 v2m_flags_set(virt_to_phys(versatile_secondary_startup));
47 writel(virt_to_phys(versatile_secondary_startup),
48 MMIO_P2V(V2M_SYS_FLAGSSET));
49} 46}
diff --git a/arch/arm/mach-vexpress/v2m.c b/arch/arm/mach-vexpress/v2m.c
index b4a28ca0e50..c76f9144898 100644
--- a/arch/arm/mach-vexpress/v2m.c
+++ b/arch/arm/mach-vexpress/v2m.c
@@ -40,29 +40,45 @@
40 40
41static struct map_desc v2m_io_desc[] __initdata = { 41static struct map_desc v2m_io_desc[] __initdata = {
42 { 42 {
43 .virtual = __MMIO_P2V(V2M_PA_CS7), 43 .virtual = V2M_PERIPH,
44 .pfn = __phys_to_pfn(V2M_PA_CS7), 44 .pfn = __phys_to_pfn(V2M_PA_CS7),
45 .length = SZ_128K, 45 .length = SZ_128K,
46 .type = MT_DEVICE, 46 .type = MT_DEVICE,
47 }, 47 },
48}; 48};
49 49
50static void __init v2m_timer_init(void) 50static void __iomem *v2m_sysreg_base;
51
52static void __init v2m_sysctl_init(void __iomem *base)
51{ 53{
52 u32 scctrl; 54 u32 scctrl;
53 55
56 if (WARN_ON(!base))
57 return;
58
54 /* Select 1MHz TIMCLK as the reference clock for SP804 timers */ 59 /* Select 1MHz TIMCLK as the reference clock for SP804 timers */
55 scctrl = readl(MMIO_P2V(V2M_SYSCTL + SCCTRL)); 60 scctrl = readl(base + SCCTRL);
56 scctrl |= SCCTRL_TIMEREN0SEL_TIMCLK; 61 scctrl |= SCCTRL_TIMEREN0SEL_TIMCLK;
57 scctrl |= SCCTRL_TIMEREN1SEL_TIMCLK; 62 scctrl |= SCCTRL_TIMEREN1SEL_TIMCLK;
58 writel(scctrl, MMIO_P2V(V2M_SYSCTL + SCCTRL)); 63 writel(scctrl, base + SCCTRL);
64}
59 65
60 writel(0, MMIO_P2V(V2M_TIMER0) + TIMER_CTRL); 66static void __init v2m_sp804_init(void __iomem *base, unsigned int irq)
61 writel(0, MMIO_P2V(V2M_TIMER1) + TIMER_CTRL); 67{
68 if (WARN_ON(!base || irq == NO_IRQ))
69 return;
70
71 writel(0, base + TIMER_1_BASE + TIMER_CTRL);
72 writel(0, base + TIMER_2_BASE + TIMER_CTRL);
62 73
63 sp804_clocksource_init(MMIO_P2V(V2M_TIMER1), "v2m-timer1"); 74 sp804_clocksource_init(base + TIMER_2_BASE, "v2m-timer1");
64 sp804_clockevents_init(MMIO_P2V(V2M_TIMER0), IRQ_V2M_TIMER0, 75 sp804_clockevents_init(base + TIMER_1_BASE, irq, "v2m-timer0");
65 "v2m-timer0"); 76}
77
78static void __init v2m_timer_init(void)
79{
80 v2m_sysctl_init(ioremap(V2M_SYSCTL, SZ_4K));
81 v2m_sp804_init(ioremap(V2M_TIMER01, SZ_4K), IRQ_V2M_TIMER0);
66} 82}
67 83
68static struct sys_timer v2m_timer = { 84static struct sys_timer v2m_timer = {
@@ -82,14 +98,14 @@ int v2m_cfg_write(u32 devfn, u32 data)
82 devfn |= SYS_CFG_START | SYS_CFG_WRITE; 98 devfn |= SYS_CFG_START | SYS_CFG_WRITE;
83 99
84 spin_lock(&v2m_cfg_lock); 100 spin_lock(&v2m_cfg_lock);
85 val = readl(MMIO_P2V(V2M_SYS_CFGSTAT)); 101 val = readl(v2m_sysreg_base + V2M_SYS_CFGSTAT);
86 writel(val & ~SYS_CFG_COMPLETE, MMIO_P2V(V2M_SYS_CFGSTAT)); 102 writel(val & ~SYS_CFG_COMPLETE, v2m_sysreg_base + V2M_SYS_CFGSTAT);
87 103
88 writel(data, MMIO_P2V(V2M_SYS_CFGDATA)); 104 writel(data, v2m_sysreg_base + V2M_SYS_CFGDATA);
89 writel(devfn, MMIO_P2V(V2M_SYS_CFGCTRL)); 105 writel(devfn, v2m_sysreg_base + V2M_SYS_CFGCTRL);
90 106
91 do { 107 do {
92 val = readl(MMIO_P2V(V2M_SYS_CFGSTAT)); 108 val = readl(v2m_sysreg_base + V2M_SYS_CFGSTAT);
93 } while (val == 0); 109 } while (val == 0);
94 spin_unlock(&v2m_cfg_lock); 110 spin_unlock(&v2m_cfg_lock);
95 111
@@ -103,22 +119,28 @@ int v2m_cfg_read(u32 devfn, u32 *data)
103 devfn |= SYS_CFG_START; 119 devfn |= SYS_CFG_START;
104 120
105 spin_lock(&v2m_cfg_lock); 121 spin_lock(&v2m_cfg_lock);
106 writel(0, MMIO_P2V(V2M_SYS_CFGSTAT)); 122 writel(0, v2m_sysreg_base + V2M_SYS_CFGSTAT);
107 writel(devfn, MMIO_P2V(V2M_SYS_CFGCTRL)); 123 writel(devfn, v2m_sysreg_base + V2M_SYS_CFGCTRL);
108 124
109 mb(); 125 mb();
110 126
111 do { 127 do {
112 cpu_relax(); 128 cpu_relax();
113 val = readl(MMIO_P2V(V2M_SYS_CFGSTAT)); 129 val = readl(v2m_sysreg_base + V2M_SYS_CFGSTAT);
114 } while (val == 0); 130 } while (val == 0);
115 131
116 *data = readl(MMIO_P2V(V2M_SYS_CFGDATA)); 132 *data = readl(v2m_sysreg_base + V2M_SYS_CFGDATA);
117 spin_unlock(&v2m_cfg_lock); 133 spin_unlock(&v2m_cfg_lock);
118 134
119 return !!(val & SYS_CFG_ERR); 135 return !!(val & SYS_CFG_ERR);
120} 136}
121 137
138void __init v2m_flags_set(u32 data)
139{
140 writel(~0, v2m_sysreg_base + V2M_SYS_FLAGSCLR);
141 writel(data, v2m_sysreg_base + V2M_SYS_FLAGSSET);
142}
143
122 144
123static struct resource v2m_pcie_i2c_resource = { 145static struct resource v2m_pcie_i2c_resource = {
124 .start = V2M_SERIAL_BUS_PCI, 146 .start = V2M_SERIAL_BUS_PCI,
@@ -204,7 +226,7 @@ static struct platform_device v2m_usb_device = {
204 226
205static void v2m_flash_set_vpp(struct platform_device *pdev, int on) 227static void v2m_flash_set_vpp(struct platform_device *pdev, int on)
206{ 228{
207 writel(on != 0, MMIO_P2V(V2M_SYS_FLASH)); 229 writel(on != 0, v2m_sysreg_base + V2M_SYS_FLASH);
208} 230}
209 231
210static struct physmap_flash_data v2m_flash_data = { 232static struct physmap_flash_data v2m_flash_data = {
@@ -258,7 +280,7 @@ static struct platform_device v2m_cf_device = {
258 280
259static unsigned int v2m_mmci_status(struct device *dev) 281static unsigned int v2m_mmci_status(struct device *dev)
260{ 282{
261 return readl(MMIO_P2V(V2M_SYS_MCI)) & (1 << 0); 283 return readl(v2m_sysreg_base + V2M_SYS_MCI) & (1 << 0);
262} 284}
263 285
264static struct mmci_platform_data v2m_mmci_data = { 286static struct mmci_platform_data v2m_mmci_data = {
@@ -371,7 +393,7 @@ static void __init v2m_init_early(void)
371{ 393{
372 ct_desc->init_early(); 394 ct_desc->init_early();
373 clkdev_add_table(v2m_lookups, ARRAY_SIZE(v2m_lookups)); 395 clkdev_add_table(v2m_lookups, ARRAY_SIZE(v2m_lookups));
374 versatile_sched_clock_init(MMIO_P2V(V2M_SYS_24MHZ), 24000000); 396 versatile_sched_clock_init(v2m_sysreg_base + V2M_SYS_24MHZ, 24000000);
375} 397}
376 398
377static void v2m_power_off(void) 399static void v2m_power_off(void)
@@ -400,7 +422,8 @@ static void __init v2m_populate_ct_desc(void)
400 u32 current_tile_id; 422 u32 current_tile_id;
401 423
402 ct_desc = NULL; 424 ct_desc = NULL;
403 current_tile_id = readl(MMIO_P2V(V2M_SYS_PROCID0)) & V2M_CT_ID_MASK; 425 current_tile_id = readl(v2m_sysreg_base + V2M_SYS_PROCID0)
426 & V2M_CT_ID_MASK;
404 427
405 for (i = 0; i < ARRAY_SIZE(ct_descs) && !ct_desc; ++i) 428 for (i = 0; i < ARRAY_SIZE(ct_descs) && !ct_desc; ++i)
406 if (ct_descs[i]->id == current_tile_id) 429 if (ct_descs[i]->id == current_tile_id)
@@ -414,6 +437,7 @@ static void __init v2m_populate_ct_desc(void)
414static void __init v2m_map_io(void) 437static void __init v2m_map_io(void)
415{ 438{
416 iotable_init(v2m_io_desc, ARRAY_SIZE(v2m_io_desc)); 439 iotable_init(v2m_io_desc, ARRAY_SIZE(v2m_io_desc));
440 v2m_sysreg_base = ioremap(V2M_SYSREGS, SZ_4K);
417 v2m_populate_ct_desc(); 441 v2m_populate_ct_desc();
418 ct_desc->map_io(); 442 ct_desc->map_io();
419} 443}