1f411fadeSMagnus Damm /* 2f411fadeSMagnus Damm * r8a7779 processor support 3f411fadeSMagnus Damm * 4dace48d0SSergei Shtylyov * Copyright (C) 2011, 2013 Renesas Solutions Corp. 5f411fadeSMagnus Damm * Copyright (C) 2011 Magnus Damm 6dace48d0SSergei Shtylyov * Copyright (C) 2013 Cogent Embedded, Inc. 7f411fadeSMagnus Damm * 8f411fadeSMagnus Damm * This program is free software; you can redistribute it and/or modify 9f411fadeSMagnus Damm * it under the terms of the GNU General Public License as published by 10f411fadeSMagnus Damm * the Free Software Foundation; version 2 of the License. 11f411fadeSMagnus Damm * 12f411fadeSMagnus Damm * This program is distributed in the hope that it will be useful, 13f411fadeSMagnus Damm * but WITHOUT ANY WARRANTY; without even the implied warranty of 14f411fadeSMagnus Damm * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15f411fadeSMagnus Damm * GNU General Public License for more details. 16f411fadeSMagnus Damm * 17f411fadeSMagnus Damm * You should have received a copy of the GNU General Public License 18f411fadeSMagnus Damm * along with this program; if not, write to the Free Software 19f411fadeSMagnus Damm * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 20f411fadeSMagnus Damm */ 21f411fadeSMagnus Damm #include <linux/kernel.h> 22f411fadeSMagnus Damm #include <linux/init.h> 23f411fadeSMagnus Damm #include <linux/interrupt.h> 24f411fadeSMagnus Damm #include <linux/irq.h> 2510e8d4f6SSimon Horman #include <linux/of_platform.h> 2637a72d07SLaurent Pinchart #include <linux/platform_data/gpio-rcar.h> 27f411fadeSMagnus Damm #include <linux/platform_device.h> 28f411fadeSMagnus Damm #include <linux/delay.h> 29f411fadeSMagnus Damm #include <linux/input.h> 30f411fadeSMagnus Damm #include <linux/io.h> 31f411fadeSMagnus Damm #include <linux/serial_sci.h> 32f411fadeSMagnus Damm #include <linux/sh_intc.h> 33f411fadeSMagnus Damm #include <linux/sh_timer.h> 34a7b9837cSVladimir Barinov #include <linux/dma-mapping.h> 352c8788bfSSergei Shtylyov #include <linux/usb/otg.h> 3684a812daSSergei Shtylyov #include <linux/usb/hcd.h> 372c8788bfSSergei Shtylyov #include <linux/usb/ehci_pdriver.h> 382c8788bfSSergei Shtylyov #include <linux/usb/ohci_pdriver.h> 392c8788bfSSergei Shtylyov #include <linux/pm_runtime.h> 40f411fadeSMagnus Damm #include <mach/hardware.h> 41250a2723SRob Herring #include <mach/irqs.h> 42f411fadeSMagnus Damm #include <mach/r8a7779.h> 43a662c082SMagnus Damm #include <mach/common.h> 44f411fadeSMagnus Damm #include <asm/mach-types.h> 45f411fadeSMagnus Damm #include <asm/mach/arch.h> 46df27a2d8SMagnus Damm #include <asm/mach/time.h> 473e353b87SMagnus Damm #include <asm/mach/map.h> 488bac13f5SMagnus Damm #include <asm/hardware/cache-l2x0.h> 493e353b87SMagnus Damm 503e353b87SMagnus Damm static struct map_desc r8a7779_io_desc[] __initdata = { 513e353b87SMagnus Damm /* 2M entity map for 0xf0000000 (MPCORE) */ 523e353b87SMagnus Damm { 533e353b87SMagnus Damm .virtual = 0xf0000000, 543e353b87SMagnus Damm .pfn = __phys_to_pfn(0xf0000000), 553e353b87SMagnus Damm .length = SZ_2M, 563e353b87SMagnus Damm .type = MT_DEVICE_NONSHARED 573e353b87SMagnus Damm }, 583e353b87SMagnus Damm /* 16M entity map for 0xfexxxxxx (DMAC-S/HPBREG/INTC2/LRAM/DBSC) */ 593e353b87SMagnus Damm { 603e353b87SMagnus Damm .virtual = 0xfe000000, 613e353b87SMagnus Damm .pfn = __phys_to_pfn(0xfe000000), 623e353b87SMagnus Damm .length = SZ_16M, 633e353b87SMagnus Damm .type = MT_DEVICE_NONSHARED 643e353b87SMagnus Damm }, 653e353b87SMagnus Damm }; 663e353b87SMagnus Damm 673e353b87SMagnus Damm void __init r8a7779_map_io(void) 683e353b87SMagnus Damm { 693e353b87SMagnus Damm iotable_init(r8a7779_io_desc, ARRAY_SIZE(r8a7779_io_desc)); 703e353b87SMagnus Damm } 71f411fadeSMagnus Damm 728b6edf36SLaurent Pinchart static struct resource r8a7779_pfc_resources[] = { 730ccaf5bbSMagnus Damm DEFINE_RES_MEM(0xfffc0000, 0x023c), 748b6edf36SLaurent Pinchart }; 758b6edf36SLaurent Pinchart 768b6edf36SLaurent Pinchart static struct platform_device r8a7779_pfc_device = { 778b6edf36SLaurent Pinchart .name = "pfc-r8a7779", 788b6edf36SLaurent Pinchart .id = -1, 798b6edf36SLaurent Pinchart .resource = r8a7779_pfc_resources, 808b6edf36SLaurent Pinchart .num_resources = ARRAY_SIZE(r8a7779_pfc_resources), 818b6edf36SLaurent Pinchart }; 828b6edf36SLaurent Pinchart 8337a72d07SLaurent Pinchart #define R8A7779_GPIO(idx, npins) \ 8437a72d07SLaurent Pinchart static struct resource r8a7779_gpio##idx##_resources[] = { \ 850ccaf5bbSMagnus Damm DEFINE_RES_MEM(0xffc40000 + (0x1000 * (idx)), 0x002c), \ 860ccaf5bbSMagnus Damm DEFINE_RES_IRQ(gic_iid(0xad + (idx))), \ 8737a72d07SLaurent Pinchart }; \ 8837a72d07SLaurent Pinchart \ 8937a72d07SLaurent Pinchart static struct gpio_rcar_config r8a7779_gpio##idx##_platform_data = { \ 9037a72d07SLaurent Pinchart .gpio_base = 32 * (idx), \ 9137a72d07SLaurent Pinchart .irq_base = 0, \ 9237a72d07SLaurent Pinchart .number_of_pins = npins, \ 9337a72d07SLaurent Pinchart .pctl_name = "pfc-r8a7779", \ 9437a72d07SLaurent Pinchart }; \ 9537a72d07SLaurent Pinchart \ 9637a72d07SLaurent Pinchart static struct platform_device r8a7779_gpio##idx##_device = { \ 9737a72d07SLaurent Pinchart .name = "gpio_rcar", \ 9837a72d07SLaurent Pinchart .id = idx, \ 9937a72d07SLaurent Pinchart .resource = r8a7779_gpio##idx##_resources, \ 10037a72d07SLaurent Pinchart .num_resources = ARRAY_SIZE(r8a7779_gpio##idx##_resources), \ 10137a72d07SLaurent Pinchart .dev = { \ 10237a72d07SLaurent Pinchart .platform_data = &r8a7779_gpio##idx##_platform_data, \ 10337a72d07SLaurent Pinchart }, \ 10437a72d07SLaurent Pinchart } 10537a72d07SLaurent Pinchart 10637a72d07SLaurent Pinchart R8A7779_GPIO(0, 32); 10737a72d07SLaurent Pinchart R8A7779_GPIO(1, 32); 10837a72d07SLaurent Pinchart R8A7779_GPIO(2, 32); 10937a72d07SLaurent Pinchart R8A7779_GPIO(3, 32); 11037a72d07SLaurent Pinchart R8A7779_GPIO(4, 32); 11137a72d07SLaurent Pinchart R8A7779_GPIO(5, 32); 11237a72d07SLaurent Pinchart R8A7779_GPIO(6, 9); 11337a72d07SLaurent Pinchart 11437a72d07SLaurent Pinchart static struct platform_device *r8a7779_pinctrl_devices[] __initdata = { 11537a72d07SLaurent Pinchart &r8a7779_pfc_device, 11637a72d07SLaurent Pinchart &r8a7779_gpio0_device, 11737a72d07SLaurent Pinchart &r8a7779_gpio1_device, 11837a72d07SLaurent Pinchart &r8a7779_gpio2_device, 11937a72d07SLaurent Pinchart &r8a7779_gpio3_device, 12037a72d07SLaurent Pinchart &r8a7779_gpio4_device, 12137a72d07SLaurent Pinchart &r8a7779_gpio5_device, 12237a72d07SLaurent Pinchart &r8a7779_gpio6_device, 12337a72d07SLaurent Pinchart }; 12437a72d07SLaurent Pinchart 1258b6edf36SLaurent Pinchart void __init r8a7779_pinmux_init(void) 1268b6edf36SLaurent Pinchart { 12737a72d07SLaurent Pinchart platform_add_devices(r8a7779_pinctrl_devices, 12837a72d07SLaurent Pinchart ARRAY_SIZE(r8a7779_pinctrl_devices)); 1298b6edf36SLaurent Pinchart } 1308b6edf36SLaurent Pinchart 131f411fadeSMagnus Damm static struct plat_sci_port scif0_platform_data = { 132f411fadeSMagnus Damm .mapbase = 0xffe40000, 133f411fadeSMagnus Damm .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, 134f411fadeSMagnus Damm .scscr = SCSCR_RE | SCSCR_TE | SCSCR_CKE1, 135f411fadeSMagnus Damm .scbrr_algo_id = SCBRR_ALGO_2, 136f411fadeSMagnus Damm .type = PORT_SCIF, 137dbe95ad0SKuninori Morimoto .irqs = SCIx_IRQ_MUXED(gic_iid(0x78)), 138f411fadeSMagnus Damm }; 139f411fadeSMagnus Damm 140f411fadeSMagnus Damm static struct platform_device scif0_device = { 141f411fadeSMagnus Damm .name = "sh-sci", 142f411fadeSMagnus Damm .id = 0, 143f411fadeSMagnus Damm .dev = { 144f411fadeSMagnus Damm .platform_data = &scif0_platform_data, 145f411fadeSMagnus Damm }, 146f411fadeSMagnus Damm }; 147f411fadeSMagnus Damm 148f411fadeSMagnus Damm static struct plat_sci_port scif1_platform_data = { 149f411fadeSMagnus Damm .mapbase = 0xffe41000, 150f411fadeSMagnus Damm .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, 151f411fadeSMagnus Damm .scscr = SCSCR_RE | SCSCR_TE | SCSCR_CKE1, 152f411fadeSMagnus Damm .scbrr_algo_id = SCBRR_ALGO_2, 153f411fadeSMagnus Damm .type = PORT_SCIF, 154dbe95ad0SKuninori Morimoto .irqs = SCIx_IRQ_MUXED(gic_iid(0x79)), 155f411fadeSMagnus Damm }; 156f411fadeSMagnus Damm 157f411fadeSMagnus Damm static struct platform_device scif1_device = { 158f411fadeSMagnus Damm .name = "sh-sci", 159f411fadeSMagnus Damm .id = 1, 160f411fadeSMagnus Damm .dev = { 161f411fadeSMagnus Damm .platform_data = &scif1_platform_data, 162f411fadeSMagnus Damm }, 163f411fadeSMagnus Damm }; 164f411fadeSMagnus Damm 165f411fadeSMagnus Damm static struct plat_sci_port scif2_platform_data = { 166f411fadeSMagnus Damm .mapbase = 0xffe42000, 167f411fadeSMagnus Damm .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, 168f411fadeSMagnus Damm .scscr = SCSCR_RE | SCSCR_TE | SCSCR_CKE1, 169f411fadeSMagnus Damm .scbrr_algo_id = SCBRR_ALGO_2, 170f411fadeSMagnus Damm .type = PORT_SCIF, 171dbe95ad0SKuninori Morimoto .irqs = SCIx_IRQ_MUXED(gic_iid(0x7a)), 172f411fadeSMagnus Damm }; 173f411fadeSMagnus Damm 174f411fadeSMagnus Damm static struct platform_device scif2_device = { 175f411fadeSMagnus Damm .name = "sh-sci", 176f411fadeSMagnus Damm .id = 2, 177f411fadeSMagnus Damm .dev = { 178f411fadeSMagnus Damm .platform_data = &scif2_platform_data, 179f411fadeSMagnus Damm }, 180f411fadeSMagnus Damm }; 181f411fadeSMagnus Damm 182f411fadeSMagnus Damm static struct plat_sci_port scif3_platform_data = { 183f411fadeSMagnus Damm .mapbase = 0xffe43000, 184f411fadeSMagnus Damm .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, 185f411fadeSMagnus Damm .scscr = SCSCR_RE | SCSCR_TE | SCSCR_CKE1, 186f411fadeSMagnus Damm .scbrr_algo_id = SCBRR_ALGO_2, 187f411fadeSMagnus Damm .type = PORT_SCIF, 188dbe95ad0SKuninori Morimoto .irqs = SCIx_IRQ_MUXED(gic_iid(0x7b)), 189f411fadeSMagnus Damm }; 190f411fadeSMagnus Damm 191f411fadeSMagnus Damm static struct platform_device scif3_device = { 192f411fadeSMagnus Damm .name = "sh-sci", 193f411fadeSMagnus Damm .id = 3, 194f411fadeSMagnus Damm .dev = { 195f411fadeSMagnus Damm .platform_data = &scif3_platform_data, 196f411fadeSMagnus Damm }, 197f411fadeSMagnus Damm }; 198f411fadeSMagnus Damm 199f411fadeSMagnus Damm static struct plat_sci_port scif4_platform_data = { 200f411fadeSMagnus Damm .mapbase = 0xffe44000, 201f411fadeSMagnus Damm .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, 202f411fadeSMagnus Damm .scscr = SCSCR_RE | SCSCR_TE | SCSCR_CKE1, 203f411fadeSMagnus Damm .scbrr_algo_id = SCBRR_ALGO_2, 204f411fadeSMagnus Damm .type = PORT_SCIF, 205dbe95ad0SKuninori Morimoto .irqs = SCIx_IRQ_MUXED(gic_iid(0x7c)), 206f411fadeSMagnus Damm }; 207f411fadeSMagnus Damm 208f411fadeSMagnus Damm static struct platform_device scif4_device = { 209f411fadeSMagnus Damm .name = "sh-sci", 210f411fadeSMagnus Damm .id = 4, 211f411fadeSMagnus Damm .dev = { 212f411fadeSMagnus Damm .platform_data = &scif4_platform_data, 213f411fadeSMagnus Damm }, 214f411fadeSMagnus Damm }; 215f411fadeSMagnus Damm 216f411fadeSMagnus Damm static struct plat_sci_port scif5_platform_data = { 217f411fadeSMagnus Damm .mapbase = 0xffe45000, 218f411fadeSMagnus Damm .flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, 219f411fadeSMagnus Damm .scscr = SCSCR_RE | SCSCR_TE | SCSCR_CKE1, 220f411fadeSMagnus Damm .scbrr_algo_id = SCBRR_ALGO_2, 221f411fadeSMagnus Damm .type = PORT_SCIF, 222dbe95ad0SKuninori Morimoto .irqs = SCIx_IRQ_MUXED(gic_iid(0x7d)), 223f411fadeSMagnus Damm }; 224f411fadeSMagnus Damm 225f411fadeSMagnus Damm static struct platform_device scif5_device = { 226f411fadeSMagnus Damm .name = "sh-sci", 227f411fadeSMagnus Damm .id = 5, 228f411fadeSMagnus Damm .dev = { 229f411fadeSMagnus Damm .platform_data = &scif5_platform_data, 230f411fadeSMagnus Damm }, 231f411fadeSMagnus Damm }; 232f411fadeSMagnus Damm 233f411fadeSMagnus Damm /* TMU */ 234f411fadeSMagnus Damm static struct sh_timer_config tmu00_platform_data = { 235f411fadeSMagnus Damm .name = "TMU00", 236f411fadeSMagnus Damm .channel_offset = 0x4, 237f411fadeSMagnus Damm .timer_bit = 0, 238f411fadeSMagnus Damm .clockevent_rating = 200, 239f411fadeSMagnus Damm }; 240f411fadeSMagnus Damm 241f411fadeSMagnus Damm static struct resource tmu00_resources[] = { 242f411fadeSMagnus Damm [0] = { 243f411fadeSMagnus Damm .name = "TMU00", 244f411fadeSMagnus Damm .start = 0xffd80008, 245f411fadeSMagnus Damm .end = 0xffd80013, 246f411fadeSMagnus Damm .flags = IORESOURCE_MEM, 247f411fadeSMagnus Damm }, 248f411fadeSMagnus Damm [1] = { 249dbe95ad0SKuninori Morimoto .start = gic_iid(0x40), 250f411fadeSMagnus Damm .flags = IORESOURCE_IRQ, 251f411fadeSMagnus Damm }, 252f411fadeSMagnus Damm }; 253f411fadeSMagnus Damm 254f411fadeSMagnus Damm static struct platform_device tmu00_device = { 255f411fadeSMagnus Damm .name = "sh_tmu", 256f411fadeSMagnus Damm .id = 0, 257f411fadeSMagnus Damm .dev = { 258f411fadeSMagnus Damm .platform_data = &tmu00_platform_data, 259f411fadeSMagnus Damm }, 260f411fadeSMagnus Damm .resource = tmu00_resources, 261f411fadeSMagnus Damm .num_resources = ARRAY_SIZE(tmu00_resources), 262f411fadeSMagnus Damm }; 263f411fadeSMagnus Damm 264f411fadeSMagnus Damm static struct sh_timer_config tmu01_platform_data = { 265f411fadeSMagnus Damm .name = "TMU01", 266f411fadeSMagnus Damm .channel_offset = 0x10, 267f411fadeSMagnus Damm .timer_bit = 1, 268f411fadeSMagnus Damm .clocksource_rating = 200, 269f411fadeSMagnus Damm }; 270f411fadeSMagnus Damm 271f411fadeSMagnus Damm static struct resource tmu01_resources[] = { 272f411fadeSMagnus Damm [0] = { 273f411fadeSMagnus Damm .name = "TMU01", 274f411fadeSMagnus Damm .start = 0xffd80014, 275f411fadeSMagnus Damm .end = 0xffd8001f, 276f411fadeSMagnus Damm .flags = IORESOURCE_MEM, 277f411fadeSMagnus Damm }, 278f411fadeSMagnus Damm [1] = { 279dbe95ad0SKuninori Morimoto .start = gic_iid(0x41), 280f411fadeSMagnus Damm .flags = IORESOURCE_IRQ, 281f411fadeSMagnus Damm }, 282f411fadeSMagnus Damm }; 283f411fadeSMagnus Damm 284f411fadeSMagnus Damm static struct platform_device tmu01_device = { 285f411fadeSMagnus Damm .name = "sh_tmu", 286f411fadeSMagnus Damm .id = 1, 287f411fadeSMagnus Damm .dev = { 288f411fadeSMagnus Damm .platform_data = &tmu01_platform_data, 289f411fadeSMagnus Damm }, 290f411fadeSMagnus Damm .resource = tmu01_resources, 291f411fadeSMagnus Damm .num_resources = ARRAY_SIZE(tmu01_resources), 292f411fadeSMagnus Damm }; 293f411fadeSMagnus Damm 294ccc2a27bSKuninori Morimoto /* I2C */ 295ccc2a27bSKuninori Morimoto static struct resource rcar_i2c0_res[] = { 296ccc2a27bSKuninori Morimoto { 297ccc2a27bSKuninori Morimoto .start = 0xffc70000, 298ccc2a27bSKuninori Morimoto .end = 0xffc70fff, 299ccc2a27bSKuninori Morimoto .flags = IORESOURCE_MEM, 300ccc2a27bSKuninori Morimoto }, { 301dbe95ad0SKuninori Morimoto .start = gic_iid(0x6f), 302ccc2a27bSKuninori Morimoto .flags = IORESOURCE_IRQ, 303ccc2a27bSKuninori Morimoto }, 304ccc2a27bSKuninori Morimoto }; 305ccc2a27bSKuninori Morimoto 306ccc2a27bSKuninori Morimoto static struct platform_device i2c0_device = { 307ccc2a27bSKuninori Morimoto .name = "i2c-rcar", 308ccc2a27bSKuninori Morimoto .id = 0, 309ccc2a27bSKuninori Morimoto .resource = rcar_i2c0_res, 310ccc2a27bSKuninori Morimoto .num_resources = ARRAY_SIZE(rcar_i2c0_res), 311ccc2a27bSKuninori Morimoto }; 312ccc2a27bSKuninori Morimoto 313ccc2a27bSKuninori Morimoto static struct resource rcar_i2c1_res[] = { 314ccc2a27bSKuninori Morimoto { 315ccc2a27bSKuninori Morimoto .start = 0xffc71000, 316ccc2a27bSKuninori Morimoto .end = 0xffc71fff, 317ccc2a27bSKuninori Morimoto .flags = IORESOURCE_MEM, 318ccc2a27bSKuninori Morimoto }, { 319dbe95ad0SKuninori Morimoto .start = gic_iid(0x72), 320ccc2a27bSKuninori Morimoto .flags = IORESOURCE_IRQ, 321ccc2a27bSKuninori Morimoto }, 322ccc2a27bSKuninori Morimoto }; 323ccc2a27bSKuninori Morimoto 324ccc2a27bSKuninori Morimoto static struct platform_device i2c1_device = { 325ccc2a27bSKuninori Morimoto .name = "i2c-rcar", 326ccc2a27bSKuninori Morimoto .id = 1, 327ccc2a27bSKuninori Morimoto .resource = rcar_i2c1_res, 328ccc2a27bSKuninori Morimoto .num_resources = ARRAY_SIZE(rcar_i2c1_res), 329ccc2a27bSKuninori Morimoto }; 330ccc2a27bSKuninori Morimoto 331ccc2a27bSKuninori Morimoto static struct resource rcar_i2c2_res[] = { 332ccc2a27bSKuninori Morimoto { 333ccc2a27bSKuninori Morimoto .start = 0xffc72000, 334ccc2a27bSKuninori Morimoto .end = 0xffc72fff, 335ccc2a27bSKuninori Morimoto .flags = IORESOURCE_MEM, 336ccc2a27bSKuninori Morimoto }, { 337dbe95ad0SKuninori Morimoto .start = gic_iid(0x70), 338ccc2a27bSKuninori Morimoto .flags = IORESOURCE_IRQ, 339ccc2a27bSKuninori Morimoto }, 340ccc2a27bSKuninori Morimoto }; 341ccc2a27bSKuninori Morimoto 342ccc2a27bSKuninori Morimoto static struct platform_device i2c2_device = { 343ccc2a27bSKuninori Morimoto .name = "i2c-rcar", 344ccc2a27bSKuninori Morimoto .id = 2, 345ccc2a27bSKuninori Morimoto .resource = rcar_i2c2_res, 346ccc2a27bSKuninori Morimoto .num_resources = ARRAY_SIZE(rcar_i2c2_res), 347ccc2a27bSKuninori Morimoto }; 348ccc2a27bSKuninori Morimoto 349ccc2a27bSKuninori Morimoto static struct resource rcar_i2c3_res[] = { 350ccc2a27bSKuninori Morimoto { 351ccc2a27bSKuninori Morimoto .start = 0xffc73000, 352ccc2a27bSKuninori Morimoto .end = 0xffc73fff, 353ccc2a27bSKuninori Morimoto .flags = IORESOURCE_MEM, 354ccc2a27bSKuninori Morimoto }, { 355dbe95ad0SKuninori Morimoto .start = gic_iid(0x71), 356ccc2a27bSKuninori Morimoto .flags = IORESOURCE_IRQ, 357ccc2a27bSKuninori Morimoto }, 358ccc2a27bSKuninori Morimoto }; 359ccc2a27bSKuninori Morimoto 360ccc2a27bSKuninori Morimoto static struct platform_device i2c3_device = { 361ccc2a27bSKuninori Morimoto .name = "i2c-rcar", 362ccc2a27bSKuninori Morimoto .id = 3, 363ccc2a27bSKuninori Morimoto .resource = rcar_i2c3_res, 364ccc2a27bSKuninori Morimoto .num_resources = ARRAY_SIZE(rcar_i2c3_res), 365ccc2a27bSKuninori Morimoto }; 366ccc2a27bSKuninori Morimoto 367a7b9837cSVladimir Barinov static struct resource sata_resources[] = { 368a7b9837cSVladimir Barinov [0] = { 369a7b9837cSVladimir Barinov .name = "rcar-sata", 370a7b9837cSVladimir Barinov .start = 0xfc600000, 371a7b9837cSVladimir Barinov .end = 0xfc601fff, 372a7b9837cSVladimir Barinov .flags = IORESOURCE_MEM, 373a7b9837cSVladimir Barinov }, 374a7b9837cSVladimir Barinov [1] = { 375d60cd5f1SSergei Shtylyov .start = gic_iid(0x84), 376a7b9837cSVladimir Barinov .flags = IORESOURCE_IRQ, 377a7b9837cSVladimir Barinov }, 378a7b9837cSVladimir Barinov }; 379a7b9837cSVladimir Barinov 380a7b9837cSVladimir Barinov static struct platform_device sata_device = { 381a7b9837cSVladimir Barinov .name = "sata_rcar", 382a7b9837cSVladimir Barinov .id = -1, 383a7b9837cSVladimir Barinov .resource = sata_resources, 384a7b9837cSVladimir Barinov .num_resources = ARRAY_SIZE(sata_resources), 385a7b9837cSVladimir Barinov .dev = { 386a7b9837cSVladimir Barinov .dma_mask = &sata_device.dev.coherent_dma_mask, 387a7b9837cSVladimir Barinov .coherent_dma_mask = DMA_BIT_MASK(32), 388a7b9837cSVladimir Barinov }, 389a7b9837cSVladimir Barinov }; 390a7b9837cSVladimir Barinov 3912c8788bfSSergei Shtylyov /* USB PHY */ 3922437b27cSSergei Shtylyov static struct resource usb_phy_resources[] __initdata = { 3932c8788bfSSergei Shtylyov [0] = { 394725bf9dcSSergei Shtylyov .start = 0xffe70800, 3952c8788bfSSergei Shtylyov .end = 0xffe70900 - 1, 3962c8788bfSSergei Shtylyov .flags = IORESOURCE_MEM, 3972c8788bfSSergei Shtylyov }, 3982c8788bfSSergei Shtylyov }; 3992c8788bfSSergei Shtylyov 4002c8788bfSSergei Shtylyov /* USB */ 4012c8788bfSSergei Shtylyov static struct usb_phy *phy; 4022c8788bfSSergei Shtylyov 4032c8788bfSSergei Shtylyov static int usb_power_on(struct platform_device *pdev) 4042c8788bfSSergei Shtylyov { 4052c8788bfSSergei Shtylyov if (IS_ERR(phy)) 4062c8788bfSSergei Shtylyov return PTR_ERR(phy); 4072c8788bfSSergei Shtylyov 4082c8788bfSSergei Shtylyov pm_runtime_enable(&pdev->dev); 4092c8788bfSSergei Shtylyov pm_runtime_get_sync(&pdev->dev); 4102c8788bfSSergei Shtylyov 4112c8788bfSSergei Shtylyov usb_phy_init(phy); 4122c8788bfSSergei Shtylyov 4132c8788bfSSergei Shtylyov return 0; 4142c8788bfSSergei Shtylyov } 4152c8788bfSSergei Shtylyov 4162c8788bfSSergei Shtylyov static void usb_power_off(struct platform_device *pdev) 4172c8788bfSSergei Shtylyov { 4182c8788bfSSergei Shtylyov if (IS_ERR(phy)) 4192c8788bfSSergei Shtylyov return; 4202c8788bfSSergei Shtylyov 4212c8788bfSSergei Shtylyov usb_phy_shutdown(phy); 4222c8788bfSSergei Shtylyov 4232c8788bfSSergei Shtylyov pm_runtime_put_sync(&pdev->dev); 4242c8788bfSSergei Shtylyov pm_runtime_disable(&pdev->dev); 4252c8788bfSSergei Shtylyov } 4262c8788bfSSergei Shtylyov 42784a812daSSergei Shtylyov static int ehci_init_internal_buffer(struct usb_hcd *hcd) 42884a812daSSergei Shtylyov { 42984a812daSSergei Shtylyov /* 43084a812daSSergei Shtylyov * Below are recommended values from the datasheet; 43184a812daSSergei Shtylyov * see [USB :: Setting of EHCI Internal Buffer]. 43284a812daSSergei Shtylyov */ 43384a812daSSergei Shtylyov /* EHCI IP internal buffer setting */ 43484a812daSSergei Shtylyov iowrite32(0x00ff0040, hcd->regs + 0x0094); 43584a812daSSergei Shtylyov /* EHCI IP internal buffer enable */ 43684a812daSSergei Shtylyov iowrite32(0x00000001, hcd->regs + 0x009C); 43784a812daSSergei Shtylyov 43884a812daSSergei Shtylyov return 0; 43984a812daSSergei Shtylyov } 44084a812daSSergei Shtylyov 4412c8788bfSSergei Shtylyov static struct usb_ehci_pdata ehcix_pdata = { 4422c8788bfSSergei Shtylyov .power_on = usb_power_on, 4432c8788bfSSergei Shtylyov .power_off = usb_power_off, 4442c8788bfSSergei Shtylyov .power_suspend = usb_power_off, 44584a812daSSergei Shtylyov .pre_setup = ehci_init_internal_buffer, 4462c8788bfSSergei Shtylyov }; 4472c8788bfSSergei Shtylyov 4482c8788bfSSergei Shtylyov static struct resource ehci0_resources[] = { 4492c8788bfSSergei Shtylyov [0] = { 4502c8788bfSSergei Shtylyov .start = 0xffe70000, 4512c8788bfSSergei Shtylyov .end = 0xffe70400 - 1, 4522c8788bfSSergei Shtylyov .flags = IORESOURCE_MEM, 4532c8788bfSSergei Shtylyov }, 4542c8788bfSSergei Shtylyov [1] = { 4552c8788bfSSergei Shtylyov .start = gic_iid(0x4c), 4562c8788bfSSergei Shtylyov .flags = IORESOURCE_IRQ, 4572c8788bfSSergei Shtylyov }, 4582c8788bfSSergei Shtylyov }; 4592c8788bfSSergei Shtylyov 4602c8788bfSSergei Shtylyov static struct platform_device ehci0_device = { 4612c8788bfSSergei Shtylyov .name = "ehci-platform", 4622c8788bfSSergei Shtylyov .id = 0, 4632c8788bfSSergei Shtylyov .dev = { 4642c8788bfSSergei Shtylyov .dma_mask = &ehci0_device.dev.coherent_dma_mask, 4652c8788bfSSergei Shtylyov .coherent_dma_mask = 0xffffffff, 4662c8788bfSSergei Shtylyov .platform_data = &ehcix_pdata, 4672c8788bfSSergei Shtylyov }, 4682c8788bfSSergei Shtylyov .num_resources = ARRAY_SIZE(ehci0_resources), 4692c8788bfSSergei Shtylyov .resource = ehci0_resources, 4702c8788bfSSergei Shtylyov }; 4712c8788bfSSergei Shtylyov 4722c8788bfSSergei Shtylyov static struct resource ehci1_resources[] = { 4732c8788bfSSergei Shtylyov [0] = { 4742c8788bfSSergei Shtylyov .start = 0xfff70000, 4752c8788bfSSergei Shtylyov .end = 0xfff70400 - 1, 4762c8788bfSSergei Shtylyov .flags = IORESOURCE_MEM, 4772c8788bfSSergei Shtylyov }, 4782c8788bfSSergei Shtylyov [1] = { 4792c8788bfSSergei Shtylyov .start = gic_iid(0x4d), 4802c8788bfSSergei Shtylyov .flags = IORESOURCE_IRQ, 4812c8788bfSSergei Shtylyov }, 4822c8788bfSSergei Shtylyov }; 4832c8788bfSSergei Shtylyov 4842c8788bfSSergei Shtylyov static struct platform_device ehci1_device = { 4852c8788bfSSergei Shtylyov .name = "ehci-platform", 4862c8788bfSSergei Shtylyov .id = 1, 4872c8788bfSSergei Shtylyov .dev = { 4882c8788bfSSergei Shtylyov .dma_mask = &ehci1_device.dev.coherent_dma_mask, 4892c8788bfSSergei Shtylyov .coherent_dma_mask = 0xffffffff, 4902c8788bfSSergei Shtylyov .platform_data = &ehcix_pdata, 4912c8788bfSSergei Shtylyov }, 4922c8788bfSSergei Shtylyov .num_resources = ARRAY_SIZE(ehci1_resources), 4932c8788bfSSergei Shtylyov .resource = ehci1_resources, 4942c8788bfSSergei Shtylyov }; 4952c8788bfSSergei Shtylyov 4962c8788bfSSergei Shtylyov static struct usb_ohci_pdata ohcix_pdata = { 4972c8788bfSSergei Shtylyov .power_on = usb_power_on, 4982c8788bfSSergei Shtylyov .power_off = usb_power_off, 4992c8788bfSSergei Shtylyov .power_suspend = usb_power_off, 5002c8788bfSSergei Shtylyov }; 5012c8788bfSSergei Shtylyov 5022c8788bfSSergei Shtylyov static struct resource ohci0_resources[] = { 5032c8788bfSSergei Shtylyov [0] = { 5042c8788bfSSergei Shtylyov .start = 0xffe70400, 5052c8788bfSSergei Shtylyov .end = 0xffe70800 - 1, 5062c8788bfSSergei Shtylyov .flags = IORESOURCE_MEM, 5072c8788bfSSergei Shtylyov }, 5082c8788bfSSergei Shtylyov [1] = { 5092c8788bfSSergei Shtylyov .start = gic_iid(0x4c), 5102c8788bfSSergei Shtylyov .flags = IORESOURCE_IRQ, 5112c8788bfSSergei Shtylyov }, 5122c8788bfSSergei Shtylyov }; 5132c8788bfSSergei Shtylyov 5142c8788bfSSergei Shtylyov static struct platform_device ohci0_device = { 5152c8788bfSSergei Shtylyov .name = "ohci-platform", 5162c8788bfSSergei Shtylyov .id = 0, 5172c8788bfSSergei Shtylyov .dev = { 5182c8788bfSSergei Shtylyov .dma_mask = &ohci0_device.dev.coherent_dma_mask, 5192c8788bfSSergei Shtylyov .coherent_dma_mask = 0xffffffff, 5202c8788bfSSergei Shtylyov .platform_data = &ohcix_pdata, 5212c8788bfSSergei Shtylyov }, 5222c8788bfSSergei Shtylyov .num_resources = ARRAY_SIZE(ohci0_resources), 5232c8788bfSSergei Shtylyov .resource = ohci0_resources, 5242c8788bfSSergei Shtylyov }; 5252c8788bfSSergei Shtylyov 5262c8788bfSSergei Shtylyov static struct resource ohci1_resources[] = { 5272c8788bfSSergei Shtylyov [0] = { 5282c8788bfSSergei Shtylyov .start = 0xfff70400, 5292c8788bfSSergei Shtylyov .end = 0xfff70800 - 1, 5302c8788bfSSergei Shtylyov .flags = IORESOURCE_MEM, 5312c8788bfSSergei Shtylyov }, 5322c8788bfSSergei Shtylyov [1] = { 5332c8788bfSSergei Shtylyov .start = gic_iid(0x4d), 5342c8788bfSSergei Shtylyov .flags = IORESOURCE_IRQ, 5352c8788bfSSergei Shtylyov }, 5362c8788bfSSergei Shtylyov }; 5372c8788bfSSergei Shtylyov 5382c8788bfSSergei Shtylyov static struct platform_device ohci1_device = { 5392c8788bfSSergei Shtylyov .name = "ohci-platform", 5402c8788bfSSergei Shtylyov .id = 1, 5412c8788bfSSergei Shtylyov .dev = { 5422c8788bfSSergei Shtylyov .dma_mask = &ohci1_device.dev.coherent_dma_mask, 5432c8788bfSSergei Shtylyov .coherent_dma_mask = 0xffffffff, 5442c8788bfSSergei Shtylyov .platform_data = &ohcix_pdata, 5452c8788bfSSergei Shtylyov }, 5462c8788bfSSergei Shtylyov .num_resources = ARRAY_SIZE(ohci1_resources), 5472c8788bfSSergei Shtylyov .resource = ohci1_resources, 5482c8788bfSSergei Shtylyov }; 5492c8788bfSSergei Shtylyov 550dace48d0SSergei Shtylyov /* Ether */ 551dace48d0SSergei Shtylyov static struct resource ether_resources[] = { 552dace48d0SSergei Shtylyov { 553dace48d0SSergei Shtylyov .start = 0xfde00000, 554dace48d0SSergei Shtylyov .end = 0xfde003ff, 555dace48d0SSergei Shtylyov .flags = IORESOURCE_MEM, 556dace48d0SSergei Shtylyov }, { 557dace48d0SSergei Shtylyov .start = gic_iid(0xb4), 558dace48d0SSergei Shtylyov .flags = IORESOURCE_IRQ, 559dace48d0SSergei Shtylyov }, 560dace48d0SSergei Shtylyov }; 561dace48d0SSergei Shtylyov 5624714a025SVladimir Barinov #define R8A7779_VIN(idx) \ 5634714a025SVladimir Barinov static struct resource vin##idx##_resources[] __initdata = { \ 5644714a025SVladimir Barinov DEFINE_RES_MEM(0xffc50000 + 0x1000 * (idx), 0x1000), \ 5654714a025SVladimir Barinov DEFINE_RES_IRQ(gic_iid(0x5f + (idx))), \ 5664714a025SVladimir Barinov }; \ 5674714a025SVladimir Barinov \ 5684714a025SVladimir Barinov static struct platform_device_info vin##idx##_info __initdata = { \ 5694714a025SVladimir Barinov .parent = &platform_bus, \ 5704714a025SVladimir Barinov .name = "r8a7779-vin", \ 5714714a025SVladimir Barinov .id = idx, \ 5724714a025SVladimir Barinov .res = vin##idx##_resources, \ 5734714a025SVladimir Barinov .num_res = ARRAY_SIZE(vin##idx##_resources), \ 5744714a025SVladimir Barinov .dma_mask = DMA_BIT_MASK(32), \ 5754714a025SVladimir Barinov } 5764714a025SVladimir Barinov 5774714a025SVladimir Barinov R8A7779_VIN(0); 5784714a025SVladimir Barinov R8A7779_VIN(1); 5794714a025SVladimir Barinov R8A7779_VIN(2); 5804714a025SVladimir Barinov R8A7779_VIN(3); 5814714a025SVladimir Barinov 5824714a025SVladimir Barinov static struct platform_device_info *vin_info_table[] __initdata = { 5834714a025SVladimir Barinov &vin0_info, 5844714a025SVladimir Barinov &vin1_info, 5854714a025SVladimir Barinov &vin2_info, 5864714a025SVladimir Barinov &vin3_info, 5874714a025SVladimir Barinov }; 5884714a025SVladimir Barinov 589916ddc35SSimon Horman static struct platform_device *r8a7779_devices_dt[] __initdata = { 590f411fadeSMagnus Damm &scif0_device, 591f411fadeSMagnus Damm &scif1_device, 592f411fadeSMagnus Damm &scif2_device, 593f411fadeSMagnus Damm &scif3_device, 594f411fadeSMagnus Damm &scif4_device, 595f411fadeSMagnus Damm &scif5_device, 596f411fadeSMagnus Damm &tmu00_device, 597f411fadeSMagnus Damm &tmu01_device, 59810e8d4f6SSimon Horman }; 59910e8d4f6SSimon Horman 6002c8788bfSSergei Shtylyov static struct platform_device *r8a7779_standard_devices[] __initdata = { 601ccc2a27bSKuninori Morimoto &i2c0_device, 602ccc2a27bSKuninori Morimoto &i2c1_device, 603ccc2a27bSKuninori Morimoto &i2c2_device, 604ccc2a27bSKuninori Morimoto &i2c3_device, 605a7b9837cSVladimir Barinov &sata_device, 606f411fadeSMagnus Damm }; 607f411fadeSMagnus Damm 608f411fadeSMagnus Damm void __init r8a7779_add_standard_devices(void) 609f411fadeSMagnus Damm { 6108bac13f5SMagnus Damm #ifdef CONFIG_CACHE_L2X0 6118bac13f5SMagnus Damm /* Early BRESP enable, Shared attribute override enable, 64K*16way */ 612ed7d132aSKuninori Morimoto l2x0_init(IOMEM(0xf0100000), 0x40470000, 0x82000fff); 6138bac13f5SMagnus Damm #endif 614a662c082SMagnus Damm r8a7779_pm_init(); 615a662c082SMagnus Damm 61645e5ca57SRafael J. Wysocki r8a7779_init_pm_domains(); 617a662c082SMagnus Damm 618916ddc35SSimon Horman platform_add_devices(r8a7779_devices_dt, 619916ddc35SSimon Horman ARRAY_SIZE(r8a7779_devices_dt)); 6202c8788bfSSergei Shtylyov platform_add_devices(r8a7779_standard_devices, 6212c8788bfSSergei Shtylyov ARRAY_SIZE(r8a7779_standard_devices)); 622f411fadeSMagnus Damm } 623f411fadeSMagnus Damm 624dace48d0SSergei Shtylyov void __init r8a7779_add_ether_device(struct sh_eth_plat_data *pdata) 625dace48d0SSergei Shtylyov { 6264c370abbSSergei Shtylyov platform_device_register_resndata(&platform_bus, "r8a777x-ether", -1, 627dace48d0SSergei Shtylyov ether_resources, 628dace48d0SSergei Shtylyov ARRAY_SIZE(ether_resources), 629dace48d0SSergei Shtylyov pdata, sizeof(*pdata)); 630dace48d0SSergei Shtylyov } 631dace48d0SSergei Shtylyov 6322437b27cSSergei Shtylyov void __init r8a7779_add_usb_phy_device(struct rcar_phy_platform_data *pdata) 6332437b27cSSergei Shtylyov { 6342437b27cSSergei Shtylyov platform_device_register_resndata(&platform_bus, "rcar_usb_phy", -1, 6352437b27cSSergei Shtylyov usb_phy_resources, 6362437b27cSSergei Shtylyov ARRAY_SIZE(usb_phy_resources), 6372437b27cSSergei Shtylyov pdata, sizeof(*pdata)); 6382437b27cSSergei Shtylyov } 6392437b27cSSergei Shtylyov 6404714a025SVladimir Barinov void __init r8a7779_add_vin_device(int id, struct rcar_vin_platform_data *pdata) 6414714a025SVladimir Barinov { 6424714a025SVladimir Barinov BUG_ON(id < 0 || id > 3); 6434714a025SVladimir Barinov 6444714a025SVladimir Barinov vin_info_table[id]->data = pdata; 6454714a025SVladimir Barinov vin_info_table[id]->size_data = sizeof(*pdata); 6464714a025SVladimir Barinov 6474714a025SVladimir Barinov platform_device_register_full(vin_info_table[id]); 6484714a025SVladimir Barinov } 6494714a025SVladimir Barinov 650b759bd11SMagnus Damm /* do nothing for !CONFIG_SMP or !CONFIG_HAVE_TWD */ 651b759bd11SMagnus Damm void __init __weak r8a7779_register_twd(void) { } 652b759bd11SMagnus Damm 6536bb27d73SStephen Warren void __init r8a7779_earlytimer_init(void) 654df27a2d8SMagnus Damm { 655df27a2d8SMagnus Damm r8a7779_clock_init(); 656df27a2d8SMagnus Damm shmobile_earlytimer_init(); 657b759bd11SMagnus Damm r8a7779_register_twd(); 658df27a2d8SMagnus Damm } 659df27a2d8SMagnus Damm 660f411fadeSMagnus Damm void __init r8a7779_add_early_devices(void) 661f411fadeSMagnus Damm { 662916ddc35SSimon Horman early_platform_add_devices(r8a7779_devices_dt, 663916ddc35SSimon Horman ARRAY_SIZE(r8a7779_devices_dt)); 6643e353b87SMagnus Damm 6653e353b87SMagnus Damm /* Early serial console setup is not included here due to 6663e353b87SMagnus Damm * memory map collisions. The SCIF serial ports in r8a7779 6673e353b87SMagnus Damm * are difficult to entity map 1:1 due to collision with the 6683e353b87SMagnus Damm * virtual memory range used by the coherent DMA code on ARM. 6693e353b87SMagnus Damm * 6703e353b87SMagnus Damm * Anyone wanting to debug early can remove UPF_IOREMAP from 6713e353b87SMagnus Damm * the sh-sci serial console platform data, adjust mapbase 6723e353b87SMagnus Damm * to a static M:N virt:phys mapping that needs to be added to 6733e353b87SMagnus Damm * the mappings passed with iotable_init() above. 6743e353b87SMagnus Damm * 6753e353b87SMagnus Damm * Then add a call to shmobile_setup_console() from this function. 6763e353b87SMagnus Damm * 6773e353b87SMagnus Damm * As a final step pass earlyprint=sh-sci.2,115200 on the kernel 6783e353b87SMagnus Damm * command line in case of the marzen board. 6793e353b87SMagnus Damm */ 680f411fadeSMagnus Damm } 68110e8d4f6SSimon Horman 6822c8788bfSSergei Shtylyov static struct platform_device *r8a7779_late_devices[] __initdata = { 6832c8788bfSSergei Shtylyov &ehci0_device, 6842c8788bfSSergei Shtylyov &ehci1_device, 6852c8788bfSSergei Shtylyov &ohci0_device, 6862c8788bfSSergei Shtylyov &ohci1_device, 6872c8788bfSSergei Shtylyov }; 6882c8788bfSSergei Shtylyov 6892c8788bfSSergei Shtylyov void __init r8a7779_init_late(void) 6902c8788bfSSergei Shtylyov { 6912c8788bfSSergei Shtylyov /* get USB PHY */ 6922c8788bfSSergei Shtylyov phy = usb_get_phy(USB_PHY_TYPE_USB2); 6932c8788bfSSergei Shtylyov 6942c8788bfSSergei Shtylyov shmobile_init_late(); 6952c8788bfSSergei Shtylyov platform_add_devices(r8a7779_late_devices, 6962c8788bfSSergei Shtylyov ARRAY_SIZE(r8a7779_late_devices)); 6972c8788bfSSergei Shtylyov } 6982c8788bfSSergei Shtylyov 69910e8d4f6SSimon Horman #ifdef CONFIG_USE_OF 700916ddc35SSimon Horman void __init r8a7779_init_delay(void) 70110e8d4f6SSimon Horman { 70210e8d4f6SSimon Horman shmobile_setup_delay(1000, 2, 4); /* Cortex-A9 @ 1000MHz */ 70310e8d4f6SSimon Horman } 70410e8d4f6SSimon Horman 70510e8d4f6SSimon Horman static const struct of_dev_auxdata r8a7779_auxdata_lookup[] __initconst = { 70610e8d4f6SSimon Horman {}, 70710e8d4f6SSimon Horman }; 70810e8d4f6SSimon Horman 70910e8d4f6SSimon Horman void __init r8a7779_add_standard_devices_dt(void) 71010e8d4f6SSimon Horman { 71110e8d4f6SSimon Horman /* clocks are setup late during boot in the case of DT */ 71210e8d4f6SSimon Horman r8a7779_clock_init(); 71310e8d4f6SSimon Horman 714916ddc35SSimon Horman platform_add_devices(r8a7779_devices_dt, 715916ddc35SSimon Horman ARRAY_SIZE(r8a7779_devices_dt)); 71610e8d4f6SSimon Horman of_platform_populate(NULL, of_default_bus_match_table, 71710e8d4f6SSimon Horman r8a7779_auxdata_lookup, NULL); 71810e8d4f6SSimon Horman } 71910e8d4f6SSimon Horman 72010e8d4f6SSimon Horman static const char *r8a7779_compat_dt[] __initdata = { 72110e8d4f6SSimon Horman "renesas,r8a7779", 72210e8d4f6SSimon Horman NULL, 72310e8d4f6SSimon Horman }; 72410e8d4f6SSimon Horman 725abe0e14bSKuninori Morimoto DT_MACHINE_START(R8A7779_DT, "Generic R8A7779 (Flattened Device Tree)") 72610e8d4f6SSimon Horman .map_io = r8a7779_map_io, 727916ddc35SSimon Horman .init_early = r8a7779_init_delay, 72810e8d4f6SSimon Horman .nr_irqs = NR_IRQS_LEGACY, 72910e8d4f6SSimon Horman .init_irq = r8a7779_init_irq_dt, 73010e8d4f6SSimon Horman .init_machine = r8a7779_add_standard_devices_dt, 73110e8d4f6SSimon Horman .init_time = shmobile_timer_init, 7322c8788bfSSergei Shtylyov .init_late = r8a7779_init_late, 73310e8d4f6SSimon Horman .dt_compat = r8a7779_compat_dt, 73410e8d4f6SSimon Horman MACHINE_END 73510e8d4f6SSimon Horman #endif /* CONFIG_USE_OF */ 736