141504c39SPaul Mundt /* 241504c39SPaul Mundt * SH7770 Setup 341504c39SPaul Mundt * 42163b4cbSPaul Mundt * Copyright (C) 2006 - 2008 Paul Mundt 541504c39SPaul Mundt * 641504c39SPaul Mundt * This file is subject to the terms and conditions of the GNU General Public 741504c39SPaul Mundt * License. See the file "COPYING" in the main directory of this archive 841504c39SPaul Mundt * for more details. 941504c39SPaul Mundt */ 1041504c39SPaul Mundt #include <linux/platform_device.h> 1141504c39SPaul Mundt #include <linux/init.h> 1241504c39SPaul Mundt #include <linux/serial.h> 1396de1a8fSPaul Mundt #include <linux/serial_sci.h> 14f251935eSMagnus Damm #include <linux/sh_timer.h> 1541504c39SPaul Mundt 1641504c39SPaul Mundt static struct plat_sci_port sci_platform_data[] = { 1741504c39SPaul Mundt { 1841504c39SPaul Mundt .mapbase = 0xff923000, 1941504c39SPaul Mundt .flags = UPF_BOOT_AUTOCONF, 2041504c39SPaul Mundt .type = PORT_SCIF, 2141504c39SPaul Mundt .irqs = { 61, 61, 61, 61 }, 2241504c39SPaul Mundt }, { 2341504c39SPaul Mundt .mapbase = 0xff924000, 2441504c39SPaul Mundt .flags = UPF_BOOT_AUTOCONF, 2541504c39SPaul Mundt .type = PORT_SCIF, 2641504c39SPaul Mundt .irqs = { 62, 62, 62, 62 }, 2741504c39SPaul Mundt }, { 2841504c39SPaul Mundt .mapbase = 0xff925000, 2941504c39SPaul Mundt .flags = UPF_BOOT_AUTOCONF, 3041504c39SPaul Mundt .type = PORT_SCIF, 3141504c39SPaul Mundt .irqs = { 63, 63, 63, 63 }, 3241504c39SPaul Mundt }, { 332163b4cbSPaul Mundt .mapbase = 0xff926000, 342163b4cbSPaul Mundt .flags = UPF_BOOT_AUTOCONF, 352163b4cbSPaul Mundt .type = PORT_SCIF, 362163b4cbSPaul Mundt .irqs = { 64, 64, 64, 64 }, 372163b4cbSPaul Mundt }, { 382163b4cbSPaul Mundt .mapbase = 0xff927000, 392163b4cbSPaul Mundt .flags = UPF_BOOT_AUTOCONF, 402163b4cbSPaul Mundt .type = PORT_SCIF, 412163b4cbSPaul Mundt .irqs = { 65, 65, 65, 65 }, 422163b4cbSPaul Mundt }, { 432163b4cbSPaul Mundt .mapbase = 0xff928000, 442163b4cbSPaul Mundt .flags = UPF_BOOT_AUTOCONF, 452163b4cbSPaul Mundt .type = PORT_SCIF, 462163b4cbSPaul Mundt .irqs = { 66, 66, 66, 66 }, 472163b4cbSPaul Mundt }, { 482163b4cbSPaul Mundt .mapbase = 0xff929000, 492163b4cbSPaul Mundt .flags = UPF_BOOT_AUTOCONF, 502163b4cbSPaul Mundt .type = PORT_SCIF, 512163b4cbSPaul Mundt .irqs = { 67, 67, 67, 67 }, 522163b4cbSPaul Mundt }, { 532163b4cbSPaul Mundt .mapbase = 0xff92a000, 542163b4cbSPaul Mundt .flags = UPF_BOOT_AUTOCONF, 552163b4cbSPaul Mundt .type = PORT_SCIF, 562163b4cbSPaul Mundt .irqs = { 68, 68, 68, 68 }, 572163b4cbSPaul Mundt }, { 582163b4cbSPaul Mundt .mapbase = 0xff92b000, 592163b4cbSPaul Mundt .flags = UPF_BOOT_AUTOCONF, 602163b4cbSPaul Mundt .type = PORT_SCIF, 612163b4cbSPaul Mundt .irqs = { 69, 69, 69, 69 }, 622163b4cbSPaul Mundt }, { 632163b4cbSPaul Mundt .mapbase = 0xff92c000, 642163b4cbSPaul Mundt .flags = UPF_BOOT_AUTOCONF, 652163b4cbSPaul Mundt .type = PORT_SCIF, 662163b4cbSPaul Mundt .irqs = { 70, 70, 70, 70 }, 672163b4cbSPaul Mundt }, { 6841504c39SPaul Mundt .flags = 0, 6941504c39SPaul Mundt } 7041504c39SPaul Mundt }; 7141504c39SPaul Mundt 7241504c39SPaul Mundt static struct platform_device sci_device = { 7341504c39SPaul Mundt .name = "sh-sci", 7441504c39SPaul Mundt .id = -1, 7541504c39SPaul Mundt .dev = { 7641504c39SPaul Mundt .platform_data = sci_platform_data, 7741504c39SPaul Mundt }, 7841504c39SPaul Mundt }; 7941504c39SPaul Mundt 80f251935eSMagnus Damm static struct sh_timer_config tmu0_platform_data = { 81f251935eSMagnus Damm .name = "TMU0", 82f251935eSMagnus Damm .channel_offset = 0x04, 83f251935eSMagnus Damm .timer_bit = 0, 84f251935eSMagnus Damm .clk = "module_clk", 85f251935eSMagnus Damm .clockevent_rating = 200, 86f251935eSMagnus Damm }; 87f251935eSMagnus Damm 88f251935eSMagnus Damm static struct resource tmu0_resources[] = { 89f251935eSMagnus Damm [0] = { 90f251935eSMagnus Damm .name = "TMU0", 91f251935eSMagnus Damm .start = 0xffd80008, 92f251935eSMagnus Damm .end = 0xffd80013, 93f251935eSMagnus Damm .flags = IORESOURCE_MEM, 94f251935eSMagnus Damm }, 95f251935eSMagnus Damm [1] = { 96f251935eSMagnus Damm .start = 16, 97f251935eSMagnus Damm .flags = IORESOURCE_IRQ, 98f251935eSMagnus Damm }, 99f251935eSMagnus Damm }; 100f251935eSMagnus Damm 101f251935eSMagnus Damm static struct platform_device tmu0_device = { 102f251935eSMagnus Damm .name = "sh_tmu", 103f251935eSMagnus Damm .id = 0, 104f251935eSMagnus Damm .dev = { 105f251935eSMagnus Damm .platform_data = &tmu0_platform_data, 106f251935eSMagnus Damm }, 107f251935eSMagnus Damm .resource = tmu0_resources, 108f251935eSMagnus Damm .num_resources = ARRAY_SIZE(tmu0_resources), 109f251935eSMagnus Damm }; 110f251935eSMagnus Damm 111f251935eSMagnus Damm static struct sh_timer_config tmu1_platform_data = { 112f251935eSMagnus Damm .name = "TMU1", 113f251935eSMagnus Damm .channel_offset = 0x10, 114f251935eSMagnus Damm .timer_bit = 1, 115f251935eSMagnus Damm .clk = "module_clk", 116f251935eSMagnus Damm .clocksource_rating = 200, 117f251935eSMagnus Damm }; 118f251935eSMagnus Damm 119f251935eSMagnus Damm static struct resource tmu1_resources[] = { 120f251935eSMagnus Damm [0] = { 121f251935eSMagnus Damm .name = "TMU1", 122f251935eSMagnus Damm .start = 0xffd80014, 123f251935eSMagnus Damm .end = 0xffd8001f, 124f251935eSMagnus Damm .flags = IORESOURCE_MEM, 125f251935eSMagnus Damm }, 126f251935eSMagnus Damm [1] = { 127f251935eSMagnus Damm .start = 17, 128f251935eSMagnus Damm .flags = IORESOURCE_IRQ, 129f251935eSMagnus Damm }, 130f251935eSMagnus Damm }; 131f251935eSMagnus Damm 132f251935eSMagnus Damm static struct platform_device tmu1_device = { 133f251935eSMagnus Damm .name = "sh_tmu", 134f251935eSMagnus Damm .id = 1, 135f251935eSMagnus Damm .dev = { 136f251935eSMagnus Damm .platform_data = &tmu1_platform_data, 137f251935eSMagnus Damm }, 138f251935eSMagnus Damm .resource = tmu1_resources, 139f251935eSMagnus Damm .num_resources = ARRAY_SIZE(tmu1_resources), 140f251935eSMagnus Damm }; 141f251935eSMagnus Damm 142f251935eSMagnus Damm static struct sh_timer_config tmu2_platform_data = { 143f251935eSMagnus Damm .name = "TMU2", 144f251935eSMagnus Damm .channel_offset = 0x1c, 145f251935eSMagnus Damm .timer_bit = 2, 146f251935eSMagnus Damm .clk = "module_clk", 147f251935eSMagnus Damm }; 148f251935eSMagnus Damm 149f251935eSMagnus Damm static struct resource tmu2_resources[] = { 150f251935eSMagnus Damm [0] = { 151f251935eSMagnus Damm .name = "TMU2", 152f251935eSMagnus Damm .start = 0xffd80020, 153f251935eSMagnus Damm .end = 0xffd8002f, 154f251935eSMagnus Damm .flags = IORESOURCE_MEM, 155f251935eSMagnus Damm }, 156f251935eSMagnus Damm [1] = { 157f251935eSMagnus Damm .start = 18, 158f251935eSMagnus Damm .flags = IORESOURCE_IRQ, 159f251935eSMagnus Damm }, 160f251935eSMagnus Damm }; 161f251935eSMagnus Damm 162f251935eSMagnus Damm static struct platform_device tmu2_device = { 163f251935eSMagnus Damm .name = "sh_tmu", 164f251935eSMagnus Damm .id = 2, 165f251935eSMagnus Damm .dev = { 166f251935eSMagnus Damm .platform_data = &tmu2_platform_data, 167f251935eSMagnus Damm }, 168f251935eSMagnus Damm .resource = tmu2_resources, 169f251935eSMagnus Damm .num_resources = ARRAY_SIZE(tmu2_resources), 170f251935eSMagnus Damm }; 171f251935eSMagnus Damm 172f251935eSMagnus Damm static struct sh_timer_config tmu3_platform_data = { 173f251935eSMagnus Damm .name = "TMU3", 174f251935eSMagnus Damm .channel_offset = 0x04, 175f251935eSMagnus Damm .timer_bit = 0, 176f251935eSMagnus Damm .clk = "module_clk", 177f251935eSMagnus Damm }; 178f251935eSMagnus Damm 179f251935eSMagnus Damm static struct resource tmu3_resources[] = { 180f251935eSMagnus Damm [0] = { 181f251935eSMagnus Damm .name = "TMU3", 182f251935eSMagnus Damm .start = 0xffd81008, 183f251935eSMagnus Damm .end = 0xffd81013, 184f251935eSMagnus Damm .flags = IORESOURCE_MEM, 185f251935eSMagnus Damm }, 186f251935eSMagnus Damm [1] = { 187f251935eSMagnus Damm .start = 19, 188f251935eSMagnus Damm .flags = IORESOURCE_IRQ, 189f251935eSMagnus Damm }, 190f251935eSMagnus Damm }; 191f251935eSMagnus Damm 192f251935eSMagnus Damm static struct platform_device tmu3_device = { 193f251935eSMagnus Damm .name = "sh_tmu", 194f251935eSMagnus Damm .id = 3, 195f251935eSMagnus Damm .dev = { 196f251935eSMagnus Damm .platform_data = &tmu3_platform_data, 197f251935eSMagnus Damm }, 198f251935eSMagnus Damm .resource = tmu3_resources, 199f251935eSMagnus Damm .num_resources = ARRAY_SIZE(tmu3_resources), 200f251935eSMagnus Damm }; 201f251935eSMagnus Damm 202f251935eSMagnus Damm static struct sh_timer_config tmu4_platform_data = { 203f251935eSMagnus Damm .name = "TMU4", 204f251935eSMagnus Damm .channel_offset = 0x10, 205f251935eSMagnus Damm .timer_bit = 1, 206f251935eSMagnus Damm .clk = "module_clk", 207f251935eSMagnus Damm }; 208f251935eSMagnus Damm 209f251935eSMagnus Damm static struct resource tmu4_resources[] = { 210f251935eSMagnus Damm [0] = { 211f251935eSMagnus Damm .name = "TMU4", 212f251935eSMagnus Damm .start = 0xffd81014, 213f251935eSMagnus Damm .end = 0xffd8101f, 214f251935eSMagnus Damm .flags = IORESOURCE_MEM, 215f251935eSMagnus Damm }, 216f251935eSMagnus Damm [1] = { 217f251935eSMagnus Damm .start = 20, 218f251935eSMagnus Damm .flags = IORESOURCE_IRQ, 219f251935eSMagnus Damm }, 220f251935eSMagnus Damm }; 221f251935eSMagnus Damm 222f251935eSMagnus Damm static struct platform_device tmu4_device = { 223f251935eSMagnus Damm .name = "sh_tmu", 224f251935eSMagnus Damm .id = 4, 225f251935eSMagnus Damm .dev = { 226f251935eSMagnus Damm .platform_data = &tmu4_platform_data, 227f251935eSMagnus Damm }, 228f251935eSMagnus Damm .resource = tmu4_resources, 229f251935eSMagnus Damm .num_resources = ARRAY_SIZE(tmu4_resources), 230f251935eSMagnus Damm }; 231f251935eSMagnus Damm 232f251935eSMagnus Damm static struct sh_timer_config tmu5_platform_data = { 233f251935eSMagnus Damm .name = "TMU5", 234f251935eSMagnus Damm .channel_offset = 0x1c, 235f251935eSMagnus Damm .timer_bit = 2, 236f251935eSMagnus Damm .clk = "module_clk", 237f251935eSMagnus Damm }; 238f251935eSMagnus Damm 239f251935eSMagnus Damm static struct resource tmu5_resources[] = { 240f251935eSMagnus Damm [0] = { 241f251935eSMagnus Damm .name = "TMU5", 242f251935eSMagnus Damm .start = 0xffd81020, 243f251935eSMagnus Damm .end = 0xffd8102f, 244f251935eSMagnus Damm .flags = IORESOURCE_MEM, 245f251935eSMagnus Damm }, 246f251935eSMagnus Damm [1] = { 247f251935eSMagnus Damm .start = 21, 248f251935eSMagnus Damm .flags = IORESOURCE_IRQ, 249f251935eSMagnus Damm }, 250f251935eSMagnus Damm }; 251f251935eSMagnus Damm 252f251935eSMagnus Damm static struct platform_device tmu5_device = { 253f251935eSMagnus Damm .name = "sh_tmu", 254f251935eSMagnus Damm .id = 5, 255f251935eSMagnus Damm .dev = { 256f251935eSMagnus Damm .platform_data = &tmu5_platform_data, 257f251935eSMagnus Damm }, 258f251935eSMagnus Damm .resource = tmu5_resources, 259f251935eSMagnus Damm .num_resources = ARRAY_SIZE(tmu5_resources), 260f251935eSMagnus Damm }; 261f251935eSMagnus Damm 262f251935eSMagnus Damm static struct sh_timer_config tmu6_platform_data = { 263f251935eSMagnus Damm .name = "TMU6", 264f251935eSMagnus Damm .channel_offset = 0x04, 265f251935eSMagnus Damm .timer_bit = 0, 266f251935eSMagnus Damm .clk = "module_clk", 267f251935eSMagnus Damm }; 268f251935eSMagnus Damm 269f251935eSMagnus Damm static struct resource tmu6_resources[] = { 270f251935eSMagnus Damm [0] = { 271f251935eSMagnus Damm .name = "TMU6", 272f251935eSMagnus Damm .start = 0xffd82008, 273f251935eSMagnus Damm .end = 0xffd82013, 274f251935eSMagnus Damm .flags = IORESOURCE_MEM, 275f251935eSMagnus Damm }, 276f251935eSMagnus Damm [1] = { 277f251935eSMagnus Damm .start = 22, 278f251935eSMagnus Damm .flags = IORESOURCE_IRQ, 279f251935eSMagnus Damm }, 280f251935eSMagnus Damm }; 281f251935eSMagnus Damm 282f251935eSMagnus Damm static struct platform_device tmu6_device = { 283f251935eSMagnus Damm .name = "sh_tmu", 284f251935eSMagnus Damm .id = 6, 285f251935eSMagnus Damm .dev = { 286f251935eSMagnus Damm .platform_data = &tmu6_platform_data, 287f251935eSMagnus Damm }, 288f251935eSMagnus Damm .resource = tmu6_resources, 289f251935eSMagnus Damm .num_resources = ARRAY_SIZE(tmu6_resources), 290f251935eSMagnus Damm }; 291f251935eSMagnus Damm 292f251935eSMagnus Damm static struct sh_timer_config tmu7_platform_data = { 293f251935eSMagnus Damm .name = "TMU7", 294f251935eSMagnus Damm .channel_offset = 0x10, 295f251935eSMagnus Damm .timer_bit = 1, 296f251935eSMagnus Damm .clk = "module_clk", 297f251935eSMagnus Damm }; 298f251935eSMagnus Damm 299f251935eSMagnus Damm static struct resource tmu7_resources[] = { 300f251935eSMagnus Damm [0] = { 301f251935eSMagnus Damm .name = "TMU7", 302f251935eSMagnus Damm .start = 0xffd82014, 303f251935eSMagnus Damm .end = 0xffd8201f, 304f251935eSMagnus Damm .flags = IORESOURCE_MEM, 305f251935eSMagnus Damm }, 306f251935eSMagnus Damm [1] = { 307f251935eSMagnus Damm .start = 23, 308f251935eSMagnus Damm .flags = IORESOURCE_IRQ, 309f251935eSMagnus Damm }, 310f251935eSMagnus Damm }; 311f251935eSMagnus Damm 312f251935eSMagnus Damm static struct platform_device tmu7_device = { 313f251935eSMagnus Damm .name = "sh_tmu", 314f251935eSMagnus Damm .id = 7, 315f251935eSMagnus Damm .dev = { 316f251935eSMagnus Damm .platform_data = &tmu7_platform_data, 317f251935eSMagnus Damm }, 318f251935eSMagnus Damm .resource = tmu7_resources, 319f251935eSMagnus Damm .num_resources = ARRAY_SIZE(tmu7_resources), 320f251935eSMagnus Damm }; 321f251935eSMagnus Damm 322f251935eSMagnus Damm static struct sh_timer_config tmu8_platform_data = { 323f251935eSMagnus Damm .name = "TMU8", 324f251935eSMagnus Damm .channel_offset = 0x1c, 325f251935eSMagnus Damm .timer_bit = 2, 326f251935eSMagnus Damm .clk = "module_clk", 327f251935eSMagnus Damm }; 328f251935eSMagnus Damm 329f251935eSMagnus Damm static struct resource tmu8_resources[] = { 330f251935eSMagnus Damm [0] = { 331f251935eSMagnus Damm .name = "TMU8", 332f251935eSMagnus Damm .start = 0xffd82020, 333f251935eSMagnus Damm .end = 0xffd8202b, 334f251935eSMagnus Damm .flags = IORESOURCE_MEM, 335f251935eSMagnus Damm }, 336f251935eSMagnus Damm [1] = { 337f251935eSMagnus Damm .start = 24, 338f251935eSMagnus Damm .flags = IORESOURCE_IRQ, 339f251935eSMagnus Damm }, 340f251935eSMagnus Damm }; 341f251935eSMagnus Damm 342f251935eSMagnus Damm static struct platform_device tmu8_device = { 343f251935eSMagnus Damm .name = "sh_tmu", 344f251935eSMagnus Damm .id = 8, 345f251935eSMagnus Damm .dev = { 346f251935eSMagnus Damm .platform_data = &tmu8_platform_data, 347f251935eSMagnus Damm }, 348f251935eSMagnus Damm .resource = tmu8_resources, 349f251935eSMagnus Damm .num_resources = ARRAY_SIZE(tmu8_resources), 350f251935eSMagnus Damm }; 351f251935eSMagnus Damm 35241504c39SPaul Mundt static struct platform_device *sh7770_devices[] __initdata = { 353f251935eSMagnus Damm &tmu0_device, 354f251935eSMagnus Damm &tmu1_device, 355f251935eSMagnus Damm &tmu2_device, 356f251935eSMagnus Damm &tmu3_device, 357f251935eSMagnus Damm &tmu4_device, 358f251935eSMagnus Damm &tmu5_device, 359f251935eSMagnus Damm &tmu6_device, 360f251935eSMagnus Damm &tmu7_device, 361f251935eSMagnus Damm &tmu8_device, 36241504c39SPaul Mundt &sci_device, 36341504c39SPaul Mundt }; 36441504c39SPaul Mundt 36541504c39SPaul Mundt static int __init sh7770_devices_setup(void) 36641504c39SPaul Mundt { 36741504c39SPaul Mundt return platform_add_devices(sh7770_devices, 36841504c39SPaul Mundt ARRAY_SIZE(sh7770_devices)); 36941504c39SPaul Mundt } 37041504c39SPaul Mundt __initcall(sh7770_devices_setup); 37135f3abe9SPaul Mundt 372f251935eSMagnus Damm static struct platform_device *sh7770_early_devices[] __initdata = { 373f251935eSMagnus Damm &tmu0_device, 374f251935eSMagnus Damm &tmu1_device, 375f251935eSMagnus Damm &tmu2_device, 376f251935eSMagnus Damm &tmu3_device, 377f251935eSMagnus Damm &tmu4_device, 378f251935eSMagnus Damm &tmu5_device, 379f251935eSMagnus Damm &tmu6_device, 380f251935eSMagnus Damm &tmu7_device, 381f251935eSMagnus Damm &tmu8_device, 382f251935eSMagnus Damm }; 383f251935eSMagnus Damm 384f251935eSMagnus Damm void __init plat_early_device_setup(void) 385f251935eSMagnus Damm { 386f251935eSMagnus Damm early_platform_add_devices(sh7770_early_devices, 387f251935eSMagnus Damm ARRAY_SIZE(sh7770_early_devices)); 388f251935eSMagnus Damm } 389f251935eSMagnus Damm 39035f3abe9SPaul Mundt void __init plat_irq_setup(void) 39135f3abe9SPaul Mundt { 39235f3abe9SPaul Mundt } 393