diff options
Diffstat (limited to 'arch/arm/mach-exynos4/cpu.c')
-rw-r--r-- | arch/arm/mach-exynos4/cpu.c | 39 |
1 files changed, 29 insertions, 10 deletions
diff --git a/arch/arm/mach-exynos4/cpu.c b/arch/arm/mach-exynos4/cpu.c index bfd621460abf..2d8a40c9e6e5 100644 --- a/arch/arm/mach-exynos4/cpu.c +++ b/arch/arm/mach-exynos4/cpu.c | |||
@@ -16,12 +16,16 @@ | |||
16 | 16 | ||
17 | #include <asm/proc-fns.h> | 17 | #include <asm/proc-fns.h> |
18 | #include <asm/hardware/cache-l2x0.h> | 18 | #include <asm/hardware/cache-l2x0.h> |
19 | #include <asm/hardware/gic.h> | ||
19 | 20 | ||
20 | #include <plat/cpu.h> | 21 | #include <plat/cpu.h> |
21 | #include <plat/clock.h> | 22 | #include <plat/clock.h> |
23 | #include <plat/devs.h> | ||
22 | #include <plat/exynos4.h> | 24 | #include <plat/exynos4.h> |
25 | #include <plat/adc-core.h> | ||
23 | #include <plat/sdhci.h> | 26 | #include <plat/sdhci.h> |
24 | #include <plat/devs.h> | 27 | #include <plat/devs.h> |
28 | #include <plat/fb-core.h> | ||
25 | #include <plat/fimc-core.h> | 29 | #include <plat/fimc-core.h> |
26 | #include <plat/iic-core.h> | 30 | #include <plat/iic-core.h> |
27 | 31 | ||
@@ -103,7 +107,17 @@ static struct map_desc exynos4_iodesc[] __initdata = { | |||
103 | .pfn = __phys_to_pfn(EXYNOS4_PA_HSPHY), | 107 | .pfn = __phys_to_pfn(EXYNOS4_PA_HSPHY), |
104 | .length = SZ_4K, | 108 | .length = SZ_4K, |
105 | .type = MT_DEVICE, | 109 | .type = MT_DEVICE, |
106 | } | 110 | }, { |
111 | .virtual = (unsigned long)S5P_VA_GIC_CPU, | ||
112 | .pfn = __phys_to_pfn(EXYNOS4_PA_GIC_CPU), | ||
113 | .length = SZ_64K, | ||
114 | .type = MT_DEVICE, | ||
115 | }, { | ||
116 | .virtual = (unsigned long)S5P_VA_GIC_DIST, | ||
117 | .pfn = __phys_to_pfn(EXYNOS4_PA_GIC_DIST), | ||
118 | .length = SZ_64K, | ||
119 | .type = MT_DEVICE, | ||
120 | }, | ||
107 | }; | 121 | }; |
108 | 122 | ||
109 | static void exynos4_idle(void) | 123 | static void exynos4_idle(void) |
@@ -129,6 +143,8 @@ void __init exynos4_map_io(void) | |||
129 | exynos4_default_sdhci2(); | 143 | exynos4_default_sdhci2(); |
130 | exynos4_default_sdhci3(); | 144 | exynos4_default_sdhci3(); |
131 | 145 | ||
146 | s3c_adc_setname("samsung-adc-v3"); | ||
147 | |||
132 | s3c_fimc_setname(0, "exynos4-fimc"); | 148 | s3c_fimc_setname(0, "exynos4-fimc"); |
133 | s3c_fimc_setname(1, "exynos4-fimc"); | 149 | s3c_fimc_setname(1, "exynos4-fimc"); |
134 | s3c_fimc_setname(2, "exynos4-fimc"); | 150 | s3c_fimc_setname(2, "exynos4-fimc"); |
@@ -138,6 +154,8 @@ void __init exynos4_map_io(void) | |||
138 | s3c_i2c0_setname("s3c2440-i2c"); | 154 | s3c_i2c0_setname("s3c2440-i2c"); |
139 | s3c_i2c1_setname("s3c2440-i2c"); | 155 | s3c_i2c1_setname("s3c2440-i2c"); |
140 | s3c_i2c2_setname("s3c2440-i2c"); | 156 | s3c_i2c2_setname("s3c2440-i2c"); |
157 | |||
158 | s5p_fb_setname(0, "exynos4-fb"); | ||
141 | } | 159 | } |
142 | 160 | ||
143 | void __init exynos4_init_clocks(int xtal) | 161 | void __init exynos4_init_clocks(int xtal) |
@@ -150,22 +168,23 @@ void __init exynos4_init_clocks(int xtal) | |||
150 | exynos4_setup_clocks(); | 168 | exynos4_setup_clocks(); |
151 | } | 169 | } |
152 | 170 | ||
171 | static void exynos4_gic_irq_eoi(struct irq_data *d) | ||
172 | { | ||
173 | struct gic_chip_data *gic_data = irq_data_get_irq_chip_data(d); | ||
174 | |||
175 | gic_data->cpu_base = S5P_VA_GIC_CPU + | ||
176 | (EXYNOS4_GIC_BANK_OFFSET * smp_processor_id()); | ||
177 | } | ||
178 | |||
153 | void __init exynos4_init_irq(void) | 179 | void __init exynos4_init_irq(void) |
154 | { | 180 | { |
155 | int irq; | 181 | int irq; |
156 | 182 | ||
157 | gic_init(0, IRQ_LOCALTIMER, S5P_VA_GIC_DIST, S5P_VA_GIC_CPU); | 183 | gic_init(0, IRQ_SPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU); |
184 | gic_arch_extn.irq_eoi = exynos4_gic_irq_eoi; | ||
158 | 185 | ||
159 | for (irq = 0; irq < MAX_COMBINER_NR; irq++) { | 186 | for (irq = 0; irq < MAX_COMBINER_NR; irq++) { |
160 | 187 | ||
161 | /* | ||
162 | * From SPI(0) to SPI(39) and SPI(51), SPI(53) are | ||
163 | * connected to the interrupt combiner. These irqs | ||
164 | * should be initialized to support cascade interrupt. | ||
165 | */ | ||
166 | if ((irq >= 40) && !(irq == 51) && !(irq == 53)) | ||
167 | continue; | ||
168 | |||
169 | combiner_init(irq, (void __iomem *)S5P_VA_COMBINER(irq), | 188 | combiner_init(irq, (void __iomem *)S5P_VA_COMBINER(irq), |
170 | COMBINER_IRQ(irq, 0)); | 189 | COMBINER_IRQ(irq, 0)); |
171 | combiner_cascade_irq(irq, IRQ_SPI(irq)); | 190 | combiner_cascade_irq(irq, IRQ_SPI(irq)); |