aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-shmobile/setup-r8a7778.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-09-06 16:21:16 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-09-06 16:21:16 -0400
commit8e73e367f7dc50f1d1bc22a63e5764bb4eea9b48 (patch)
tree9bf593c1fc7612bcdd64b9ba46e41d340f9e94d3 /arch/arm/mach-shmobile/setup-r8a7778.c
parentd2f3e9eb7c9e12e89f0ac5f0dbc7a9aed0ea925d (diff)
parent7323f219533e01cc075ba45a76f3e5b214adb23f (diff)
Merge tag 'cleanup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC cleanups from Olof Johansson: "This branch contains code cleanups, moves and removals for 3.12. There's a large number of various cleanups, and a nice net removal of 13500 lines of code. Highlights worth mentioning are: - A series of patches from Stephen Boyd removing the ARM local timer API. - Move of Qualcomm MSM IOMMU code to drivers/iommu. - Samsung PWM driver cleanups from Tomasz Figa, removing legacy PWM driver and switching over to the drivers/pwm one. - Removal of some unusued auto-generated headers for OMAP2+ (PRM/CM). There's also a move of a header file out of include/linux/i2c/ to platform_data, where it really belongs. It touches mostly ARM platform code for include changes so we took it through our tree" * tag 'cleanup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (83 commits) ARM: OMAP2+: Add back the define for AM33XX_RST_GLOBAL_WARM_SW_MASK gpio: (gpio-pca953x) move header to linux/platform_data/ arm: zynq: hotplug: Remove unreachable code ARM: SAMSUNG: Remove unnecessary exynos4_default_sdhci*() tegra: simplify use of devm_ioremap_resource ARM: SAMSUNG: Remove plat/regs-timer.h header ARM: SAMSUNG: Remove remaining uses of plat/regs-timer.h header ARM: SAMSUNG: Remove pwm-clock infrastructure ARM: SAMSUNG: Remove old PWM timer platform devices pwm: Remove superseded pwm-samsung-legacy driver ARM: SAMSUNG: Modify board files to use new PWM platform device ARM: SAMSUNG: Rework private data handling in dev-backlight pwm: Add new pwm-samsung driver ARM: mach-mvebu: remove redundant DT parsing and validation ARM: msm: Only compile io.c on platforms that use it iommu/msm: Move mach includes to iommu directory ARM: msm: Remove devices-iommu.c ARM: msm: Move mach/board.h contents to common.h ARM: msm: Migrate msm_timer to CLOCKSOURCE_OF_DECLARE ARM: msm: Remove TMR and TMR0 static mappings ...
Diffstat (limited to 'arch/arm/mach-shmobile/setup-r8a7778.c')
-rw-r--r--arch/arm/mach-shmobile/setup-r8a7778.c72
1 files changed, 21 insertions, 51 deletions
diff --git a/arch/arm/mach-shmobile/setup-r8a7778.c b/arch/arm/mach-shmobile/setup-r8a7778.c
index 0174f059eac3..203becfc6e31 100644
--- a/arch/arm/mach-shmobile/setup-r8a7778.c
+++ b/arch/arm/mach-shmobile/setup-r8a7778.c
@@ -53,7 +53,7 @@
53 .irqs = SCIx_IRQ_MUXED(irq), \ 53 .irqs = SCIx_IRQ_MUXED(irq), \
54} 54}
55 55
56static struct plat_sci_port scif_platform_data[] = { 56static struct plat_sci_port scif_platform_data[] __initdata = {
57 SCIF_INFO(0xffe40000, gic_iid(0x66)), 57 SCIF_INFO(0xffe40000, gic_iid(0x66)),
58 SCIF_INFO(0xffe41000, gic_iid(0x67)), 58 SCIF_INFO(0xffe41000, gic_iid(0x67)),
59 SCIF_INFO(0xffe42000, gic_iid(0x68)), 59 SCIF_INFO(0xffe42000, gic_iid(0x68)),
@@ -63,24 +63,24 @@ static struct plat_sci_port scif_platform_data[] = {
63}; 63};
64 64
65/* TMU */ 65/* TMU */
66static struct resource sh_tmu0_resources[] = { 66static struct resource sh_tmu0_resources[] __initdata = {
67 DEFINE_RES_MEM(0xffd80008, 12), 67 DEFINE_RES_MEM(0xffd80008, 12),
68 DEFINE_RES_IRQ(gic_iid(0x40)), 68 DEFINE_RES_IRQ(gic_iid(0x40)),
69}; 69};
70 70
71static struct sh_timer_config sh_tmu0_platform_data = { 71static struct sh_timer_config sh_tmu0_platform_data __initdata = {
72 .name = "TMU00", 72 .name = "TMU00",
73 .channel_offset = 0x4, 73 .channel_offset = 0x4,
74 .timer_bit = 0, 74 .timer_bit = 0,
75 .clockevent_rating = 200, 75 .clockevent_rating = 200,
76}; 76};
77 77
78static struct resource sh_tmu1_resources[] = { 78static struct resource sh_tmu1_resources[] __initdata = {
79 DEFINE_RES_MEM(0xffd80014, 12), 79 DEFINE_RES_MEM(0xffd80014, 12),
80 DEFINE_RES_IRQ(gic_iid(0x41)), 80 DEFINE_RES_IRQ(gic_iid(0x41)),
81}; 81};
82 82
83static struct sh_timer_config sh_tmu1_platform_data = { 83static struct sh_timer_config sh_tmu1_platform_data __initdata = {
84 .name = "TMU01", 84 .name = "TMU01",
85 .channel_offset = 0x10, 85 .channel_offset = 0x10,
86 .timer_bit = 1, 86 .timer_bit = 1,
@@ -189,7 +189,7 @@ USB_PLATFORM_INFO(ehci);
189USB_PLATFORM_INFO(ohci); 189USB_PLATFORM_INFO(ohci);
190 190
191/* Ether */ 191/* Ether */
192static struct resource ether_resources[] = { 192static struct resource ether_resources[] __initdata = {
193 DEFINE_RES_MEM(0xfde00000, 0x400), 193 DEFINE_RES_MEM(0xfde00000, 0x400),
194 DEFINE_RES_IRQ(gic_iid(0x89)), 194 DEFINE_RES_IRQ(gic_iid(0x89)),
195}; 195};
@@ -203,17 +203,17 @@ void __init r8a7778_add_ether_device(struct sh_eth_plat_data *pdata)
203} 203}
204 204
205/* PFC/GPIO */ 205/* PFC/GPIO */
206static struct resource pfc_resources[] = { 206static struct resource pfc_resources[] __initdata = {
207 DEFINE_RES_MEM(0xfffc0000, 0x118), 207 DEFINE_RES_MEM(0xfffc0000, 0x118),
208}; 208};
209 209
210#define R8A7778_GPIO(idx) \ 210#define R8A7778_GPIO(idx) \
211static struct resource r8a7778_gpio##idx##_resources[] = { \ 211static struct resource r8a7778_gpio##idx##_resources[] __initdata = { \
212 DEFINE_RES_MEM(0xffc40000 + 0x1000 * (idx), 0x30), \ 212 DEFINE_RES_MEM(0xffc40000 + 0x1000 * (idx), 0x30), \
213 DEFINE_RES_IRQ(gic_iid(0x87)), \ 213 DEFINE_RES_IRQ(gic_iid(0x87)), \
214}; \ 214}; \
215 \ 215 \
216static struct gpio_rcar_config r8a7778_gpio##idx##_platform_data = { \ 216static struct gpio_rcar_config r8a7778_gpio##idx##_platform_data __initdata = { \
217 .gpio_base = 32 * (idx), \ 217 .gpio_base = 32 * (idx), \
218 .irq_base = GPIO_IRQ_BASE(idx), \ 218 .irq_base = GPIO_IRQ_BASE(idx), \
219 .number_of_pins = 32, \ 219 .number_of_pins = 32, \
@@ -249,7 +249,7 @@ void __init r8a7778_pinmux_init(void)
249}; 249};
250 250
251/* SDHI */ 251/* SDHI */
252static struct resource sdhi_resources[] = { 252static struct resource sdhi_resources[] __initdata = {
253 /* SDHI0 */ 253 /* SDHI0 */
254 DEFINE_RES_MEM(0xFFE4C000, 0x100), 254 DEFINE_RES_MEM(0xFFE4C000, 0x100),
255 DEFINE_RES_IRQ(gic_iid(0x77)), 255 DEFINE_RES_IRQ(gic_iid(0x77)),
@@ -399,12 +399,12 @@ void __init r8a7778_init_late(void)
399 platform_device_register_full(&ohci_info); 399 platform_device_register_full(&ohci_info);
400} 400}
401 401
402static struct renesas_intc_irqpin_config irqpin_platform_data = { 402static struct renesas_intc_irqpin_config irqpin_platform_data __initdata = {
403 .irq_base = irq_pin(0), /* IRQ0 -> IRQ3 */ 403 .irq_base = irq_pin(0), /* IRQ0 -> IRQ3 */
404 .sense_bitfield_width = 2, 404 .sense_bitfield_width = 2,
405}; 405};
406 406
407static struct resource irqpin_resources[] = { 407static struct resource irqpin_resources[] __initdata = {
408 DEFINE_RES_MEM(0xfe78001c, 4), /* ICR1 */ 408 DEFINE_RES_MEM(0xfe78001c, 4), /* ICR1 */
409 DEFINE_RES_MEM(0xfe780010, 4), /* INTPRI */ 409 DEFINE_RES_MEM(0xfe780010, 4), /* INTPRI */
410 DEFINE_RES_MEM(0xfe780024, 4), /* INTREQ */ 410 DEFINE_RES_MEM(0xfe780024, 4), /* INTREQ */
@@ -442,17 +442,25 @@ void __init r8a7778_init_irq_extpin(int irlm)
442 &irqpin_platform_data, sizeof(irqpin_platform_data)); 442 &irqpin_platform_data, sizeof(irqpin_platform_data));
443} 443}
444 444
445void __init r8a7778_init_delay(void)
446{
447 shmobile_setup_delay(800, 1, 3); /* Cortex-A9 @ 800MHz */
448}
449
450#ifdef CONFIG_USE_OF
445#define INT2SMSKCR0 0x82288 /* 0xfe782288 */ 451#define INT2SMSKCR0 0x82288 /* 0xfe782288 */
446#define INT2SMSKCR1 0x8228c /* 0xfe78228c */ 452#define INT2SMSKCR1 0x8228c /* 0xfe78228c */
447 453
448#define INT2NTSR0 0x00018 /* 0xfe700018 */ 454#define INT2NTSR0 0x00018 /* 0xfe700018 */
449#define INT2NTSR1 0x0002c /* 0xfe70002c */ 455#define INT2NTSR1 0x0002c /* 0xfe70002c */
450static void __init r8a7778_init_irq_common(void) 456void __init r8a7778_init_irq_dt(void)
451{ 457{
452 void __iomem *base = ioremap_nocache(0xfe700000, 0x00100000); 458 void __iomem *base = ioremap_nocache(0xfe700000, 0x00100000);
453 459
454 BUG_ON(!base); 460 BUG_ON(!base);
455 461
462 irqchip_init();
463
456 /* route all interrupts to ARM */ 464 /* route all interrupts to ARM */
457 __raw_writel(0x73ffffff, base + INT2NTSR0); 465 __raw_writel(0x73ffffff, base + INT2NTSR0);
458 __raw_writel(0xffffffff, base + INT2NTSR1); 466 __raw_writel(0xffffffff, base + INT2NTSR1);
@@ -464,43 +472,6 @@ static void __init r8a7778_init_irq_common(void)
464 iounmap(base); 472 iounmap(base);
465} 473}
466 474
467void __init r8a7778_init_irq(void)
468{
469 void __iomem *gic_dist_base;
470 void __iomem *gic_cpu_base;
471
472 gic_dist_base = ioremap_nocache(0xfe438000, PAGE_SIZE);
473 gic_cpu_base = ioremap_nocache(0xfe430000, PAGE_SIZE);
474 BUG_ON(!gic_dist_base || !gic_cpu_base);
475
476 /* use GIC to handle interrupts */
477 gic_init(0, 29, gic_dist_base, gic_cpu_base);
478
479 r8a7778_init_irq_common();
480}
481
482void __init r8a7778_init_delay(void)
483{
484 shmobile_setup_delay(800, 1, 3); /* Cortex-A9 @ 800MHz */
485}
486
487#ifdef CONFIG_USE_OF
488void __init r8a7778_init_irq_dt(void)
489{
490 irqchip_init();
491 r8a7778_init_irq_common();
492}
493
494static const struct of_dev_auxdata r8a7778_auxdata_lookup[] __initconst = {
495 {},
496};
497
498void __init r8a7778_add_standard_devices_dt(void)
499{
500 of_platform_populate(NULL, of_default_bus_match_table,
501 r8a7778_auxdata_lookup, NULL);
502}
503
504static const char *r8a7778_compat_dt[] __initdata = { 475static const char *r8a7778_compat_dt[] __initdata = {
505 "renesas,r8a7778", 476 "renesas,r8a7778",
506 NULL, 477 NULL,
@@ -509,7 +480,6 @@ static const char *r8a7778_compat_dt[] __initdata = {
509DT_MACHINE_START(R8A7778_DT, "Generic R8A7778 (Flattened Device Tree)") 480DT_MACHINE_START(R8A7778_DT, "Generic R8A7778 (Flattened Device Tree)")
510 .init_early = r8a7778_init_delay, 481 .init_early = r8a7778_init_delay,
511 .init_irq = r8a7778_init_irq_dt, 482 .init_irq = r8a7778_init_irq_dt,
512 .init_machine = r8a7778_add_standard_devices_dt,
513 .init_time = shmobile_timer_init, 483 .init_time = shmobile_timer_init,
514 .dt_compat = r8a7778_compat_dt, 484 .dt_compat = r8a7778_compat_dt,
515 .init_late = r8a7778_init_late, 485 .init_late = r8a7778_init_late,