diff options
Diffstat (limited to 'arch/arm/mach-shmobile')
42 files changed, 494 insertions, 417 deletions
diff --git a/arch/arm/mach-shmobile/board-ag5evm.c b/arch/arm/mach-shmobile/board-ag5evm.c index d82c010fdfc6..25eb88a923e6 100644 --- a/arch/arm/mach-shmobile/board-ag5evm.c +++ b/arch/arm/mach-shmobile/board-ag5evm.c | |||
@@ -40,7 +40,6 @@ | |||
40 | #include <linux/mmc/sh_mobile_sdhi.h> | 40 | #include <linux/mmc/sh_mobile_sdhi.h> |
41 | #include <linux/mfd/tmio.h> | 41 | #include <linux/mfd/tmio.h> |
42 | #include <linux/sh_clk.h> | 42 | #include <linux/sh_clk.h> |
43 | #include <linux/videodev2.h> | ||
44 | #include <video/sh_mobile_lcdc.h> | 43 | #include <video/sh_mobile_lcdc.h> |
45 | #include <video/sh_mipi_dsi.h> | 44 | #include <video/sh_mipi_dsi.h> |
46 | #include <sound/sh_fsi.h> | 45 | #include <sound/sh_fsi.h> |
@@ -650,6 +649,7 @@ static void __init ag5evm_init(void) | |||
650 | } | 649 | } |
651 | 650 | ||
652 | MACHINE_START(AG5EVM, "ag5evm") | 651 | MACHINE_START(AG5EVM, "ag5evm") |
652 | .smp = smp_ops(sh73a0_smp_ops), | ||
653 | .map_io = sh73a0_map_io, | 653 | .map_io = sh73a0_map_io, |
654 | .init_early = sh73a0_add_early_devices, | 654 | .init_early = sh73a0_add_early_devices, |
655 | .nr_irqs = NR_IRQS_LEGACY, | 655 | .nr_irqs = NR_IRQS_LEGACY, |
diff --git a/arch/arm/mach-shmobile/board-ap4evb.c b/arch/arm/mach-shmobile/board-ap4evb.c index f172ca85905c..bc3b5da59e25 100644 --- a/arch/arm/mach-shmobile/board-ap4evb.c +++ b/arch/arm/mach-shmobile/board-ap4evb.c | |||
@@ -66,6 +66,8 @@ | |||
66 | #include <asm/mach/arch.h> | 66 | #include <asm/mach/arch.h> |
67 | #include <asm/setup.h> | 67 | #include <asm/setup.h> |
68 | 68 | ||
69 | #include "sh-gpio.h" | ||
70 | |||
69 | /* | 71 | /* |
70 | * Address Interface BusWidth note | 72 | * Address Interface BusWidth note |
71 | * ------------------------------------------------------------------ | 73 | * ------------------------------------------------------------------ |
@@ -432,7 +434,7 @@ static void usb1_host_port_power(int port, int power) | |||
432 | return; | 434 | return; |
433 | 435 | ||
434 | /* set VBOUT/PWEN and EXTLP1 in DVSTCTR */ | 436 | /* set VBOUT/PWEN and EXTLP1 in DVSTCTR */ |
435 | __raw_writew(__raw_readw(0xE68B0008) | 0x600, 0xE68B0008); | 437 | __raw_writew(__raw_readw(IOMEM(0xE68B0008)) | 0x600, IOMEM(0xE68B0008)); |
436 | } | 438 | } |
437 | 439 | ||
438 | static struct r8a66597_platdata usb1_host_data = { | 440 | static struct r8a66597_platdata usb1_host_data = { |
@@ -1224,9 +1226,9 @@ static struct i2c_board_info i2c1_devices[] = { | |||
1224 | }; | 1226 | }; |
1225 | 1227 | ||
1226 | 1228 | ||
1227 | #define GPIO_PORT9CR 0xE6051009 | 1229 | #define GPIO_PORT9CR IOMEM(0xE6051009) |
1228 | #define GPIO_PORT10CR 0xE605100A | 1230 | #define GPIO_PORT10CR IOMEM(0xE605100A) |
1229 | #define USCCR1 0xE6058144 | 1231 | #define USCCR1 IOMEM(0xE6058144) |
1230 | static void __init ap4evb_init(void) | 1232 | static void __init ap4evb_init(void) |
1231 | { | 1233 | { |
1232 | u32 srcr4; | 1234 | u32 srcr4; |
@@ -1304,7 +1306,7 @@ static void __init ap4evb_init(void) | |||
1304 | gpio_request(GPIO_FN_OVCN2_1, NULL); | 1306 | gpio_request(GPIO_FN_OVCN2_1, NULL); |
1305 | 1307 | ||
1306 | /* setup USB phy */ | 1308 | /* setup USB phy */ |
1307 | __raw_writew(0x8a0a, 0xE6058130); /* USBCR4 */ | 1309 | __raw_writew(0x8a0a, IOMEM(0xE6058130)); /* USBCR4 */ |
1308 | 1310 | ||
1309 | /* enable FSI2 port A (ak4643) */ | 1311 | /* enable FSI2 port A (ak4643) */ |
1310 | gpio_request(GPIO_FN_FSIAIBT, NULL); | 1312 | gpio_request(GPIO_FN_FSIAIBT, NULL); |
@@ -1453,7 +1455,7 @@ static void __init ap4evb_init(void) | |||
1453 | gpio_request(GPIO_FN_HDMI_CEC, NULL); | 1455 | gpio_request(GPIO_FN_HDMI_CEC, NULL); |
1454 | 1456 | ||
1455 | /* Reset HDMI, must be held at least one EXTALR (32768Hz) period */ | 1457 | /* Reset HDMI, must be held at least one EXTALR (32768Hz) period */ |
1456 | #define SRCR4 0xe61580bc | 1458 | #define SRCR4 IOMEM(0xe61580bc) |
1457 | srcr4 = __raw_readl(SRCR4); | 1459 | srcr4 = __raw_readl(SRCR4); |
1458 | __raw_writel(srcr4 | (1 << 13), SRCR4); | 1460 | __raw_writel(srcr4 | (1 << 13), SRCR4); |
1459 | udelay(50); | 1461 | udelay(50); |
diff --git a/arch/arm/mach-shmobile/board-armadillo800eva.c b/arch/arm/mach-shmobile/board-armadillo800eva.c index 453a6e50db8b..206c3227f83d 100644 --- a/arch/arm/mach-shmobile/board-armadillo800eva.c +++ b/arch/arm/mach-shmobile/board-armadillo800eva.c | |||
@@ -54,6 +54,8 @@ | |||
54 | #include <sound/sh_fsi.h> | 54 | #include <sound/sh_fsi.h> |
55 | #include <sound/simple_card.h> | 55 | #include <sound/simple_card.h> |
56 | 56 | ||
57 | #include "sh-gpio.h" | ||
58 | |||
57 | /* | 59 | /* |
58 | * CON1 Camera Module | 60 | * CON1 Camera Module |
59 | * CON2 Extension Bus | 61 | * CON2 Extension Bus |
@@ -135,7 +137,7 @@ | |||
135 | * usbhsf_power_ctrl() | 137 | * usbhsf_power_ctrl() |
136 | */ | 138 | */ |
137 | #define IRQ7 evt2irq(0x02e0) | 139 | #define IRQ7 evt2irq(0x02e0) |
138 | #define USBCR1 0xe605810a | 140 | #define USBCR1 IOMEM(0xe605810a) |
139 | #define USBH 0xC6700000 | 141 | #define USBH 0xC6700000 |
140 | #define USBH_USBCTR 0x10834 | 142 | #define USBH_USBCTR 0x10834 |
141 | 143 | ||
@@ -950,8 +952,8 @@ clock_error: | |||
950 | /* | 952 | /* |
951 | * board init | 953 | * board init |
952 | */ | 954 | */ |
953 | #define GPIO_PORT7CR 0xe6050007 | 955 | #define GPIO_PORT7CR IOMEM(0xe6050007) |
954 | #define GPIO_PORT8CR 0xe6050008 | 956 | #define GPIO_PORT8CR IOMEM(0xe6050008) |
955 | static void __init eva_init(void) | 957 | static void __init eva_init(void) |
956 | { | 958 | { |
957 | struct platform_device *usb = NULL; | 959 | struct platform_device *usb = NULL; |
diff --git a/arch/arm/mach-shmobile/board-bonito.c b/arch/arm/mach-shmobile/board-bonito.c index 4129008eae29..cb8c994e1430 100644 --- a/arch/arm/mach-shmobile/board-bonito.c +++ b/arch/arm/mach-shmobile/board-bonito.c | |||
@@ -108,12 +108,12 @@ static struct regulator_consumer_supply dummy_supplies[] = { | |||
108 | #define FPGA_ETH_IRQ (FPGA_IRQ0 + 15) | 108 | #define FPGA_ETH_IRQ (FPGA_IRQ0 + 15) |
109 | static u16 bonito_fpga_read(u32 offset) | 109 | static u16 bonito_fpga_read(u32 offset) |
110 | { | 110 | { |
111 | return __raw_readw(0xf0003000 + offset); | 111 | return __raw_readw(IOMEM(0xf0003000) + offset); |
112 | } | 112 | } |
113 | 113 | ||
114 | static void bonito_fpga_write(u32 offset, u16 val) | 114 | static void bonito_fpga_write(u32 offset, u16 val) |
115 | { | 115 | { |
116 | __raw_writew(val, 0xf0003000 + offset); | 116 | __raw_writew(val, IOMEM(0xf0003000) + offset); |
117 | } | 117 | } |
118 | 118 | ||
119 | static void bonito_fpga_irq_disable(struct irq_data *data) | 119 | static void bonito_fpga_irq_disable(struct irq_data *data) |
@@ -361,8 +361,8 @@ static void __init bonito_map_io(void) | |||
361 | #define BIT_ON(sw, bit) (sw & (1 << bit)) | 361 | #define BIT_ON(sw, bit) (sw & (1 << bit)) |
362 | #define BIT_OFF(sw, bit) (!(sw & (1 << bit))) | 362 | #define BIT_OFF(sw, bit) (!(sw & (1 << bit))) |
363 | 363 | ||
364 | #define VCCQ1CR 0xE6058140 | 364 | #define VCCQ1CR IOMEM(0xE6058140) |
365 | #define VCCQ1LCDCR 0xE6058186 | 365 | #define VCCQ1LCDCR IOMEM(0xE6058186) |
366 | 366 | ||
367 | static void __init bonito_init(void) | 367 | static void __init bonito_init(void) |
368 | { | 368 | { |
diff --git a/arch/arm/mach-shmobile/board-g3evm.c b/arch/arm/mach-shmobile/board-g3evm.c index 796fa00ad3c4..b179d4c213bb 100644 --- a/arch/arm/mach-shmobile/board-g3evm.c +++ b/arch/arm/mach-shmobile/board-g3evm.c | |||
@@ -106,7 +106,7 @@ static void usb_host_port_power(int port, int power) | |||
106 | return; | 106 | return; |
107 | 107 | ||
108 | /* set VBOUT/PWEN and EXTLP0 in DVSTCTR */ | 108 | /* set VBOUT/PWEN and EXTLP0 in DVSTCTR */ |
109 | __raw_writew(__raw_readw(0xe6890008) | 0x600, 0xe6890008); | 109 | __raw_writew(__raw_readw(IOMEM(0xe6890008)) | 0x600, IOMEM(0xe6890008)); |
110 | } | 110 | } |
111 | 111 | ||
112 | static struct r8a66597_platdata usb_host_data = { | 112 | static struct r8a66597_platdata usb_host_data = { |
@@ -279,10 +279,10 @@ static void __init g3evm_init(void) | |||
279 | gpio_request(GPIO_FN_IDIN, NULL); | 279 | gpio_request(GPIO_FN_IDIN, NULL); |
280 | 280 | ||
281 | /* setup USB phy */ | 281 | /* setup USB phy */ |
282 | __raw_writew(0x0300, 0xe605810a); /* USBCR1 */ | 282 | __raw_writew(0x0300, IOMEM(0xe605810a)); /* USBCR1 */ |
283 | __raw_writew(0x00e0, 0xe60581c0); /* CPFCH */ | 283 | __raw_writew(0x00e0, IOMEM(0xe60581c0)); /* CPFCH */ |
284 | __raw_writew(0x6010, 0xe60581c6); /* CGPOSR */ | 284 | __raw_writew(0x6010, IOMEM(0xe60581c6)); /* CGPOSR */ |
285 | __raw_writew(0x8a0a, 0xe605810c); /* USBCR2 */ | 285 | __raw_writew(0x8a0a, IOMEM(0xe605810c)); /* USBCR2 */ |
286 | 286 | ||
287 | /* KEYSC @ CN7 */ | 287 | /* KEYSC @ CN7 */ |
288 | gpio_request(GPIO_FN_PORT42_KEYOUT0, NULL); | 288 | gpio_request(GPIO_FN_PORT42_KEYOUT0, NULL); |
@@ -320,7 +320,7 @@ static void __init g3evm_init(void) | |||
320 | gpio_request(GPIO_FN_WE0_XWR0_FWE, NULL); | 320 | gpio_request(GPIO_FN_WE0_XWR0_FWE, NULL); |
321 | gpio_request(GPIO_FN_FRB, NULL); | 321 | gpio_request(GPIO_FN_FRB, NULL); |
322 | /* FOE, FCDE, FSC on dedicated pins */ | 322 | /* FOE, FCDE, FSC on dedicated pins */ |
323 | __raw_writel(__raw_readl(0xe6158048) & ~(1 << 15), 0xe6158048); | 323 | __raw_writel(__raw_readl(IOMEM(0xe6158048)) & ~(1 << 15), IOMEM(0xe6158048)); |
324 | 324 | ||
325 | /* IrDA */ | 325 | /* IrDA */ |
326 | gpio_request(GPIO_FN_IRDA_OUT, NULL); | 326 | gpio_request(GPIO_FN_IRDA_OUT, NULL); |
diff --git a/arch/arm/mach-shmobile/board-g4evm.c b/arch/arm/mach-shmobile/board-g4evm.c index fa5dfc5c8ed6..35c126caa4d8 100644 --- a/arch/arm/mach-shmobile/board-g4evm.c +++ b/arch/arm/mach-shmobile/board-g4evm.c | |||
@@ -42,6 +42,8 @@ | |||
42 | #include <asm/mach-types.h> | 42 | #include <asm/mach-types.h> |
43 | #include <asm/mach/arch.h> | 43 | #include <asm/mach/arch.h> |
44 | 44 | ||
45 | #include "sh-gpio.h" | ||
46 | |||
45 | /* | 47 | /* |
46 | * SDHI | 48 | * SDHI |
47 | * | 49 | * |
@@ -126,7 +128,7 @@ static void usb_host_port_power(int port, int power) | |||
126 | return; | 128 | return; |
127 | 129 | ||
128 | /* set VBOUT/PWEN and EXTLP0 in DVSTCTR */ | 130 | /* set VBOUT/PWEN and EXTLP0 in DVSTCTR */ |
129 | __raw_writew(__raw_readw(0xe6890008) | 0x600, 0xe6890008); | 131 | __raw_writew(__raw_readw(IOMEM(0xe6890008)) | 0x600, IOMEM(0xe6890008)); |
130 | } | 132 | } |
131 | 133 | ||
132 | static struct r8a66597_platdata usb_host_data = { | 134 | static struct r8a66597_platdata usb_host_data = { |
@@ -270,17 +272,17 @@ static struct platform_device *g4evm_devices[] __initdata = { | |||
270 | &sdhi1_device, | 272 | &sdhi1_device, |
271 | }; | 273 | }; |
272 | 274 | ||
273 | #define GPIO_SDHID0_D0 0xe60520fc | 275 | #define GPIO_SDHID0_D0 IOMEM(0xe60520fc) |
274 | #define GPIO_SDHID0_D1 0xe60520fd | 276 | #define GPIO_SDHID0_D1 IOMEM(0xe60520fd) |
275 | #define GPIO_SDHID0_D2 0xe60520fe | 277 | #define GPIO_SDHID0_D2 IOMEM(0xe60520fe) |
276 | #define GPIO_SDHID0_D3 0xe60520ff | 278 | #define GPIO_SDHID0_D3 IOMEM(0xe60520ff) |
277 | #define GPIO_SDHICMD0 0xe6052100 | 279 | #define GPIO_SDHICMD0 IOMEM(0xe6052100) |
278 | 280 | ||
279 | #define GPIO_SDHID1_D0 0xe6052103 | 281 | #define GPIO_SDHID1_D0 IOMEM(0xe6052103) |
280 | #define GPIO_SDHID1_D1 0xe6052104 | 282 | #define GPIO_SDHID1_D1 IOMEM(0xe6052104) |
281 | #define GPIO_SDHID1_D2 0xe6052105 | 283 | #define GPIO_SDHID1_D2 IOMEM(0xe6052105) |
282 | #define GPIO_SDHID1_D3 0xe6052106 | 284 | #define GPIO_SDHID1_D3 IOMEM(0xe6052106) |
283 | #define GPIO_SDHICMD1 0xe6052107 | 285 | #define GPIO_SDHICMD1 IOMEM(0xe6052107) |
284 | 286 | ||
285 | static void __init g4evm_init(void) | 287 | static void __init g4evm_init(void) |
286 | { | 288 | { |
@@ -318,10 +320,10 @@ static void __init g4evm_init(void) | |||
318 | gpio_request(GPIO_FN_IDIN, NULL); | 320 | gpio_request(GPIO_FN_IDIN, NULL); |
319 | 321 | ||
320 | /* setup USB phy */ | 322 | /* setup USB phy */ |
321 | __raw_writew(0x0200, 0xe605810a); /* USBCR1 */ | 323 | __raw_writew(0x0200, IOMEM(0xe605810a)); /* USBCR1 */ |
322 | __raw_writew(0x00e0, 0xe60581c0); /* CPFCH */ | 324 | __raw_writew(0x00e0, IOMEM(0xe60581c0)); /* CPFCH */ |
323 | __raw_writew(0x6010, 0xe60581c6); /* CGPOSR */ | 325 | __raw_writew(0x6010, IOMEM(0xe60581c6)); /* CGPOSR */ |
324 | __raw_writew(0x8a0a, 0xe605810c); /* USBCR2 */ | 326 | __raw_writew(0x8a0a, IOMEM(0xe605810c)); /* USBCR2 */ |
325 | 327 | ||
326 | /* KEYSC @ CN31 */ | 328 | /* KEYSC @ CN31 */ |
327 | gpio_request(GPIO_FN_PORT60_KEYOUT5, NULL); | 329 | gpio_request(GPIO_FN_PORT60_KEYOUT5, NULL); |
diff --git a/arch/arm/mach-shmobile/board-kota2.c b/arch/arm/mach-shmobile/board-kota2.c index 21dbe54304d5..bf88f9a8b7ac 100644 --- a/arch/arm/mach-shmobile/board-kota2.c +++ b/arch/arm/mach-shmobile/board-kota2.c | |||
@@ -545,6 +545,7 @@ static void __init kota2_init(void) | |||
545 | } | 545 | } |
546 | 546 | ||
547 | MACHINE_START(KOTA2, "kota2") | 547 | MACHINE_START(KOTA2, "kota2") |
548 | .smp = smp_ops(sh73a0_smp_ops), | ||
548 | .map_io = sh73a0_map_io, | 549 | .map_io = sh73a0_map_io, |
549 | .init_early = sh73a0_add_early_devices, | 550 | .init_early = sh73a0_add_early_devices, |
550 | .nr_irqs = NR_IRQS_LEGACY, | 551 | .nr_irqs = NR_IRQS_LEGACY, |
diff --git a/arch/arm/mach-shmobile/board-kzm9d.c b/arch/arm/mach-shmobile/board-kzm9d.c index 2c986eaae7b4..b52bc0d1273f 100644 --- a/arch/arm/mach-shmobile/board-kzm9d.c +++ b/arch/arm/mach-shmobile/board-kzm9d.c | |||
@@ -84,6 +84,7 @@ static const char *kzm9d_boards_compat_dt[] __initdata = { | |||
84 | }; | 84 | }; |
85 | 85 | ||
86 | DT_MACHINE_START(KZM9D_DT, "kzm9d") | 86 | DT_MACHINE_START(KZM9D_DT, "kzm9d") |
87 | .smp = smp_ops(emev2_smp_ops), | ||
87 | .map_io = emev2_map_io, | 88 | .map_io = emev2_map_io, |
88 | .init_early = emev2_add_early_devices, | 89 | .init_early = emev2_add_early_devices, |
89 | .nr_irqs = NR_IRQS_LEGACY, | 90 | .nr_irqs = NR_IRQS_LEGACY, |
diff --git a/arch/arm/mach-shmobile/board-kzm9g.c b/arch/arm/mach-shmobile/board-kzm9g.c index 53b7ea92c32c..6525835abc0a 100644 --- a/arch/arm/mach-shmobile/board-kzm9g.c +++ b/arch/arm/mach-shmobile/board-kzm9g.c | |||
@@ -133,8 +133,8 @@ static struct platform_device usb_host_device = { | |||
133 | 133 | ||
134 | /* USB Func CN17 */ | 134 | /* USB Func CN17 */ |
135 | struct usbhs_private { | 135 | struct usbhs_private { |
136 | unsigned int phy; | 136 | void __iomem *phy; |
137 | unsigned int cr2; | 137 | void __iomem *cr2; |
138 | struct renesas_usbhs_platform_info info; | 138 | struct renesas_usbhs_platform_info info; |
139 | }; | 139 | }; |
140 | 140 | ||
@@ -232,8 +232,8 @@ static u32 usbhs_pipe_cfg[] = { | |||
232 | }; | 232 | }; |
233 | 233 | ||
234 | static struct usbhs_private usbhs_private = { | 234 | static struct usbhs_private usbhs_private = { |
235 | .phy = 0xe60781e0, /* USBPHYINT */ | 235 | .phy = IOMEM(0xe60781e0), /* USBPHYINT */ |
236 | .cr2 = 0xe605810c, /* USBCR2 */ | 236 | .cr2 = IOMEM(0xe605810c), /* USBCR2 */ |
237 | .info = { | 237 | .info = { |
238 | .platform_callback = { | 238 | .platform_callback = { |
239 | .hardware_init = usbhs_hardware_init, | 239 | .hardware_init = usbhs_hardware_init, |
@@ -763,12 +763,20 @@ static void __init kzm_init(void) | |||
763 | platform_add_devices(kzm_devices, ARRAY_SIZE(kzm_devices)); | 763 | platform_add_devices(kzm_devices, ARRAY_SIZE(kzm_devices)); |
764 | } | 764 | } |
765 | 765 | ||
766 | static void kzm9g_restart(char mode, const char *cmd) | ||
767 | { | ||
768 | #define RESCNT2 0xe6188020 | ||
769 | /* Do soft power on reset */ | ||
770 | writel((1 << 31), RESCNT2); | ||
771 | } | ||
772 | |||
766 | static const char *kzm9g_boards_compat_dt[] __initdata = { | 773 | static const char *kzm9g_boards_compat_dt[] __initdata = { |
767 | "renesas,kzm9g", | 774 | "renesas,kzm9g", |
768 | NULL, | 775 | NULL, |
769 | }; | 776 | }; |
770 | 777 | ||
771 | DT_MACHINE_START(KZM9G_DT, "kzm9g") | 778 | DT_MACHINE_START(KZM9G_DT, "kzm9g") |
779 | .smp = smp_ops(sh73a0_smp_ops), | ||
772 | .map_io = sh73a0_map_io, | 780 | .map_io = sh73a0_map_io, |
773 | .init_early = sh73a0_add_early_devices, | 781 | .init_early = sh73a0_add_early_devices, |
774 | .nr_irqs = NR_IRQS_LEGACY, | 782 | .nr_irqs = NR_IRQS_LEGACY, |
@@ -777,5 +785,6 @@ DT_MACHINE_START(KZM9G_DT, "kzm9g") | |||
777 | .init_machine = kzm_init, | 785 | .init_machine = kzm_init, |
778 | .init_late = shmobile_init_late, | 786 | .init_late = shmobile_init_late, |
779 | .timer = &shmobile_timer, | 787 | .timer = &shmobile_timer, |
788 | .restart = kzm9g_restart, | ||
780 | .dt_compat = kzm9g_boards_compat_dt, | 789 | .dt_compat = kzm9g_boards_compat_dt, |
781 | MACHINE_END | 790 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c index c129542f6aed..62783b5d8813 100644 --- a/arch/arm/mach-shmobile/board-mackerel.c +++ b/arch/arm/mach-shmobile/board-mackerel.c | |||
@@ -64,6 +64,8 @@ | |||
64 | #include <asm/mach/arch.h> | 64 | #include <asm/mach/arch.h> |
65 | #include <asm/mach-types.h> | 65 | #include <asm/mach-types.h> |
66 | 66 | ||
67 | #include "sh-gpio.h" | ||
68 | |||
67 | /* | 69 | /* |
68 | * Address Interface BusWidth note | 70 | * Address Interface BusWidth note |
69 | * ------------------------------------------------------------------ | 71 | * ------------------------------------------------------------------ |
@@ -583,8 +585,8 @@ out: | |||
583 | #define USBHS0_POLL_INTERVAL (HZ * 5) | 585 | #define USBHS0_POLL_INTERVAL (HZ * 5) |
584 | 586 | ||
585 | struct usbhs_private { | 587 | struct usbhs_private { |
586 | unsigned int usbphyaddr; | 588 | void __iomem *usbphyaddr; |
587 | unsigned int usbcrcaddr; | 589 | void __iomem *usbcrcaddr; |
588 | struct renesas_usbhs_platform_info info; | 590 | struct renesas_usbhs_platform_info info; |
589 | struct delayed_work work; | 591 | struct delayed_work work; |
590 | struct platform_device *pdev; | 592 | struct platform_device *pdev; |
@@ -642,7 +644,7 @@ static void usbhs0_hardware_exit(struct platform_device *pdev) | |||
642 | } | 644 | } |
643 | 645 | ||
644 | static struct usbhs_private usbhs0_private = { | 646 | static struct usbhs_private usbhs0_private = { |
645 | .usbcrcaddr = 0xe605810c, /* USBCR2 */ | 647 | .usbcrcaddr = IOMEM(0xe605810c), /* USBCR2 */ |
646 | .info = { | 648 | .info = { |
647 | .platform_callback = { | 649 | .platform_callback = { |
648 | .hardware_init = usbhs0_hardware_init, | 650 | .hardware_init = usbhs0_hardware_init, |
@@ -776,8 +778,8 @@ static u32 usbhs1_pipe_cfg[] = { | |||
776 | }; | 778 | }; |
777 | 779 | ||
778 | static struct usbhs_private usbhs1_private = { | 780 | static struct usbhs_private usbhs1_private = { |
779 | .usbphyaddr = 0xe60581e2, /* USBPHY1INTAP */ | 781 | .usbphyaddr = IOMEM(0xe60581e2), /* USBPHY1INTAP */ |
780 | .usbcrcaddr = 0xe6058130, /* USBCR4 */ | 782 | .usbcrcaddr = IOMEM(0xe6058130), /* USBCR4 */ |
781 | .info = { | 783 | .info = { |
782 | .platform_callback = { | 784 | .platform_callback = { |
783 | .hardware_init = usbhs1_hardware_init, | 785 | .hardware_init = usbhs1_hardware_init, |
@@ -1402,12 +1404,12 @@ static struct i2c_board_info i2c1_devices[] = { | |||
1402 | }, | 1404 | }, |
1403 | }; | 1405 | }; |
1404 | 1406 | ||
1405 | #define GPIO_PORT9CR 0xE6051009 | 1407 | #define GPIO_PORT9CR IOMEM(0xE6051009) |
1406 | #define GPIO_PORT10CR 0xE605100A | 1408 | #define GPIO_PORT10CR IOMEM(0xE605100A) |
1407 | #define GPIO_PORT167CR 0xE60520A7 | 1409 | #define GPIO_PORT167CR IOMEM(0xE60520A7) |
1408 | #define GPIO_PORT168CR 0xE60520A8 | 1410 | #define GPIO_PORT168CR IOMEM(0xE60520A8) |
1409 | #define SRCR4 0xe61580bc | 1411 | #define SRCR4 IOMEM(0xe61580bc) |
1410 | #define USCCR1 0xE6058144 | 1412 | #define USCCR1 IOMEM(0xE6058144) |
1411 | static void __init mackerel_init(void) | 1413 | static void __init mackerel_init(void) |
1412 | { | 1414 | { |
1413 | u32 srcr4; | 1415 | u32 srcr4; |
diff --git a/arch/arm/mach-shmobile/board-marzen.c b/arch/arm/mach-shmobile/board-marzen.c index fcf5a47f4772..01ce3f15c6a3 100644 --- a/arch/arm/mach-shmobile/board-marzen.c +++ b/arch/arm/mach-shmobile/board-marzen.c | |||
@@ -102,6 +102,7 @@ static void __init marzen_init(void) | |||
102 | } | 102 | } |
103 | 103 | ||
104 | MACHINE_START(MARZEN, "marzen") | 104 | MACHINE_START(MARZEN, "marzen") |
105 | .smp = smp_ops(r8a7779_smp_ops), | ||
105 | .map_io = r8a7779_map_io, | 106 | .map_io = r8a7779_map_io, |
106 | .init_early = r8a7779_add_early_devices, | 107 | .init_early = r8a7779_add_early_devices, |
107 | .nr_irqs = NR_IRQS_LEGACY, | 108 | .nr_irqs = NR_IRQS_LEGACY, |
diff --git a/arch/arm/mach-shmobile/clock-r8a7740.c b/arch/arm/mach-shmobile/clock-r8a7740.c index ad5fccc7b5e7..6729e0032180 100644 --- a/arch/arm/mach-shmobile/clock-r8a7740.c +++ b/arch/arm/mach-shmobile/clock-r8a7740.c | |||
@@ -41,29 +41,29 @@ | |||
41 | */ | 41 | */ |
42 | 42 | ||
43 | /* CPG registers */ | 43 | /* CPG registers */ |
44 | #define FRQCRA 0xe6150000 | 44 | #define FRQCRA IOMEM(0xe6150000) |
45 | #define FRQCRB 0xe6150004 | 45 | #define FRQCRB IOMEM(0xe6150004) |
46 | #define VCLKCR1 0xE6150008 | 46 | #define VCLKCR1 IOMEM(0xE6150008) |
47 | #define VCLKCR2 0xE615000c | 47 | #define VCLKCR2 IOMEM(0xE615000c) |
48 | #define FRQCRC 0xe61500e0 | 48 | #define FRQCRC IOMEM(0xe61500e0) |
49 | #define FSIACKCR 0xe6150018 | 49 | #define FSIACKCR IOMEM(0xe6150018) |
50 | #define PLLC01CR 0xe6150028 | 50 | #define PLLC01CR IOMEM(0xe6150028) |
51 | 51 | ||
52 | #define SUBCKCR 0xe6150080 | 52 | #define SUBCKCR IOMEM(0xe6150080) |
53 | #define USBCKCR 0xe615008c | 53 | #define USBCKCR IOMEM(0xe615008c) |
54 | 54 | ||
55 | #define MSTPSR0 0xe6150030 | 55 | #define MSTPSR0 IOMEM(0xe6150030) |
56 | #define MSTPSR1 0xe6150038 | 56 | #define MSTPSR1 IOMEM(0xe6150038) |
57 | #define MSTPSR2 0xe6150040 | 57 | #define MSTPSR2 IOMEM(0xe6150040) |
58 | #define MSTPSR3 0xe6150048 | 58 | #define MSTPSR3 IOMEM(0xe6150048) |
59 | #define MSTPSR4 0xe615004c | 59 | #define MSTPSR4 IOMEM(0xe615004c) |
60 | #define FSIBCKCR 0xe6150090 | 60 | #define FSIBCKCR IOMEM(0xe6150090) |
61 | #define HDMICKCR 0xe6150094 | 61 | #define HDMICKCR IOMEM(0xe6150094) |
62 | #define SMSTPCR0 0xe6150130 | 62 | #define SMSTPCR0 IOMEM(0xe6150130) |
63 | #define SMSTPCR1 0xe6150134 | 63 | #define SMSTPCR1 IOMEM(0xe6150134) |
64 | #define SMSTPCR2 0xe6150138 | 64 | #define SMSTPCR2 IOMEM(0xe6150138) |
65 | #define SMSTPCR3 0xe615013c | 65 | #define SMSTPCR3 IOMEM(0xe615013c) |
66 | #define SMSTPCR4 0xe6150140 | 66 | #define SMSTPCR4 IOMEM(0xe6150140) |
67 | 67 | ||
68 | /* Fixed 32 KHz root clock from EXTALR pin */ | 68 | /* Fixed 32 KHz root clock from EXTALR pin */ |
69 | static struct clk extalr_clk = { | 69 | static struct clk extalr_clk = { |
diff --git a/arch/arm/mach-shmobile/clock-r8a7779.c b/arch/arm/mach-shmobile/clock-r8a7779.c index 339c62c824d5..3cafb6ab5e9a 100644 --- a/arch/arm/mach-shmobile/clock-r8a7779.c +++ b/arch/arm/mach-shmobile/clock-r8a7779.c | |||
@@ -86,11 +86,16 @@ static struct clk div4_clks[DIV4_NR] = { | |||
86 | 0x0300, CLK_ENABLE_ON_INIT), | 86 | 0x0300, CLK_ENABLE_ON_INIT), |
87 | }; | 87 | }; |
88 | 88 | ||
89 | enum { MSTP026, MSTP025, MSTP024, MSTP023, MSTP022, MSTP021, | 89 | enum { MSTP323, MSTP322, MSTP321, MSTP320, |
90 | MSTP026, MSTP025, MSTP024, MSTP023, MSTP022, MSTP021, | ||
90 | MSTP016, MSTP015, MSTP014, | 91 | MSTP016, MSTP015, MSTP014, |
91 | MSTP_NR }; | 92 | MSTP_NR }; |
92 | 93 | ||
93 | static struct clk mstp_clks[MSTP_NR] = { | 94 | static struct clk mstp_clks[MSTP_NR] = { |
95 | [MSTP323] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 23, 0), /* SDHI0 */ | ||
96 | [MSTP322] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 22, 0), /* SDHI1 */ | ||
97 | [MSTP321] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 21, 0), /* SDHI2 */ | ||
98 | [MSTP320] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 20, 0), /* SDHI3 */ | ||
94 | [MSTP026] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 26, 0), /* SCIF0 */ | 99 | [MSTP026] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 26, 0), /* SCIF0 */ |
95 | [MSTP025] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 25, 0), /* SCIF1 */ | 100 | [MSTP025] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 25, 0), /* SCIF1 */ |
96 | [MSTP024] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 24, 0), /* SCIF2 */ | 101 | [MSTP024] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 24, 0), /* SCIF2 */ |
@@ -149,6 +154,10 @@ static struct clk_lookup lookups[] = { | |||
149 | CLKDEV_DEV_ID("sh-sci.3", &mstp_clks[MSTP023]), /* SCIF3 */ | 154 | CLKDEV_DEV_ID("sh-sci.3", &mstp_clks[MSTP023]), /* SCIF3 */ |
150 | CLKDEV_DEV_ID("sh-sci.4", &mstp_clks[MSTP022]), /* SCIF4 */ | 155 | CLKDEV_DEV_ID("sh-sci.4", &mstp_clks[MSTP022]), /* SCIF4 */ |
151 | CLKDEV_DEV_ID("sh-sci.5", &mstp_clks[MSTP021]), /* SCIF6 */ | 156 | CLKDEV_DEV_ID("sh-sci.5", &mstp_clks[MSTP021]), /* SCIF6 */ |
157 | CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP323]), /* SDHI0 */ | ||
158 | CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP322]), /* SDHI1 */ | ||
159 | CLKDEV_DEV_ID("sh_mobile_sdhi.2", &mstp_clks[MSTP321]), /* SDHI2 */ | ||
160 | CLKDEV_DEV_ID("sh_mobile_sdhi.3", &mstp_clks[MSTP320]), /* SDHI3 */ | ||
152 | }; | 161 | }; |
153 | 162 | ||
154 | void __init r8a7779_clock_init(void) | 163 | void __init r8a7779_clock_init(void) |
diff --git a/arch/arm/mach-shmobile/clock-sh7367.c b/arch/arm/mach-shmobile/clock-sh7367.c index 162b791b8984..ef0a95e592c4 100644 --- a/arch/arm/mach-shmobile/clock-sh7367.c +++ b/arch/arm/mach-shmobile/clock-sh7367.c | |||
@@ -24,28 +24,28 @@ | |||
24 | #include <mach/common.h> | 24 | #include <mach/common.h> |
25 | 25 | ||
26 | /* SH7367 registers */ | 26 | /* SH7367 registers */ |
27 | #define RTFRQCR 0xe6150000 | 27 | #define RTFRQCR IOMEM(0xe6150000) |
28 | #define SYFRQCR 0xe6150004 | 28 | #define SYFRQCR IOMEM(0xe6150004) |
29 | #define CMFRQCR 0xe61500E0 | 29 | #define CMFRQCR IOMEM(0xe61500E0) |
30 | #define VCLKCR1 0xe6150008 | 30 | #define VCLKCR1 IOMEM(0xe6150008) |
31 | #define VCLKCR2 0xe615000C | 31 | #define VCLKCR2 IOMEM(0xe615000C) |
32 | #define VCLKCR3 0xe615001C | 32 | #define VCLKCR3 IOMEM(0xe615001C) |
33 | #define SCLKACR 0xe6150010 | 33 | #define SCLKACR IOMEM(0xe6150010) |
34 | #define SCLKBCR 0xe6150014 | 34 | #define SCLKBCR IOMEM(0xe6150014) |
35 | #define SUBUSBCKCR 0xe6158080 | 35 | #define SUBUSBCKCR IOMEM(0xe6158080) |
36 | #define SPUCKCR 0xe6150084 | 36 | #define SPUCKCR IOMEM(0xe6150084) |
37 | #define MSUCKCR 0xe6150088 | 37 | #define MSUCKCR IOMEM(0xe6150088) |
38 | #define MVI3CKCR 0xe6150090 | 38 | #define MVI3CKCR IOMEM(0xe6150090) |
39 | #define VOUCKCR 0xe6150094 | 39 | #define VOUCKCR IOMEM(0xe6150094) |
40 | #define MFCK1CR 0xe6150098 | 40 | #define MFCK1CR IOMEM(0xe6150098) |
41 | #define MFCK2CR 0xe615009C | 41 | #define MFCK2CR IOMEM(0xe615009C) |
42 | #define PLLC1CR 0xe6150028 | 42 | #define PLLC1CR IOMEM(0xe6150028) |
43 | #define PLLC2CR 0xe615002C | 43 | #define PLLC2CR IOMEM(0xe615002C) |
44 | #define RTMSTPCR0 0xe6158030 | 44 | #define RTMSTPCR0 IOMEM(0xe6158030) |
45 | #define RTMSTPCR2 0xe6158038 | 45 | #define RTMSTPCR2 IOMEM(0xe6158038) |
46 | #define SYMSTPCR0 0xe6158040 | 46 | #define SYMSTPCR0 IOMEM(0xe6158040) |
47 | #define SYMSTPCR2 0xe6158048 | 47 | #define SYMSTPCR2 IOMEM(0xe6158048) |
48 | #define CMMSTPCR0 0xe615804c | 48 | #define CMMSTPCR0 IOMEM(0xe615804c) |
49 | 49 | ||
50 | /* Fixed 32 KHz root clock from EXTALR pin */ | 50 | /* Fixed 32 KHz root clock from EXTALR pin */ |
51 | static struct clk r_clk = { | 51 | static struct clk r_clk = { |
diff --git a/arch/arm/mach-shmobile/clock-sh7372.c b/arch/arm/mach-shmobile/clock-sh7372.c index 5a2894b1c965..430a90ffa120 100644 --- a/arch/arm/mach-shmobile/clock-sh7372.c +++ b/arch/arm/mach-shmobile/clock-sh7372.c | |||
@@ -24,36 +24,36 @@ | |||
24 | #include <mach/common.h> | 24 | #include <mach/common.h> |
25 | 25 | ||
26 | /* SH7372 registers */ | 26 | /* SH7372 registers */ |
27 | #define FRQCRA 0xe6150000 | 27 | #define FRQCRA IOMEM(0xe6150000) |
28 | #define FRQCRB 0xe6150004 | 28 | #define FRQCRB IOMEM(0xe6150004) |
29 | #define FRQCRC 0xe61500e0 | 29 | #define FRQCRC IOMEM(0xe61500e0) |
30 | #define FRQCRD 0xe61500e4 | 30 | #define FRQCRD IOMEM(0xe61500e4) |
31 | #define VCLKCR1 0xe6150008 | 31 | #define VCLKCR1 IOMEM(0xe6150008) |
32 | #define VCLKCR2 0xe615000c | 32 | #define VCLKCR2 IOMEM(0xe615000c) |
33 | #define VCLKCR3 0xe615001c | 33 | #define VCLKCR3 IOMEM(0xe615001c) |
34 | #define FMSICKCR 0xe6150010 | 34 | #define FMSICKCR IOMEM(0xe6150010) |
35 | #define FMSOCKCR 0xe6150014 | 35 | #define FMSOCKCR IOMEM(0xe6150014) |
36 | #define FSIACKCR 0xe6150018 | 36 | #define FSIACKCR IOMEM(0xe6150018) |
37 | #define FSIBCKCR 0xe6150090 | 37 | #define FSIBCKCR IOMEM(0xe6150090) |
38 | #define SUBCKCR 0xe6150080 | 38 | #define SUBCKCR IOMEM(0xe6150080) |
39 | #define SPUCKCR 0xe6150084 | 39 | #define SPUCKCR IOMEM(0xe6150084) |
40 | #define VOUCKCR 0xe6150088 | 40 | #define VOUCKCR IOMEM(0xe6150088) |
41 | #define HDMICKCR 0xe6150094 | 41 | #define HDMICKCR IOMEM(0xe6150094) |
42 | #define DSITCKCR 0xe6150060 | 42 | #define DSITCKCR IOMEM(0xe6150060) |
43 | #define DSI0PCKCR 0xe6150064 | 43 | #define DSI0PCKCR IOMEM(0xe6150064) |
44 | #define DSI1PCKCR 0xe6150098 | 44 | #define DSI1PCKCR IOMEM(0xe6150098) |
45 | #define PLLC01CR 0xe6150028 | 45 | #define PLLC01CR IOMEM(0xe6150028) |
46 | #define PLLC2CR 0xe615002c | 46 | #define PLLC2CR IOMEM(0xe615002c) |
47 | #define RMSTPCR0 0xe6150110 | 47 | #define RMSTPCR0 IOMEM(0xe6150110) |
48 | #define RMSTPCR1 0xe6150114 | 48 | #define RMSTPCR1 IOMEM(0xe6150114) |
49 | #define RMSTPCR2 0xe6150118 | 49 | #define RMSTPCR2 IOMEM(0xe6150118) |
50 | #define RMSTPCR3 0xe615011c | 50 | #define RMSTPCR3 IOMEM(0xe615011c) |
51 | #define RMSTPCR4 0xe6150120 | 51 | #define RMSTPCR4 IOMEM(0xe6150120) |
52 | #define SMSTPCR0 0xe6150130 | 52 | #define SMSTPCR0 IOMEM(0xe6150130) |
53 | #define SMSTPCR1 0xe6150134 | 53 | #define SMSTPCR1 IOMEM(0xe6150134) |
54 | #define SMSTPCR2 0xe6150138 | 54 | #define SMSTPCR2 IOMEM(0xe6150138) |
55 | #define SMSTPCR3 0xe615013c | 55 | #define SMSTPCR3 IOMEM(0xe615013c) |
56 | #define SMSTPCR4 0xe6150140 | 56 | #define SMSTPCR4 IOMEM(0xe6150140) |
57 | 57 | ||
58 | #define FSIDIVA 0xFE1F8000 | 58 | #define FSIDIVA 0xFE1F8000 |
59 | #define FSIDIVB 0xFE1F8008 | 59 | #define FSIDIVB 0xFE1F8008 |
diff --git a/arch/arm/mach-shmobile/clock-sh7377.c b/arch/arm/mach-shmobile/clock-sh7377.c index 85f2a3ec2c44..b8480d19e1c8 100644 --- a/arch/arm/mach-shmobile/clock-sh7377.c +++ b/arch/arm/mach-shmobile/clock-sh7377.c | |||
@@ -24,31 +24,31 @@ | |||
24 | #include <mach/common.h> | 24 | #include <mach/common.h> |
25 | 25 | ||
26 | /* SH7377 registers */ | 26 | /* SH7377 registers */ |
27 | #define RTFRQCR 0xe6150000 | 27 | #define RTFRQCR IOMEM(0xe6150000) |
28 | #define SYFRQCR 0xe6150004 | 28 | #define SYFRQCR IOMEM(0xe6150004) |
29 | #define CMFRQCR 0xe61500E0 | 29 | #define CMFRQCR IOMEM(0xe61500E0) |
30 | #define VCLKCR1 0xe6150008 | 30 | #define VCLKCR1 IOMEM(0xe6150008) |
31 | #define VCLKCR2 0xe615000C | 31 | #define VCLKCR2 IOMEM(0xe615000C) |
32 | #define VCLKCR3 0xe615001C | 32 | #define VCLKCR3 IOMEM(0xe615001C) |
33 | #define FMSICKCR 0xe6150010 | 33 | #define FMSICKCR IOMEM(0xe6150010) |
34 | #define FMSOCKCR 0xe6150014 | 34 | #define FMSOCKCR IOMEM(0xe6150014) |
35 | #define FSICKCR 0xe6150018 | 35 | #define FSICKCR IOMEM(0xe6150018) |
36 | #define PLLC1CR 0xe6150028 | 36 | #define PLLC1CR IOMEM(0xe6150028) |
37 | #define PLLC2CR 0xe615002C | 37 | #define PLLC2CR IOMEM(0xe615002C) |
38 | #define SUBUSBCKCR 0xe6150080 | 38 | #define SUBUSBCKCR IOMEM(0xe6150080) |
39 | #define SPUCKCR 0xe6150084 | 39 | #define SPUCKCR IOMEM(0xe6150084) |
40 | #define MSUCKCR 0xe6150088 | 40 | #define MSUCKCR IOMEM(0xe6150088) |
41 | #define MVI3CKCR 0xe6150090 | 41 | #define MVI3CKCR IOMEM(0xe6150090) |
42 | #define HDMICKCR 0xe6150094 | 42 | #define HDMICKCR IOMEM(0xe6150094) |
43 | #define MFCK1CR 0xe6150098 | 43 | #define MFCK1CR IOMEM(0xe6150098) |
44 | #define MFCK2CR 0xe615009C | 44 | #define MFCK2CR IOMEM(0xe615009C) |
45 | #define DSITCKCR 0xe6150060 | 45 | #define DSITCKCR IOMEM(0xe6150060) |
46 | #define DSIPCKCR 0xe6150064 | 46 | #define DSIPCKCR IOMEM(0xe6150064) |
47 | #define SMSTPCR0 0xe6150130 | 47 | #define SMSTPCR0 IOMEM(0xe6150130) |
48 | #define SMSTPCR1 0xe6150134 | 48 | #define SMSTPCR1 IOMEM(0xe6150134) |
49 | #define SMSTPCR2 0xe6150138 | 49 | #define SMSTPCR2 IOMEM(0xe6150138) |
50 | #define SMSTPCR3 0xe615013C | 50 | #define SMSTPCR3 IOMEM(0xe615013C) |
51 | #define SMSTPCR4 0xe6150140 | 51 | #define SMSTPCR4 IOMEM(0xe6150140) |
52 | 52 | ||
53 | /* Fixed 32 KHz root clock from EXTALR pin */ | 53 | /* Fixed 32 KHz root clock from EXTALR pin */ |
54 | static struct clk r_clk = { | 54 | static struct clk r_clk = { |
diff --git a/arch/arm/mach-shmobile/clock-sh73a0.c b/arch/arm/mach-shmobile/clock-sh73a0.c index 7f8da18a8580..516ff7f3e434 100644 --- a/arch/arm/mach-shmobile/clock-sh73a0.c +++ b/arch/arm/mach-shmobile/clock-sh73a0.c | |||
@@ -23,43 +23,43 @@ | |||
23 | #include <linux/clkdev.h> | 23 | #include <linux/clkdev.h> |
24 | #include <mach/common.h> | 24 | #include <mach/common.h> |
25 | 25 | ||
26 | #define FRQCRA 0xe6150000 | 26 | #define FRQCRA IOMEM(0xe6150000) |
27 | #define FRQCRB 0xe6150004 | 27 | #define FRQCRB IOMEM(0xe6150004) |
28 | #define FRQCRD 0xe61500e4 | 28 | #define FRQCRD IOMEM(0xe61500e4) |
29 | #define VCLKCR1 0xe6150008 | 29 | #define VCLKCR1 IOMEM(0xe6150008) |
30 | #define VCLKCR2 0xe615000C | 30 | #define VCLKCR2 IOMEM(0xe615000C) |
31 | #define VCLKCR3 0xe615001C | 31 | #define VCLKCR3 IOMEM(0xe615001C) |
32 | #define ZBCKCR 0xe6150010 | 32 | #define ZBCKCR IOMEM(0xe6150010) |
33 | #define FLCKCR 0xe6150014 | 33 | #define FLCKCR IOMEM(0xe6150014) |
34 | #define SD0CKCR 0xe6150074 | 34 | #define SD0CKCR IOMEM(0xe6150074) |
35 | #define SD1CKCR 0xe6150078 | 35 | #define SD1CKCR IOMEM(0xe6150078) |
36 | #define SD2CKCR 0xe615007C | 36 | #define SD2CKCR IOMEM(0xe615007C) |
37 | #define FSIACKCR 0xe6150018 | 37 | #define FSIACKCR IOMEM(0xe6150018) |
38 | #define FSIBCKCR 0xe6150090 | 38 | #define FSIBCKCR IOMEM(0xe6150090) |
39 | #define SUBCKCR 0xe6150080 | 39 | #define SUBCKCR IOMEM(0xe6150080) |
40 | #define SPUACKCR 0xe6150084 | 40 | #define SPUACKCR IOMEM(0xe6150084) |
41 | #define SPUVCKCR 0xe6150094 | 41 | #define SPUVCKCR IOMEM(0xe6150094) |
42 | #define MSUCKCR 0xe6150088 | 42 | #define MSUCKCR IOMEM(0xe6150088) |
43 | #define HSICKCR 0xe615008C | 43 | #define HSICKCR IOMEM(0xe615008C) |
44 | #define MFCK1CR 0xe6150098 | 44 | #define MFCK1CR IOMEM(0xe6150098) |
45 | #define MFCK2CR 0xe615009C | 45 | #define MFCK2CR IOMEM(0xe615009C) |
46 | #define DSITCKCR 0xe6150060 | 46 | #define DSITCKCR IOMEM(0xe6150060) |
47 | #define DSI0PCKCR 0xe6150064 | 47 | #define DSI0PCKCR IOMEM(0xe6150064) |
48 | #define DSI1PCKCR 0xe6150068 | 48 | #define DSI1PCKCR IOMEM(0xe6150068) |
49 | #define DSI0PHYCR 0xe615006C | 49 | #define DSI0PHYCR 0xe615006C |
50 | #define DSI1PHYCR 0xe6150070 | 50 | #define DSI1PHYCR 0xe6150070 |
51 | #define PLLECR 0xe61500d0 | 51 | #define PLLECR IOMEM(0xe61500d0) |
52 | #define PLL0CR 0xe61500d8 | 52 | #define PLL0CR IOMEM(0xe61500d8) |
53 | #define PLL1CR 0xe6150028 | 53 | #define PLL1CR IOMEM(0xe6150028) |
54 | #define PLL2CR 0xe615002c | 54 | #define PLL2CR IOMEM(0xe615002c) |
55 | #define PLL3CR 0xe61500dc | 55 | #define PLL3CR IOMEM(0xe61500dc) |
56 | #define SMSTPCR0 0xe6150130 | 56 | #define SMSTPCR0 IOMEM(0xe6150130) |
57 | #define SMSTPCR1 0xe6150134 | 57 | #define SMSTPCR1 IOMEM(0xe6150134) |
58 | #define SMSTPCR2 0xe6150138 | 58 | #define SMSTPCR2 IOMEM(0xe6150138) |
59 | #define SMSTPCR3 0xe615013c | 59 | #define SMSTPCR3 IOMEM(0xe615013c) |
60 | #define SMSTPCR4 0xe6150140 | 60 | #define SMSTPCR4 IOMEM(0xe6150140) |
61 | #define SMSTPCR5 0xe6150144 | 61 | #define SMSTPCR5 IOMEM(0xe6150144) |
62 | #define CKSCR 0xe61500c0 | 62 | #define CKSCR IOMEM(0xe61500c0) |
63 | 63 | ||
64 | /* Fixed 32 KHz root clock from EXTALR pin */ | 64 | /* Fixed 32 KHz root clock from EXTALR pin */ |
65 | static struct clk r_clk = { | 65 | static struct clk r_clk = { |
diff --git a/arch/arm/mach-shmobile/hotplug.c b/arch/arm/mach-shmobile/hotplug.c index 828d22f3af57..b09a0bdbf813 100644 --- a/arch/arm/mach-shmobile/hotplug.c +++ b/arch/arm/mach-shmobile/hotplug.c | |||
@@ -14,30 +14,16 @@ | |||
14 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
15 | #include <linux/cpumask.h> | 15 | #include <linux/cpumask.h> |
16 | #include <linux/delay.h> | 16 | #include <linux/delay.h> |
17 | #include <linux/of.h> | ||
17 | #include <mach/common.h> | 18 | #include <mach/common.h> |
19 | #include <mach/r8a7779.h> | ||
20 | #include <mach/emev2.h> | ||
18 | #include <asm/cacheflush.h> | 21 | #include <asm/cacheflush.h> |
22 | #include <asm/mach-types.h> | ||
19 | 23 | ||
20 | static cpumask_t dead_cpus; | 24 | static cpumask_t dead_cpus; |
21 | 25 | ||
22 | int platform_cpu_kill(unsigned int cpu) | 26 | void shmobile_cpu_die(unsigned int cpu) |
23 | { | ||
24 | int k; | ||
25 | |||
26 | /* this function is running on another CPU than the offline target, | ||
27 | * here we need wait for shutdown code in platform_cpu_die() to | ||
28 | * finish before asking SoC-specific code to power off the CPU core. | ||
29 | */ | ||
30 | for (k = 0; k < 1000; k++) { | ||
31 | if (cpumask_test_cpu(cpu, &dead_cpus)) | ||
32 | return shmobile_platform_cpu_kill(cpu); | ||
33 | |||
34 | mdelay(1); | ||
35 | } | ||
36 | |||
37 | return 0; | ||
38 | } | ||
39 | |||
40 | void platform_cpu_die(unsigned int cpu) | ||
41 | { | 27 | { |
42 | /* hardware shutdown code running on the CPU that is being offlined */ | 28 | /* hardware shutdown code running on the CPU that is being offlined */ |
43 | flush_cache_all(); | 29 | flush_cache_all(); |
@@ -60,7 +46,7 @@ void platform_cpu_die(unsigned int cpu) | |||
60 | } | 46 | } |
61 | } | 47 | } |
62 | 48 | ||
63 | int platform_cpu_disable(unsigned int cpu) | 49 | int shmobile_cpu_disable(unsigned int cpu) |
64 | { | 50 | { |
65 | cpumask_clear_cpu(cpu, &dead_cpus); | 51 | cpumask_clear_cpu(cpu, &dead_cpus); |
66 | /* | 52 | /* |
@@ -69,3 +55,8 @@ int platform_cpu_disable(unsigned int cpu) | |||
69 | */ | 55 | */ |
70 | return cpu == 0 ? -EPERM : 0; | 56 | return cpu == 0 ? -EPERM : 0; |
71 | } | 57 | } |
58 | |||
59 | int shmobile_cpu_is_dead(unsigned int cpu) | ||
60 | { | ||
61 | return cpumask_test_cpu(cpu, &dead_cpus); | ||
62 | } | ||
diff --git a/arch/arm/mach-shmobile/include/mach/common.h b/arch/arm/mach-shmobile/include/mach/common.h index 45e61dada030..f80f9c549393 100644 --- a/arch/arm/mach-shmobile/include/mach/common.h +++ b/arch/arm/mach-shmobile/include/mach/common.h | |||
@@ -4,11 +4,10 @@ | |||
4 | extern void shmobile_earlytimer_init(void); | 4 | extern void shmobile_earlytimer_init(void); |
5 | extern struct sys_timer shmobile_timer; | 5 | extern struct sys_timer shmobile_timer; |
6 | extern void shmobile_setup_delay(unsigned int max_cpu_core_mhz, | 6 | extern void shmobile_setup_delay(unsigned int max_cpu_core_mhz, |
7 | unsigned int mult, unsigned int div); | 7 | unsigned int mult, unsigned int div); |
8 | struct twd_local_timer; | 8 | struct twd_local_timer; |
9 | extern void shmobile_setup_console(void); | 9 | extern void shmobile_setup_console(void); |
10 | extern void shmobile_secondary_vector(void); | 10 | extern void shmobile_secondary_vector(void); |
11 | extern int shmobile_platform_cpu_kill(unsigned int cpu); | ||
12 | struct clk; | 11 | struct clk; |
13 | extern int shmobile_clk_init(void); | 12 | extern int shmobile_clk_init(void); |
14 | extern void shmobile_handle_irq_intc(struct pt_regs *); | 13 | extern void shmobile_handle_irq_intc(struct pt_regs *); |
@@ -58,11 +57,6 @@ extern struct clk sh73a0_extal2_clk; | |||
58 | extern struct clk sh73a0_extcki_clk; | 57 | extern struct clk sh73a0_extcki_clk; |
59 | extern struct clk sh73a0_extalr_clk; | 58 | extern struct clk sh73a0_extalr_clk; |
60 | 59 | ||
61 | extern unsigned int sh73a0_get_core_count(void); | ||
62 | extern void sh73a0_secondary_init(unsigned int cpu); | ||
63 | extern int sh73a0_boot_secondary(unsigned int cpu); | ||
64 | extern void sh73a0_smp_prepare_cpus(void); | ||
65 | |||
66 | extern void r8a7740_init_irq(void); | 60 | extern void r8a7740_init_irq(void); |
67 | extern void r8a7740_map_io(void); | 61 | extern void r8a7740_map_io(void); |
68 | extern void r8a7740_add_early_devices(void); | 62 | extern void r8a7740_add_early_devices(void); |
@@ -79,11 +73,6 @@ extern void r8a7779_pinmux_init(void); | |||
79 | extern void r8a7779_pm_init(void); | 73 | extern void r8a7779_pm_init(void); |
80 | extern void r8a7740_meram_workaround(void); | 74 | extern void r8a7740_meram_workaround(void); |
81 | 75 | ||
82 | extern unsigned int r8a7779_get_core_count(void); | ||
83 | extern int r8a7779_platform_cpu_kill(unsigned int cpu); | ||
84 | extern void r8a7779_secondary_init(unsigned int cpu); | ||
85 | extern int r8a7779_boot_secondary(unsigned int cpu); | ||
86 | extern void r8a7779_smp_prepare_cpus(void); | ||
87 | extern void r8a7779_register_twd(void); | 76 | extern void r8a7779_register_twd(void); |
88 | 77 | ||
89 | extern void shmobile_init_late(void); | 78 | extern void shmobile_init_late(void); |
@@ -100,4 +89,15 @@ int shmobile_cpuidle_init(void); | |||
100 | static inline int shmobile_cpuidle_init(void) { return 0; } | 89 | static inline int shmobile_cpuidle_init(void) { return 0; } |
101 | #endif | 90 | #endif |
102 | 91 | ||
92 | extern void shmobile_cpu_die(unsigned int cpu); | ||
93 | extern int shmobile_cpu_disable(unsigned int cpu); | ||
94 | |||
95 | #ifdef CONFIG_HOTPLUG_CPU | ||
96 | extern int shmobile_cpu_is_dead(unsigned int cpu); | ||
97 | #else | ||
98 | static inline int shmobile_cpu_is_dead(unsigned int cpu) { return 1; } | ||
99 | #endif | ||
100 | |||
101 | extern void shmobile_smp_init_cpus(unsigned int ncores); | ||
102 | |||
103 | #endif /* __ARCH_MACH_COMMON_H */ | 103 | #endif /* __ARCH_MACH_COMMON_H */ |
diff --git a/arch/arm/mach-shmobile/include/mach/emev2.h b/arch/arm/mach-shmobile/include/mach/emev2.h index e6b0c1bf4b7e..ac3751705cab 100644 --- a/arch/arm/mach-shmobile/include/mach/emev2.h +++ b/arch/arm/mach-shmobile/include/mach/emev2.h | |||
@@ -7,13 +7,10 @@ extern void emev2_add_early_devices(void); | |||
7 | extern void emev2_add_standard_devices(void); | 7 | extern void emev2_add_standard_devices(void); |
8 | extern void emev2_clock_init(void); | 8 | extern void emev2_clock_init(void); |
9 | extern void emev2_set_boot_vector(unsigned long value); | 9 | extern void emev2_set_boot_vector(unsigned long value); |
10 | extern unsigned int emev2_get_core_count(void); | ||
11 | extern int emev2_platform_cpu_kill(unsigned int cpu); | ||
12 | extern void emev2_secondary_init(unsigned int cpu); | ||
13 | extern int emev2_boot_secondary(unsigned int cpu); | ||
14 | extern void emev2_smp_prepare_cpus(void); | ||
15 | 10 | ||
16 | #define EMEV2_GPIO_BASE 200 | 11 | #define EMEV2_GPIO_BASE 200 |
17 | #define EMEV2_GPIO_IRQ(n) (EMEV2_GPIO_BASE + (n)) | 12 | #define EMEV2_GPIO_IRQ(n) (EMEV2_GPIO_BASE + (n)) |
18 | 13 | ||
14 | extern struct smp_operations emev2_smp_ops; | ||
15 | |||
19 | #endif /* __ASM_EMEV2_H__ */ | 16 | #endif /* __ASM_EMEV2_H__ */ |
diff --git a/arch/arm/mach-shmobile/include/mach/r8a7779.h b/arch/arm/mach-shmobile/include/mach/r8a7779.h index b07ad318eb2e..f504c5e81b47 100644 --- a/arch/arm/mach-shmobile/include/mach/r8a7779.h +++ b/arch/arm/mach-shmobile/include/mach/r8a7779.h | |||
@@ -360,4 +360,6 @@ extern void r8a7779_add_device_to_domain(struct r8a7779_pm_domain *r8a7779_pd, | |||
360 | #define r8a7779_add_device_to_domain(pd, pdev) do { } while (0) | 360 | #define r8a7779_add_device_to_domain(pd, pdev) do { } while (0) |
361 | #endif /* CONFIG_PM */ | 361 | #endif /* CONFIG_PM */ |
362 | 362 | ||
363 | extern struct smp_operations r8a7779_smp_ops; | ||
364 | |||
363 | #endif /* __ASM_R8A7779_H__ */ | 365 | #endif /* __ASM_R8A7779_H__ */ |
diff --git a/arch/arm/mach-shmobile/include/mach/sh73a0.h b/arch/arm/mach-shmobile/include/mach/sh73a0.h index fe950f25d793..606d31d02a4e 100644 --- a/arch/arm/mach-shmobile/include/mach/sh73a0.h +++ b/arch/arm/mach-shmobile/include/mach/sh73a0.h | |||
@@ -557,4 +557,6 @@ enum { | |||
557 | #define SH73A0_PINT0_IRQ(irq) ((irq) + 700) | 557 | #define SH73A0_PINT0_IRQ(irq) ((irq) + 700) |
558 | #define SH73A0_PINT1_IRQ(irq) ((irq) + 732) | 558 | #define SH73A0_PINT1_IRQ(irq) ((irq) + 732) |
559 | 559 | ||
560 | extern struct smp_operations sh73a0_smp_ops; | ||
561 | |||
560 | #endif /* __ASM_SH73A0_H__ */ | 562 | #endif /* __ASM_SH73A0_H__ */ |
diff --git a/arch/arm/mach-shmobile/intc-r8a7779.c b/arch/arm/mach-shmobile/intc-r8a7779.c index f04fad4ec4fb..ef66f1a8aa2e 100644 --- a/arch/arm/mach-shmobile/intc-r8a7779.c +++ b/arch/arm/mach-shmobile/intc-r8a7779.c | |||
@@ -29,14 +29,14 @@ | |||
29 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
30 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
31 | 31 | ||
32 | #define INT2SMSKCR0 0xfe7822a0 | 32 | #define INT2SMSKCR0 IOMEM(0xfe7822a0) |
33 | #define INT2SMSKCR1 0xfe7822a4 | 33 | #define INT2SMSKCR1 IOMEM(0xfe7822a4) |
34 | #define INT2SMSKCR2 0xfe7822a8 | 34 | #define INT2SMSKCR2 IOMEM(0xfe7822a8) |
35 | #define INT2SMSKCR3 0xfe7822ac | 35 | #define INT2SMSKCR3 IOMEM(0xfe7822ac) |
36 | #define INT2SMSKCR4 0xfe7822b0 | 36 | #define INT2SMSKCR4 IOMEM(0xfe7822b0) |
37 | 37 | ||
38 | #define INT2NTSR0 0xfe700060 | 38 | #define INT2NTSR0 IOMEM(0xfe700060) |
39 | #define INT2NTSR1 0xfe700064 | 39 | #define INT2NTSR1 IOMEM(0xfe700064) |
40 | 40 | ||
41 | static int r8a7779_set_wake(struct irq_data *data, unsigned int on) | 41 | static int r8a7779_set_wake(struct irq_data *data, unsigned int on) |
42 | { | 42 | { |
diff --git a/arch/arm/mach-shmobile/intc-sh7372.c b/arch/arm/mach-shmobile/intc-sh7372.c index 2587a22842f2..a91caad7db7c 100644 --- a/arch/arm/mach-shmobile/intc-sh7372.c +++ b/arch/arm/mach-shmobile/intc-sh7372.c | |||
@@ -624,6 +624,9 @@ void sh7372_intcs_resume(void) | |||
624 | __raw_writeb(ffd5[k], intcs_ffd5 + k); | 624 | __raw_writeb(ffd5[k], intcs_ffd5 + k); |
625 | } | 625 | } |
626 | 626 | ||
627 | #define E694_BASE IOMEM(0xe6940000) | ||
628 | #define E695_BASE IOMEM(0xe6950000) | ||
629 | |||
627 | static unsigned short e694[0x200]; | 630 | static unsigned short e694[0x200]; |
628 | static unsigned short e695[0x200]; | 631 | static unsigned short e695[0x200]; |
629 | 632 | ||
@@ -632,22 +635,22 @@ void sh7372_intca_suspend(void) | |||
632 | int k; | 635 | int k; |
633 | 636 | ||
634 | for (k = 0x00; k <= 0x38; k += 4) | 637 | for (k = 0x00; k <= 0x38; k += 4) |
635 | e694[k] = __raw_readw(0xe6940000 + k); | 638 | e694[k] = __raw_readw(E694_BASE + k); |
636 | 639 | ||
637 | for (k = 0x80; k <= 0xb4; k += 4) | 640 | for (k = 0x80; k <= 0xb4; k += 4) |
638 | e694[k] = __raw_readb(0xe6940000 + k); | 641 | e694[k] = __raw_readb(E694_BASE + k); |
639 | 642 | ||
640 | for (k = 0x180; k <= 0x1b4; k += 4) | 643 | for (k = 0x180; k <= 0x1b4; k += 4) |
641 | e694[k] = __raw_readb(0xe6940000 + k); | 644 | e694[k] = __raw_readb(E694_BASE + k); |
642 | 645 | ||
643 | for (k = 0x00; k <= 0x50; k += 4) | 646 | for (k = 0x00; k <= 0x50; k += 4) |
644 | e695[k] = __raw_readw(0xe6950000 + k); | 647 | e695[k] = __raw_readw(E695_BASE + k); |
645 | 648 | ||
646 | for (k = 0x80; k <= 0xa8; k += 4) | 649 | for (k = 0x80; k <= 0xa8; k += 4) |
647 | e695[k] = __raw_readb(0xe6950000 + k); | 650 | e695[k] = __raw_readb(E695_BASE + k); |
648 | 651 | ||
649 | for (k = 0x180; k <= 0x1a8; k += 4) | 652 | for (k = 0x180; k <= 0x1a8; k += 4) |
650 | e695[k] = __raw_readb(0xe6950000 + k); | 653 | e695[k] = __raw_readb(E695_BASE + k); |
651 | } | 654 | } |
652 | 655 | ||
653 | void sh7372_intca_resume(void) | 656 | void sh7372_intca_resume(void) |
@@ -655,20 +658,20 @@ void sh7372_intca_resume(void) | |||
655 | int k; | 658 | int k; |
656 | 659 | ||
657 | for (k = 0x00; k <= 0x38; k += 4) | 660 | for (k = 0x00; k <= 0x38; k += 4) |
658 | __raw_writew(e694[k], 0xe6940000 + k); | 661 | __raw_writew(e694[k], E694_BASE + k); |
659 | 662 | ||
660 | for (k = 0x80; k <= 0xb4; k += 4) | 663 | for (k = 0x80; k <= 0xb4; k += 4) |
661 | __raw_writeb(e694[k], 0xe6940000 + k); | 664 | __raw_writeb(e694[k], E694_BASE + k); |
662 | 665 | ||
663 | for (k = 0x180; k <= 0x1b4; k += 4) | 666 | for (k = 0x180; k <= 0x1b4; k += 4) |
664 | __raw_writeb(e694[k], 0xe6940000 + k); | 667 | __raw_writeb(e694[k], E694_BASE + k); |
665 | 668 | ||
666 | for (k = 0x00; k <= 0x50; k += 4) | 669 | for (k = 0x00; k <= 0x50; k += 4) |
667 | __raw_writew(e695[k], 0xe6950000 + k); | 670 | __raw_writew(e695[k], E695_BASE + k); |
668 | 671 | ||
669 | for (k = 0x80; k <= 0xa8; k += 4) | 672 | for (k = 0x80; k <= 0xa8; k += 4) |
670 | __raw_writeb(e695[k], 0xe6950000 + k); | 673 | __raw_writeb(e695[k], E695_BASE + k); |
671 | 674 | ||
672 | for (k = 0x180; k <= 0x1a8; k += 4) | 675 | for (k = 0x180; k <= 0x1a8; k += 4) |
673 | __raw_writeb(e695[k], 0xe6950000 + k); | 676 | __raw_writeb(e695[k], E695_BASE + k); |
674 | } | 677 | } |
diff --git a/arch/arm/mach-shmobile/intc-sh73a0.c b/arch/arm/mach-shmobile/intc-sh73a0.c index 588555a67d9c..f0c5e5190601 100644 --- a/arch/arm/mach-shmobile/intc-sh73a0.c +++ b/arch/arm/mach-shmobile/intc-sh73a0.c | |||
@@ -366,10 +366,12 @@ static irqreturn_t sh73a0_irq_pin_demux(int irq, void *dev_id) | |||
366 | 366 | ||
367 | static struct irqaction sh73a0_irq_pin_cascade[32]; | 367 | static struct irqaction sh73a0_irq_pin_cascade[32]; |
368 | 368 | ||
369 | #define PINTER0 0xe69000a0 | 369 | #define PINTER0_PHYS 0xe69000a0 |
370 | #define PINTER1 0xe69000a4 | 370 | #define PINTER1_PHYS 0xe69000a4 |
371 | #define PINTRR0 0xe69000d0 | 371 | #define PINTER0_VIRT IOMEM(0xe69000a0) |
372 | #define PINTRR1 0xe69000d4 | 372 | #define PINTER1_VIRT IOMEM(0xe69000a4) |
373 | #define PINTRR0 IOMEM(0xe69000d0) | ||
374 | #define PINTRR1 IOMEM(0xe69000d4) | ||
373 | 375 | ||
374 | #define PINT0A_IRQ(n, irq) INTC_IRQ((n), SH73A0_PINT0_IRQ(irq)) | 376 | #define PINT0A_IRQ(n, irq) INTC_IRQ((n), SH73A0_PINT0_IRQ(irq)) |
375 | #define PINT0B_IRQ(n, irq) INTC_IRQ((n), SH73A0_PINT0_IRQ(irq + 8)) | 377 | #define PINT0B_IRQ(n, irq) INTC_IRQ((n), SH73A0_PINT0_IRQ(irq + 8)) |
@@ -377,14 +379,14 @@ static struct irqaction sh73a0_irq_pin_cascade[32]; | |||
377 | #define PINT0D_IRQ(n, irq) INTC_IRQ((n), SH73A0_PINT0_IRQ(irq + 24)) | 379 | #define PINT0D_IRQ(n, irq) INTC_IRQ((n), SH73A0_PINT0_IRQ(irq + 24)) |
378 | #define PINT1E_IRQ(n, irq) INTC_IRQ((n), SH73A0_PINT1_IRQ(irq)) | 380 | #define PINT1E_IRQ(n, irq) INTC_IRQ((n), SH73A0_PINT1_IRQ(irq)) |
379 | 381 | ||
380 | INTC_PINT(intc_pint0, PINTER0, 0xe69000b0, "sh73a0-pint0", \ | 382 | INTC_PINT(intc_pint0, PINTER0_PHYS, 0xe69000b0, "sh73a0-pint0", \ |
381 | INTC_PINT_E(A), INTC_PINT_E(B), INTC_PINT_E(C), INTC_PINT_E(D), \ | 383 | INTC_PINT_E(A), INTC_PINT_E(B), INTC_PINT_E(C), INTC_PINT_E(D), \ |
382 | INTC_PINT_V(A, PINT0A_IRQ), INTC_PINT_V(B, PINT0B_IRQ), \ | 384 | INTC_PINT_V(A, PINT0A_IRQ), INTC_PINT_V(B, PINT0B_IRQ), \ |
383 | INTC_PINT_V(C, PINT0C_IRQ), INTC_PINT_V(D, PINT0D_IRQ), \ | 385 | INTC_PINT_V(C, PINT0C_IRQ), INTC_PINT_V(D, PINT0D_IRQ), \ |
384 | INTC_PINT_E(A), INTC_PINT_E(B), INTC_PINT_E(C), INTC_PINT_E(D), \ | 386 | INTC_PINT_E(A), INTC_PINT_E(B), INTC_PINT_E(C), INTC_PINT_E(D), \ |
385 | INTC_PINT_E(A), INTC_PINT_E(B), INTC_PINT_E(C), INTC_PINT_E(D)); | 387 | INTC_PINT_E(A), INTC_PINT_E(B), INTC_PINT_E(C), INTC_PINT_E(D)); |
386 | 388 | ||
387 | INTC_PINT(intc_pint1, PINTER1, 0xe69000c0, "sh73a0-pint1", \ | 389 | INTC_PINT(intc_pint1, PINTER1_PHYS, 0xe69000c0, "sh73a0-pint1", \ |
388 | INTC_PINT_E(E), INTC_PINT_E_EMPTY, INTC_PINT_E_EMPTY, INTC_PINT_E_EMPTY, \ | 390 | INTC_PINT_E(E), INTC_PINT_E_EMPTY, INTC_PINT_E_EMPTY, INTC_PINT_E_EMPTY, \ |
389 | INTC_PINT_V(E, PINT1E_IRQ), INTC_PINT_V_NONE, \ | 391 | INTC_PINT_V(E, PINT1E_IRQ), INTC_PINT_V_NONE, \ |
390 | INTC_PINT_V_NONE, INTC_PINT_V_NONE, \ | 392 | INTC_PINT_V_NONE, INTC_PINT_V_NONE, \ |
@@ -394,7 +396,7 @@ INTC_PINT(intc_pint1, PINTER1, 0xe69000c0, "sh73a0-pint1", \ | |||
394 | static struct irqaction sh73a0_pint0_cascade; | 396 | static struct irqaction sh73a0_pint0_cascade; |
395 | static struct irqaction sh73a0_pint1_cascade; | 397 | static struct irqaction sh73a0_pint1_cascade; |
396 | 398 | ||
397 | static void pint_demux(unsigned long rr, unsigned long er, int base_irq) | 399 | static void pint_demux(void __iomem *rr, void __iomem *er, int base_irq) |
398 | { | 400 | { |
399 | unsigned long value = ioread32(rr) & ioread32(er); | 401 | unsigned long value = ioread32(rr) & ioread32(er); |
400 | int k; | 402 | int k; |
@@ -409,13 +411,13 @@ static void pint_demux(unsigned long rr, unsigned long er, int base_irq) | |||
409 | 411 | ||
410 | static irqreturn_t sh73a0_pint0_demux(int irq, void *dev_id) | 412 | static irqreturn_t sh73a0_pint0_demux(int irq, void *dev_id) |
411 | { | 413 | { |
412 | pint_demux(PINTRR0, PINTER0, SH73A0_PINT0_IRQ(0)); | 414 | pint_demux(PINTRR0, PINTER0_VIRT, SH73A0_PINT0_IRQ(0)); |
413 | return IRQ_HANDLED; | 415 | return IRQ_HANDLED; |
414 | } | 416 | } |
415 | 417 | ||
416 | static irqreturn_t sh73a0_pint1_demux(int irq, void *dev_id) | 418 | static irqreturn_t sh73a0_pint1_demux(int irq, void *dev_id) |
417 | { | 419 | { |
418 | pint_demux(PINTRR1, PINTER1, SH73A0_PINT1_IRQ(0)); | 420 | pint_demux(PINTRR1, PINTER1_VIRT, SH73A0_PINT1_IRQ(0)); |
419 | return IRQ_HANDLED; | 421 | return IRQ_HANDLED; |
420 | } | 422 | } |
421 | 423 | ||
diff --git a/arch/arm/mach-shmobile/pfc-r8a7740.c b/arch/arm/mach-shmobile/pfc-r8a7740.c index ce9e7fa5cc8a..134d1b9a8821 100644 --- a/arch/arm/mach-shmobile/pfc-r8a7740.c +++ b/arch/arm/mach-shmobile/pfc-r8a7740.c | |||
@@ -20,7 +20,7 @@ | |||
20 | */ | 20 | */ |
21 | #include <linux/init.h> | 21 | #include <linux/init.h> |
22 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
23 | #include <linux/gpio.h> | 23 | #include <linux/sh_pfc.h> |
24 | #include <mach/r8a7740.h> | 24 | #include <mach/r8a7740.h> |
25 | #include <mach/irqs.h> | 25 | #include <mach/irqs.h> |
26 | 26 | ||
diff --git a/arch/arm/mach-shmobile/pfc-r8a7779.c b/arch/arm/mach-shmobile/pfc-r8a7779.c index d14c9b048077..cbc26ba2a0a2 100644 --- a/arch/arm/mach-shmobile/pfc-r8a7779.c +++ b/arch/arm/mach-shmobile/pfc-r8a7779.c | |||
@@ -19,7 +19,7 @@ | |||
19 | */ | 19 | */ |
20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
21 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
22 | #include <linux/gpio.h> | 22 | #include <linux/sh_pfc.h> |
23 | #include <linux/ioport.h> | 23 | #include <linux/ioport.h> |
24 | #include <mach/r8a7779.h> | 24 | #include <mach/r8a7779.h> |
25 | 25 | ||
diff --git a/arch/arm/mach-shmobile/pfc-sh7367.c b/arch/arm/mach-shmobile/pfc-sh7367.c index e6e524654e67..c0c137f39052 100644 --- a/arch/arm/mach-shmobile/pfc-sh7367.c +++ b/arch/arm/mach-shmobile/pfc-sh7367.c | |||
@@ -18,7 +18,7 @@ | |||
18 | */ | 18 | */ |
19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
20 | #include <linux/kernel.h> | 20 | #include <linux/kernel.h> |
21 | #include <linux/gpio.h> | 21 | #include <linux/sh_pfc.h> |
22 | #include <mach/sh7367.h> | 22 | #include <mach/sh7367.h> |
23 | 23 | ||
24 | #define CPU_ALL_PORT(fn, pfx, sfx) \ | 24 | #define CPU_ALL_PORT(fn, pfx, sfx) \ |
diff --git a/arch/arm/mach-shmobile/pfc-sh7372.c b/arch/arm/mach-shmobile/pfc-sh7372.c index 336093f9210a..7a1525fd6ada 100644 --- a/arch/arm/mach-shmobile/pfc-sh7372.c +++ b/arch/arm/mach-shmobile/pfc-sh7372.c | |||
@@ -22,7 +22,7 @@ | |||
22 | */ | 22 | */ |
23 | #include <linux/init.h> | 23 | #include <linux/init.h> |
24 | #include <linux/kernel.h> | 24 | #include <linux/kernel.h> |
25 | #include <linux/gpio.h> | 25 | #include <linux/sh_pfc.h> |
26 | #include <mach/irqs.h> | 26 | #include <mach/irqs.h> |
27 | #include <mach/sh7372.h> | 27 | #include <mach/sh7372.h> |
28 | 28 | ||
diff --git a/arch/arm/mach-shmobile/pfc-sh7377.c b/arch/arm/mach-shmobile/pfc-sh7377.c index 2f10511946ad..f3117f67fa25 100644 --- a/arch/arm/mach-shmobile/pfc-sh7377.c +++ b/arch/arm/mach-shmobile/pfc-sh7377.c | |||
@@ -19,7 +19,7 @@ | |||
19 | */ | 19 | */ |
20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
21 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
22 | #include <linux/gpio.h> | 22 | #include <linux/sh_pfc.h> |
23 | #include <mach/sh7377.h> | 23 | #include <mach/sh7377.h> |
24 | 24 | ||
25 | #define CPU_ALL_PORT(fn, pfx, sfx) \ | 25 | #define CPU_ALL_PORT(fn, pfx, sfx) \ |
diff --git a/arch/arm/mach-shmobile/pfc-sh73a0.c b/arch/arm/mach-shmobile/pfc-sh73a0.c index 4a547b803268..b442f9d8c716 100644 --- a/arch/arm/mach-shmobile/pfc-sh73a0.c +++ b/arch/arm/mach-shmobile/pfc-sh73a0.c | |||
@@ -20,7 +20,7 @@ | |||
20 | */ | 20 | */ |
21 | #include <linux/init.h> | 21 | #include <linux/init.h> |
22 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
23 | #include <linux/gpio.h> | 23 | #include <linux/sh_pfc.h> |
24 | #include <mach/sh73a0.h> | 24 | #include <mach/sh73a0.h> |
25 | #include <mach/irqs.h> | 25 | #include <mach/irqs.h> |
26 | 26 | ||
diff --git a/arch/arm/mach-shmobile/platsmp.c b/arch/arm/mach-shmobile/platsmp.c index fde0d23121dc..ed8d2351915e 100644 --- a/arch/arm/mach-shmobile/platsmp.c +++ b/arch/arm/mach-shmobile/platsmp.c | |||
@@ -11,100 +11,11 @@ | |||
11 | * published by the Free Software Foundation. | 11 | * published by the Free Software Foundation. |
12 | */ | 12 | */ |
13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
14 | #include <linux/errno.h> | ||
15 | #include <linux/delay.h> | ||
16 | #include <linux/device.h> | ||
17 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
18 | #include <linux/io.h> | ||
19 | #include <linux/of.h> | ||
20 | #include <asm/hardware/gic.h> | 15 | #include <asm/hardware/gic.h> |
21 | #include <asm/mach-types.h> | ||
22 | #include <mach/common.h> | ||
23 | #include <mach/emev2.h> | ||
24 | 16 | ||
25 | #ifdef CONFIG_ARCH_SH73A0 | 17 | void __init shmobile_smp_init_cpus(unsigned int ncores) |
26 | #define is_sh73a0() (machine_is_ag5evm() || machine_is_kota2() || \ | ||
27 | of_machine_is_compatible("renesas,sh73a0")) | ||
28 | #else | ||
29 | #define is_sh73a0() (0) | ||
30 | #endif | ||
31 | |||
32 | #define is_r8a7779() machine_is_marzen() | ||
33 | |||
34 | #ifdef CONFIG_ARCH_EMEV2 | ||
35 | #define is_emev2() of_machine_is_compatible("renesas,emev2") | ||
36 | #else | ||
37 | #define is_emev2() (0) | ||
38 | #endif | ||
39 | |||
40 | static unsigned int __init shmobile_smp_get_core_count(void) | ||
41 | { | ||
42 | if (is_sh73a0()) | ||
43 | return sh73a0_get_core_count(); | ||
44 | |||
45 | if (is_r8a7779()) | ||
46 | return r8a7779_get_core_count(); | ||
47 | |||
48 | if (is_emev2()) | ||
49 | return emev2_get_core_count(); | ||
50 | |||
51 | return 1; | ||
52 | } | ||
53 | |||
54 | static void __init shmobile_smp_prepare_cpus(void) | ||
55 | { | ||
56 | if (is_sh73a0()) | ||
57 | sh73a0_smp_prepare_cpus(); | ||
58 | |||
59 | if (is_r8a7779()) | ||
60 | r8a7779_smp_prepare_cpus(); | ||
61 | |||
62 | if (is_emev2()) | ||
63 | emev2_smp_prepare_cpus(); | ||
64 | } | ||
65 | |||
66 | int shmobile_platform_cpu_kill(unsigned int cpu) | ||
67 | { | ||
68 | if (is_r8a7779()) | ||
69 | return r8a7779_platform_cpu_kill(cpu); | ||
70 | |||
71 | if (is_emev2()) | ||
72 | return emev2_platform_cpu_kill(cpu); | ||
73 | |||
74 | return 1; | ||
75 | } | ||
76 | |||
77 | void __cpuinit platform_secondary_init(unsigned int cpu) | ||
78 | { | 18 | { |
79 | trace_hardirqs_off(); | ||
80 | |||
81 | if (is_sh73a0()) | ||
82 | sh73a0_secondary_init(cpu); | ||
83 | |||
84 | if (is_r8a7779()) | ||
85 | r8a7779_secondary_init(cpu); | ||
86 | |||
87 | if (is_emev2()) | ||
88 | emev2_secondary_init(cpu); | ||
89 | } | ||
90 | |||
91 | int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | ||
92 | { | ||
93 | if (is_sh73a0()) | ||
94 | return sh73a0_boot_secondary(cpu); | ||
95 | |||
96 | if (is_r8a7779()) | ||
97 | return r8a7779_boot_secondary(cpu); | ||
98 | |||
99 | if (is_emev2()) | ||
100 | return emev2_boot_secondary(cpu); | ||
101 | |||
102 | return -ENOSYS; | ||
103 | } | ||
104 | |||
105 | void __init smp_init_cpus(void) | ||
106 | { | ||
107 | unsigned int ncores = shmobile_smp_get_core_count(); | ||
108 | unsigned int i; | 19 | unsigned int i; |
109 | 20 | ||
110 | if (ncores > nr_cpu_ids) { | 21 | if (ncores > nr_cpu_ids) { |
@@ -118,8 +29,3 @@ void __init smp_init_cpus(void) | |||
118 | 29 | ||
119 | set_smp_cross_call(gic_raise_softirq); | 30 | set_smp_cross_call(gic_raise_softirq); |
120 | } | 31 | } |
121 | |||
122 | void __init platform_smp_prepare_cpus(unsigned int max_cpus) | ||
123 | { | ||
124 | shmobile_smp_prepare_cpus(); | ||
125 | } | ||
diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c index a8562540f1d6..32e177275e47 100644 --- a/arch/arm/mach-shmobile/pm-rmobile.c +++ b/arch/arm/mach-shmobile/pm-rmobile.c | |||
@@ -20,9 +20,9 @@ | |||
20 | #include <mach/pm-rmobile.h> | 20 | #include <mach/pm-rmobile.h> |
21 | 21 | ||
22 | /* SYSC */ | 22 | /* SYSC */ |
23 | #define SPDCR 0xe6180008 | 23 | #define SPDCR IOMEM(0xe6180008) |
24 | #define SWUCR 0xe6180014 | 24 | #define SWUCR IOMEM(0xe6180014) |
25 | #define PSTR 0xe6180080 | 25 | #define PSTR IOMEM(0xe6180080) |
26 | 26 | ||
27 | #define PSTR_RETRIES 100 | 27 | #define PSTR_RETRIES 100 |
28 | #define PSTR_DELAY_US 10 | 28 | #define PSTR_DELAY_US 10 |
diff --git a/arch/arm/mach-shmobile/pm-sh7372.c b/arch/arm/mach-shmobile/pm-sh7372.c index 792037069226..162121842a2b 100644 --- a/arch/arm/mach-shmobile/pm-sh7372.c +++ b/arch/arm/mach-shmobile/pm-sh7372.c | |||
@@ -29,45 +29,46 @@ | |||
29 | #include <mach/pm-rmobile.h> | 29 | #include <mach/pm-rmobile.h> |
30 | 30 | ||
31 | /* DBG */ | 31 | /* DBG */ |
32 | #define DBGREG1 0xe6100020 | 32 | #define DBGREG1 IOMEM(0xe6100020) |
33 | #define DBGREG9 0xe6100040 | 33 | #define DBGREG9 IOMEM(0xe6100040) |
34 | 34 | ||
35 | /* CPGA */ | 35 | /* CPGA */ |
36 | #define SYSTBCR 0xe6150024 | 36 | #define SYSTBCR IOMEM(0xe6150024) |
37 | #define MSTPSR0 0xe6150030 | 37 | #define MSTPSR0 IOMEM(0xe6150030) |
38 | #define MSTPSR1 0xe6150038 | 38 | #define MSTPSR1 IOMEM(0xe6150038) |
39 | #define MSTPSR2 0xe6150040 | 39 | #define MSTPSR2 IOMEM(0xe6150040) |
40 | #define MSTPSR3 0xe6150048 | 40 | #define MSTPSR3 IOMEM(0xe6150048) |
41 | #define MSTPSR4 0xe615004c | 41 | #define MSTPSR4 IOMEM(0xe615004c) |
42 | #define PLLC01STPCR 0xe61500c8 | 42 | #define PLLC01STPCR IOMEM(0xe61500c8) |
43 | 43 | ||
44 | /* SYSC */ | 44 | /* SYSC */ |
45 | #define SBAR 0xe6180020 | 45 | #define SBAR IOMEM(0xe6180020) |
46 | #define WUPRMSK 0xe6180028 | 46 | #define WUPRMSK IOMEM(0xe6180028) |
47 | #define WUPSMSK 0xe618002c | 47 | #define WUPSMSK IOMEM(0xe618002c) |
48 | #define WUPSMSK2 0xe6180048 | 48 | #define WUPSMSK2 IOMEM(0xe6180048) |
49 | #define WUPSFAC 0xe6180098 | 49 | #define WUPSFAC IOMEM(0xe6180098) |
50 | #define IRQCR 0xe618022c | 50 | #define IRQCR IOMEM(0xe618022c) |
51 | #define IRQCR2 0xe6180238 | 51 | #define IRQCR2 IOMEM(0xe6180238) |
52 | #define IRQCR3 0xe6180244 | 52 | #define IRQCR3 IOMEM(0xe6180244) |
53 | #define IRQCR4 0xe6180248 | 53 | #define IRQCR4 IOMEM(0xe6180248) |
54 | #define PDNSEL 0xe6180254 | 54 | #define PDNSEL IOMEM(0xe6180254) |
55 | 55 | ||
56 | /* INTC */ | 56 | /* INTC */ |
57 | #define ICR1A 0xe6900000 | 57 | #define ICR1A IOMEM(0xe6900000) |
58 | #define ICR2A 0xe6900004 | 58 | #define ICR2A IOMEM(0xe6900004) |
59 | #define ICR3A 0xe6900008 | 59 | #define ICR3A IOMEM(0xe6900008) |
60 | #define ICR4A 0xe690000c | 60 | #define ICR4A IOMEM(0xe690000c) |
61 | #define INTMSK00A 0xe6900040 | 61 | #define INTMSK00A IOMEM(0xe6900040) |
62 | #define INTMSK10A 0xe6900044 | 62 | #define INTMSK10A IOMEM(0xe6900044) |
63 | #define INTMSK20A 0xe6900048 | 63 | #define INTMSK20A IOMEM(0xe6900048) |
64 | #define INTMSK30A 0xe690004c | 64 | #define INTMSK30A IOMEM(0xe690004c) |
65 | 65 | ||
66 | /* MFIS */ | 66 | /* MFIS */ |
67 | /* FIXME: pointing where? */ | ||
67 | #define SMFRAM 0xe6a70000 | 68 | #define SMFRAM 0xe6a70000 |
68 | 69 | ||
69 | /* AP-System Core */ | 70 | /* AP-System Core */ |
70 | #define APARMBAREA 0xe6f10020 | 71 | #define APARMBAREA IOMEM(0xe6f10020) |
71 | 72 | ||
72 | #ifdef CONFIG_PM | 73 | #ifdef CONFIG_PM |
73 | 74 | ||
diff --git a/arch/arm/mach-shmobile/setup-emev2.c b/arch/arm/mach-shmobile/setup-emev2.c index dae9aa68bb09..a47beeb18283 100644 --- a/arch/arm/mach-shmobile/setup-emev2.c +++ b/arch/arm/mach-shmobile/setup-emev2.c | |||
@@ -356,6 +356,26 @@ static struct platform_device gio4_device = { | |||
356 | }, | 356 | }, |
357 | }; | 357 | }; |
358 | 358 | ||
359 | static struct resource pmu_resources[] = { | ||
360 | [0] = { | ||
361 | .start = 152, | ||
362 | .end = 152, | ||
363 | .flags = IORESOURCE_IRQ, | ||
364 | }, | ||
365 | [1] = { | ||
366 | .start = 153, | ||
367 | .end = 153, | ||
368 | .flags = IORESOURCE_IRQ, | ||
369 | }, | ||
370 | }; | ||
371 | |||
372 | static struct platform_device pmu_device = { | ||
373 | .name = "arm-pmu", | ||
374 | .id = -1, | ||
375 | .num_resources = ARRAY_SIZE(pmu_resources), | ||
376 | .resource = pmu_resources, | ||
377 | }; | ||
378 | |||
359 | static struct platform_device *emev2_early_devices[] __initdata = { | 379 | static struct platform_device *emev2_early_devices[] __initdata = { |
360 | &uart0_device, | 380 | &uart0_device, |
361 | &uart1_device, | 381 | &uart1_device, |
@@ -370,6 +390,7 @@ static struct platform_device *emev2_late_devices[] __initdata = { | |||
370 | &gio2_device, | 390 | &gio2_device, |
371 | &gio3_device, | 391 | &gio3_device, |
372 | &gio4_device, | 392 | &gio4_device, |
393 | &pmu_device, | ||
373 | }; | 394 | }; |
374 | 395 | ||
375 | void __init emev2_add_standard_devices(void) | 396 | void __init emev2_add_standard_devices(void) |
@@ -440,6 +461,7 @@ void __init emev2_init_irq_dt(void) | |||
440 | } | 461 | } |
441 | 462 | ||
442 | DT_MACHINE_START(EMEV2_DT, "Generic Emma Mobile EV2 (Flattened Device Tree)") | 463 | DT_MACHINE_START(EMEV2_DT, "Generic Emma Mobile EV2 (Flattened Device Tree)") |
464 | .smp = smp_ops(emev2_smp_ops), | ||
443 | .init_early = emev2_init_delay, | 465 | .init_early = emev2_init_delay, |
444 | .nr_irqs = NR_IRQS_LEGACY, | 466 | .nr_irqs = NR_IRQS_LEGACY, |
445 | .init_irq = emev2_init_irq_dt, | 467 | .init_irq = emev2_init_irq_dt, |
diff --git a/arch/arm/mach-shmobile/setup-sh7367.c b/arch/arm/mach-shmobile/setup-sh7367.c index 2e3074ab75b3..e647f5410879 100644 --- a/arch/arm/mach-shmobile/setup-sh7367.c +++ b/arch/arm/mach-shmobile/setup-sh7367.c | |||
@@ -462,7 +462,7 @@ static void __init sh7367_earlytimer_init(void) | |||
462 | shmobile_earlytimer_init(); | 462 | shmobile_earlytimer_init(); |
463 | } | 463 | } |
464 | 464 | ||
465 | #define SYMSTPCR2 0xe6158048 | 465 | #define SYMSTPCR2 IOMEM(0xe6158048) |
466 | #define SYMSTPCR2_CMT1 (1 << 29) | 466 | #define SYMSTPCR2_CMT1 (1 << 29) |
467 | 467 | ||
468 | void __init sh7367_add_early_devices(void) | 468 | void __init sh7367_add_early_devices(void) |
diff --git a/arch/arm/mach-shmobile/setup-sh7377.c b/arch/arm/mach-shmobile/setup-sh7377.c index 855b1506caf8..edcf98bb7012 100644 --- a/arch/arm/mach-shmobile/setup-sh7377.c +++ b/arch/arm/mach-shmobile/setup-sh7377.c | |||
@@ -484,7 +484,7 @@ static void __init sh7377_earlytimer_init(void) | |||
484 | shmobile_earlytimer_init(); | 484 | shmobile_earlytimer_init(); |
485 | } | 485 | } |
486 | 486 | ||
487 | #define SMSTPCR3 0xe615013c | 487 | #define SMSTPCR3 IOMEM(0xe615013c) |
488 | #define SMSTPCR3_CMT1 (1 << 29) | 488 | #define SMSTPCR3_CMT1 (1 << 29) |
489 | 489 | ||
490 | void __init sh7377_add_early_devices(void) | 490 | void __init sh7377_add_early_devices(void) |
diff --git a/arch/arm/mach-shmobile/setup-sh73a0.c b/arch/arm/mach-shmobile/setup-sh73a0.c index d230af656fc9..db99a4ade80c 100644 --- a/arch/arm/mach-shmobile/setup-sh73a0.c +++ b/arch/arm/mach-shmobile/setup-sh73a0.c | |||
@@ -734,6 +734,26 @@ static struct platform_device mpdma0_device = { | |||
734 | }, | 734 | }, |
735 | }; | 735 | }; |
736 | 736 | ||
737 | static struct resource pmu_resources[] = { | ||
738 | [0] = { | ||
739 | .start = gic_spi(55), | ||
740 | .end = gic_spi(55), | ||
741 | .flags = IORESOURCE_IRQ, | ||
742 | }, | ||
743 | [1] = { | ||
744 | .start = gic_spi(56), | ||
745 | .end = gic_spi(56), | ||
746 | .flags = IORESOURCE_IRQ, | ||
747 | }, | ||
748 | }; | ||
749 | |||
750 | static struct platform_device pmu_device = { | ||
751 | .name = "arm-pmu", | ||
752 | .id = -1, | ||
753 | .num_resources = ARRAY_SIZE(pmu_resources), | ||
754 | .resource = pmu_resources, | ||
755 | }; | ||
756 | |||
737 | static struct platform_device *sh73a0_early_devices[] __initdata = { | 757 | static struct platform_device *sh73a0_early_devices[] __initdata = { |
738 | &scif0_device, | 758 | &scif0_device, |
739 | &scif1_device, | 759 | &scif1_device, |
@@ -757,9 +777,10 @@ static struct platform_device *sh73a0_late_devices[] __initdata = { | |||
757 | &i2c4_device, | 777 | &i2c4_device, |
758 | &dma0_device, | 778 | &dma0_device, |
759 | &mpdma0_device, | 779 | &mpdma0_device, |
780 | &pmu_device, | ||
760 | }; | 781 | }; |
761 | 782 | ||
762 | #define SRCR2 0xe61580b0 | 783 | #define SRCR2 IOMEM(0xe61580b0) |
763 | 784 | ||
764 | void __init sh73a0_add_standard_devices(void) | 785 | void __init sh73a0_add_standard_devices(void) |
765 | { | 786 | { |
diff --git a/arch/arm/mach-shmobile/include/mach/gpio.h b/arch/arm/mach-shmobile/sh-gpio.h index 844507d937cb..e834763ac2a5 100644 --- a/arch/arm/mach-shmobile/include/mach/gpio.h +++ b/arch/arm/mach-shmobile/sh-gpio.h | |||
@@ -12,22 +12,8 @@ | |||
12 | 12 | ||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/errno.h> | 14 | #include <linux/errno.h> |
15 | #include <linux/sh_pfc.h> | ||
16 | #include <linux/io.h> | 15 | #include <linux/io.h> |
17 | 16 | ||
18 | #ifdef CONFIG_GPIOLIB | ||
19 | |||
20 | static inline int irq_to_gpio(unsigned int irq) | ||
21 | { | ||
22 | return -ENOSYS; | ||
23 | } | ||
24 | |||
25 | #else | ||
26 | |||
27 | #define __ARM_GPIOLIB_COMPLEX | ||
28 | |||
29 | #endif /* CONFIG_GPIOLIB */ | ||
30 | |||
31 | /* | 17 | /* |
32 | * FIXME !! | 18 | * FIXME !! |
33 | * | 19 | * |
@@ -35,12 +21,12 @@ static inline int irq_to_gpio(unsigned int irq) | |||
35 | * the method to control only pull up/down/free. | 21 | * the method to control only pull up/down/free. |
36 | * this function should be replaced by correct gpio function | 22 | * this function should be replaced by correct gpio function |
37 | */ | 23 | */ |
38 | static inline void __init gpio_direction_none(u32 addr) | 24 | static inline void __init gpio_direction_none(void __iomem * addr) |
39 | { | 25 | { |
40 | __raw_writeb(0x00, addr); | 26 | __raw_writeb(0x00, addr); |
41 | } | 27 | } |
42 | 28 | ||
43 | static inline void __init gpio_request_pullup(u32 addr) | 29 | static inline void __init gpio_request_pullup(void __iomem * addr) |
44 | { | 30 | { |
45 | u8 data = __raw_readb(addr); | 31 | u8 data = __raw_readb(addr); |
46 | 32 | ||
@@ -49,7 +35,7 @@ static inline void __init gpio_request_pullup(u32 addr) | |||
49 | __raw_writeb(data, addr); | 35 | __raw_writeb(data, addr); |
50 | } | 36 | } |
51 | 37 | ||
52 | static inline void __init gpio_request_pulldown(u32 addr) | 38 | static inline void __init gpio_request_pulldown(void __iomem * addr) |
53 | { | 39 | { |
54 | u8 data = __raw_readb(addr); | 40 | u8 data = __raw_readb(addr); |
55 | 41 | ||
diff --git a/arch/arm/mach-shmobile/smp-emev2.c b/arch/arm/mach-shmobile/smp-emev2.c index 6a35c4a31e6c..f978c5d0e1ae 100644 --- a/arch/arm/mach-shmobile/smp-emev2.c +++ b/arch/arm/mach-shmobile/smp-emev2.c | |||
@@ -50,7 +50,7 @@ static void modify_scu_cpu_psr(unsigned long set, unsigned long clr) | |||
50 | 50 | ||
51 | } | 51 | } |
52 | 52 | ||
53 | unsigned int __init emev2_get_core_count(void) | 53 | static unsigned int __init emev2_get_core_count(void) |
54 | { | 54 | { |
55 | if (!scu_base) { | 55 | if (!scu_base) { |
56 | scu_base = ioremap(EMEV2_SCU_BASE, PAGE_SIZE); | 56 | scu_base = ioremap(EMEV2_SCU_BASE, PAGE_SIZE); |
@@ -62,17 +62,35 @@ unsigned int __init emev2_get_core_count(void) | |||
62 | return scu_base ? scu_get_core_count(scu_base) : 1; | 62 | return scu_base ? scu_get_core_count(scu_base) : 1; |
63 | } | 63 | } |
64 | 64 | ||
65 | int emev2_platform_cpu_kill(unsigned int cpu) | 65 | static int emev2_platform_cpu_kill(unsigned int cpu) |
66 | { | 66 | { |
67 | return 0; /* not supported yet */ | 67 | return 0; /* not supported yet */ |
68 | } | 68 | } |
69 | 69 | ||
70 | void __cpuinit emev2_secondary_init(unsigned int cpu) | 70 | static int __maybe_unused emev2_cpu_kill(unsigned int cpu) |
71 | { | ||
72 | int k; | ||
73 | |||
74 | /* this function is running on another CPU than the offline target, | ||
75 | * here we need wait for shutdown code in platform_cpu_die() to | ||
76 | * finish before asking SoC-specific code to power off the CPU core. | ||
77 | */ | ||
78 | for (k = 0; k < 1000; k++) { | ||
79 | if (shmobile_cpu_is_dead(cpu)) | ||
80 | return emev2_platform_cpu_kill(cpu); | ||
81 | mdelay(1); | ||
82 | } | ||
83 | |||
84 | return 0; | ||
85 | } | ||
86 | |||
87 | |||
88 | static void __cpuinit emev2_secondary_init(unsigned int cpu) | ||
71 | { | 89 | { |
72 | gic_secondary_init(0); | 90 | gic_secondary_init(0); |
73 | } | 91 | } |
74 | 92 | ||
75 | int __cpuinit emev2_boot_secondary(unsigned int cpu) | 93 | static int __cpuinit emev2_boot_secondary(unsigned int cpu, struct task_struct *idle) |
76 | { | 94 | { |
77 | cpu = cpu_logical_map(cpu); | 95 | cpu = cpu_logical_map(cpu); |
78 | 96 | ||
@@ -86,7 +104,7 @@ int __cpuinit emev2_boot_secondary(unsigned int cpu) | |||
86 | return 0; | 104 | return 0; |
87 | } | 105 | } |
88 | 106 | ||
89 | void __init emev2_smp_prepare_cpus(void) | 107 | static void __init emev2_smp_prepare_cpus(unsigned int max_cpus) |
90 | { | 108 | { |
91 | int cpu = cpu_logical_map(0); | 109 | int cpu = cpu_logical_map(0); |
92 | 110 | ||
@@ -95,3 +113,22 @@ void __init emev2_smp_prepare_cpus(void) | |||
95 | /* enable cache coherency on CPU0 */ | 113 | /* enable cache coherency on CPU0 */ |
96 | modify_scu_cpu_psr(0, 3 << (cpu * 8)); | 114 | modify_scu_cpu_psr(0, 3 << (cpu * 8)); |
97 | } | 115 | } |
116 | |||
117 | static void __init emev2_smp_init_cpus(void) | ||
118 | { | ||
119 | unsigned int ncores = emev2_get_core_count(); | ||
120 | |||
121 | shmobile_smp_init_cpus(ncores); | ||
122 | } | ||
123 | |||
124 | struct smp_operations emev2_smp_ops __initdata = { | ||
125 | .smp_init_cpus = emev2_smp_init_cpus, | ||
126 | .smp_prepare_cpus = emev2_smp_prepare_cpus, | ||
127 | .smp_secondary_init = emev2_secondary_init, | ||
128 | .smp_boot_secondary = emev2_boot_secondary, | ||
129 | #ifdef CONFIG_HOTPLUG_CPU | ||
130 | .cpu_kill = emev2_cpu_kill, | ||
131 | .cpu_die = shmobile_cpu_die, | ||
132 | .cpu_disable = shmobile_cpu_disable, | ||
133 | #endif | ||
134 | }; | ||
diff --git a/arch/arm/mach-shmobile/smp-r8a7779.c b/arch/arm/mach-shmobile/smp-r8a7779.c index 6d1d0238cbf7..2ce6af9a6a37 100644 --- a/arch/arm/mach-shmobile/smp-r8a7779.c +++ b/arch/arm/mach-shmobile/smp-r8a7779.c | |||
@@ -87,14 +87,14 @@ static void modify_scu_cpu_psr(unsigned long set, unsigned long clr) | |||
87 | __raw_writel(tmp, scu_base + 8); | 87 | __raw_writel(tmp, scu_base + 8); |
88 | } | 88 | } |
89 | 89 | ||
90 | unsigned int __init r8a7779_get_core_count(void) | 90 | static unsigned int __init r8a7779_get_core_count(void) |
91 | { | 91 | { |
92 | void __iomem *scu_base = scu_base_addr(); | 92 | void __iomem *scu_base = scu_base_addr(); |
93 | 93 | ||
94 | return scu_get_core_count(scu_base); | 94 | return scu_get_core_count(scu_base); |
95 | } | 95 | } |
96 | 96 | ||
97 | int r8a7779_platform_cpu_kill(unsigned int cpu) | 97 | static int r8a7779_platform_cpu_kill(unsigned int cpu) |
98 | { | 98 | { |
99 | struct r8a7779_pm_ch *ch = NULL; | 99 | struct r8a7779_pm_ch *ch = NULL; |
100 | int ret = -EIO; | 100 | int ret = -EIO; |
@@ -113,12 +113,31 @@ int r8a7779_platform_cpu_kill(unsigned int cpu) | |||
113 | return ret ? ret : 1; | 113 | return ret ? ret : 1; |
114 | } | 114 | } |
115 | 115 | ||
116 | void __cpuinit r8a7779_secondary_init(unsigned int cpu) | 116 | static int __maybe_unused r8a7779_cpu_kill(unsigned int cpu) |
117 | { | ||
118 | int k; | ||
119 | |||
120 | /* this function is running on another CPU than the offline target, | ||
121 | * here we need wait for shutdown code in platform_cpu_die() to | ||
122 | * finish before asking SoC-specific code to power off the CPU core. | ||
123 | */ | ||
124 | for (k = 0; k < 1000; k++) { | ||
125 | if (shmobile_cpu_is_dead(cpu)) | ||
126 | return r8a7779_platform_cpu_kill(cpu); | ||
127 | |||
128 | mdelay(1); | ||
129 | } | ||
130 | |||
131 | return 0; | ||
132 | } | ||
133 | |||
134 | |||
135 | static void __cpuinit r8a7779_secondary_init(unsigned int cpu) | ||
117 | { | 136 | { |
118 | gic_secondary_init(0); | 137 | gic_secondary_init(0); |
119 | } | 138 | } |
120 | 139 | ||
121 | int __cpuinit r8a7779_boot_secondary(unsigned int cpu) | 140 | static int __cpuinit r8a7779_boot_secondary(unsigned int cpu, struct task_struct *idle) |
122 | { | 141 | { |
123 | struct r8a7779_pm_ch *ch = NULL; | 142 | struct r8a7779_pm_ch *ch = NULL; |
124 | int ret = -EIO; | 143 | int ret = -EIO; |
@@ -137,7 +156,7 @@ int __cpuinit r8a7779_boot_secondary(unsigned int cpu) | |||
137 | return ret; | 156 | return ret; |
138 | } | 157 | } |
139 | 158 | ||
140 | void __init r8a7779_smp_prepare_cpus(void) | 159 | static void __init r8a7779_smp_prepare_cpus(unsigned int max_cpus) |
141 | { | 160 | { |
142 | int cpu = cpu_logical_map(0); | 161 | int cpu = cpu_logical_map(0); |
143 | 162 | ||
@@ -156,3 +175,22 @@ void __init r8a7779_smp_prepare_cpus(void) | |||
156 | r8a7779_platform_cpu_kill(2); | 175 | r8a7779_platform_cpu_kill(2); |
157 | r8a7779_platform_cpu_kill(3); | 176 | r8a7779_platform_cpu_kill(3); |
158 | } | 177 | } |
178 | |||
179 | static void __init r8a7779_smp_init_cpus(void) | ||
180 | { | ||
181 | unsigned int ncores = r8a7779_get_core_count(); | ||
182 | |||
183 | shmobile_smp_init_cpus(ncores); | ||
184 | } | ||
185 | |||
186 | struct smp_operations r8a7779_smp_ops __initdata = { | ||
187 | .smp_init_cpus = r8a7779_smp_init_cpus, | ||
188 | .smp_prepare_cpus = r8a7779_smp_prepare_cpus, | ||
189 | .smp_secondary_init = r8a7779_secondary_init, | ||
190 | .smp_boot_secondary = r8a7779_boot_secondary, | ||
191 | #ifdef CONFIG_HOTPLUG_CPU | ||
192 | .cpu_kill = r8a7779_cpu_kill, | ||
193 | .cpu_die = shmobile_cpu_die, | ||
194 | .cpu_disable = shmobile_cpu_disable, | ||
195 | #endif | ||
196 | }; | ||
diff --git a/arch/arm/mach-shmobile/smp-sh73a0.c b/arch/arm/mach-shmobile/smp-sh73a0.c index e36c41c4ab40..624f00f70abf 100644 --- a/arch/arm/mach-shmobile/smp-sh73a0.c +++ b/arch/arm/mach-shmobile/smp-sh73a0.c | |||
@@ -22,8 +22,10 @@ | |||
22 | #include <linux/smp.h> | 22 | #include <linux/smp.h> |
23 | #include <linux/spinlock.h> | 23 | #include <linux/spinlock.h> |
24 | #include <linux/io.h> | 24 | #include <linux/io.h> |
25 | #include <linux/delay.h> | ||
25 | #include <mach/common.h> | 26 | #include <mach/common.h> |
26 | #include <asm/smp_plat.h> | 27 | #include <asm/smp_plat.h> |
28 | #include <mach/sh73a0.h> | ||
27 | #include <asm/smp_scu.h> | 29 | #include <asm/smp_scu.h> |
28 | #include <asm/smp_twd.h> | 30 | #include <asm/smp_twd.h> |
29 | #include <asm/hardware/gic.h> | 31 | #include <asm/hardware/gic.h> |
@@ -64,19 +66,19 @@ static void modify_scu_cpu_psr(unsigned long set, unsigned long clr) | |||
64 | __raw_writel(tmp, scu_base + 8); | 66 | __raw_writel(tmp, scu_base + 8); |
65 | } | 67 | } |
66 | 68 | ||
67 | unsigned int __init sh73a0_get_core_count(void) | 69 | static unsigned int __init sh73a0_get_core_count(void) |
68 | { | 70 | { |
69 | void __iomem *scu_base = scu_base_addr(); | 71 | void __iomem *scu_base = scu_base_addr(); |
70 | 72 | ||
71 | return scu_get_core_count(scu_base); | 73 | return scu_get_core_count(scu_base); |
72 | } | 74 | } |
73 | 75 | ||
74 | void __cpuinit sh73a0_secondary_init(unsigned int cpu) | 76 | static void __cpuinit sh73a0_secondary_init(unsigned int cpu) |
75 | { | 77 | { |
76 | gic_secondary_init(0); | 78 | gic_secondary_init(0); |
77 | } | 79 | } |
78 | 80 | ||
79 | int __cpuinit sh73a0_boot_secondary(unsigned int cpu) | 81 | static int __cpuinit sh73a0_boot_secondary(unsigned int cpu, struct task_struct *idle) |
80 | { | 82 | { |
81 | cpu = cpu_logical_map(cpu); | 83 | cpu = cpu_logical_map(cpu); |
82 | 84 | ||
@@ -91,7 +93,7 @@ int __cpuinit sh73a0_boot_secondary(unsigned int cpu) | |||
91 | return 0; | 93 | return 0; |
92 | } | 94 | } |
93 | 95 | ||
94 | void __init sh73a0_smp_prepare_cpus(void) | 96 | static void __init sh73a0_smp_prepare_cpus(unsigned int max_cpus) |
95 | { | 97 | { |
96 | int cpu = cpu_logical_map(0); | 98 | int cpu = cpu_logical_map(0); |
97 | 99 | ||
@@ -104,3 +106,41 @@ void __init sh73a0_smp_prepare_cpus(void) | |||
104 | /* enable cache coherency on CPU0 */ | 106 | /* enable cache coherency on CPU0 */ |
105 | modify_scu_cpu_psr(0, 3 << (cpu * 8)); | 107 | modify_scu_cpu_psr(0, 3 << (cpu * 8)); |
106 | } | 108 | } |
109 | |||
110 | static void __init sh73a0_smp_init_cpus(void) | ||
111 | { | ||
112 | unsigned int ncores = sh73a0_get_core_count(); | ||
113 | |||
114 | shmobile_smp_init_cpus(ncores); | ||
115 | } | ||
116 | |||
117 | static int __maybe_unused sh73a0_cpu_kill(unsigned int cpu) | ||
118 | { | ||
119 | int k; | ||
120 | |||
121 | /* this function is running on another CPU than the offline target, | ||
122 | * here we need wait for shutdown code in platform_cpu_die() to | ||
123 | * finish before asking SoC-specific code to power off the CPU core. | ||
124 | */ | ||
125 | for (k = 0; k < 1000; k++) { | ||
126 | if (shmobile_cpu_is_dead(cpu)) | ||
127 | return 1; | ||
128 | |||
129 | mdelay(1); | ||
130 | } | ||
131 | |||
132 | return 0; | ||
133 | } | ||
134 | |||
135 | |||
136 | struct smp_operations sh73a0_smp_ops __initdata = { | ||
137 | .smp_init_cpus = sh73a0_smp_init_cpus, | ||
138 | .smp_prepare_cpus = sh73a0_smp_prepare_cpus, | ||
139 | .smp_secondary_init = sh73a0_secondary_init, | ||
140 | .smp_boot_secondary = sh73a0_boot_secondary, | ||
141 | #ifdef CONFIG_HOTPLUG_CPU | ||
142 | .cpu_kill = sh73a0_cpu_kill, | ||
143 | .cpu_die = shmobile_cpu_die, | ||
144 | .cpu_disable = shmobile_cpu_disable, | ||
145 | #endif | ||
146 | }; | ||