19d4436a6SYoshinori Sato /* 29d4436a6SYoshinori Sato * SH7619 Setup 39d4436a6SYoshinori Sato * 49d4436a6SYoshinori Sato * Copyright (C) 2006 Yoshinori Sato 59d4436a6SYoshinori Sato * 69d4436a6SYoshinori Sato * This file is subject to the terms and conditions of the GNU General Public 79d4436a6SYoshinori Sato * License. See the file "COPYING" in the main directory of this archive 89d4436a6SYoshinori Sato * for more details. 99d4436a6SYoshinori Sato */ 109d4436a6SYoshinori Sato #include <linux/platform_device.h> 119d4436a6SYoshinori Sato #include <linux/init.h> 129d4436a6SYoshinori Sato #include <linux/serial.h> 1396de1a8fSPaul Mundt #include <linux/serial_sci.h> 149d4436a6SYoshinori Sato 150dc3fc04SMagnus Damm enum { 160dc3fc04SMagnus Damm UNUSED = 0, 170dc3fc04SMagnus Damm 180dc3fc04SMagnus Damm /* interrupt sources */ 190dc3fc04SMagnus Damm IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7, 200dc3fc04SMagnus Damm WDT, EDMAC, CMT0, CMT1, 210dc3fc04SMagnus Damm SCIF0_ERI, SCIF0_RXI, SCIF0_BRI, SCIF0_TXI, 220dc3fc04SMagnus Damm SCIF1_ERI, SCIF1_RXI, SCIF1_BRI, SCIF1_TXI, 230dc3fc04SMagnus Damm SCIF2_ERI, SCIF2_RXI, SCIF2_BRI, SCIF2_TXI, 240dc3fc04SMagnus Damm HIF_HIFI, HIF_HIFBI, 250dc3fc04SMagnus Damm DMAC0, DMAC1, DMAC2, DMAC3, 260dc3fc04SMagnus Damm SIOF, 270dc3fc04SMagnus Damm 280dc3fc04SMagnus Damm /* interrupt groups */ 290dc3fc04SMagnus Damm SCIF0, SCIF1, SCIF2, 300dc3fc04SMagnus Damm }; 310dc3fc04SMagnus Damm 320dc3fc04SMagnus Damm static struct intc_vect vectors[] __initdata = { 330dc3fc04SMagnus Damm INTC_IRQ(IRQ0, 64), INTC_IRQ(IRQ1, 65), 340dc3fc04SMagnus Damm INTC_IRQ(IRQ2, 66), INTC_IRQ(IRQ3, 67), 350dc3fc04SMagnus Damm INTC_IRQ(IRQ4, 80), INTC_IRQ(IRQ5, 81), 360dc3fc04SMagnus Damm INTC_IRQ(IRQ6, 82), INTC_IRQ(IRQ7, 83), 370dc3fc04SMagnus Damm INTC_IRQ(WDT, 84), INTC_IRQ(EDMAC, 85), 380dc3fc04SMagnus Damm INTC_IRQ(CMT0, 86), INTC_IRQ(CMT1, 87), 390dc3fc04SMagnus Damm INTC_IRQ(SCIF0_ERI, 88), INTC_IRQ(SCIF0_RXI, 89), 400dc3fc04SMagnus Damm INTC_IRQ(SCIF0_BRI, 90), INTC_IRQ(SCIF0_TXI, 91), 410dc3fc04SMagnus Damm INTC_IRQ(SCIF1_ERI, 92), INTC_IRQ(SCIF1_RXI, 93), 420dc3fc04SMagnus Damm INTC_IRQ(SCIF1_BRI, 94), INTC_IRQ(SCIF1_TXI, 95), 430dc3fc04SMagnus Damm INTC_IRQ(SCIF2_ERI, 96), INTC_IRQ(SCIF2_RXI, 97), 440dc3fc04SMagnus Damm INTC_IRQ(SCIF2_BRI, 98), INTC_IRQ(SCIF2_TXI, 99), 450dc3fc04SMagnus Damm INTC_IRQ(HIF_HIFI, 100), INTC_IRQ(HIF_HIFBI, 101), 460dc3fc04SMagnus Damm INTC_IRQ(DMAC0, 104), INTC_IRQ(DMAC1, 105), 470dc3fc04SMagnus Damm INTC_IRQ(DMAC2, 106), INTC_IRQ(DMAC3, 107), 480dc3fc04SMagnus Damm INTC_IRQ(SIOF, 108), 490dc3fc04SMagnus Damm }; 500dc3fc04SMagnus Damm 510dc3fc04SMagnus Damm static struct intc_group groups[] __initdata = { 520dc3fc04SMagnus Damm INTC_GROUP(SCIF0, SCIF0_ERI, SCIF0_RXI, SCIF0_BRI, SCIF0_TXI), 530dc3fc04SMagnus Damm INTC_GROUP(SCIF1, SCIF1_ERI, SCIF1_RXI, SCIF1_BRI, SCIF1_TXI), 540dc3fc04SMagnus Damm INTC_GROUP(SCIF2, SCIF2_ERI, SCIF2_RXI, SCIF2_BRI, SCIF2_TXI), 550dc3fc04SMagnus Damm }; 560dc3fc04SMagnus Damm 570dc3fc04SMagnus Damm static struct intc_prio_reg prio_registers[] __initdata = { 580dc3fc04SMagnus Damm { 0xf8140006, 0, 16, 4, /* IPRA */ { IRQ0, IRQ1, IRQ2, IRQ3 } }, 590dc3fc04SMagnus Damm { 0xf8140008, 0, 16, 4, /* IPRB */ { IRQ4, IRQ5, IRQ6, IRQ7 } }, 600dc3fc04SMagnus Damm { 0xf8080000, 0, 16, 4, /* IPRC */ { WDT, EDMAC, CMT0, CMT1 } }, 610dc3fc04SMagnus Damm { 0xf8080002, 0, 16, 4, /* IPRD */ { SCIF0, SCIF1, SCIF2 } }, 620dc3fc04SMagnus Damm { 0xf8080004, 0, 16, 4, /* IPRE */ { HIF_HIFI, HIF_HIFBI } }, 630dc3fc04SMagnus Damm { 0xf8080006, 0, 16, 4, /* IPRF */ { DMAC0, DMAC1, DMAC2, DMAC3 } }, 640dc3fc04SMagnus Damm { 0xf8080008, 0, 16, 4, /* IPRG */ { SIOF } }, 650dc3fc04SMagnus Damm }; 660dc3fc04SMagnus Damm 670dc3fc04SMagnus Damm static DECLARE_INTC_DESC(intc_desc, "sh7619", vectors, groups, 687f3edee8SMagnus Damm NULL, prio_registers, NULL); 690dc3fc04SMagnus Damm 709d4436a6SYoshinori Sato static struct plat_sci_port sci_platform_data[] = { 719d4436a6SYoshinori Sato { 729d4436a6SYoshinori Sato .mapbase = 0xf8400000, 739d4436a6SYoshinori Sato .flags = UPF_BOOT_AUTOCONF, 749d4436a6SYoshinori Sato .type = PORT_SCIF, 759d4436a6SYoshinori Sato .irqs = { 88, 89, 91, 90}, 769d4436a6SYoshinori Sato }, { 779d4436a6SYoshinori Sato .mapbase = 0xf8410000, 789d4436a6SYoshinori Sato .flags = UPF_BOOT_AUTOCONF, 799d4436a6SYoshinori Sato .type = PORT_SCIF, 809d4436a6SYoshinori Sato .irqs = { 92, 93, 95, 94}, 819d4436a6SYoshinori Sato }, { 829d4436a6SYoshinori Sato .mapbase = 0xf8420000, 839d4436a6SYoshinori Sato .flags = UPF_BOOT_AUTOCONF, 849d4436a6SYoshinori Sato .type = PORT_SCIF, 859d4436a6SYoshinori Sato .irqs = { 96, 97, 99, 98}, 869d4436a6SYoshinori Sato }, { 879d4436a6SYoshinori Sato .flags = 0, 889d4436a6SYoshinori Sato } 899d4436a6SYoshinori Sato }; 909d4436a6SYoshinori Sato 919d4436a6SYoshinori Sato static struct platform_device sci_device = { 929d4436a6SYoshinori Sato .name = "sh-sci", 939d4436a6SYoshinori Sato .id = -1, 949d4436a6SYoshinori Sato .dev = { 959d4436a6SYoshinori Sato .platform_data = sci_platform_data, 969d4436a6SYoshinori Sato }, 979d4436a6SYoshinori Sato }; 989d4436a6SYoshinori Sato 99*d88a3ea6SYoshinori Sato static struct resource eth_resources[] = { 100*d88a3ea6SYoshinori Sato [0] = { 101*d88a3ea6SYoshinori Sato .start = 0xfb000000, 102*d88a3ea6SYoshinori Sato .end = 0xfb0001c8, 103*d88a3ea6SYoshinori Sato .flags = IORESOURCE_MEM, 104*d88a3ea6SYoshinori Sato }, 105*d88a3ea6SYoshinori Sato [1] = { 106*d88a3ea6SYoshinori Sato .start = 85, 107*d88a3ea6SYoshinori Sato .end = 85, 108*d88a3ea6SYoshinori Sato .flags = IORESOURCE_IRQ, 109*d88a3ea6SYoshinori Sato }, 110*d88a3ea6SYoshinori Sato }; 111*d88a3ea6SYoshinori Sato 112*d88a3ea6SYoshinori Sato static struct platform_device eth_device = { 113*d88a3ea6SYoshinori Sato .name = "sh-eth", 114*d88a3ea6SYoshinori Sato .id = -1, 115*d88a3ea6SYoshinori Sato .dev = { 116*d88a3ea6SYoshinori Sato .platform_data = (void *)1, 117*d88a3ea6SYoshinori Sato }, 118*d88a3ea6SYoshinori Sato .num_resources = ARRAY_SIZE(eth_resources), 119*d88a3ea6SYoshinori Sato .resource = eth_resources, 120*d88a3ea6SYoshinori Sato }; 121*d88a3ea6SYoshinori Sato 1229d4436a6SYoshinori Sato static struct platform_device *sh7619_devices[] __initdata = { 1239d4436a6SYoshinori Sato &sci_device, 124*d88a3ea6SYoshinori Sato ð_device, 1259d4436a6SYoshinori Sato }; 1269d4436a6SYoshinori Sato 1279d4436a6SYoshinori Sato static int __init sh7619_devices_setup(void) 1289d4436a6SYoshinori Sato { 1299d4436a6SYoshinori Sato return platform_add_devices(sh7619_devices, 1309d4436a6SYoshinori Sato ARRAY_SIZE(sh7619_devices)); 1319d4436a6SYoshinori Sato } 1329d4436a6SYoshinori Sato __initcall(sh7619_devices_setup); 133780a1568SYoshinori Sato 13490015c89SMagnus Damm void __init plat_irq_setup(void) 135780a1568SYoshinori Sato { 1360dc3fc04SMagnus Damm register_intc_controller(&intc_desc); 137780a1568SYoshinori Sato } 138