Path: blob/master/arch/sh/kernel/cpu/sh4a/setup-sh7757.c
17531 views
/*1* SH7757 Setup2*3* Copyright (C) 2009, 2011 Renesas Solutions Corp.4*5* based on setup-sh7785.c : Copyright (C) 2007 Paul Mundt6*7* This file is subject to the terms and conditions of the GNU General Public8* License. See the file "COPYING" in the main directory of this archive9* for more details.10*/11#include <linux/platform_device.h>12#include <linux/init.h>13#include <linux/serial.h>14#include <linux/serial_sci.h>15#include <linux/io.h>16#include <linux/mm.h>17#include <linux/sh_timer.h>18#include <linux/sh_dma.h>1920#include <cpu/dma-register.h>21#include <cpu/sh7757.h>2223static struct plat_sci_port scif2_platform_data = {24.mapbase = 0xfe4b0000, /* SCIF2 */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 = { 40, 40, 40, 40 },30};3132static struct platform_device scif2_device = {33.name = "sh-sci",34.id = 0,35.dev = {36.platform_data = &scif2_platform_data,37},38};3940static struct plat_sci_port scif3_platform_data = {41.mapbase = 0xfe4c0000, /* SCIF3 */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 = { 76, 76, 76, 76 },47};4849static struct platform_device scif3_device = {50.name = "sh-sci",51.id = 1,52.dev = {53.platform_data = &scif3_platform_data,54},55};5657static struct plat_sci_port scif4_platform_data = {58.mapbase = 0xfe4d0000, /* SCIF4 */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 = { 104, 104, 104, 104 },64};6566static struct platform_device scif4_device = {67.name = "sh-sci",68.id = 2,69.dev = {70.platform_data = &scif4_platform_data,71},72};7374static struct sh_timer_config tmu0_platform_data = {75.channel_offset = 0x04,76.timer_bit = 0,77.clockevent_rating = 200,78};7980static struct resource tmu0_resources[] = {81[0] = {82.start = 0xfe430008,83.end = 0xfe430013,84.flags = IORESOURCE_MEM,85},86[1] = {87.start = 28,88.flags = IORESOURCE_IRQ,89},90};9192static struct platform_device tmu0_device = {93.name = "sh_tmu",94.id = 0,95.dev = {96.platform_data = &tmu0_platform_data,97},98.resource = tmu0_resources,99.num_resources = ARRAY_SIZE(tmu0_resources),100};101102static struct sh_timer_config tmu1_platform_data = {103.channel_offset = 0x10,104.timer_bit = 1,105.clocksource_rating = 200,106};107108static struct resource tmu1_resources[] = {109[0] = {110.start = 0xfe430014,111.end = 0xfe43001f,112.flags = IORESOURCE_MEM,113},114[1] = {115.start = 29,116.flags = IORESOURCE_IRQ,117},118};119120static struct platform_device tmu1_device = {121.name = "sh_tmu",122.id = 1,123.dev = {124.platform_data = &tmu1_platform_data,125},126.resource = tmu1_resources,127.num_resources = ARRAY_SIZE(tmu1_resources),128};129130static struct resource spi0_resources[] = {131[0] = {132.start = 0xfe002000,133.end = 0xfe0020ff,134.flags = IORESOURCE_MEM,135},136[1] = {137.start = 86,138.flags = IORESOURCE_IRQ,139},140};141142/* DMA */143static const struct sh_dmae_slave_config sh7757_dmae0_slaves[] = {144{145.slave_id = SHDMA_SLAVE_SDHI_TX,146.addr = 0x1fe50030,147.chcr = SM_INC | 0x800 | 0x40000000 |148TS_INDEX2VAL(XMIT_SZ_16BIT),149.mid_rid = 0xc5,150},151{152.slave_id = SHDMA_SLAVE_SDHI_RX,153.addr = 0x1fe50030,154.chcr = DM_INC | 0x800 | 0x40000000 |155TS_INDEX2VAL(XMIT_SZ_16BIT),156.mid_rid = 0xc6,157},158{159.slave_id = SHDMA_SLAVE_MMCIF_TX,160.addr = 0x1fcb0034,161.chcr = SM_INC | 0x800 | 0x40000000 |162TS_INDEX2VAL(XMIT_SZ_32BIT),163.mid_rid = 0xd3,164},165{166.slave_id = SHDMA_SLAVE_MMCIF_RX,167.addr = 0x1fcb0034,168.chcr = DM_INC | 0x800 | 0x40000000 |169TS_INDEX2VAL(XMIT_SZ_32BIT),170.mid_rid = 0xd7,171},172};173174static const struct sh_dmae_slave_config sh7757_dmae1_slaves[] = {175{176.slave_id = SHDMA_SLAVE_SCIF2_TX,177.addr = 0x1f4b000c,178.chcr = SM_INC | 0x800 | 0x40000000 |179TS_INDEX2VAL(XMIT_SZ_8BIT),180.mid_rid = 0x21,181},182{183.slave_id = SHDMA_SLAVE_SCIF2_RX,184.addr = 0x1f4b0014,185.chcr = DM_INC | 0x800 | 0x40000000 |186TS_INDEX2VAL(XMIT_SZ_8BIT),187.mid_rid = 0x22,188},189{190.slave_id = SHDMA_SLAVE_SCIF3_TX,191.addr = 0x1f4c000c,192.chcr = SM_INC | 0x800 | 0x40000000 |193TS_INDEX2VAL(XMIT_SZ_8BIT),194.mid_rid = 0x29,195},196{197.slave_id = SHDMA_SLAVE_SCIF3_RX,198.addr = 0x1f4c0014,199.chcr = DM_INC | 0x800 | 0x40000000 |200TS_INDEX2VAL(XMIT_SZ_8BIT),201.mid_rid = 0x2a,202},203{204.slave_id = SHDMA_SLAVE_SCIF4_TX,205.addr = 0x1f4d000c,206.chcr = SM_INC | 0x800 | 0x40000000 |207TS_INDEX2VAL(XMIT_SZ_8BIT),208.mid_rid = 0x41,209},210{211.slave_id = SHDMA_SLAVE_SCIF4_RX,212.addr = 0x1f4d0014,213.chcr = DM_INC | 0x800 | 0x40000000 |214TS_INDEX2VAL(XMIT_SZ_8BIT),215.mid_rid = 0x42,216},217};218219static const struct sh_dmae_slave_config sh7757_dmae2_slaves[] = {220{221.slave_id = SHDMA_SLAVE_RIIC0_TX,222.addr = 0x1e500012,223.chcr = SM_INC | 0x800 | 0x40000000 |224TS_INDEX2VAL(XMIT_SZ_8BIT),225.mid_rid = 0x21,226},227{228.slave_id = SHDMA_SLAVE_RIIC0_RX,229.addr = 0x1e500013,230.chcr = DM_INC | 0x800 | 0x40000000 |231TS_INDEX2VAL(XMIT_SZ_8BIT),232.mid_rid = 0x22,233},234{235.slave_id = SHDMA_SLAVE_RIIC1_TX,236.addr = 0x1e510012,237.chcr = SM_INC | 0x800 | 0x40000000 |238TS_INDEX2VAL(XMIT_SZ_8BIT),239.mid_rid = 0x29,240},241{242.slave_id = SHDMA_SLAVE_RIIC1_RX,243.addr = 0x1e510013,244.chcr = DM_INC | 0x800 | 0x40000000 |245TS_INDEX2VAL(XMIT_SZ_8BIT),246.mid_rid = 0x2a,247},248{249.slave_id = SHDMA_SLAVE_RIIC2_TX,250.addr = 0x1e520012,251.chcr = SM_INC | 0x800 | 0x40000000 |252TS_INDEX2VAL(XMIT_SZ_8BIT),253.mid_rid = 0xa1,254},255{256.slave_id = SHDMA_SLAVE_RIIC2_RX,257.addr = 0x1e520013,258.chcr = DM_INC | 0x800 | 0x40000000 |259TS_INDEX2VAL(XMIT_SZ_8BIT),260.mid_rid = 0xa2,261},262{263.slave_id = SHDMA_SLAVE_RIIC3_TX,264.addr = 0x1e530012,265.chcr = SM_INC | 0x800 | 0x40000000 |266TS_INDEX2VAL(XMIT_SZ_8BIT),267.mid_rid = 0xa9,268},269{270.slave_id = SHDMA_SLAVE_RIIC3_RX,271.addr = 0x1e530013,272.chcr = DM_INC | 0x800 | 0x40000000 |273TS_INDEX2VAL(XMIT_SZ_8BIT),274.mid_rid = 0xaf,275},276{277.slave_id = SHDMA_SLAVE_RIIC4_TX,278.addr = 0x1e540012,279.chcr = SM_INC | 0x800 | 0x40000000 |280TS_INDEX2VAL(XMIT_SZ_8BIT),281.mid_rid = 0xc5,282},283{284.slave_id = SHDMA_SLAVE_RIIC4_RX,285.addr = 0x1e540013,286.chcr = DM_INC | 0x800 | 0x40000000 |287TS_INDEX2VAL(XMIT_SZ_8BIT),288.mid_rid = 0xc6,289},290};291292static const struct sh_dmae_slave_config sh7757_dmae3_slaves[] = {293{294.slave_id = SHDMA_SLAVE_RIIC5_TX,295.addr = 0x1e550012,296.chcr = SM_INC | 0x800 | 0x40000000 |297TS_INDEX2VAL(XMIT_SZ_8BIT),298.mid_rid = 0x21,299},300{301.slave_id = SHDMA_SLAVE_RIIC5_RX,302.addr = 0x1e550013,303.chcr = DM_INC | 0x800 | 0x40000000 |304TS_INDEX2VAL(XMIT_SZ_8BIT),305.mid_rid = 0x22,306},307{308.slave_id = SHDMA_SLAVE_RIIC6_TX,309.addr = 0x1e560012,310.chcr = SM_INC | 0x800 | 0x40000000 |311TS_INDEX2VAL(XMIT_SZ_8BIT),312.mid_rid = 0x29,313},314{315.slave_id = SHDMA_SLAVE_RIIC6_RX,316.addr = 0x1e560013,317.chcr = DM_INC | 0x800 | 0x40000000 |318TS_INDEX2VAL(XMIT_SZ_8BIT),319.mid_rid = 0x2a,320},321{322.slave_id = SHDMA_SLAVE_RIIC7_TX,323.addr = 0x1e570012,324.chcr = SM_INC | 0x800 | 0x40000000 |325TS_INDEX2VAL(XMIT_SZ_8BIT),326.mid_rid = 0x41,327},328{329.slave_id = SHDMA_SLAVE_RIIC7_RX,330.addr = 0x1e570013,331.chcr = DM_INC | 0x800 | 0x40000000 |332TS_INDEX2VAL(XMIT_SZ_8BIT),333.mid_rid = 0x42,334},335{336.slave_id = SHDMA_SLAVE_RIIC8_TX,337.addr = 0x1e580012,338.chcr = SM_INC | 0x800 | 0x40000000 |339TS_INDEX2VAL(XMIT_SZ_8BIT),340.mid_rid = 0x45,341},342{343.slave_id = SHDMA_SLAVE_RIIC8_RX,344.addr = 0x1e580013,345.chcr = DM_INC | 0x800 | 0x40000000 |346TS_INDEX2VAL(XMIT_SZ_8BIT),347.mid_rid = 0x46,348},349{350.slave_id = SHDMA_SLAVE_RIIC9_TX,351.addr = 0x1e590012,352.chcr = SM_INC | 0x800 | 0x40000000 |353TS_INDEX2VAL(XMIT_SZ_8BIT),354.mid_rid = 0x51,355},356{357.slave_id = SHDMA_SLAVE_RIIC9_RX,358.addr = 0x1e590013,359.chcr = DM_INC | 0x800 | 0x40000000 |360TS_INDEX2VAL(XMIT_SZ_8BIT),361.mid_rid = 0x52,362},363};364365static const struct sh_dmae_channel sh7757_dmae_channels[] = {366{367.offset = 0,368.dmars = 0,369.dmars_bit = 0,370}, {371.offset = 0x10,372.dmars = 0,373.dmars_bit = 8,374}, {375.offset = 0x20,376.dmars = 4,377.dmars_bit = 0,378}, {379.offset = 0x30,380.dmars = 4,381.dmars_bit = 8,382}, {383.offset = 0x50,384.dmars = 8,385.dmars_bit = 0,386}, {387.offset = 0x60,388.dmars = 8,389.dmars_bit = 8,390}391};392393static const unsigned int ts_shift[] = TS_SHIFT;394395static struct sh_dmae_pdata dma0_platform_data = {396.slave = sh7757_dmae0_slaves,397.slave_num = ARRAY_SIZE(sh7757_dmae0_slaves),398.channel = sh7757_dmae_channels,399.channel_num = ARRAY_SIZE(sh7757_dmae_channels),400.ts_low_shift = CHCR_TS_LOW_SHIFT,401.ts_low_mask = CHCR_TS_LOW_MASK,402.ts_high_shift = CHCR_TS_HIGH_SHIFT,403.ts_high_mask = CHCR_TS_HIGH_MASK,404.ts_shift = ts_shift,405.ts_shift_num = ARRAY_SIZE(ts_shift),406.dmaor_init = DMAOR_INIT,407};408409static struct sh_dmae_pdata dma1_platform_data = {410.slave = sh7757_dmae1_slaves,411.slave_num = ARRAY_SIZE(sh7757_dmae1_slaves),412.channel = sh7757_dmae_channels,413.channel_num = ARRAY_SIZE(sh7757_dmae_channels),414.ts_low_shift = CHCR_TS_LOW_SHIFT,415.ts_low_mask = CHCR_TS_LOW_MASK,416.ts_high_shift = CHCR_TS_HIGH_SHIFT,417.ts_high_mask = CHCR_TS_HIGH_MASK,418.ts_shift = ts_shift,419.ts_shift_num = ARRAY_SIZE(ts_shift),420.dmaor_init = DMAOR_INIT,421};422423static struct sh_dmae_pdata dma2_platform_data = {424.slave = sh7757_dmae2_slaves,425.slave_num = ARRAY_SIZE(sh7757_dmae2_slaves),426.channel = sh7757_dmae_channels,427.channel_num = ARRAY_SIZE(sh7757_dmae_channels),428.ts_low_shift = CHCR_TS_LOW_SHIFT,429.ts_low_mask = CHCR_TS_LOW_MASK,430.ts_high_shift = CHCR_TS_HIGH_SHIFT,431.ts_high_mask = CHCR_TS_HIGH_MASK,432.ts_shift = ts_shift,433.ts_shift_num = ARRAY_SIZE(ts_shift),434.dmaor_init = DMAOR_INIT,435};436437static struct sh_dmae_pdata dma3_platform_data = {438.slave = sh7757_dmae3_slaves,439.slave_num = ARRAY_SIZE(sh7757_dmae3_slaves),440.channel = sh7757_dmae_channels,441.channel_num = ARRAY_SIZE(sh7757_dmae_channels),442.ts_low_shift = CHCR_TS_LOW_SHIFT,443.ts_low_mask = CHCR_TS_LOW_MASK,444.ts_high_shift = CHCR_TS_HIGH_SHIFT,445.ts_high_mask = CHCR_TS_HIGH_MASK,446.ts_shift = ts_shift,447.ts_shift_num = ARRAY_SIZE(ts_shift),448.dmaor_init = DMAOR_INIT,449};450451/* channel 0 to 5 */452static struct resource sh7757_dmae0_resources[] = {453[0] = {454/* Channel registers and DMAOR */455.start = 0xff608020,456.end = 0xff60808f,457.flags = IORESOURCE_MEM,458},459[1] = {460/* DMARSx */461.start = 0xff609000,462.end = 0xff60900b,463.flags = IORESOURCE_MEM,464},465{466.start = 34,467.end = 34,468.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,469},470};471472/* channel 6 to 11 */473static struct resource sh7757_dmae1_resources[] = {474[0] = {475/* Channel registers and DMAOR */476.start = 0xff618020,477.end = 0xff61808f,478.flags = IORESOURCE_MEM,479},480[1] = {481/* DMARSx */482.start = 0xff619000,483.end = 0xff61900b,484.flags = IORESOURCE_MEM,485},486{487/* DMA error */488.start = 34,489.end = 34,490.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,491},492{493/* IRQ for channels 4 */494.start = 46,495.end = 46,496.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,497},498{499/* IRQ for channels 5 */500.start = 46,501.end = 46,502.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,503},504{505/* IRQ for channels 6 */506.start = 88,507.end = 88,508.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,509},510{511/* IRQ for channels 7 */512.start = 88,513.end = 88,514.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,515},516{517/* IRQ for channels 8 */518.start = 88,519.end = 88,520.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,521},522{523/* IRQ for channels 9 */524.start = 88,525.end = 88,526.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,527},528{529/* IRQ for channels 10 */530.start = 88,531.end = 88,532.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,533},534{535/* IRQ for channels 11 */536.start = 88,537.end = 88,538.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_SHAREABLE,539},540};541542/* channel 12 to 17 */543static struct resource sh7757_dmae2_resources[] = {544[0] = {545/* Channel registers and DMAOR */546.start = 0xff708020,547.end = 0xff70808f,548.flags = IORESOURCE_MEM,549},550[1] = {551/* DMARSx */552.start = 0xff709000,553.end = 0xff70900b,554.flags = IORESOURCE_MEM,555},556{557/* DMA error */558.start = 323,559.end = 323,560.flags = IORESOURCE_IRQ,561},562{563/* IRQ for channels 12 to 16 */564.start = 272,565.end = 276,566.flags = IORESOURCE_IRQ,567},568{569/* IRQ for channel 17 */570.start = 279,571.end = 279,572.flags = IORESOURCE_IRQ,573},574};575576/* channel 18 to 23 */577static struct resource sh7757_dmae3_resources[] = {578[0] = {579/* Channel registers and DMAOR */580.start = 0xff718020,581.end = 0xff71808f,582.flags = IORESOURCE_MEM,583},584[1] = {585/* DMARSx */586.start = 0xff719000,587.end = 0xff71900b,588.flags = IORESOURCE_MEM,589},590{591/* DMA error */592.start = 324,593.end = 324,594.flags = IORESOURCE_IRQ,595},596{597/* IRQ for channels 18 to 22 */598.start = 280,599.end = 284,600.flags = IORESOURCE_IRQ,601},602{603/* IRQ for channel 23 */604.start = 288,605.end = 288,606.flags = IORESOURCE_IRQ,607},608};609610static struct platform_device dma0_device = {611.name = "sh-dma-engine",612.id = 0,613.resource = sh7757_dmae0_resources,614.num_resources = ARRAY_SIZE(sh7757_dmae0_resources),615.dev = {616.platform_data = &dma0_platform_data,617},618};619620static struct platform_device dma1_device = {621.name = "sh-dma-engine",622.id = 1,623.resource = sh7757_dmae1_resources,624.num_resources = ARRAY_SIZE(sh7757_dmae1_resources),625.dev = {626.platform_data = &dma1_platform_data,627},628};629630static struct platform_device dma2_device = {631.name = "sh-dma-engine",632.id = 2,633.resource = sh7757_dmae2_resources,634.num_resources = ARRAY_SIZE(sh7757_dmae2_resources),635.dev = {636.platform_data = &dma2_platform_data,637},638};639640static struct platform_device dma3_device = {641.name = "sh-dma-engine",642.id = 3,643.resource = sh7757_dmae3_resources,644.num_resources = ARRAY_SIZE(sh7757_dmae3_resources),645.dev = {646.platform_data = &dma3_platform_data,647},648};649650static struct platform_device spi0_device = {651.name = "sh_spi",652.id = 0,653.dev = {654.dma_mask = NULL,655.coherent_dma_mask = 0xffffffff,656},657.num_resources = ARRAY_SIZE(spi0_resources),658.resource = spi0_resources,659};660661static struct resource usb_ehci_resources[] = {662[0] = {663.start = 0xfe4f1000,664.end = 0xfe4f10ff,665.flags = IORESOURCE_MEM,666},667[1] = {668.start = 57,669.end = 57,670.flags = IORESOURCE_IRQ,671},672};673674static struct platform_device usb_ehci_device = {675.name = "sh_ehci",676.id = -1,677.dev = {678.dma_mask = &usb_ehci_device.dev.coherent_dma_mask,679.coherent_dma_mask = DMA_BIT_MASK(32),680},681.num_resources = ARRAY_SIZE(usb_ehci_resources),682.resource = usb_ehci_resources,683};684685static struct resource usb_ohci_resources[] = {686[0] = {687.start = 0xfe4f1800,688.end = 0xfe4f18ff,689.flags = IORESOURCE_MEM,690},691[1] = {692.start = 57,693.end = 57,694.flags = IORESOURCE_IRQ,695},696};697698static struct platform_device usb_ohci_device = {699.name = "sh_ohci",700.id = -1,701.dev = {702.dma_mask = &usb_ohci_device.dev.coherent_dma_mask,703.coherent_dma_mask = DMA_BIT_MASK(32),704},705.num_resources = ARRAY_SIZE(usb_ohci_resources),706.resource = usb_ohci_resources,707};708709static struct platform_device *sh7757_devices[] __initdata = {710&scif2_device,711&scif3_device,712&scif4_device,713&tmu0_device,714&tmu1_device,715&dma0_device,716&dma1_device,717&dma2_device,718&dma3_device,719&spi0_device,720&usb_ehci_device,721&usb_ohci_device,722};723724static int __init sh7757_devices_setup(void)725{726return platform_add_devices(sh7757_devices,727ARRAY_SIZE(sh7757_devices));728}729arch_initcall(sh7757_devices_setup);730731static struct platform_device *sh7757_early_devices[] __initdata = {732&scif2_device,733&scif3_device,734&scif4_device,735&tmu0_device,736&tmu1_device,737};738739void __init plat_early_device_setup(void)740{741early_platform_add_devices(sh7757_early_devices,742ARRAY_SIZE(sh7757_early_devices));743}744745enum {746UNUSED = 0,747748/* interrupt sources */749750IRL0_LLLL, IRL0_LLLH, IRL0_LLHL, IRL0_LLHH,751IRL0_LHLL, IRL0_LHLH, IRL0_LHHL, IRL0_LHHH,752IRL0_HLLL, IRL0_HLLH, IRL0_HLHL, IRL0_HLHH,753IRL0_HHLL, IRL0_HHLH, IRL0_HHHL,754755IRL4_LLLL, IRL4_LLLH, IRL4_LLHL, IRL4_LLHH,756IRL4_LHLL, IRL4_LHLH, IRL4_LHHL, IRL4_LHHH,757IRL4_HLLL, IRL4_HLLH, IRL4_HLHL, IRL4_HLHH,758IRL4_HHLL, IRL4_HHLH, IRL4_HHHL,759IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7,760761SDHI, DVC,762IRQ8, IRQ9, IRQ11, IRQ10, IRQ12, IRQ13, IRQ14, IRQ15,763TMU0, TMU1, TMU2, TMU2_TICPI, TMU3, TMU4, TMU5,764HUDI,765ARC4,766DMAC0_5, DMAC6_7, DMAC8_11,767SCIF0, SCIF1, SCIF2, SCIF3, SCIF4,768USB0, USB1,769JMC,770SPI0, SPI1,771TMR01, TMR23, TMR45,772FRT,773LPC, LPC5, LPC6, LPC7, LPC8,774PECI0, PECI1, PECI2, PECI3, PECI4, PECI5,775ETHERC,776ADC0, ADC1,777SIM,778IIC0_0, IIC0_1, IIC0_2, IIC0_3,779IIC1_0, IIC1_1, IIC1_2, IIC1_3,780IIC2_0, IIC2_1, IIC2_2, IIC2_3,781IIC3_0, IIC3_1, IIC3_2, IIC3_3,782IIC4_0, IIC4_1, IIC4_2, IIC4_3,783IIC5_0, IIC5_1, IIC5_2, IIC5_3,784IIC6_0, IIC6_1, IIC6_2, IIC6_3,785IIC7_0, IIC7_1, IIC7_2, IIC7_3,786IIC8_0, IIC8_1, IIC8_2, IIC8_3,787IIC9_0, IIC9_1, IIC9_2, IIC9_3,788ONFICTL,789MMC1, MMC2,790ECCU,791PCIC,792G200,793RSPI,794SGPIO,795DMINT12, DMINT13, DMINT14, DMINT15, DMINT16, DMINT17, DMINT18, DMINT19,796DMINT20, DMINT21, DMINT22, DMINT23,797DDRECC,798TSIP,799PCIE_BRIDGE,800WDT0B, WDT1B, WDT2B, WDT3B, WDT4B, WDT5B, WDT6B, WDT7B, WDT8B,801GETHER0, GETHER1, GETHER2,802PBIA, PBIB, PBIC,803DMAE2, DMAE3,804SERMUX2, SERMUX3,805806/* interrupt groups */807808TMU012, TMU345,809};810811static struct intc_vect vectors[] __initdata = {812INTC_VECT(SDHI, 0x480), INTC_VECT(SDHI, 0x04a0),813INTC_VECT(SDHI, 0x4c0),814INTC_VECT(DVC, 0x4e0),815INTC_VECT(IRQ8, 0x500), INTC_VECT(IRQ9, 0x520),816INTC_VECT(IRQ10, 0x540),817INTC_VECT(TMU0, 0x580), INTC_VECT(TMU1, 0x5a0),818INTC_VECT(TMU2, 0x5c0), INTC_VECT(TMU2_TICPI, 0x5e0),819INTC_VECT(HUDI, 0x600),820INTC_VECT(ARC4, 0x620),821INTC_VECT(DMAC0_5, 0x640), INTC_VECT(DMAC0_5, 0x660),822INTC_VECT(DMAC0_5, 0x680), INTC_VECT(DMAC0_5, 0x6a0),823INTC_VECT(DMAC0_5, 0x6c0),824INTC_VECT(IRQ11, 0x6e0),825INTC_VECT(SCIF2, 0x700), INTC_VECT(SCIF2, 0x720),826INTC_VECT(SCIF2, 0x740), INTC_VECT(SCIF2, 0x760),827INTC_VECT(DMAC0_5, 0x780), INTC_VECT(DMAC0_5, 0x7a0),828INTC_VECT(DMAC6_7, 0x7c0), INTC_VECT(DMAC6_7, 0x7e0),829INTC_VECT(USB0, 0x840),830INTC_VECT(IRQ12, 0x880),831INTC_VECT(JMC, 0x8a0),832INTC_VECT(SPI1, 0x8c0),833INTC_VECT(IRQ13, 0x8e0), INTC_VECT(IRQ14, 0x900),834INTC_VECT(USB1, 0x920),835INTC_VECT(TMR01, 0xa00), INTC_VECT(TMR23, 0xa20),836INTC_VECT(TMR45, 0xa40),837INTC_VECT(FRT, 0xa80),838INTC_VECT(LPC, 0xaa0), INTC_VECT(LPC, 0xac0),839INTC_VECT(LPC, 0xae0), INTC_VECT(LPC, 0xb00),840INTC_VECT(LPC, 0xb20),841INTC_VECT(SCIF0, 0xb40), INTC_VECT(SCIF1, 0xb60),842INTC_VECT(SCIF3, 0xb80), INTC_VECT(SCIF3, 0xba0),843INTC_VECT(SCIF3, 0xbc0), INTC_VECT(SCIF3, 0xbe0),844INTC_VECT(PECI0, 0xc00), INTC_VECT(PECI1, 0xc20),845INTC_VECT(PECI2, 0xc40),846INTC_VECT(IRQ15, 0xc60),847INTC_VECT(ETHERC, 0xc80), INTC_VECT(ETHERC, 0xca0),848INTC_VECT(SPI0, 0xcc0),849INTC_VECT(ADC1, 0xce0),850INTC_VECT(DMAC8_11, 0xd00), INTC_VECT(DMAC8_11, 0xd20),851INTC_VECT(DMAC8_11, 0xd40), INTC_VECT(DMAC8_11, 0xd60),852INTC_VECT(SIM, 0xd80), INTC_VECT(SIM, 0xda0),853INTC_VECT(SIM, 0xdc0), INTC_VECT(SIM, 0xde0),854INTC_VECT(TMU3, 0xe00), INTC_VECT(TMU4, 0xe20),855INTC_VECT(TMU5, 0xe40),856INTC_VECT(ADC0, 0xe60),857INTC_VECT(SCIF4, 0xf00), INTC_VECT(SCIF4, 0xf20),858INTC_VECT(SCIF4, 0xf40), INTC_VECT(SCIF4, 0xf60),859INTC_VECT(IIC0_0, 0x1400), INTC_VECT(IIC0_1, 0x1420),860INTC_VECT(IIC0_2, 0x1440), INTC_VECT(IIC0_3, 0x1460),861INTC_VECT(IIC1_0, 0x1480), INTC_VECT(IIC1_1, 0x14e0),862INTC_VECT(IIC1_2, 0x1500), INTC_VECT(IIC1_3, 0x1520),863INTC_VECT(IIC2_0, 0x1540), INTC_VECT(IIC2_1, 0x1560),864INTC_VECT(IIC2_2, 0x1580), INTC_VECT(IIC2_3, 0x1600),865INTC_VECT(IIC3_0, 0x1620), INTC_VECT(IIC3_1, 0x1640),866INTC_VECT(IIC3_2, 0x16e0), INTC_VECT(IIC3_3, 0x1700),867INTC_VECT(IIC4_0, 0x17c0), INTC_VECT(IIC4_1, 0x1800),868INTC_VECT(IIC4_2, 0x1820), INTC_VECT(IIC4_3, 0x1840),869INTC_VECT(IIC5_0, 0x1860), INTC_VECT(IIC5_1, 0x1880),870INTC_VECT(IIC5_2, 0x18a0), INTC_VECT(IIC5_3, 0x18c0),871INTC_VECT(IIC6_0, 0x18e0), INTC_VECT(IIC6_1, 0x1900),872INTC_VECT(IIC6_2, 0x1920),873INTC_VECT(ONFICTL, 0x1960),874INTC_VECT(IIC6_3, 0x1980),875INTC_VECT(IIC7_0, 0x19a0), INTC_VECT(IIC7_1, 0x1a00),876INTC_VECT(IIC7_2, 0x1a20), INTC_VECT(IIC7_3, 0x1a40),877INTC_VECT(IIC8_0, 0x1a60), INTC_VECT(IIC8_1, 0x1a80),878INTC_VECT(IIC8_2, 0x1aa0), INTC_VECT(IIC8_3, 0x1b40),879INTC_VECT(IIC9_0, 0x1b60), INTC_VECT(IIC9_1, 0x1b80),880INTC_VECT(IIC9_2, 0x1c00), INTC_VECT(IIC9_3, 0x1c20),881INTC_VECT(MMC1, 0x1c60), INTC_VECT(MMC2, 0x1c80),882INTC_VECT(ECCU, 0x1cc0),883INTC_VECT(PCIC, 0x1ce0),884INTC_VECT(G200, 0x1d00),885INTC_VECT(RSPI, 0x1d80), INTC_VECT(RSPI, 0x1da0),886INTC_VECT(RSPI, 0x1dc0), INTC_VECT(RSPI, 0x1de0),887INTC_VECT(PECI3, 0x1ec0), INTC_VECT(PECI4, 0x1ee0),888INTC_VECT(PECI5, 0x1f00),889INTC_VECT(SGPIO, 0x1f80), INTC_VECT(SGPIO, 0x1fa0),890INTC_VECT(SGPIO, 0x1fc0),891INTC_VECT(DMINT12, 0x2400), INTC_VECT(DMINT13, 0x2420),892INTC_VECT(DMINT14, 0x2440), INTC_VECT(DMINT15, 0x2460),893INTC_VECT(DMINT16, 0x2480), INTC_VECT(DMINT17, 0x24e0),894INTC_VECT(DMINT18, 0x2500), INTC_VECT(DMINT19, 0x2520),895INTC_VECT(DMINT20, 0x2540), INTC_VECT(DMINT21, 0x2560),896INTC_VECT(DMINT22, 0x2580), INTC_VECT(DMINT23, 0x2600),897INTC_VECT(DDRECC, 0x2620),898INTC_VECT(TSIP, 0x2640),899INTC_VECT(PCIE_BRIDGE, 0x27c0),900INTC_VECT(WDT0B, 0x2800), INTC_VECT(WDT1B, 0x2820),901INTC_VECT(WDT2B, 0x2840), INTC_VECT(WDT3B, 0x2860),902INTC_VECT(WDT4B, 0x2880), INTC_VECT(WDT5B, 0x28a0),903INTC_VECT(WDT6B, 0x28c0), INTC_VECT(WDT7B, 0x28e0),904INTC_VECT(WDT8B, 0x2900),905INTC_VECT(GETHER0, 0x2960), INTC_VECT(GETHER1, 0x2980),906INTC_VECT(GETHER2, 0x29a0),907INTC_VECT(PBIA, 0x2a00), INTC_VECT(PBIB, 0x2a20),908INTC_VECT(PBIC, 0x2a40),909INTC_VECT(DMAE2, 0x2a60), INTC_VECT(DMAE3, 0x2a80),910INTC_VECT(SERMUX2, 0x2aa0), INTC_VECT(SERMUX3, 0x2b40),911INTC_VECT(LPC5, 0x2b60), INTC_VECT(LPC6, 0x2b80),912INTC_VECT(LPC7, 0x2c00), INTC_VECT(LPC8, 0x2c20),913};914915static struct intc_group groups[] __initdata = {916INTC_GROUP(TMU012, TMU0, TMU1, TMU2, TMU2_TICPI),917INTC_GROUP(TMU345, TMU3, TMU4, TMU5),918};919920static struct intc_mask_reg mask_registers[] __initdata = {921{ 0xffd00044, 0xffd00064, 32, /* INTMSK0 / INTMSKCLR0 */922{ IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },923924{ 0xffd40080, 0xffd40084, 32, /* INTMSK2 / INTMSKCLR2 */925{ IRL0_LLLL, IRL0_LLLH, IRL0_LLHL, IRL0_LLHH,926IRL0_LHLL, IRL0_LHLH, IRL0_LHHL, IRL0_LHHH,927IRL0_HLLL, IRL0_HLLH, IRL0_HLHL, IRL0_HLHH,928IRL0_HHLL, IRL0_HHLH, IRL0_HHHL, 0,929IRL4_LLLL, IRL4_LLLH, IRL4_LLHL, IRL4_LLHH,930IRL4_LHLL, IRL4_LHLH, IRL4_LHHL, IRL4_LHHH,931IRL4_HLLL, IRL4_HLLH, IRL4_HLHL, IRL4_HLHH,932IRL4_HHLL, IRL4_HHLH, IRL4_HHHL, 0, } },933934{ 0xffd40038, 0xffd4003c, 32, /* INT2MSKR / INT2MSKCR */935{ 0, 0, 0, 0, 0, 0, 0, 0,9360, DMAC8_11, 0, PECI0, LPC, FRT, 0, TMR45,937TMR23, TMR01, 0, 0, 0, 0, 0, DMAC0_5,938HUDI, 0, 0, SCIF3, SCIF2, SDHI, TMU345, TMU012939} },940941{ 0xffd400d0, 0xffd400d4, 32, /* INT2MSKR1 / INT2MSKCR1 */942{ IRQ15, IRQ14, IRQ13, IRQ12, IRQ11, IRQ10, SCIF4, ETHERC,943IRQ9, IRQ8, SCIF1, SCIF0, USB0, 0, 0, USB1,944ADC1, 0, DMAC6_7, ADC0, SPI0, SIM, PECI2, PECI1,945ARC4, 0, SPI1, JMC, 0, 0, 0, DVC946} },947948{ 0xffd10038, 0xffd1003c, 32, /* INT2MSKR2 / INT2MSKCR2 */949{ IIC4_1, IIC4_2, IIC5_0, ONFICTL, 0, 0, SGPIO, 0,9500, G200, 0, IIC9_2, IIC8_2, IIC8_1, IIC8_0, IIC7_3,951IIC7_2, IIC7_1, IIC6_3, IIC0_0, IIC0_1, IIC0_2, IIC0_3, IIC3_1,952IIC2_3, 0, IIC2_1, IIC9_1, IIC3_3, IIC1_0, 0, IIC2_2953} },954955{ 0xffd100d0, 0xffd100d4, 32, /* INT2MSKR3 / INT2MSKCR3 */956{ MMC1, IIC6_1, IIC6_0, IIC5_1, IIC3_2, IIC2_0, PECI5, MMC2,957IIC1_3, IIC1_2, IIC9_0, IIC8_3, IIC4_3, IIC7_0, 0, IIC6_2,958PCIC, 0, IIC4_0, 0, ECCU, RSPI, 0, IIC9_3,959IIC3_0, 0, IIC5_3, IIC5_2, 0, 0, 0, IIC1_1960} },961962{ 0xffd20038, 0xffd2003c, 32, /* INT2MSKR4 / INT2MSKCR4 */963{ WDT0B, WDT1B, WDT3B, GETHER0, 0, 0, 0, 0,9640, 0, 0, LPC7, SERMUX2, DMAE3, DMAE2, PBIC,965PBIB, PBIA, GETHER1, DMINT12, DMINT13, DMINT14, DMINT15, TSIP,966DMINT23, 0, DMINT21, LPC6, 0, DMINT16, 0, DMINT22967} },968969{ 0xffd200d0, 0xffd200d4, 32, /* INT2MSKR5 / INT2MSKCR5 */970{ 0, WDT8B, WDT7B, WDT4B, 0, DMINT20, 0, 0,971DMINT19, DMINT18, LPC5, SERMUX3, WDT2B, GETHER2, 0, 0,9720, 0, PCIE_BRIDGE, 0, 0, 0, 0, LPC8,973DDRECC, 0, WDT6B, WDT5B, 0, 0, 0, DMINT17974} },975};976977#define INTPRI 0xffd00010978#define INT2PRI0 0xffd40000979#define INT2PRI1 0xffd40004980#define INT2PRI2 0xffd40008981#define INT2PRI3 0xffd4000c982#define INT2PRI4 0xffd40010983#define INT2PRI5 0xffd40014984#define INT2PRI6 0xffd40018985#define INT2PRI7 0xffd4001c986#define INT2PRI8 0xffd400a0987#define INT2PRI9 0xffd400a4988#define INT2PRI10 0xffd400a8989#define INT2PRI11 0xffd400ac990#define INT2PRI12 0xffd400b0991#define INT2PRI13 0xffd400b4992#define INT2PRI14 0xffd400b8993#define INT2PRI15 0xffd400bc994#define INT2PRI16 0xffd10000995#define INT2PRI17 0xffd10004996#define INT2PRI18 0xffd10008997#define INT2PRI19 0xffd1000c998#define INT2PRI20 0xffd10010999#define INT2PRI21 0xffd100141000#define INT2PRI22 0xffd100181001#define INT2PRI23 0xffd1001c1002#define INT2PRI24 0xffd100a01003#define INT2PRI25 0xffd100a41004#define INT2PRI26 0xffd100a81005#define INT2PRI27 0xffd100ac1006#define INT2PRI28 0xffd100b01007#define INT2PRI29 0xffd100b41008#define INT2PRI30 0xffd100b81009#define INT2PRI31 0xffd100bc1010#define INT2PRI32 0xffd200001011#define INT2PRI33 0xffd200041012#define INT2PRI34 0xffd200081013#define INT2PRI35 0xffd2000c1014#define INT2PRI36 0xffd200101015#define INT2PRI37 0xffd200141016#define INT2PRI38 0xffd200181017#define INT2PRI39 0xffd2001c1018#define INT2PRI40 0xffd200a01019#define INT2PRI41 0xffd200a41020#define INT2PRI42 0xffd200a81021#define INT2PRI43 0xffd200ac1022#define INT2PRI44 0xffd200b01023#define INT2PRI45 0xffd200b41024#define INT2PRI46 0xffd200b81025#define INT2PRI47 0xffd200bc10261027static struct intc_prio_reg prio_registers[] __initdata = {1028{ INTPRI, 0, 32, 4, { IRQ0, IRQ1, IRQ2, IRQ3,1029IRQ4, IRQ5, IRQ6, IRQ7 } },10301031{ INT2PRI0, 0, 32, 8, { TMU0, TMU1, TMU2, TMU2_TICPI } },1032{ INT2PRI1, 0, 32, 8, { TMU3, TMU4, TMU5, SDHI } },1033{ INT2PRI2, 0, 32, 8, { SCIF2, SCIF3, 0, IRQ8 } },1034{ INT2PRI3, 0, 32, 8, { HUDI, DMAC0_5, ADC0, IRQ9 } },1035{ INT2PRI4, 0, 32, 8, { IRQ10, 0, TMR01, TMR23 } },1036{ INT2PRI5, 0, 32, 8, { TMR45, 0, FRT, LPC } },1037{ INT2PRI6, 0, 32, 8, { PECI0, ETHERC, DMAC8_11, 0 } },1038{ INT2PRI7, 0, 32, 8, { SCIF4, 0, IRQ11, IRQ12 } },1039{ INT2PRI8, 0, 32, 8, { 0, 0, 0, DVC } },1040{ INT2PRI9, 0, 32, 8, { ARC4, 0, SPI1, JMC } },1041{ INT2PRI10, 0, 32, 8, { SPI0, SIM, PECI2, PECI1 } },1042{ INT2PRI11, 0, 32, 8, { ADC1, IRQ13, DMAC6_7, IRQ14 } },1043{ INT2PRI12, 0, 32, 8, { USB0, 0, IRQ15, USB1 } },1044{ INT2PRI13, 0, 32, 8, { 0, 0, SCIF1, SCIF0 } },10451046{ INT2PRI16, 0, 32, 8, { IIC2_2, 0, 0, 0 } },1047{ INT2PRI17, 0, 32, 8, { 0, 0, 0, IIC1_0 } },1048{ INT2PRI18, 0, 32, 8, { IIC3_3, IIC9_1, IIC2_1, IIC1_2 } },1049{ INT2PRI19, 0, 32, 8, { IIC2_3, IIC3_1, 0, IIC1_3 } },1050{ INT2PRI20, 0, 32, 8, { IIC2_0, IIC6_3, IIC7_1, IIC7_2 } },1051{ INT2PRI21, 0, 32, 8, { IIC7_3, IIC8_0, IIC8_1, IIC8_2 } },1052{ INT2PRI22, 0, 32, 8, { IIC9_2, MMC2, G200, 0 } },1053{ INT2PRI23, 0, 32, 8, { PECI5, SGPIO, IIC3_2, IIC5_1 } },1054{ INT2PRI24, 0, 32, 8, { PECI4, PECI3, 0, IIC1_1 } },1055{ INT2PRI25, 0, 32, 8, { IIC3_0, 0, IIC5_3, IIC5_2 } },1056{ INT2PRI26, 0, 32, 8, { ECCU, RSPI, 0, IIC9_3 } },1057{ INT2PRI27, 0, 32, 8, { PCIC, IIC6_0, IIC4_0, IIC6_1 } },1058{ INT2PRI28, 0, 32, 8, { IIC4_3, IIC7_0, MMC1, IIC6_2 } },1059{ INT2PRI29, 0, 32, 8, { 0, 0, IIC9_0, IIC8_3 } },1060{ INT2PRI30, 0, 32, 8, { IIC4_1, IIC4_2, IIC5_0, ONFICTL } },1061{ INT2PRI31, 0, 32, 8, { IIC0_0, IIC0_1, IIC0_2, IIC0_3 } },1062{ INT2PRI32, 0, 32, 8, { DMINT22, 0, 0, 0 } },1063{ INT2PRI33, 0, 32, 8, { 0, 0, 0, DMINT16 } },1064{ INT2PRI34, 0, 32, 8, { 0, LPC6, DMINT21, DMINT18 } },1065{ INT2PRI35, 0, 32, 8, { DMINT23, TSIP, 0, DMINT19 } },1066{ INT2PRI36, 0, 32, 8, { DMINT20, GETHER1, PBIA, PBIB } },1067{ INT2PRI37, 0, 32, 8, { PBIC, DMAE2, DMAE3, SERMUX2 } },1068{ INT2PRI38, 0, 32, 8, { LPC7, 0, 0, 0 } },1069{ INT2PRI39, 0, 32, 8, { 0, 0, 0, WDT4B } },1070{ INT2PRI40, 0, 32, 8, { 0, 0, 0, DMINT17 } },1071{ INT2PRI41, 0, 32, 8, { DDRECC, 0, WDT6B, WDT5B } },1072{ INT2PRI42, 0, 32, 8, { 0, 0, 0, LPC8 } },1073{ INT2PRI43, 0, 32, 8, { 0, WDT7B, PCIE_BRIDGE, WDT8B } },1074{ INT2PRI44, 0, 32, 8, { WDT2B, GETHER2, 0, 0 } },1075{ INT2PRI45, 0, 32, 8, { 0, 0, LPC5, SERMUX3 } },1076{ INT2PRI46, 0, 32, 8, { WDT0B, WDT1B, WDT3B, GETHER0 } },1077{ INT2PRI47, 0, 32, 8, { DMINT12, DMINT13, DMINT14, DMINT15 } },1078};10791080static struct intc_sense_reg sense_registers_irq8to15[] __initdata = {1081{ 0xffd100f8, 32, 2, /* ICR2 */ { IRQ15, IRQ14, IRQ13, IRQ12,1082IRQ11, IRQ10, IRQ9, IRQ8 } },1083};10841085static DECLARE_INTC_DESC(intc_desc, "sh7757", vectors, groups,1086mask_registers, prio_registers,1087sense_registers_irq8to15);10881089/* Support for external interrupt pins in IRQ mode */1090static struct intc_vect vectors_irq0123[] __initdata = {1091INTC_VECT(IRQ0, 0x200), INTC_VECT(IRQ1, 0x240),1092INTC_VECT(IRQ2, 0x280), INTC_VECT(IRQ3, 0x2c0),1093};10941095static struct intc_vect vectors_irq4567[] __initdata = {1096INTC_VECT(IRQ4, 0x300), INTC_VECT(IRQ5, 0x340),1097INTC_VECT(IRQ6, 0x380), INTC_VECT(IRQ7, 0x3c0),1098};10991100static struct intc_sense_reg sense_registers[] __initdata = {1101{ 0xffd0001c, 32, 2, /* ICR1 */ { IRQ0, IRQ1, IRQ2, IRQ3,1102IRQ4, IRQ5, IRQ6, IRQ7 } },1103};11041105static struct intc_mask_reg ack_registers[] __initdata = {1106{ 0xffd00024, 0, 32, /* INTREQ */1107{ IRQ0, IRQ1, IRQ2, IRQ3, IRQ4, IRQ5, IRQ6, IRQ7 } },1108};11091110static DECLARE_INTC_DESC_ACK(intc_desc_irq0123, "sh7757-irq0123",1111vectors_irq0123, NULL, mask_registers,1112prio_registers, sense_registers, ack_registers);11131114static DECLARE_INTC_DESC_ACK(intc_desc_irq4567, "sh7757-irq4567",1115vectors_irq4567, NULL, mask_registers,1116prio_registers, sense_registers, ack_registers);11171118/* External interrupt pins in IRL mode */1119static struct intc_vect vectors_irl0123[] __initdata = {1120INTC_VECT(IRL0_LLLL, 0x200), INTC_VECT(IRL0_LLLH, 0x220),1121INTC_VECT(IRL0_LLHL, 0x240), INTC_VECT(IRL0_LLHH, 0x260),1122INTC_VECT(IRL0_LHLL, 0x280), INTC_VECT(IRL0_LHLH, 0x2a0),1123INTC_VECT(IRL0_LHHL, 0x2c0), INTC_VECT(IRL0_LHHH, 0x2e0),1124INTC_VECT(IRL0_HLLL, 0x300), INTC_VECT(IRL0_HLLH, 0x320),1125INTC_VECT(IRL0_HLHL, 0x340), INTC_VECT(IRL0_HLHH, 0x360),1126INTC_VECT(IRL0_HHLL, 0x380), INTC_VECT(IRL0_HHLH, 0x3a0),1127INTC_VECT(IRL0_HHHL, 0x3c0),1128};11291130static struct intc_vect vectors_irl4567[] __initdata = {1131INTC_VECT(IRL4_LLLL, 0x200), INTC_VECT(IRL4_LLLH, 0x220),1132INTC_VECT(IRL4_LLHL, 0x240), INTC_VECT(IRL4_LLHH, 0x260),1133INTC_VECT(IRL4_LHLL, 0x280), INTC_VECT(IRL4_LHLH, 0x2a0),1134INTC_VECT(IRL4_LHHL, 0x2c0), INTC_VECT(IRL4_LHHH, 0x2e0),1135INTC_VECT(IRL4_HLLL, 0x300), INTC_VECT(IRL4_HLLH, 0x320),1136INTC_VECT(IRL4_HLHL, 0x340), INTC_VECT(IRL4_HLHH, 0x360),1137INTC_VECT(IRL4_HHLL, 0x380), INTC_VECT(IRL4_HHLH, 0x3a0),1138INTC_VECT(IRL4_HHHL, 0x3c0),1139};11401141static DECLARE_INTC_DESC(intc_desc_irl0123, "sh7757-irl0123", vectors_irl0123,1142NULL, mask_registers, NULL, NULL);11431144static DECLARE_INTC_DESC(intc_desc_irl4567, "sh7757-irl4567", vectors_irl4567,1145NULL, mask_registers, NULL, NULL);11461147#define INTC_ICR0 0xffd000001148#define INTC_INTMSK0 0xffd000441149#define INTC_INTMSK1 0xffd000481150#define INTC_INTMSK2 0xffd400801151#define INTC_INTMSKCLR1 0xffd000681152#define INTC_INTMSKCLR2 0xffd4008411531154void __init plat_irq_setup(void)1155{1156/* disable IRQ3-0 + IRQ7-4 */1157__raw_writel(0xff000000, INTC_INTMSK0);11581159/* disable IRL3-0 + IRL7-4 */1160__raw_writel(0xc0000000, INTC_INTMSK1);1161__raw_writel(0xfffefffe, INTC_INTMSK2);11621163/* select IRL mode for IRL3-0 + IRL7-4 */1164__raw_writel(__raw_readl(INTC_ICR0) & ~0x00c00000, INTC_ICR0);11651166/* disable holding function, ie enable "SH-4 Mode" */1167__raw_writel(__raw_readl(INTC_ICR0) | 0x00200000, INTC_ICR0);11681169register_intc_controller(&intc_desc);1170}11711172void __init plat_irq_setup_pins(int mode)1173{1174switch (mode) {1175case IRQ_MODE_IRQ7654:1176/* select IRQ mode for IRL7-4 */1177__raw_writel(__raw_readl(INTC_ICR0) | 0x00400000, INTC_ICR0);1178register_intc_controller(&intc_desc_irq4567);1179break;1180case IRQ_MODE_IRQ3210:1181/* select IRQ mode for IRL3-0 */1182__raw_writel(__raw_readl(INTC_ICR0) | 0x00800000, INTC_ICR0);1183register_intc_controller(&intc_desc_irq0123);1184break;1185case IRQ_MODE_IRL7654:1186/* enable IRL7-4 but don't provide any masking */1187__raw_writel(0x40000000, INTC_INTMSKCLR1);1188__raw_writel(0x0000fffe, INTC_INTMSKCLR2);1189break;1190case IRQ_MODE_IRL3210:1191/* enable IRL0-3 but don't provide any masking */1192__raw_writel(0x80000000, INTC_INTMSKCLR1);1193__raw_writel(0xfffe0000, INTC_INTMSKCLR2);1194break;1195case IRQ_MODE_IRL7654_MASK:1196/* enable IRL7-4 and mask using cpu intc controller */1197__raw_writel(0x40000000, INTC_INTMSKCLR1);1198register_intc_controller(&intc_desc_irl4567);1199break;1200case IRQ_MODE_IRL3210_MASK:1201/* enable IRL0-3 and mask using cpu intc controller */1202__raw_writel(0x80000000, INTC_INTMSKCLR1);1203register_intc_controller(&intc_desc_irl0123);1204break;1205default:1206BUG();1207}1208}12091210void __init plat_mem_setup(void)1211{1212}121312141215