Path: blob/master/arch/sh/kernel/cpu/sh4a/setup-sh7723.c
17498 views
/*1* SH7723 Setup2*3* Copyright (C) 2008 Paul Mundt4*5* This file is subject to the terms and conditions of the GNU General Public6* License. See the file "COPYING" in the main directory of this archive7* for more details.8*/9#include <linux/platform_device.h>10#include <linux/init.h>11#include <linux/serial.h>12#include <linux/mm.h>13#include <linux/serial_sci.h>14#include <linux/uio_driver.h>15#include <linux/usb/r8a66597.h>16#include <linux/sh_timer.h>17#include <linux/io.h>18#include <asm/clock.h>19#include <asm/mmzone.h>20#include <cpu/sh7723.h>2122/* Serial */23static struct plat_sci_port scif0_platform_data = {24.mapbase = 0xffe00000,25.flags = UPF_BOOT_AUTOCONF,26.scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE,27.scbrr_algo_id = SCBRR_ALGO_2,28.type = PORT_SCIF,29.irqs = { 80, 80, 80, 80 },30};3132static struct platform_device scif0_device = {33.name = "sh-sci",34.id = 0,35.dev = {36.platform_data = &scif0_platform_data,37},38};3940static struct plat_sci_port scif1_platform_data = {41.mapbase = 0xffe10000,42.flags = UPF_BOOT_AUTOCONF,43.scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE,44.scbrr_algo_id = SCBRR_ALGO_2,45.type = PORT_SCIF,46.irqs = { 81, 81, 81, 81 },47};4849static struct platform_device scif1_device = {50.name = "sh-sci",51.id = 1,52.dev = {53.platform_data = &scif1_platform_data,54},55};5657static struct plat_sci_port scif2_platform_data = {58.mapbase = 0xffe20000,59.flags = UPF_BOOT_AUTOCONF,60.scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE,61.scbrr_algo_id = SCBRR_ALGO_2,62.type = PORT_SCIF,63.irqs = { 82, 82, 82, 82 },64};6566static struct platform_device scif2_device = {67.name = "sh-sci",68.id = 2,69.dev = {70.platform_data = &scif2_platform_data,71},72};7374static struct plat_sci_port scif3_platform_data = {75.mapbase = 0xa4e30000,76.flags = UPF_BOOT_AUTOCONF,77.scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE,78.scbrr_algo_id = SCBRR_ALGO_3,79.type = PORT_SCIFA,80.irqs = { 56, 56, 56, 56 },81};8283static struct platform_device scif3_device = {84.name = "sh-sci",85.id = 3,86.dev = {87.platform_data = &scif3_platform_data,88},89};9091static struct plat_sci_port scif4_platform_data = {92.mapbase = 0xa4e40000,93.flags = UPF_BOOT_AUTOCONF,94.scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE,95.scbrr_algo_id = SCBRR_ALGO_3,96.type = PORT_SCIFA,97.irqs = { 88, 88, 88, 88 },98};99100static struct platform_device scif4_device = {101.name = "sh-sci",102.id = 4,103.dev = {104.platform_data = &scif4_platform_data,105},106};107108static struct plat_sci_port scif5_platform_data = {109.mapbase = 0xa4e50000,110.flags = UPF_BOOT_AUTOCONF,111.scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE,112.scbrr_algo_id = SCBRR_ALGO_3,113.type = PORT_SCIFA,114.irqs = { 109, 109, 109, 109 },115};116117static struct platform_device scif5_device = {118.name = "sh-sci",119.id = 5,120.dev = {121.platform_data = &scif5_platform_data,122},123};124125static struct uio_info vpu_platform_data = {126.name = "VPU5",127.version = "0",128.irq = 60,129};130131static struct resource vpu_resources[] = {132[0] = {133.name = "VPU",134.start = 0xfe900000,135.end = 0xfe902807,136.flags = IORESOURCE_MEM,137},138[1] = {139/* place holder for contiguous memory */140},141};142143static struct platform_device vpu_device = {144.name = "uio_pdrv_genirq",145.id = 0,146.dev = {147.platform_data = &vpu_platform_data,148},149.resource = vpu_resources,150.num_resources = ARRAY_SIZE(vpu_resources),151.archdata = {152.hwblk_id = HWBLK_VPU,153},154};155156static struct uio_info veu0_platform_data = {157.name = "VEU2H",158.version = "0",159.irq = 54,160};161162static struct resource veu0_resources[] = {163[0] = {164.name = "VEU2H0",165.start = 0xfe920000,166.end = 0xfe92027b,167.flags = IORESOURCE_MEM,168},169[1] = {170/* place holder for contiguous memory */171},172};173174static struct platform_device veu0_device = {175.name = "uio_pdrv_genirq",176.id = 1,177.dev = {178.platform_data = &veu0_platform_data,179},180.resource = veu0_resources,181.num_resources = ARRAY_SIZE(veu0_resources),182.archdata = {183.hwblk_id = HWBLK_VEU2H0,184},185};186187static struct uio_info veu1_platform_data = {188.name = "VEU2H",189.version = "0",190.irq = 27,191};192193static struct resource veu1_resources[] = {194[0] = {195.name = "VEU2H1",196.start = 0xfe924000,197.end = 0xfe92427b,198.flags = IORESOURCE_MEM,199},200[1] = {201/* place holder for contiguous memory */202},203};204205static struct platform_device veu1_device = {206.name = "uio_pdrv_genirq",207.id = 2,208.dev = {209.platform_data = &veu1_platform_data,210},211.resource = veu1_resources,212.num_resources = ARRAY_SIZE(veu1_resources),213.archdata = {214.hwblk_id = HWBLK_VEU2H1,215},216};217218static struct sh_timer_config cmt_platform_data = {219.channel_offset = 0x60,220.timer_bit = 5,221.clockevent_rating = 125,222.clocksource_rating = 125,223};224225static struct resource cmt_resources[] = {226[0] = {227.start = 0x044a0060,228.end = 0x044a006b,229.flags = IORESOURCE_MEM,230},231[1] = {232.start = 104,233.flags = IORESOURCE_IRQ,234},235};236237static struct platform_device cmt_device = {238.name = "sh_cmt",239.id = 0,240.dev = {241.platform_data = &cmt_platform_data,242},243.resource = cmt_resources,244.num_resources = ARRAY_SIZE(cmt_resources),245.archdata = {246.hwblk_id = HWBLK_CMT,247},248};249250static struct sh_timer_config tmu0_platform_data = {251.channel_offset = 0x04,252.timer_bit = 0,253.clockevent_rating = 200,254};255256static struct resource tmu0_resources[] = {257[0] = {258.start = 0xffd80008,259.end = 0xffd80013,260.flags = IORESOURCE_MEM,261},262[1] = {263.start = 16,264.flags = IORESOURCE_IRQ,265},266};267268static struct platform_device tmu0_device = {269.name = "sh_tmu",270.id = 0,271.dev = {272.platform_data = &tmu0_platform_data,273},274.resource = tmu0_resources,275.num_resources = ARRAY_SIZE(tmu0_resources),276.archdata = {277.hwblk_id = HWBLK_TMU0,278},279};280281static struct sh_timer_config tmu1_platform_data = {282.channel_offset = 0x10,283.timer_bit = 1,284.clocksource_rating = 200,285};286287static struct resource tmu1_resources[] = {288[0] = {289.start = 0xffd80014,290.end = 0xffd8001f,291.flags = IORESOURCE_MEM,292},293[1] = {294.start = 17,295.flags = IORESOURCE_IRQ,296},297};298299static struct platform_device tmu1_device = {300.name = "sh_tmu",301.id = 1,302.dev = {303.platform_data = &tmu1_platform_data,304},305.resource = tmu1_resources,306.num_resources = ARRAY_SIZE(tmu1_resources),307.archdata = {308.hwblk_id = HWBLK_TMU0,309},310};311312static struct sh_timer_config tmu2_platform_data = {313.channel_offset = 0x1c,314.timer_bit = 2,315};316317static struct resource tmu2_resources[] = {318[0] = {319.start = 0xffd80020,320.end = 0xffd8002b,321.flags = IORESOURCE_MEM,322},323[1] = {324.start = 18,325.flags = IORESOURCE_IRQ,326},327};328329static struct platform_device tmu2_device = {330.name = "sh_tmu",331.id = 2,332.dev = {333.platform_data = &tmu2_platform_data,334},335.resource = tmu2_resources,336.num_resources = ARRAY_SIZE(tmu2_resources),337.archdata = {338.hwblk_id = HWBLK_TMU0,339},340};341342static struct sh_timer_config tmu3_platform_data = {343.channel_offset = 0x04,344.timer_bit = 0,345};346347static struct resource tmu3_resources[] = {348[0] = {349.start = 0xffd90008,350.end = 0xffd90013,351.flags = IORESOURCE_MEM,352},353[1] = {354.start = 57,355.flags = IORESOURCE_IRQ,356},357};358359static struct platform_device tmu3_device = {360.name = "sh_tmu",361.id = 3,362.dev = {363.platform_data = &tmu3_platform_data,364},365.resource = tmu3_resources,366.num_resources = ARRAY_SIZE(tmu3_resources),367.archdata = {368.hwblk_id = HWBLK_TMU1,369},370};371372static struct sh_timer_config tmu4_platform_data = {373.channel_offset = 0x10,374.timer_bit = 1,375};376377static struct resource tmu4_resources[] = {378[0] = {379.start = 0xffd90014,380.end = 0xffd9001f,381.flags = IORESOURCE_MEM,382},383[1] = {384.start = 58,385.flags = IORESOURCE_IRQ,386},387};388389static struct platform_device tmu4_device = {390.name = "sh_tmu",391.id = 4,392.dev = {393.platform_data = &tmu4_platform_data,394},395.resource = tmu4_resources,396.num_resources = ARRAY_SIZE(tmu4_resources),397.archdata = {398.hwblk_id = HWBLK_TMU1,399},400};401402static struct sh_timer_config tmu5_platform_data = {403.channel_offset = 0x1c,404.timer_bit = 2,405};406407static struct resource tmu5_resources[] = {408[0] = {409.start = 0xffd90020,410.end = 0xffd9002b,411.flags = IORESOURCE_MEM,412},413[1] = {414.start = 57,415.flags = IORESOURCE_IRQ,416},417};418419static struct platform_device tmu5_device = {420.name = "sh_tmu",421.id = 5,422.dev = {423.platform_data = &tmu5_platform_data,424},425.resource = tmu5_resources,426.num_resources = ARRAY_SIZE(tmu5_resources),427.archdata = {428.hwblk_id = HWBLK_TMU1,429},430};431432static struct resource rtc_resources[] = {433[0] = {434.start = 0xa465fec0,435.end = 0xa465fec0 + 0x58 - 1,436.flags = IORESOURCE_IO,437},438[1] = {439/* Period IRQ */440.start = 69,441.flags = IORESOURCE_IRQ,442},443[2] = {444/* Carry IRQ */445.start = 70,446.flags = IORESOURCE_IRQ,447},448[3] = {449/* Alarm IRQ */450.start = 68,451.flags = IORESOURCE_IRQ,452},453};454455static struct platform_device rtc_device = {456.name = "sh-rtc",457.id = -1,458.num_resources = ARRAY_SIZE(rtc_resources),459.resource = rtc_resources,460.archdata = {461.hwblk_id = HWBLK_RTC,462},463};464465static struct r8a66597_platdata r8a66597_data = {466.on_chip = 1,467};468469static struct resource sh7723_usb_host_resources[] = {470[0] = {471.start = 0xa4d80000,472.end = 0xa4d800ff,473.flags = IORESOURCE_MEM,474},475[1] = {476.start = 65,477.end = 65,478.flags = IORESOURCE_IRQ | IRQF_TRIGGER_LOW,479},480};481482static struct platform_device sh7723_usb_host_device = {483.name = "r8a66597_hcd",484.id = 0,485.dev = {486.dma_mask = NULL, /* not use dma */487.coherent_dma_mask = 0xffffffff,488.platform_data = &r8a66597_data,489},490.num_resources = ARRAY_SIZE(sh7723_usb_host_resources),491.resource = sh7723_usb_host_resources,492.archdata = {493.hwblk_id = HWBLK_USB,494},495};496497static struct resource iic_resources[] = {498[0] = {499.name = "IIC",500.start = 0x04470000,501.end = 0x04470017,502.flags = IORESOURCE_MEM,503},504[1] = {505.start = 96,506.end = 99,507.flags = IORESOURCE_IRQ,508},509};510511static struct platform_device iic_device = {512.name = "i2c-sh_mobile",513.id = 0, /* "i2c0" clock */514.num_resources = ARRAY_SIZE(iic_resources),515.resource = iic_resources,516.archdata = {517.hwblk_id = HWBLK_IIC,518},519};520521static struct platform_device *sh7723_devices[] __initdata = {522&scif0_device,523&scif1_device,524&scif2_device,525&scif3_device,526&scif4_device,527&scif5_device,528&cmt_device,529&tmu0_device,530&tmu1_device,531&tmu2_device,532&tmu3_device,533&tmu4_device,534&tmu5_device,535&rtc_device,536&iic_device,537&sh7723_usb_host_device,538&vpu_device,539&veu0_device,540&veu1_device,541};542543static int __init sh7723_devices_setup(void)544{545platform_resource_setup_memory(&vpu_device, "vpu", 2 << 20);546platform_resource_setup_memory(&veu0_device, "veu0", 2 << 20);547platform_resource_setup_memory(&veu1_device, "veu1", 2 << 20);548549return platform_add_devices(sh7723_devices,550ARRAY_SIZE(sh7723_devices));551}552arch_initcall(sh7723_devices_setup);553554static struct platform_device *sh7723_early_devices[] __initdata = {555&scif0_device,556&scif1_device,557&scif2_device,558&scif3_device,559&scif4_device,560&scif5_device,561&cmt_device,562&tmu0_device,563&tmu1_device,564&tmu2_device,565&tmu3_device,566&tmu4_device,567&tmu5_device,568};569570void __init plat_early_device_setup(void)571{572early_platform_add_devices(sh7723_early_devices,573ARRAY_SIZE(sh7723_early_devices));574}575576#define RAMCR_CACHE_L2FC 0x0002577#define RAMCR_CACHE_L2E 0x0001578#define L2_CACHE_ENABLE (RAMCR_CACHE_L2E|RAMCR_CACHE_L2FC)579580void l2_cache_init(void)581{582/* Enable L2 cache */583__raw_writel(L2_CACHE_ENABLE, RAMCR);584}585586enum {587UNUSED=0,588ENABLED,589DISABLED,590591/* interrupt sources */592IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7,593HUDI,594DMAC1A_DEI0,DMAC1A_DEI1,DMAC1A_DEI2,DMAC1A_DEI3,595_2DG_TRI,_2DG_INI,_2DG_CEI,596DMAC0A_DEI0,DMAC0A_DEI1,DMAC0A_DEI2,DMAC0A_DEI3,597VIO_CEUI,VIO_BEUI,VIO_VEU2HI,VIO_VOUI,598SCIFA_SCIFA0,599VPU_VPUI,600TPU_TPUI,601ADC_ADI,602USB_USI0,603RTC_ATI,RTC_PRI,RTC_CUI,604DMAC1B_DEI4,DMAC1B_DEI5,DMAC1B_DADERR,605DMAC0B_DEI4,DMAC0B_DEI5,DMAC0B_DADERR,606KEYSC_KEYI,607SCIF_SCIF0,SCIF_SCIF1,SCIF_SCIF2,608MSIOF_MSIOFI0,MSIOF_MSIOFI1,609SCIFA_SCIFA1,610FLCTL_FLSTEI,FLCTL_FLTENDI,FLCTL_FLTREQ0I,FLCTL_FLTREQ1I,611I2C_ALI,I2C_TACKI,I2C_WAITI,I2C_DTEI,612CMT_CMTI,613TSIF_TSIFI,614SIU_SIUI,615SCIFA_SCIFA2,616TMU0_TUNI0, TMU0_TUNI1, TMU0_TUNI2,617IRDA_IRDAI,618ATAPI_ATAPII,619VEU2H1_VEU2HI,620LCDC_LCDCI,621TMU1_TUNI0,TMU1_TUNI1,TMU1_TUNI2,622623/* interrupt groups */624DMAC1A, DMAC0A, VIO, DMAC0B, FLCTL, I2C, _2DG,625SDHI1, RTC, DMAC1B, SDHI0,626};627628static struct intc_vect vectors[] __initdata = {629INTC_VECT(IRQ0, 0x600), INTC_VECT(IRQ1, 0x620),630INTC_VECT(IRQ2, 0x640), INTC_VECT(IRQ3, 0x660),631INTC_VECT(IRQ4, 0x680), INTC_VECT(IRQ5, 0x6a0),632INTC_VECT(IRQ6, 0x6c0), INTC_VECT(IRQ7, 0x6e0),633634INTC_VECT(DMAC1A_DEI0,0x700),635INTC_VECT(DMAC1A_DEI1,0x720),636INTC_VECT(DMAC1A_DEI2,0x740),637INTC_VECT(DMAC1A_DEI3,0x760),638639INTC_VECT(_2DG_TRI, 0x780),640INTC_VECT(_2DG_INI, 0x7A0),641INTC_VECT(_2DG_CEI, 0x7C0),642643INTC_VECT(DMAC0A_DEI0,0x800),644INTC_VECT(DMAC0A_DEI1,0x820),645INTC_VECT(DMAC0A_DEI2,0x840),646INTC_VECT(DMAC0A_DEI3,0x860),647648INTC_VECT(VIO_CEUI,0x880),649INTC_VECT(VIO_BEUI,0x8A0),650INTC_VECT(VIO_VEU2HI,0x8C0),651INTC_VECT(VIO_VOUI,0x8E0),652653INTC_VECT(SCIFA_SCIFA0,0x900),654INTC_VECT(VPU_VPUI,0x980),655INTC_VECT(TPU_TPUI,0x9A0),656INTC_VECT(ADC_ADI,0x9E0),657INTC_VECT(USB_USI0,0xA20),658659INTC_VECT(RTC_ATI,0xA80),660INTC_VECT(RTC_PRI,0xAA0),661INTC_VECT(RTC_CUI,0xAC0),662663INTC_VECT(DMAC1B_DEI4,0xB00),664INTC_VECT(DMAC1B_DEI5,0xB20),665INTC_VECT(DMAC1B_DADERR,0xB40),666667INTC_VECT(DMAC0B_DEI4,0xB80),668INTC_VECT(DMAC0B_DEI5,0xBA0),669INTC_VECT(DMAC0B_DADERR,0xBC0),670671INTC_VECT(KEYSC_KEYI,0xBE0),672INTC_VECT(SCIF_SCIF0,0xC00),673INTC_VECT(SCIF_SCIF1,0xC20),674INTC_VECT(SCIF_SCIF2,0xC40),675INTC_VECT(MSIOF_MSIOFI0,0xC80),676INTC_VECT(MSIOF_MSIOFI1,0xCA0),677INTC_VECT(SCIFA_SCIFA1,0xD00),678679INTC_VECT(FLCTL_FLSTEI,0xD80),680INTC_VECT(FLCTL_FLTENDI,0xDA0),681INTC_VECT(FLCTL_FLTREQ0I,0xDC0),682INTC_VECT(FLCTL_FLTREQ1I,0xDE0),683684INTC_VECT(I2C_ALI,0xE00),685INTC_VECT(I2C_TACKI,0xE20),686INTC_VECT(I2C_WAITI,0xE40),687INTC_VECT(I2C_DTEI,0xE60),688689INTC_VECT(SDHI0, 0xE80),690INTC_VECT(SDHI0, 0xEA0),691INTC_VECT(SDHI0, 0xEC0),692693INTC_VECT(CMT_CMTI,0xF00),694INTC_VECT(TSIF_TSIFI,0xF20),695INTC_VECT(SIU_SIUI,0xF80),696INTC_VECT(SCIFA_SCIFA2,0xFA0),697698INTC_VECT(TMU0_TUNI0,0x400),699INTC_VECT(TMU0_TUNI1,0x420),700INTC_VECT(TMU0_TUNI2,0x440),701702INTC_VECT(IRDA_IRDAI,0x480),703INTC_VECT(ATAPI_ATAPII,0x4A0),704705INTC_VECT(SDHI1, 0x4E0),706INTC_VECT(SDHI1, 0x500),707INTC_VECT(SDHI1, 0x520),708709INTC_VECT(VEU2H1_VEU2HI,0x560),710INTC_VECT(LCDC_LCDCI,0x580),711712INTC_VECT(TMU1_TUNI0,0x920),713INTC_VECT(TMU1_TUNI1,0x940),714INTC_VECT(TMU1_TUNI2,0x960),715716};717718static struct intc_group groups[] __initdata = {719INTC_GROUP(DMAC1A,DMAC1A_DEI0,DMAC1A_DEI1,DMAC1A_DEI2,DMAC1A_DEI3),720INTC_GROUP(DMAC0A,DMAC0A_DEI0,DMAC0A_DEI1,DMAC0A_DEI2,DMAC0A_DEI3),721INTC_GROUP(VIO, VIO_CEUI,VIO_BEUI,VIO_VEU2HI,VIO_VOUI),722INTC_GROUP(DMAC0B, DMAC0B_DEI4,DMAC0B_DEI5,DMAC0B_DADERR),723INTC_GROUP(FLCTL,FLCTL_FLSTEI,FLCTL_FLTENDI,FLCTL_FLTREQ0I,FLCTL_FLTREQ1I),724INTC_GROUP(I2C,I2C_ALI,I2C_TACKI,I2C_WAITI,I2C_DTEI),725INTC_GROUP(_2DG, _2DG_TRI,_2DG_INI,_2DG_CEI),726INTC_GROUP(RTC, RTC_ATI,RTC_PRI,RTC_CUI),727INTC_GROUP(DMAC1B, DMAC1B_DEI4,DMAC1B_DEI5,DMAC1B_DADERR),728};729730static struct intc_mask_reg mask_registers[] __initdata = {731{ 0xa4080080, 0xa40800c0, 8, /* IMR0 / IMCR0 */732{ 0, TMU1_TUNI2, TMU1_TUNI1, TMU1_TUNI0,7330, ENABLED, ENABLED, ENABLED } },734{ 0xa4080084, 0xa40800c4, 8, /* IMR1 / IMCR1 */735{ VIO_VOUI, VIO_VEU2HI,VIO_BEUI,VIO_CEUI,DMAC0A_DEI3,DMAC0A_DEI2,DMAC0A_DEI1,DMAC0A_DEI0 } },736{ 0xa4080088, 0xa40800c8, 8, /* IMR2 / IMCR2 */737{ 0, 0, 0, VPU_VPUI,0,0,0,SCIFA_SCIFA0 } },738{ 0xa408008c, 0xa40800cc, 8, /* IMR3 / IMCR3 */739{ DMAC1A_DEI3,DMAC1A_DEI2,DMAC1A_DEI1,DMAC1A_DEI0,0,0,0,IRDA_IRDAI } },740{ 0xa4080090, 0xa40800d0, 8, /* IMR4 / IMCR4 */741{ 0,TMU0_TUNI2,TMU0_TUNI1,TMU0_TUNI0,VEU2H1_VEU2HI,0,0,LCDC_LCDCI } },742{ 0xa4080094, 0xa40800d4, 8, /* IMR5 / IMCR5 */743{ KEYSC_KEYI,DMAC0B_DADERR,DMAC0B_DEI5,DMAC0B_DEI4,0,SCIF_SCIF2,SCIF_SCIF1,SCIF_SCIF0 } },744{ 0xa4080098, 0xa40800d8, 8, /* IMR6 / IMCR6 */745{ 0,0,0,SCIFA_SCIFA1,ADC_ADI,0,MSIOF_MSIOFI1,MSIOF_MSIOFI0 } },746{ 0xa408009c, 0xa40800dc, 8, /* IMR7 / IMCR7 */747{ I2C_DTEI, I2C_WAITI, I2C_TACKI, I2C_ALI,748FLCTL_FLTREQ1I, FLCTL_FLTREQ0I, FLCTL_FLTENDI, FLCTL_FLSTEI } },749{ 0xa40800a0, 0xa40800e0, 8, /* IMR8 / IMCR8 */750{ 0, ENABLED, ENABLED, ENABLED,7510, 0, SCIFA_SCIFA2, SIU_SIUI } },752{ 0xa40800a4, 0xa40800e4, 8, /* IMR9 / IMCR9 */753{ 0, 0, 0, CMT_CMTI, 0, 0, USB_USI0,0 } },754{ 0xa40800a8, 0xa40800e8, 8, /* IMR10 / IMCR10 */755{ 0, DMAC1B_DADERR,DMAC1B_DEI5,DMAC1B_DEI4,0,RTC_ATI,RTC_PRI,RTC_CUI } },756{ 0xa40800ac, 0xa40800ec, 8, /* IMR11 / IMCR11 */757{ 0,_2DG_CEI,_2DG_INI,_2DG_TRI,0,TPU_TPUI,0,TSIF_TSIFI } },758{ 0xa40800b0, 0xa40800f0, 8, /* IMR12 / IMCR12 */759{ 0,0,0,0,0,0,0,ATAPI_ATAPII } },760{ 0xa4140044, 0xa4140064, 8, /* INTMSK00 / INTMSKCLR00 */761{ IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },762};763764static struct intc_prio_reg prio_registers[] __initdata = {765{ 0xa4080000, 0, 16, 4, /* IPRA */ { TMU0_TUNI0, TMU0_TUNI1, TMU0_TUNI2, IRDA_IRDAI } },766{ 0xa4080004, 0, 16, 4, /* IPRB */ { VEU2H1_VEU2HI, LCDC_LCDCI, DMAC1A, 0} },767{ 0xa4080008, 0, 16, 4, /* IPRC */ { TMU1_TUNI0, TMU1_TUNI1, TMU1_TUNI2, 0} },768{ 0xa408000c, 0, 16, 4, /* IPRD */ { } },769{ 0xa4080010, 0, 16, 4, /* IPRE */ { DMAC0A, VIO, SCIFA_SCIFA0, VPU_VPUI } },770{ 0xa4080014, 0, 16, 4, /* IPRF */ { KEYSC_KEYI, DMAC0B, USB_USI0, CMT_CMTI } },771{ 0xa4080018, 0, 16, 4, /* IPRG */ { SCIF_SCIF0, SCIF_SCIF1, SCIF_SCIF2,0 } },772{ 0xa408001c, 0, 16, 4, /* IPRH */ { MSIOF_MSIOFI0,MSIOF_MSIOFI1, FLCTL, I2C } },773{ 0xa4080020, 0, 16, 4, /* IPRI */ { SCIFA_SCIFA1,0,TSIF_TSIFI,_2DG } },774{ 0xa4080024, 0, 16, 4, /* IPRJ */ { ADC_ADI,0,SIU_SIUI,SDHI1 } },775{ 0xa4080028, 0, 16, 4, /* IPRK */ { RTC,DMAC1B,0,SDHI0 } },776{ 0xa408002c, 0, 16, 4, /* IPRL */ { SCIFA_SCIFA2,0,TPU_TPUI,ATAPI_ATAPII } },777{ 0xa4140010, 0, 32, 4, /* INTPRI00 */778{ IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },779};780781static struct intc_sense_reg sense_registers[] __initdata = {782{ 0xa414001c, 16, 2, /* ICR1 */783{ IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },784};785786static struct intc_mask_reg ack_registers[] __initdata = {787{ 0xa4140024, 0, 8, /* INTREQ00 */788{ IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },789};790791static struct intc_desc intc_desc __initdata = {792.name = "sh7723",793.force_enable = ENABLED,794.force_disable = DISABLED,795.hw = INTC_HW_DESC(vectors, groups, mask_registers,796prio_registers, sense_registers, ack_registers),797};798799void __init plat_irq_setup(void)800{801register_intc_controller(&intc_desc);802}803804805