cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

setup-sh7734.c (14950B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * arch/sh/kernel/cpu/sh4a/setup-sh7734.c
      4 *
      5 * SH7734 Setup
      6 *
      7 * Copyright (C) 2011,2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
      8 * Copyright (C) 2011,2012 Renesas Solutions Corp.
      9 */
     10
     11#include <linux/platform_device.h>
     12#include <linux/init.h>
     13#include <linux/serial.h>
     14#include <linux/mm.h>
     15#include <linux/dma-mapping.h>
     16#include <linux/serial_sci.h>
     17#include <linux/sh_timer.h>
     18#include <linux/io.h>
     19#include <asm/clock.h>
     20#include <asm/irq.h>
     21#include <asm/platform_early.h>
     22#include <cpu/sh7734.h>
     23
     24/* SCIF */
     25static struct plat_sci_port scif0_platform_data = {
     26	.scscr          = SCSCR_REIE,
     27	.type           = PORT_SCIF,
     28	.regtype        = SCIx_SH4_SCIF_BRG_REGTYPE,
     29};
     30
     31static struct resource scif0_resources[] = {
     32	DEFINE_RES_MEM(0xffe40000, 0x100),
     33	DEFINE_RES_IRQ(evt2irq(0x8c0)),
     34};
     35
     36static struct platform_device scif0_device = {
     37	.name		= "sh-sci",
     38	.id		= 0,
     39	.resource	= scif0_resources,
     40	.num_resources	= ARRAY_SIZE(scif0_resources),
     41	.dev		= {
     42		.platform_data	= &scif0_platform_data,
     43	},
     44};
     45
     46static struct plat_sci_port scif1_platform_data = {
     47	.scscr          = SCSCR_REIE,
     48	.type           = PORT_SCIF,
     49	.regtype        = SCIx_SH4_SCIF_BRG_REGTYPE,
     50};
     51
     52static struct resource scif1_resources[] = {
     53	DEFINE_RES_MEM(0xffe41000, 0x100),
     54	DEFINE_RES_IRQ(evt2irq(0x8e0)),
     55};
     56
     57static struct platform_device scif1_device = {
     58	.name		= "sh-sci",
     59	.id		= 1,
     60	.resource	= scif1_resources,
     61	.num_resources	= ARRAY_SIZE(scif1_resources),
     62	.dev		= {
     63		.platform_data = &scif1_platform_data,
     64	},
     65};
     66
     67static struct plat_sci_port scif2_platform_data = {
     68	.scscr          = SCSCR_REIE,
     69	.type           = PORT_SCIF,
     70	.regtype        = SCIx_SH4_SCIF_BRG_REGTYPE,
     71};
     72
     73static struct resource scif2_resources[] = {
     74	DEFINE_RES_MEM(0xffe42000, 0x100),
     75	DEFINE_RES_IRQ(evt2irq(0x900)),
     76};
     77
     78static struct platform_device scif2_device = {
     79	.name		= "sh-sci",
     80	.id		= 2,
     81	.resource	= scif2_resources,
     82	.num_resources	= ARRAY_SIZE(scif2_resources),
     83	.dev		= {
     84		.platform_data = &scif2_platform_data,
     85	},
     86};
     87
     88static struct plat_sci_port scif3_platform_data = {
     89	.scscr          = SCSCR_REIE | SCSCR_TOIE,
     90	.type           = PORT_SCIF,
     91	.regtype        = SCIx_SH4_SCIF_BRG_REGTYPE,
     92};
     93
     94static struct resource scif3_resources[] = {
     95	DEFINE_RES_MEM(0xffe43000, 0x100),
     96	DEFINE_RES_IRQ(evt2irq(0x920)),
     97};
     98
     99static struct platform_device scif3_device = {
    100	.name		= "sh-sci",
    101	.id		= 3,
    102	.resource	= scif3_resources,
    103	.num_resources	= ARRAY_SIZE(scif3_resources),
    104	.dev		= {
    105		.platform_data	= &scif3_platform_data,
    106	},
    107};
    108
    109static struct plat_sci_port scif4_platform_data = {
    110	.scscr          = SCSCR_REIE,
    111	.type           = PORT_SCIF,
    112	.regtype        = SCIx_SH4_SCIF_BRG_REGTYPE,
    113};
    114
    115static struct resource scif4_resources[] = {
    116	DEFINE_RES_MEM(0xffe44000, 0x100),
    117	DEFINE_RES_IRQ(evt2irq(0x940)),
    118};
    119
    120static struct platform_device scif4_device = {
    121	.name		= "sh-sci",
    122	.id		= 4,
    123	.resource	= scif4_resources,
    124	.num_resources	= ARRAY_SIZE(scif4_resources),
    125	.dev		= {
    126		.platform_data	= &scif4_platform_data,
    127	},
    128};
    129
    130static struct plat_sci_port scif5_platform_data = {
    131	.scscr          = SCSCR_REIE,
    132	.type           = PORT_SCIF,
    133	.regtype	= SCIx_SH4_SCIF_BRG_REGTYPE,
    134};
    135
    136static struct resource scif5_resources[] = {
    137	DEFINE_RES_MEM(0xffe43000, 0x100),
    138	DEFINE_RES_IRQ(evt2irq(0x960)),
    139};
    140
    141static struct platform_device scif5_device = {
    142	.name		= "sh-sci",
    143	.id		= 5,
    144	.resource	= scif5_resources,
    145	.num_resources	= ARRAY_SIZE(scif5_resources),
    146	.dev		= {
    147		.platform_data	= &scif5_platform_data,
    148	},
    149};
    150
    151/* RTC */
    152static struct resource rtc_resources[] = {
    153	[0] = {
    154		.name	= "rtc",
    155		.start	= 0xFFFC5000,
    156		.end	= 0xFFFC5000 + 0x26 - 1,
    157		.flags	= IORESOURCE_IO,
    158	},
    159	[1] = {
    160		.start	= evt2irq(0xC00),
    161		.flags	= IORESOURCE_IRQ,
    162	},
    163};
    164
    165static struct platform_device rtc_device = {
    166	.name		= "sh-rtc",
    167	.id		= -1,
    168	.num_resources	= ARRAY_SIZE(rtc_resources),
    169	.resource	= rtc_resources,
    170};
    171
    172/* I2C 0 */
    173static struct resource i2c0_resources[] = {
    174	[0] = {
    175		.name	= "IIC0",
    176		.start  = 0xFFC70000,
    177		.end    = 0xFFC7000A - 1,
    178		.flags  = IORESOURCE_MEM,
    179	},
    180	[1] = {
    181		.start  = evt2irq(0x860),
    182		.flags  = IORESOURCE_IRQ,
    183	},
    184};
    185
    186static struct platform_device i2c0_device = {
    187	.name           = "i2c-sh7734",
    188	.id             = 0,
    189	.num_resources  = ARRAY_SIZE(i2c0_resources),
    190	.resource       = i2c0_resources,
    191};
    192
    193/* TMU */
    194static struct sh_timer_config tmu0_platform_data = {
    195	.channels_mask = 7,
    196};
    197
    198static struct resource tmu0_resources[] = {
    199	DEFINE_RES_MEM(0xffd80000, 0x30),
    200	DEFINE_RES_IRQ(evt2irq(0x400)),
    201	DEFINE_RES_IRQ(evt2irq(0x420)),
    202	DEFINE_RES_IRQ(evt2irq(0x440)),
    203};
    204
    205static struct platform_device tmu0_device = {
    206	.name		= "sh-tmu",
    207	.id		= 0,
    208	.dev = {
    209		.platform_data	= &tmu0_platform_data,
    210	},
    211	.resource	= tmu0_resources,
    212	.num_resources	= ARRAY_SIZE(tmu0_resources),
    213};
    214
    215static struct sh_timer_config tmu1_platform_data = {
    216	.channels_mask = 7,
    217};
    218
    219static struct resource tmu1_resources[] = {
    220	DEFINE_RES_MEM(0xffd81000, 0x30),
    221	DEFINE_RES_IRQ(evt2irq(0x480)),
    222	DEFINE_RES_IRQ(evt2irq(0x4a0)),
    223	DEFINE_RES_IRQ(evt2irq(0x4c0)),
    224};
    225
    226static struct platform_device tmu1_device = {
    227	.name		= "sh-tmu",
    228	.id		= 1,
    229	.dev = {
    230		.platform_data	= &tmu1_platform_data,
    231	},
    232	.resource	= tmu1_resources,
    233	.num_resources	= ARRAY_SIZE(tmu1_resources),
    234};
    235
    236static struct sh_timer_config tmu2_platform_data = {
    237	.channels_mask = 7,
    238};
    239
    240static struct resource tmu2_resources[] = {
    241	DEFINE_RES_MEM(0xffd82000, 0x30),
    242	DEFINE_RES_IRQ(evt2irq(0x500)),
    243	DEFINE_RES_IRQ(evt2irq(0x520)),
    244	DEFINE_RES_IRQ(evt2irq(0x540)),
    245};
    246
    247static struct platform_device tmu2_device = {
    248	.name		= "sh-tmu",
    249	.id		= 2,
    250	.dev = {
    251		.platform_data	= &tmu2_platform_data,
    252	},
    253	.resource	= tmu2_resources,
    254	.num_resources	= ARRAY_SIZE(tmu2_resources),
    255};
    256
    257static struct platform_device *sh7734_devices[] __initdata = {
    258	&scif0_device,
    259	&scif1_device,
    260	&scif2_device,
    261	&scif3_device,
    262	&scif4_device,
    263	&scif5_device,
    264	&tmu0_device,
    265	&tmu1_device,
    266	&tmu2_device,
    267	&rtc_device,
    268};
    269
    270static struct platform_device *sh7734_early_devices[] __initdata = {
    271	&scif0_device,
    272	&scif1_device,
    273	&scif2_device,
    274	&scif3_device,
    275	&scif4_device,
    276	&scif5_device,
    277	&tmu0_device,
    278	&tmu1_device,
    279	&tmu2_device,
    280};
    281
    282void __init plat_early_device_setup(void)
    283{
    284	sh_early_platform_add_devices(sh7734_early_devices,
    285		ARRAY_SIZE(sh7734_early_devices));
    286}
    287
    288#define GROUP 0
    289enum {
    290	UNUSED = 0,
    291
    292	/* interrupt sources */
    293
    294	IRL0_LLLL, IRL0_LLLH, IRL0_LLHL, IRL0_LLHH,
    295	IRL0_LHLL, IRL0_LHLH, IRL0_LHHL, IRL0_LHHH,
    296	IRL0_HLLL, IRL0_HLLH, IRL0_HLHL, IRL0_HLHH,
    297	IRL0_HHLL, IRL0_HHLH, IRL0_HHHL,
    298
    299	IRQ0, IRQ1, IRQ2, IRQ3,
    300	DU,
    301	TMU00, TMU10, TMU20, TMU21,
    302	TMU30, TMU40, TMU50, TMU51,
    303	TMU60, TMU70, TMU80,
    304	RESET_WDT,
    305	USB,
    306	HUDI,
    307	SHDMAC,
    308	SSI0, SSI1,	SSI2, SSI3,
    309	VIN0,
    310	RGPVG,
    311	_2DG,
    312	MMC,
    313	HSPI,
    314	LBSCATA,
    315	I2C0,
    316	RCAN0,
    317	MIMLB,
    318	SCIF0, SCIF1, SCIF2, SCIF3, SCIF4, SCIF5,
    319	LBSCDMAC0, LBSCDMAC1, LBSCDMAC2,
    320	RCAN1,
    321	SDHI0, SDHI1,
    322	IEBUS,
    323	HPBDMAC0_3, HPBDMAC4_10, HPBDMAC11_18, HPBDMAC19_22, HPBDMAC23_25_27_28,
    324	RTC,
    325	VIN1,
    326	LCDC,
    327	SRC0, SRC1,
    328	GETHER,
    329	SDHI2,
    330	GPIO0_3, GPIO4_5,
    331	STIF0, STIF1,
    332	ADMAC,
    333	HIF,
    334	FLCTL,
    335	ADC,
    336	MTU2,
    337	RSPI,
    338	QSPI,
    339	HSCIF,
    340	VEU3F_VE3,
    341
    342	/* Group */
    343	/* Mask */
    344	STIF_M,
    345	GPIO_M,
    346	HPBDMAC_M,
    347	LBSCDMAC_M,
    348	RCAN_M,
    349	SRC_M,
    350	SCIF_M,
    351	LCDC_M,
    352	_2DG_M,
    353	VIN_M,
    354	TMU_3_M,
    355	TMU_0_M,
    356
    357	/* Priority */
    358	RCAN_P,
    359	LBSCDMAC_P,
    360
    361	/* Common */
    362	SDHI,
    363	SSI,
    364	SPI,
    365};
    366
    367static struct intc_vect vectors[] __initdata = {
    368	INTC_VECT(DU, 0x3E0),
    369	INTC_VECT(TMU00, 0x400),
    370	INTC_VECT(TMU10, 0x420),
    371	INTC_VECT(TMU20, 0x440),
    372	INTC_VECT(TMU30, 0x480),
    373	INTC_VECT(TMU40, 0x4A0),
    374	INTC_VECT(TMU50, 0x4C0),
    375	INTC_VECT(TMU51, 0x4E0),
    376	INTC_VECT(TMU60, 0x500),
    377	INTC_VECT(TMU70, 0x520),
    378	INTC_VECT(TMU80, 0x540),
    379	INTC_VECT(RESET_WDT, 0x560),
    380	INTC_VECT(USB, 0x580),
    381	INTC_VECT(HUDI, 0x600),
    382	INTC_VECT(SHDMAC, 0x620),
    383	INTC_VECT(SSI0, 0x6C0),
    384	INTC_VECT(SSI1, 0x6E0),
    385	INTC_VECT(SSI2, 0x700),
    386	INTC_VECT(SSI3, 0x720),
    387	INTC_VECT(VIN0, 0x740),
    388	INTC_VECT(RGPVG, 0x760),
    389	INTC_VECT(_2DG, 0x780),
    390	INTC_VECT(MMC, 0x7A0),
    391	INTC_VECT(HSPI, 0x7E0),
    392	INTC_VECT(LBSCATA, 0x840),
    393	INTC_VECT(I2C0, 0x860),
    394	INTC_VECT(RCAN0, 0x880),
    395	INTC_VECT(SCIF0, 0x8A0),
    396	INTC_VECT(SCIF1, 0x8C0),
    397	INTC_VECT(SCIF2, 0x900),
    398	INTC_VECT(SCIF3, 0x920),
    399	INTC_VECT(SCIF4, 0x940),
    400	INTC_VECT(SCIF5, 0x960),
    401	INTC_VECT(LBSCDMAC0, 0x9E0),
    402	INTC_VECT(LBSCDMAC1, 0xA00),
    403	INTC_VECT(LBSCDMAC2, 0xA20),
    404	INTC_VECT(RCAN1, 0xA60),
    405	INTC_VECT(SDHI0, 0xAE0),
    406	INTC_VECT(SDHI1, 0xB00),
    407	INTC_VECT(IEBUS, 0xB20),
    408	INTC_VECT(HPBDMAC0_3, 0xB60),
    409	INTC_VECT(HPBDMAC4_10, 0xB80),
    410	INTC_VECT(HPBDMAC11_18, 0xBA0),
    411	INTC_VECT(HPBDMAC19_22, 0xBC0),
    412	INTC_VECT(HPBDMAC23_25_27_28, 0xBE0),
    413	INTC_VECT(RTC, 0xC00),
    414	INTC_VECT(VIN1, 0xC20),
    415	INTC_VECT(LCDC, 0xC40),
    416	INTC_VECT(SRC0, 0xC60),
    417	INTC_VECT(SRC1, 0xC80),
    418	INTC_VECT(GETHER, 0xCA0),
    419	INTC_VECT(SDHI2, 0xCC0),
    420	INTC_VECT(GPIO0_3, 0xCE0),
    421	INTC_VECT(GPIO4_5, 0xD00),
    422	INTC_VECT(STIF0, 0xD20),
    423	INTC_VECT(STIF1, 0xD40),
    424	INTC_VECT(ADMAC, 0xDA0),
    425	INTC_VECT(HIF, 0xDC0),
    426	INTC_VECT(FLCTL, 0xDE0),
    427	INTC_VECT(ADC, 0xE00),
    428	INTC_VECT(MTU2, 0xE20),
    429	INTC_VECT(RSPI, 0xE40),
    430	INTC_VECT(QSPI, 0xE60),
    431	INTC_VECT(HSCIF, 0xFC0),
    432	INTC_VECT(VEU3F_VE3, 0xF40),
    433};
    434
    435static struct intc_group groups[] __initdata = {
    436	/* Common */
    437	INTC_GROUP(SDHI, SDHI0, SDHI1, SDHI2),
    438	INTC_GROUP(SPI, HSPI, RSPI, QSPI),
    439	INTC_GROUP(SSI, SSI0, SSI1, SSI2, SSI3),
    440
    441	/* Mask group */
    442	INTC_GROUP(STIF_M, STIF0, STIF1), /* 22 */
    443	INTC_GROUP(GPIO_M, GPIO0_3, GPIO4_5), /* 21 */
    444	INTC_GROUP(HPBDMAC_M, HPBDMAC0_3, HPBDMAC4_10, HPBDMAC11_18,
    445			HPBDMAC19_22, HPBDMAC23_25_27_28), /* 19 */
    446	INTC_GROUP(LBSCDMAC_M, LBSCDMAC0, LBSCDMAC1, LBSCDMAC2), /* 18 */
    447	INTC_GROUP(RCAN_M, RCAN0, RCAN1, IEBUS), /* 17 */
    448	INTC_GROUP(SRC_M, SRC0, SRC1), /* 16 */
    449	INTC_GROUP(SCIF_M, SCIF0, SCIF1, SCIF2, SCIF3, SCIF4, SCIF5,
    450			HSCIF), /* 14 */
    451	INTC_GROUP(LCDC_M, LCDC, MIMLB), /* 13 */
    452	INTC_GROUP(_2DG_M, _2DG, RGPVG), /* 12 */
    453	INTC_GROUP(VIN_M, VIN0, VIN1), /* 10 */
    454	INTC_GROUP(TMU_3_M, TMU30, TMU40, TMU50, TMU51,
    455			TMU60, TMU60, TMU70, TMU80), /* 2 */
    456	INTC_GROUP(TMU_0_M, TMU00, TMU10, TMU20, TMU21), /* 1 */
    457
    458	/* Priority group*/
    459	INTC_GROUP(RCAN_P, RCAN0, RCAN1), /* INT2PRI5 */
    460	INTC_GROUP(LBSCDMAC_P, LBSCDMAC0, LBSCDMAC1), /* INT2PRI5 */
    461};
    462
    463static struct intc_mask_reg mask_registers[] __initdata = {
    464	{ 0xFF804040, 0xFF804044, 32, /* INT2MSKRG / INT2MSKCR */
    465	  { 0,
    466		VEU3F_VE3,
    467		SDHI, /* SDHI 0-2 */
    468		ADMAC,
    469		FLCTL,
    470		RESET_WDT,
    471		HIF,
    472		ADC,
    473		MTU2,
    474		STIF_M, /* STIF 0,1 */
    475		GPIO_M, /* GPIO 0-5*/
    476		GETHER,
    477		HPBDMAC_M, /* HPBDMAC 0_3 - 23_25_27_28 */
    478		LBSCDMAC_M, /* LBSCDMAC 0 - 2 */
    479		RCAN_M, /* RCAN, IEBUS */
    480		SRC_M,	/* SRC 0,1 */
    481		LBSCATA,
    482		SCIF_M, /* SCIF 0-5, HSCIF */
    483		LCDC_M, /* LCDC, MIMLB */
    484		_2DG_M,	/* 2DG, RGPVG */
    485		SPI, /* HSPI, RSPI, QSPI */
    486		VIN_M,	/* VIN0, 1 */
    487		SSI,	/* SSI 0-3 */
    488		USB,
    489		SHDMAC,
    490		HUDI,
    491		MMC,
    492		RTC,
    493		I2C0, /* I2C */ /* I2C 0, 1*/
    494		TMU_3_M, /* TMU30 - TMU80 */
    495		TMU_0_M, /* TMU00 - TMU21 */
    496		DU } },
    497};
    498
    499static struct intc_prio_reg prio_registers[] __initdata = {
    500	{ 0xFF804000, 0, 32, 8, /* INT2PRI0 */
    501		{ DU, TMU00, TMU10, TMU20 } },
    502	{ 0xFF804004, 0, 32, 8, /* INT2PRI1 */
    503		{ TMU30, TMU60, RTC, SDHI } },
    504	{ 0xFF804008, 0, 32, 8, /* INT2PRI2 */
    505		{ HUDI, SHDMAC, USB, SSI } },
    506	{ 0xFF80400C, 0, 32, 8, /* INT2PRI3 */
    507		{ VIN0, SPI, _2DG, LBSCATA } },
    508	{ 0xFF804010, 0, 32, 8, /* INT2PRI4 */
    509		{ SCIF0, SCIF3, HSCIF, LCDC } },
    510	{ 0xFF804014, 0, 32, 8, /* INT2PRI5 */
    511		{ RCAN_P, LBSCDMAC_P, LBSCDMAC2, MMC } },
    512	{ 0xFF804018, 0, 32, 8, /* INT2PRI6 */
    513		{ HPBDMAC0_3, HPBDMAC4_10, HPBDMAC11_18, HPBDMAC19_22 } },
    514	{ 0xFF80401C, 0, 32, 8, /* INT2PRI7 */
    515		{ HPBDMAC23_25_27_28, I2C0, SRC0, SRC1 } },
    516	{ 0xFF804020, 0, 32, 8, /* INT2PRI8 */
    517		{ 0 /* ADIF */, VIN1, RESET_WDT, HIF } },
    518	{ 0xFF804024, 0, 32, 8, /* INT2PRI9 */
    519		{ ADMAC, FLCTL, GPIO0_3, GPIO4_5 } },
    520	{ 0xFF804028, 0, 32, 8, /* INT2PRI10 */
    521		{ STIF0, STIF1, VEU3F_VE3, GETHER } },
    522	{ 0xFF80402C, 0, 32, 8, /* INT2PRI11 */
    523		{ MTU2, RGPVG, MIMLB, IEBUS } },
    524};
    525
    526static DECLARE_INTC_DESC(intc_desc, "sh7734", vectors, groups,
    527	mask_registers, prio_registers, NULL);
    528
    529/* Support for external interrupt pins in IRQ mode */
    530
    531static struct intc_vect irq3210_vectors[] __initdata = {
    532	INTC_VECT(IRQ0, 0x240), INTC_VECT(IRQ1, 0x280),
    533	INTC_VECT(IRQ2, 0x2C0), INTC_VECT(IRQ3, 0x300),
    534};
    535
    536static struct intc_sense_reg irq3210_sense_registers[] __initdata = {
    537	{ 0xFF80201C, 32, 2, /* ICR1 */
    538	{ IRQ0, IRQ1, IRQ2, IRQ3, } },
    539};
    540
    541static struct intc_mask_reg irq3210_ack_registers[] __initdata = {
    542	{ 0xFF802024, 0, 32, /* INTREQ */
    543	{ IRQ0, IRQ1, IRQ2, IRQ3, } },
    544};
    545
    546static struct intc_mask_reg irq3210_mask_registers[] __initdata = {
    547	{ 0xFF802044, 0xFF802064, 32, /* INTMSK0 / INTMSKCLR0 */
    548	{ IRQ0, IRQ1, IRQ2, IRQ3, } },
    549};
    550
    551static struct intc_prio_reg irq3210_prio_registers[] __initdata = {
    552	{ 0xFF802010, 0, 32, 4, /* INTPRI */
    553	{ IRQ0, IRQ1, IRQ2, IRQ3, } },
    554};
    555
    556static DECLARE_INTC_DESC_ACK(intc_desc_irq3210, "sh7734-irq3210",
    557	irq3210_vectors, NULL,
    558	irq3210_mask_registers, irq3210_prio_registers,
    559	irq3210_sense_registers, irq3210_ack_registers);
    560
    561/* External interrupt pins in IRL mode */
    562
    563static struct intc_vect vectors_irl3210[] __initdata = {
    564	INTC_VECT(IRL0_LLLL, 0x200), INTC_VECT(IRL0_LLLH, 0x220),
    565	INTC_VECT(IRL0_LLHL, 0x240), INTC_VECT(IRL0_LLHH, 0x260),
    566	INTC_VECT(IRL0_LHLL, 0x280), INTC_VECT(IRL0_LHLH, 0x2a0),
    567	INTC_VECT(IRL0_LHHL, 0x2c0), INTC_VECT(IRL0_LHHH, 0x2e0),
    568	INTC_VECT(IRL0_HLLL, 0x300), INTC_VECT(IRL0_HLLH, 0x320),
    569	INTC_VECT(IRL0_HLHL, 0x340), INTC_VECT(IRL0_HLHH, 0x360),
    570	INTC_VECT(IRL0_HHLL, 0x380), INTC_VECT(IRL0_HHLH, 0x3a0),
    571	INTC_VECT(IRL0_HHHL, 0x3c0),
    572};
    573
    574static DECLARE_INTC_DESC(intc_desc_irl3210, "sh7734-irl3210",
    575	vectors_irl3210, NULL, mask_registers, NULL, NULL);
    576
    577#define INTC_ICR0		0xFF802000
    578#define INTC_INTMSK0    0xFF802044
    579#define INTC_INTMSK1    0xFF802048
    580#define INTC_INTMSKCLR0 0xFF802064
    581#define INTC_INTMSKCLR1 0xFF802068
    582
    583void __init plat_irq_setup(void)
    584{
    585	/* disable IRQ3-0 */
    586	__raw_writel(0xF0000000, INTC_INTMSK0);
    587
    588	/* disable IRL3-0 */
    589	__raw_writel(0x80000000, INTC_INTMSK1);
    590
    591	/* select IRL mode for IRL3-0 */
    592	__raw_writel(__raw_readl(INTC_ICR0) & ~0x00800000, INTC_ICR0);
    593
    594	/* disable holding function, ie enable "SH-4 Mode (LVLMODE)" */
    595	__raw_writel(__raw_readl(INTC_ICR0) | 0x00200000, INTC_ICR0);
    596
    597	register_intc_controller(&intc_desc);
    598}
    599
    600void __init plat_irq_setup_pins(int mode)
    601{
    602	switch (mode) {
    603	case IRQ_MODE_IRQ3210:
    604		/* select IRQ mode for IRL3-0 */
    605		__raw_writel(__raw_readl(INTC_ICR0) | 0x00800000, INTC_ICR0);
    606		register_intc_controller(&intc_desc_irq3210);
    607		break;
    608	case IRQ_MODE_IRL3210:
    609		/* enable IRL0-3 but don't provide any masking */
    610		__raw_writel(0x80000000, INTC_INTMSKCLR1);
    611		__raw_writel(0xf0000000, INTC_INTMSKCLR0);
    612		break;
    613	case IRQ_MODE_IRL3210_MASK:
    614		/* enable IRL0-3 and mask using cpu intc controller */
    615		__raw_writel(0x80000000, INTC_INTMSKCLR0);
    616		register_intc_controller(&intc_desc_irl3210);
    617		break;
    618	default:
    619		BUG();
    620	}
    621}