17f627f03SMagnus Damm /* 27f627f03SMagnus Damm * Emma Mobile EV2 processor support 37f627f03SMagnus Damm * 47f627f03SMagnus Damm * Copyright (C) 2012 Magnus Damm 57f627f03SMagnus Damm * 67f627f03SMagnus Damm * This program is free software; you can redistribute it and/or modify 77f627f03SMagnus Damm * it under the terms of the GNU General Public License as published by 87f627f03SMagnus Damm * the Free Software Foundation; version 2 of the License. 97f627f03SMagnus Damm * 107f627f03SMagnus Damm * This program is distributed in the hope that it will be useful, 117f627f03SMagnus Damm * but WITHOUT ANY WARRANTY; without even the implied warranty of 127f627f03SMagnus Damm * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 137f627f03SMagnus Damm * GNU General Public License for more details. 147f627f03SMagnus Damm * 157f627f03SMagnus Damm * You should have received a copy of the GNU General Public License 167f627f03SMagnus Damm * along with this program; if not, write to the Free Software 177f627f03SMagnus Damm * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 187f627f03SMagnus Damm */ 197f627f03SMagnus Damm #include <linux/kernel.h> 207f627f03SMagnus Damm #include <linux/init.h> 217f627f03SMagnus Damm #include <linux/interrupt.h> 227f627f03SMagnus Damm #include <linux/irq.h> 230529e315SRob Herring #include <linux/irqchip.h> 247f627f03SMagnus Damm #include <linux/platform_device.h> 25088efd92SMagnus Damm #include <linux/platform_data/gpio-em.h> 263d5de271SMagnus Damm #include <linux/of_platform.h> 277f627f03SMagnus Damm #include <linux/delay.h> 287f627f03SMagnus Damm #include <linux/input.h> 297f627f03SMagnus Damm #include <linux/io.h> 307f627f03SMagnus Damm #include <mach/hardware.h> 317f627f03SMagnus Damm #include <mach/common.h> 327f627f03SMagnus Damm #include <mach/emev2.h> 337f627f03SMagnus Damm #include <mach/irqs.h> 347f627f03SMagnus Damm #include <asm/mach-types.h> 357f627f03SMagnus Damm #include <asm/mach/arch.h> 367f627f03SMagnus Damm #include <asm/mach/map.h> 377f627f03SMagnus Damm #include <asm/mach/time.h> 387f627f03SMagnus Damm #include <asm/hardware/gic.h> 397f627f03SMagnus Damm 40bd5a875dSMagnus Damm static struct map_desc emev2_io_desc[] __initdata = { 41bd5a875dSMagnus Damm #ifdef CONFIG_SMP 42bd5a875dSMagnus Damm /* 128K entity map for 0xe0100000 (SMU) */ 43bd5a875dSMagnus Damm { 44bd5a875dSMagnus Damm .virtual = 0xe0100000, 45bd5a875dSMagnus Damm .pfn = __phys_to_pfn(0xe0100000), 46bd5a875dSMagnus Damm .length = SZ_128K, 47bd5a875dSMagnus Damm .type = MT_DEVICE 48bd5a875dSMagnus Damm }, 49bd5a875dSMagnus Damm /* 2M mapping for SCU + L2 controller */ 50bd5a875dSMagnus Damm { 51bd5a875dSMagnus Damm .virtual = 0xf0000000, 52bd5a875dSMagnus Damm .pfn = __phys_to_pfn(0x1e000000), 53bd5a875dSMagnus Damm .length = SZ_2M, 54bd5a875dSMagnus Damm .type = MT_DEVICE 55bd5a875dSMagnus Damm }, 56bd5a875dSMagnus Damm #endif 57bd5a875dSMagnus Damm }; 58bd5a875dSMagnus Damm 59bd5a875dSMagnus Damm void __init emev2_map_io(void) 60bd5a875dSMagnus Damm { 61bd5a875dSMagnus Damm iotable_init(emev2_io_desc, ARRAY_SIZE(emev2_io_desc)); 62bd5a875dSMagnus Damm } 63bd5a875dSMagnus Damm 647f627f03SMagnus Damm /* UART */ 657f627f03SMagnus Damm static struct resource uart0_resources[] = { 667f627f03SMagnus Damm [0] = { 677f627f03SMagnus Damm .start = 0xe1020000, 687f627f03SMagnus Damm .end = 0xe1020037, 697f627f03SMagnus Damm .flags = IORESOURCE_MEM, 707f627f03SMagnus Damm }, 717f627f03SMagnus Damm [1] = { 727f627f03SMagnus Damm .start = 40, 737f627f03SMagnus Damm .flags = IORESOURCE_IRQ, 747f627f03SMagnus Damm } 757f627f03SMagnus Damm }; 767f627f03SMagnus Damm 777f627f03SMagnus Damm static struct platform_device uart0_device = { 787f627f03SMagnus Damm .name = "serial8250-em", 797f627f03SMagnus Damm .id = 0, 807f627f03SMagnus Damm .num_resources = ARRAY_SIZE(uart0_resources), 817f627f03SMagnus Damm .resource = uart0_resources, 827f627f03SMagnus Damm }; 837f627f03SMagnus Damm 847f627f03SMagnus Damm static struct resource uart1_resources[] = { 857f627f03SMagnus Damm [0] = { 867f627f03SMagnus Damm .start = 0xe1030000, 877f627f03SMagnus Damm .end = 0xe1030037, 887f627f03SMagnus Damm .flags = IORESOURCE_MEM, 897f627f03SMagnus Damm }, 907f627f03SMagnus Damm [1] = { 917f627f03SMagnus Damm .start = 41, 927f627f03SMagnus Damm .flags = IORESOURCE_IRQ, 937f627f03SMagnus Damm } 947f627f03SMagnus Damm }; 957f627f03SMagnus Damm 967f627f03SMagnus Damm static struct platform_device uart1_device = { 977f627f03SMagnus Damm .name = "serial8250-em", 987f627f03SMagnus Damm .id = 1, 997f627f03SMagnus Damm .num_resources = ARRAY_SIZE(uart1_resources), 1007f627f03SMagnus Damm .resource = uart1_resources, 1017f627f03SMagnus Damm }; 1027f627f03SMagnus Damm 1037f627f03SMagnus Damm static struct resource uart2_resources[] = { 1047f627f03SMagnus Damm [0] = { 1057f627f03SMagnus Damm .start = 0xe1040000, 1067f627f03SMagnus Damm .end = 0xe1040037, 1077f627f03SMagnus Damm .flags = IORESOURCE_MEM, 1087f627f03SMagnus Damm }, 1097f627f03SMagnus Damm [1] = { 1107f627f03SMagnus Damm .start = 42, 1117f627f03SMagnus Damm .flags = IORESOURCE_IRQ, 1127f627f03SMagnus Damm } 1137f627f03SMagnus Damm }; 1147f627f03SMagnus Damm 1157f627f03SMagnus Damm static struct platform_device uart2_device = { 1167f627f03SMagnus Damm .name = "serial8250-em", 1177f627f03SMagnus Damm .id = 2, 1187f627f03SMagnus Damm .num_resources = ARRAY_SIZE(uart2_resources), 1197f627f03SMagnus Damm .resource = uart2_resources, 1207f627f03SMagnus Damm }; 1217f627f03SMagnus Damm 1227f627f03SMagnus Damm static struct resource uart3_resources[] = { 1237f627f03SMagnus Damm [0] = { 1247f627f03SMagnus Damm .start = 0xe1050000, 1257f627f03SMagnus Damm .end = 0xe1050037, 1267f627f03SMagnus Damm .flags = IORESOURCE_MEM, 1277f627f03SMagnus Damm }, 1287f627f03SMagnus Damm [1] = { 1297f627f03SMagnus Damm .start = 43, 1307f627f03SMagnus Damm .flags = IORESOURCE_IRQ, 1317f627f03SMagnus Damm } 1327f627f03SMagnus Damm }; 1337f627f03SMagnus Damm 1347f627f03SMagnus Damm static struct platform_device uart3_device = { 1357f627f03SMagnus Damm .name = "serial8250-em", 1367f627f03SMagnus Damm .id = 3, 1377f627f03SMagnus Damm .num_resources = ARRAY_SIZE(uart3_resources), 1387f627f03SMagnus Damm .resource = uart3_resources, 1397f627f03SMagnus Damm }; 1407f627f03SMagnus Damm 1417f627f03SMagnus Damm /* STI */ 1427f627f03SMagnus Damm static struct resource sti_resources[] = { 1437f627f03SMagnus Damm [0] = { 1447f627f03SMagnus Damm .name = "STI", 1457f627f03SMagnus Damm .start = 0xe0180000, 1467f627f03SMagnus Damm .end = 0xe0180053, 1477f627f03SMagnus Damm .flags = IORESOURCE_MEM, 1487f627f03SMagnus Damm }, 1497f627f03SMagnus Damm [1] = { 1507f627f03SMagnus Damm .start = 157, 1517f627f03SMagnus Damm .flags = IORESOURCE_IRQ, 1527f627f03SMagnus Damm }, 1537f627f03SMagnus Damm }; 1547f627f03SMagnus Damm 1557f627f03SMagnus Damm static struct platform_device sti_device = { 1567f627f03SMagnus Damm .name = "em_sti", 1577f627f03SMagnus Damm .id = 0, 1587f627f03SMagnus Damm .resource = sti_resources, 1597f627f03SMagnus Damm .num_resources = ARRAY_SIZE(sti_resources), 1607f627f03SMagnus Damm }; 1617f627f03SMagnus Damm 162088efd92SMagnus Damm 163088efd92SMagnus Damm /* GIO */ 164088efd92SMagnus Damm static struct gpio_em_config gio0_config = { 165088efd92SMagnus Damm .gpio_base = 0, 166088efd92SMagnus Damm .irq_base = EMEV2_GPIO_IRQ(0), 167088efd92SMagnus Damm .number_of_pins = 32, 168088efd92SMagnus Damm }; 169088efd92SMagnus Damm 170088efd92SMagnus Damm static struct resource gio0_resources[] = { 171088efd92SMagnus Damm [0] = { 172088efd92SMagnus Damm .name = "GIO_000", 173088efd92SMagnus Damm .start = 0xe0050000, 174088efd92SMagnus Damm .end = 0xe005002b, 175088efd92SMagnus Damm .flags = IORESOURCE_MEM, 176088efd92SMagnus Damm }, 177088efd92SMagnus Damm [1] = { 178088efd92SMagnus Damm .name = "GIO_000", 179088efd92SMagnus Damm .start = 0xe0050040, 180088efd92SMagnus Damm .end = 0xe005005f, 181088efd92SMagnus Damm .flags = IORESOURCE_MEM, 182088efd92SMagnus Damm }, 183088efd92SMagnus Damm [2] = { 184088efd92SMagnus Damm .start = 99, 185088efd92SMagnus Damm .flags = IORESOURCE_IRQ, 186088efd92SMagnus Damm }, 187088efd92SMagnus Damm [3] = { 188088efd92SMagnus Damm .start = 100, 189088efd92SMagnus Damm .flags = IORESOURCE_IRQ, 190088efd92SMagnus Damm }, 191088efd92SMagnus Damm }; 192088efd92SMagnus Damm 193088efd92SMagnus Damm static struct platform_device gio0_device = { 194088efd92SMagnus Damm .name = "em_gio", 195088efd92SMagnus Damm .id = 0, 196088efd92SMagnus Damm .resource = gio0_resources, 197088efd92SMagnus Damm .num_resources = ARRAY_SIZE(gio0_resources), 198088efd92SMagnus Damm .dev = { 199088efd92SMagnus Damm .platform_data = &gio0_config, 200088efd92SMagnus Damm }, 201088efd92SMagnus Damm }; 202088efd92SMagnus Damm 203088efd92SMagnus Damm static struct gpio_em_config gio1_config = { 204088efd92SMagnus Damm .gpio_base = 32, 205088efd92SMagnus Damm .irq_base = EMEV2_GPIO_IRQ(32), 206088efd92SMagnus Damm .number_of_pins = 32, 207088efd92SMagnus Damm }; 208088efd92SMagnus Damm 209088efd92SMagnus Damm static struct resource gio1_resources[] = { 210088efd92SMagnus Damm [0] = { 211088efd92SMagnus Damm .name = "GIO_032", 212088efd92SMagnus Damm .start = 0xe0050080, 213088efd92SMagnus Damm .end = 0xe00500ab, 214088efd92SMagnus Damm .flags = IORESOURCE_MEM, 215088efd92SMagnus Damm }, 216088efd92SMagnus Damm [1] = { 217088efd92SMagnus Damm .name = "GIO_032", 218088efd92SMagnus Damm .start = 0xe00500c0, 219088efd92SMagnus Damm .end = 0xe00500df, 220088efd92SMagnus Damm .flags = IORESOURCE_MEM, 221088efd92SMagnus Damm }, 222088efd92SMagnus Damm [2] = { 223088efd92SMagnus Damm .start = 101, 224088efd92SMagnus Damm .flags = IORESOURCE_IRQ, 225088efd92SMagnus Damm }, 226088efd92SMagnus Damm [3] = { 227088efd92SMagnus Damm .start = 102, 228088efd92SMagnus Damm .flags = IORESOURCE_IRQ, 229088efd92SMagnus Damm }, 230088efd92SMagnus Damm }; 231088efd92SMagnus Damm 232088efd92SMagnus Damm static struct platform_device gio1_device = { 233088efd92SMagnus Damm .name = "em_gio", 234088efd92SMagnus Damm .id = 1, 235088efd92SMagnus Damm .resource = gio1_resources, 236088efd92SMagnus Damm .num_resources = ARRAY_SIZE(gio1_resources), 237088efd92SMagnus Damm .dev = { 238088efd92SMagnus Damm .platform_data = &gio1_config, 239088efd92SMagnus Damm }, 240088efd92SMagnus Damm }; 241088efd92SMagnus Damm 242088efd92SMagnus Damm static struct gpio_em_config gio2_config = { 243088efd92SMagnus Damm .gpio_base = 64, 244088efd92SMagnus Damm .irq_base = EMEV2_GPIO_IRQ(64), 245088efd92SMagnus Damm .number_of_pins = 32, 246088efd92SMagnus Damm }; 247088efd92SMagnus Damm 248088efd92SMagnus Damm static struct resource gio2_resources[] = { 249088efd92SMagnus Damm [0] = { 250088efd92SMagnus Damm .name = "GIO_064", 251088efd92SMagnus Damm .start = 0xe0050100, 252088efd92SMagnus Damm .end = 0xe005012b, 253088efd92SMagnus Damm .flags = IORESOURCE_MEM, 254088efd92SMagnus Damm }, 255088efd92SMagnus Damm [1] = { 256088efd92SMagnus Damm .name = "GIO_064", 257088efd92SMagnus Damm .start = 0xe0050140, 258088efd92SMagnus Damm .end = 0xe005015f, 259088efd92SMagnus Damm .flags = IORESOURCE_MEM, 260088efd92SMagnus Damm }, 261088efd92SMagnus Damm [2] = { 262088efd92SMagnus Damm .start = 103, 263088efd92SMagnus Damm .flags = IORESOURCE_IRQ, 264088efd92SMagnus Damm }, 265088efd92SMagnus Damm [3] = { 266088efd92SMagnus Damm .start = 104, 267088efd92SMagnus Damm .flags = IORESOURCE_IRQ, 268088efd92SMagnus Damm }, 269088efd92SMagnus Damm }; 270088efd92SMagnus Damm 271088efd92SMagnus Damm static struct platform_device gio2_device = { 272088efd92SMagnus Damm .name = "em_gio", 273088efd92SMagnus Damm .id = 2, 274088efd92SMagnus Damm .resource = gio2_resources, 275088efd92SMagnus Damm .num_resources = ARRAY_SIZE(gio2_resources), 276088efd92SMagnus Damm .dev = { 277088efd92SMagnus Damm .platform_data = &gio2_config, 278088efd92SMagnus Damm }, 279088efd92SMagnus Damm }; 280088efd92SMagnus Damm 281088efd92SMagnus Damm static struct gpio_em_config gio3_config = { 282088efd92SMagnus Damm .gpio_base = 96, 283088efd92SMagnus Damm .irq_base = EMEV2_GPIO_IRQ(96), 284088efd92SMagnus Damm .number_of_pins = 32, 285088efd92SMagnus Damm }; 286088efd92SMagnus Damm 287088efd92SMagnus Damm static struct resource gio3_resources[] = { 288088efd92SMagnus Damm [0] = { 289088efd92SMagnus Damm .name = "GIO_096", 290088efd92SMagnus Damm .start = 0xe0050100, 291088efd92SMagnus Damm .end = 0xe005012b, 292088efd92SMagnus Damm .flags = IORESOURCE_MEM, 293088efd92SMagnus Damm }, 294088efd92SMagnus Damm [1] = { 295088efd92SMagnus Damm .name = "GIO_096", 296088efd92SMagnus Damm .start = 0xe0050140, 297088efd92SMagnus Damm .end = 0xe005015f, 298088efd92SMagnus Damm .flags = IORESOURCE_MEM, 299088efd92SMagnus Damm }, 300088efd92SMagnus Damm [2] = { 301088efd92SMagnus Damm .start = 105, 302088efd92SMagnus Damm .flags = IORESOURCE_IRQ, 303088efd92SMagnus Damm }, 304088efd92SMagnus Damm [3] = { 305088efd92SMagnus Damm .start = 106, 306088efd92SMagnus Damm .flags = IORESOURCE_IRQ, 307088efd92SMagnus Damm }, 308088efd92SMagnus Damm }; 309088efd92SMagnus Damm 310088efd92SMagnus Damm static struct platform_device gio3_device = { 311088efd92SMagnus Damm .name = "em_gio", 312088efd92SMagnus Damm .id = 3, 313088efd92SMagnus Damm .resource = gio3_resources, 314088efd92SMagnus Damm .num_resources = ARRAY_SIZE(gio3_resources), 315088efd92SMagnus Damm .dev = { 316088efd92SMagnus Damm .platform_data = &gio3_config, 317088efd92SMagnus Damm }, 318088efd92SMagnus Damm }; 319088efd92SMagnus Damm 320088efd92SMagnus Damm static struct gpio_em_config gio4_config = { 321088efd92SMagnus Damm .gpio_base = 128, 322088efd92SMagnus Damm .irq_base = EMEV2_GPIO_IRQ(128), 323088efd92SMagnus Damm .number_of_pins = 31, 324088efd92SMagnus Damm }; 325088efd92SMagnus Damm 326088efd92SMagnus Damm static struct resource gio4_resources[] = { 327088efd92SMagnus Damm [0] = { 328088efd92SMagnus Damm .name = "GIO_128", 329088efd92SMagnus Damm .start = 0xe0050200, 330088efd92SMagnus Damm .end = 0xe005022b, 331088efd92SMagnus Damm .flags = IORESOURCE_MEM, 332088efd92SMagnus Damm }, 333088efd92SMagnus Damm [1] = { 334088efd92SMagnus Damm .name = "GIO_128", 335088efd92SMagnus Damm .start = 0xe0050240, 336088efd92SMagnus Damm .end = 0xe005025f, 337088efd92SMagnus Damm .flags = IORESOURCE_MEM, 338088efd92SMagnus Damm }, 339088efd92SMagnus Damm [2] = { 340088efd92SMagnus Damm .start = 107, 341088efd92SMagnus Damm .flags = IORESOURCE_IRQ, 342088efd92SMagnus Damm }, 343088efd92SMagnus Damm [3] = { 344088efd92SMagnus Damm .start = 108, 345088efd92SMagnus Damm .flags = IORESOURCE_IRQ, 346088efd92SMagnus Damm }, 347088efd92SMagnus Damm }; 348088efd92SMagnus Damm 349088efd92SMagnus Damm static struct platform_device gio4_device = { 350088efd92SMagnus Damm .name = "em_gio", 351088efd92SMagnus Damm .id = 4, 352088efd92SMagnus Damm .resource = gio4_resources, 353088efd92SMagnus Damm .num_resources = ARRAY_SIZE(gio4_resources), 354088efd92SMagnus Damm .dev = { 355088efd92SMagnus Damm .platform_data = &gio4_config, 356088efd92SMagnus Damm }, 357088efd92SMagnus Damm }; 358088efd92SMagnus Damm 359e433d444STetsuyuki Kobayashi static struct resource pmu_resources[] = { 360e433d444STetsuyuki Kobayashi [0] = { 361e433d444STetsuyuki Kobayashi .start = 152, 362e433d444STetsuyuki Kobayashi .end = 152, 363e433d444STetsuyuki Kobayashi .flags = IORESOURCE_IRQ, 364e433d444STetsuyuki Kobayashi }, 365e433d444STetsuyuki Kobayashi [1] = { 366e433d444STetsuyuki Kobayashi .start = 153, 367e433d444STetsuyuki Kobayashi .end = 153, 368e433d444STetsuyuki Kobayashi .flags = IORESOURCE_IRQ, 369e433d444STetsuyuki Kobayashi }, 370e433d444STetsuyuki Kobayashi }; 371e433d444STetsuyuki Kobayashi 372e433d444STetsuyuki Kobayashi static struct platform_device pmu_device = { 373e433d444STetsuyuki Kobayashi .name = "arm-pmu", 374e433d444STetsuyuki Kobayashi .id = -1, 375e433d444STetsuyuki Kobayashi .num_resources = ARRAY_SIZE(pmu_resources), 376e433d444STetsuyuki Kobayashi .resource = pmu_resources, 377e433d444STetsuyuki Kobayashi }; 378e433d444STetsuyuki Kobayashi 3797f627f03SMagnus Damm static struct platform_device *emev2_early_devices[] __initdata = { 3807f627f03SMagnus Damm &uart0_device, 3817f627f03SMagnus Damm &uart1_device, 3827f627f03SMagnus Damm &uart2_device, 3837f627f03SMagnus Damm &uart3_device, 3847f627f03SMagnus Damm }; 3857f627f03SMagnus Damm 3867f627f03SMagnus Damm static struct platform_device *emev2_late_devices[] __initdata = { 3877f627f03SMagnus Damm &sti_device, 388088efd92SMagnus Damm &gio0_device, 389088efd92SMagnus Damm &gio1_device, 390088efd92SMagnus Damm &gio2_device, 391088efd92SMagnus Damm &gio3_device, 392088efd92SMagnus Damm &gio4_device, 393e433d444STetsuyuki Kobayashi &pmu_device, 3947f627f03SMagnus Damm }; 3957f627f03SMagnus Damm 3967f627f03SMagnus Damm void __init emev2_add_standard_devices(void) 3977f627f03SMagnus Damm { 3987f627f03SMagnus Damm emev2_clock_init(); 3997f627f03SMagnus Damm 4007f627f03SMagnus Damm platform_add_devices(emev2_early_devices, 4017f627f03SMagnus Damm ARRAY_SIZE(emev2_early_devices)); 4027f627f03SMagnus Damm 4037f627f03SMagnus Damm platform_add_devices(emev2_late_devices, 4047f627f03SMagnus Damm ARRAY_SIZE(emev2_late_devices)); 4057f627f03SMagnus Damm } 4067f627f03SMagnus Damm 4073d5de271SMagnus Damm void __init emev2_init_delay(void) 4087f627f03SMagnus Damm { 4097f627f03SMagnus Damm shmobile_setup_delay(533, 1, 3); /* Cortex-A9 @ 533MHz */ 4103d5de271SMagnus Damm } 4113d5de271SMagnus Damm 4123d5de271SMagnus Damm void __init emev2_add_early_devices(void) 4133d5de271SMagnus Damm { 4143d5de271SMagnus Damm emev2_init_delay(); 4157f627f03SMagnus Damm 4167f627f03SMagnus Damm early_platform_add_devices(emev2_early_devices, 4177f627f03SMagnus Damm ARRAY_SIZE(emev2_early_devices)); 4187f627f03SMagnus Damm 4197f627f03SMagnus Damm /* setup early console here as well */ 4207f627f03SMagnus Damm shmobile_setup_console(); 4217f627f03SMagnus Damm } 4227f627f03SMagnus Damm 4237f627f03SMagnus Damm void __init emev2_init_irq(void) 4247f627f03SMagnus Damm { 4257f627f03SMagnus Damm void __iomem *gic_dist_base; 4267f627f03SMagnus Damm void __iomem *gic_cpu_base; 4277f627f03SMagnus Damm 4287f627f03SMagnus Damm /* Static mappings, never released */ 4297f627f03SMagnus Damm gic_dist_base = ioremap(0xe0028000, PAGE_SIZE); 4307f627f03SMagnus Damm gic_cpu_base = ioremap(0xe0020000, PAGE_SIZE); 4317f627f03SMagnus Damm BUG_ON(!gic_dist_base || !gic_cpu_base); 4327f627f03SMagnus Damm 4337f627f03SMagnus Damm /* Use GIC to handle interrupts */ 4347f627f03SMagnus Damm gic_init(0, 29, gic_dist_base, gic_cpu_base); 4357f627f03SMagnus Damm } 4363d5de271SMagnus Damm 4373d5de271SMagnus Damm #ifdef CONFIG_USE_OF 4383d5de271SMagnus Damm static const struct of_dev_auxdata emev2_auxdata_lookup[] __initconst = { 4393d5de271SMagnus Damm { } 4403d5de271SMagnus Damm }; 4413d5de271SMagnus Damm 4423d5de271SMagnus Damm void __init emev2_add_standard_devices_dt(void) 4433d5de271SMagnus Damm { 4443d5de271SMagnus Damm of_platform_populate(NULL, of_default_bus_match_table, 4453d5de271SMagnus Damm emev2_auxdata_lookup, NULL); 4463d5de271SMagnus Damm } 4473d5de271SMagnus Damm 4483d5de271SMagnus Damm static const char *emev2_boards_compat_dt[] __initdata = { 4493d5de271SMagnus Damm "renesas,emev2", 4503d5de271SMagnus Damm NULL, 4513d5de271SMagnus Damm }; 4523d5de271SMagnus Damm 4533d5de271SMagnus Damm DT_MACHINE_START(EMEV2_DT, "Generic Emma Mobile EV2 (Flattened Device Tree)") 454a62580e5SMarc Zyngier .smp = smp_ops(emev2_smp_ops), 4553d5de271SMagnus Damm .init_early = emev2_init_delay, 4563d5de271SMagnus Damm .nr_irqs = NR_IRQS_LEGACY, 4570529e315SRob Herring .init_irq = irqchip_init, 4583d5de271SMagnus Damm .init_machine = emev2_add_standard_devices_dt, 4593d5de271SMagnus Damm .timer = &shmobile_timer, 4603d5de271SMagnus Damm .dt_compat = emev2_boards_compat_dt, 4613d5de271SMagnus Damm MACHINE_END 4623d5de271SMagnus Damm 4633d5de271SMagnus Damm #endif /* CONFIG_USE_OF */ 464