aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-shmobile/setup-r8a7791.c125
1 files changed, 52 insertions, 73 deletions
diff --git a/arch/arm/mach-shmobile/setup-r8a7791.c b/arch/arm/mach-shmobile/setup-r8a7791.c
index cddca99b434f..3fe0d7de08fc 100644
--- a/arch/arm/mach-shmobile/setup-r8a7791.c
+++ b/arch/arm/mach-shmobile/setup-r8a7791.c
@@ -84,66 +84,45 @@ void __init r8a7791_pinmux_init(void)
84 r8a7791_register_gpio(7); 84 r8a7791_register_gpio(7);
85} 85}
86 86
87#define SCIF_COMMON(scif_type, baseaddr, irq) \ 87#define __R8A7791_SCIF(scif_type, algo, index, baseaddr, irq) \
88 .type = scif_type, \ 88static struct plat_sci_port scif##index##_platform_data = { \
89 .mapbase = baseaddr, \ 89 .type = scif_type, \
90 .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, \ 90 .mapbase = baseaddr, \
91 .irqs = SCIx_IRQ_MUXED(irq) 91 .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, \
92 92 .scbrr_algo_id = algo, \
93#define SCIFA_DATA(index, baseaddr, irq) \ 93 .scscr = SCSCR_RE | SCSCR_TE, \
94[index] = { \ 94 .irqs = SCIx_IRQ_MUXED(irq), \
95 SCIF_COMMON(PORT_SCIFA, baseaddr, irq), \
96 .scbrr_algo_id = SCBRR_ALGO_4, \
97 .scscr = SCSCR_RE | SCSCR_TE, \
98} 95}
99 96
100#define SCIFB_DATA(index, baseaddr, irq) \ 97#define R8A7791_SCIF(index, baseaddr, irq) \
101[index] = { \ 98 __R8A7791_SCIF(PORT_SCIF, SCBRR_ALGO_2, index, baseaddr, irq)
102 SCIF_COMMON(PORT_SCIFB, baseaddr, irq), \ 99
103 .scbrr_algo_id = SCBRR_ALGO_4, \ 100#define R8A7791_SCIFA(index, baseaddr, irq) \
104 .scscr = SCSCR_RE | SCSCR_TE, \ 101 __R8A7791_SCIF(PORT_SCIFA, SCBRR_ALGO_4, index, baseaddr, irq)
105} 102
106 103#define R8A7791_SCIFB(index, baseaddr, irq) \
107#define SCIF_DATA(index, baseaddr, irq) \ 104 __R8A7791_SCIF(PORT_SCIFB, SCBRR_ALGO_4, index, baseaddr, irq)
108[index] = { \ 105
109 SCIF_COMMON(PORT_SCIF, baseaddr, irq), \ 106R8A7791_SCIFA(0, 0xe6c40000, gic_spi(144)); /* SCIFA0 */
110 .scbrr_algo_id = SCBRR_ALGO_2, \ 107R8A7791_SCIFA(1, 0xe6c50000, gic_spi(145)); /* SCIFA1 */
111 .scscr = SCSCR_RE | SCSCR_TE, \ 108R8A7791_SCIFB(2, 0xe6c20000, gic_spi(148)); /* SCIFB0 */
112} 109R8A7791_SCIFB(3, 0xe6c30000, gic_spi(149)); /* SCIFB1 */
113 110R8A7791_SCIFB(4, 0xe6ce0000, gic_spi(150)); /* SCIFB2 */
114#define HSCIF_DATA(index, baseaddr, irq) \ 111R8A7791_SCIFA(5, 0xe6c60000, gic_spi(151)); /* SCIFA2 */
115[index] = { \ 112R8A7791_SCIF(6, 0xe6e60000, gic_spi(152)); /* SCIF0 */
116 SCIF_COMMON(PORT_HSCIF, baseaddr, irq), \ 113R8A7791_SCIF(7, 0xe6e68000, gic_spi(153)); /* SCIF1 */
117 .scbrr_algo_id = SCBRR_ALGO_6, \ 114R8A7791_SCIF(8, 0xe6e58000, gic_spi(22)); /* SCIF2 */
118 .scscr = SCSCR_RE | SCSCR_TE, \ 115R8A7791_SCIF(9, 0xe6ea8000, gic_spi(23)); /* SCIF3 */
119} 116R8A7791_SCIF(10, 0xe6ee0000, gic_spi(24)); /* SCIF4 */
120 117R8A7791_SCIF(11, 0xe6ee8000, gic_spi(25)); /* SCIF5 */
121enum { SCIFA0, SCIFA1, SCIFB0, SCIFB1, SCIFB2, SCIFA2, SCIF0, SCIF1, 118R8A7791_SCIFA(12, 0xe6c70000, gic_spi(29)); /* SCIFA3 */
122 SCIF2, SCIF3, SCIF4, SCIF5, SCIFA3, SCIFA4, SCIFA5 }; 119R8A7791_SCIFA(13, 0xe6c78000, gic_spi(30)); /* SCIFA4 */
123 120R8A7791_SCIFA(14, 0xe6c80000, gic_spi(31)); /* SCIFA5 */
124static const struct plat_sci_port scif[] __initconst = { 121
125 SCIFA_DATA(SCIFA0, 0xe6c40000, gic_spi(144)), /* SCIFA0 */ 122#define r8a7791_register_scif(index) \
126 SCIFA_DATA(SCIFA1, 0xe6c50000, gic_spi(145)), /* SCIFA1 */ 123 platform_device_register_data(&platform_bus, "sh-sci", index, \
127 SCIFB_DATA(SCIFB0, 0xe6c20000, gic_spi(148)), /* SCIFB0 */ 124 &scif##index##_platform_data, \
128 SCIFB_DATA(SCIFB1, 0xe6c30000, gic_spi(149)), /* SCIFB1 */ 125 sizeof(scif##index##_platform_data))
129 SCIFB_DATA(SCIFB2, 0xe6ce0000, gic_spi(150)), /* SCIFB2 */
130 SCIFA_DATA(SCIFA2, 0xe6c60000, gic_spi(151)), /* SCIFA2 */
131 SCIF_DATA(SCIF0, 0xe6e60000, gic_spi(152)), /* SCIF0 */
132 SCIF_DATA(SCIF1, 0xe6e68000, gic_spi(153)), /* SCIF1 */
133 SCIF_DATA(SCIF2, 0xe6e58000, gic_spi(22)), /* SCIF2 */
134 SCIF_DATA(SCIF3, 0xe6ea8000, gic_spi(23)), /* SCIF3 */
135 SCIF_DATA(SCIF4, 0xe6ee0000, gic_spi(24)), /* SCIF4 */
136 SCIF_DATA(SCIF5, 0xe6ee8000, gic_spi(25)), /* SCIF5 */
137 SCIFA_DATA(SCIFA3, 0xe6c70000, gic_spi(29)), /* SCIFA3 */
138 SCIFA_DATA(SCIFA4, 0xe6c78000, gic_spi(30)), /* SCIFA4 */
139 SCIFA_DATA(SCIFA5, 0xe6c80000, gic_spi(31)), /* SCIFA5 */
140};
141
142static inline void r8a7791_register_scif(int idx)
143{
144 platform_device_register_data(&platform_bus, "sh-sci", idx, &scif[idx],
145 sizeof(struct plat_sci_port));
146}
147 126
148static const struct sh_timer_config cmt00_platform_data __initconst = { 127static const struct sh_timer_config cmt00_platform_data __initconst = {
149 .name = "CMT00", 128 .name = "CMT00",
@@ -202,21 +181,21 @@ static const struct resource thermal_resources[] __initconst = {
202 181
203void __init r8a7791_add_dt_devices(void) 182void __init r8a7791_add_dt_devices(void)
204{ 183{
205 r8a7791_register_scif(SCIFA0); 184 r8a7791_register_scif(0);
206 r8a7791_register_scif(SCIFA1); 185 r8a7791_register_scif(1);
207 r8a7791_register_scif(SCIFB0); 186 r8a7791_register_scif(2);
208 r8a7791_register_scif(SCIFB1); 187 r8a7791_register_scif(3);
209 r8a7791_register_scif(SCIFB2); 188 r8a7791_register_scif(4);
210 r8a7791_register_scif(SCIFA2); 189 r8a7791_register_scif(5);
211 r8a7791_register_scif(SCIF0); 190 r8a7791_register_scif(6);
212 r8a7791_register_scif(SCIF1); 191 r8a7791_register_scif(7);
213 r8a7791_register_scif(SCIF2); 192 r8a7791_register_scif(8);
214 r8a7791_register_scif(SCIF3); 193 r8a7791_register_scif(9);
215 r8a7791_register_scif(SCIF4); 194 r8a7791_register_scif(10);
216 r8a7791_register_scif(SCIF5); 195 r8a7791_register_scif(11);
217 r8a7791_register_scif(SCIFA3); 196 r8a7791_register_scif(12);
218 r8a7791_register_scif(SCIFA4); 197 r8a7791_register_scif(13);
219 r8a7791_register_scif(SCIFA5); 198 r8a7791_register_scif(14);
220 r8a7791_register_cmt(00); 199 r8a7791_register_cmt(00);
221} 200}
222 201