sh: Add initial support for SH7734 CPU subtype
This implements initial support for the SH7734. This adds support SCIF, TMU and RTC. Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
		
							parent
							
								
									e00e7cb3b7
								
							
						
					
					
						commit
						fea88a0c02
					
				| @ -427,6 +427,16 @@ config CPU_SUBTYPE_SH7724 | ||||
| 	help | ||||
| 	  Select SH7724 if you have an SH-MobileR2R CPU. | ||||
| 
 | ||||
| config CPU_SUBTYPE_SH7734 | ||||
| 	bool "Support SH7734 processor" | ||||
| 	select CPU_SH4A | ||||
| 	select CPU_SHX2 | ||||
| 	select ARCH_WANT_OPTIONAL_GPIOLIB | ||||
| 	select USB_ARCH_HAS_OHCI | ||||
| 	select USB_ARCH_HAS_EHCI | ||||
| 	help | ||||
| 	  Select SH7734 if you have a SH4A SH7734 CPU. | ||||
| 
 | ||||
| config CPU_SUBTYPE_SH7757 | ||||
| 	bool "Support SH7757 processor" | ||||
| 	select CPU_SH4A | ||||
| @ -584,7 +594,7 @@ config SH_CLK_CPG | ||||
| config SH_CLK_CPG_LEGACY | ||||
| 	depends on SH_CLK_CPG | ||||
| 	def_bool y if !CPU_SUBTYPE_SH7785 && !ARCH_SHMOBILE && \ | ||||
| 		      !CPU_SHX3 && !CPU_SUBTYPE_SH7757 | ||||
| 		      !CPU_SHX3 && !CPU_SUBTYPE_SH7757 && !CPU_SUBTYPE_SH7734 | ||||
| 
 | ||||
| source "kernel/time/Kconfig" | ||||
| 
 | ||||
|  | ||||
| @ -32,7 +32,7 @@ enum cpu_type { | ||||
| 
 | ||||
| 	/* SH-4A types */ | ||||
| 	CPU_SH7763, CPU_SH7770, CPU_SH7780, CPU_SH7781, CPU_SH7785, CPU_SH7786, | ||||
| 	CPU_SH7723, CPU_SH7724, CPU_SH7757, CPU_SHX3, | ||||
| 	CPU_SH7723, CPU_SH7724, CPU_SH7757, CPU_SH7734, CPU_SHX3, | ||||
| 
 | ||||
| 	/* SH4AL-DSP types */ | ||||
| 	CPU_SH7343, CPU_SH7722, CPU_SH7366, CPU_SH7372, | ||||
|  | ||||
| @ -47,6 +47,11 @@ | ||||
| #define MSTPCR1			0xa4150034 | ||||
| #define MSTPCR2			0xa4150038 | ||||
| 
 | ||||
| #elif defined(CONFIG_CPU_SUBTYPE_SH7734) | ||||
| #define FRQCR0			0xffc80000 | ||||
| #define FRQCR2			0xffc80008 | ||||
| #define FRQMR1			0xffc80014 | ||||
| #define FRQMR2			0xffc80018 | ||||
| #elif defined(CONFIG_CPU_SUBTYPE_SH7785) | ||||
| #define FRQCR0			0xffc80000 | ||||
| #define FRQCR1			0xffc80004 | ||||
|  | ||||
							
								
								
									
										306
									
								
								arch/sh/include/cpu-sh4/cpu/sh7734.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										306
									
								
								arch/sh/include/cpu-sh4/cpu/sh7734.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,306 @@ | ||||
| #ifndef __ASM_SH7734_H__ | ||||
| #define __ASM_SH7734_H__ | ||||
| 
 | ||||
| /* Pin Function Controller:
 | ||||
|  * GPIO_FN_xx - GPIO used to select pin function | ||||
|  * GPIO_GP_x_x - GPIO mapped to real I/O pin on CPU | ||||
|  */ | ||||
| enum { | ||||
| 	GPIO_GP_0_0, GPIO_GP_0_1, GPIO_GP_0_2, GPIO_GP_0_3, | ||||
| 	GPIO_GP_0_4, GPIO_GP_0_5, GPIO_GP_0_6, GPIO_GP_0_7, | ||||
| 	GPIO_GP_0_8, GPIO_GP_0_9, GPIO_GP_0_10, GPIO_GP_0_11, | ||||
| 	GPIO_GP_0_12, GPIO_GP_0_13, GPIO_GP_0_14, GPIO_GP_0_15, | ||||
| 	GPIO_GP_0_16, GPIO_GP_0_17, GPIO_GP_0_18, GPIO_GP_0_19, | ||||
| 	GPIO_GP_0_20, GPIO_GP_0_21, GPIO_GP_0_22, GPIO_GP_0_23, | ||||
| 	GPIO_GP_0_24, GPIO_GP_0_25, GPIO_GP_0_26, GPIO_GP_0_27, | ||||
| 	GPIO_GP_0_28, GPIO_GP_0_29, GPIO_GP_0_30, GPIO_GP_0_31, | ||||
| 
 | ||||
| 	GPIO_GP_1_0, GPIO_GP_1_1, GPIO_GP_1_2, GPIO_GP_1_3, | ||||
| 	GPIO_GP_1_4, GPIO_GP_1_5, GPIO_GP_1_6, GPIO_GP_1_7, | ||||
| 	GPIO_GP_1_8, GPIO_GP_1_9, GPIO_GP_1_10, GPIO_GP_1_11, | ||||
| 	GPIO_GP_1_12, GPIO_GP_1_13, GPIO_GP_1_14, GPIO_GP_1_15, | ||||
| 	GPIO_GP_1_16, GPIO_GP_1_17, GPIO_GP_1_18, GPIO_GP_1_19, | ||||
| 	GPIO_GP_1_20, GPIO_GP_1_21, GPIO_GP_1_22, GPIO_GP_1_23, | ||||
| 	GPIO_GP_1_24, GPIO_GP_1_25, GPIO_GP_1_26, GPIO_GP_1_27, | ||||
| 	GPIO_GP_1_28, GPIO_GP_1_29, GPIO_GP_1_30, GPIO_GP_1_31, | ||||
| 
 | ||||
| 	GPIO_GP_2_0, GPIO_GP_2_1, GPIO_GP_2_2, GPIO_GP_2_3, | ||||
| 	GPIO_GP_2_4, GPIO_GP_2_5, GPIO_GP_2_6, GPIO_GP_2_7, | ||||
| 	GPIO_GP_2_8, GPIO_GP_2_9, GPIO_GP_2_10, GPIO_GP_2_11, | ||||
| 	GPIO_GP_2_12, GPIO_GP_2_13, GPIO_GP_2_14, GPIO_GP_2_15, | ||||
| 	GPIO_GP_2_16, GPIO_GP_2_17, GPIO_GP_2_18, GPIO_GP_2_19, | ||||
| 	GPIO_GP_2_20, GPIO_GP_2_21, GPIO_GP_2_22, GPIO_GP_2_23, | ||||
| 	GPIO_GP_2_24, GPIO_GP_2_25, GPIO_GP_2_26, GPIO_GP_2_27, | ||||
| 	GPIO_GP_2_28, GPIO_GP_2_29, GPIO_GP_2_30, GPIO_GP_2_31, | ||||
| 
 | ||||
| 	GPIO_GP_3_0, GPIO_GP_3_1, GPIO_GP_3_2, GPIO_GP_3_3, | ||||
| 	GPIO_GP_3_4, GPIO_GP_3_5, GPIO_GP_3_6, GPIO_GP_3_7, | ||||
| 	GPIO_GP_3_8, GPIO_GP_3_9, GPIO_GP_3_10, GPIO_GP_3_11, | ||||
| 	GPIO_GP_3_12, GPIO_GP_3_13, GPIO_GP_3_14, GPIO_GP_3_15, | ||||
| 	GPIO_GP_3_16, GPIO_GP_3_17, GPIO_GP_3_18, GPIO_GP_3_19, | ||||
| 	GPIO_GP_3_20, GPIO_GP_3_21, GPIO_GP_3_22, GPIO_GP_3_23, | ||||
| 	GPIO_GP_3_24, GPIO_GP_3_25, GPIO_GP_3_26, GPIO_GP_3_27, | ||||
| 	GPIO_GP_3_28, GPIO_GP_3_29, GPIO_GP_3_30, GPIO_GP_3_31, | ||||
| 
 | ||||
| 	GPIO_GP_4_0, GPIO_GP_4_1, GPIO_GP_4_2, GPIO_GP_4_3, | ||||
| 	GPIO_GP_4_4, GPIO_GP_4_5, GPIO_GP_4_6, GPIO_GP_4_7, | ||||
| 	GPIO_GP_4_8, GPIO_GP_4_9, GPIO_GP_4_10, GPIO_GP_4_11, | ||||
| 	GPIO_GP_4_12, GPIO_GP_4_13, GPIO_GP_4_14, GPIO_GP_4_15, | ||||
| 	GPIO_GP_4_16, GPIO_GP_4_17, GPIO_GP_4_18, GPIO_GP_4_19, | ||||
| 	GPIO_GP_4_20, GPIO_GP_4_21, GPIO_GP_4_22, GPIO_GP_4_23, | ||||
| 	GPIO_GP_4_24, GPIO_GP_4_25, GPIO_GP_4_26, GPIO_GP_4_27, | ||||
| 	GPIO_GP_4_28, GPIO_GP_4_29, GPIO_GP_4_30, GPIO_GP_4_31, | ||||
| 
 | ||||
| 	GPIO_GP_5_0, GPIO_GP_5_1, GPIO_GP_5_2, GPIO_GP_5_3, | ||||
| 	GPIO_GP_5_4, GPIO_GP_5_5, GPIO_GP_5_6, GPIO_GP_5_7, | ||||
| 	GPIO_GP_5_8, GPIO_GP_5_9, GPIO_GP_5_10, GPIO_GP_5_11, | ||||
| 
 | ||||
| 	GPIO_FN_CLKOUT, GPIO_FN_BS, GPIO_FN_CS0, GPIO_FN_EX_CS0, GPIO_FN_RD, | ||||
| 		GPIO_FN_WE0, GPIO_FN_WE1, | ||||
| 
 | ||||
| 	GPIO_FN_SCL0, GPIO_FN_PENC0, GPIO_FN_USB_OVC0, | ||||
| 
 | ||||
| 	GPIO_FN_IRQ2_B, GPIO_FN_IRQ3_B, | ||||
| 
 | ||||
| 	/* IPSR0 */ | ||||
| 	GPIO_FN_A15, GPIO_FN_ST0_VCO_CLKIN, GPIO_FN_LCD_DATA15_A, | ||||
| 		GPIO_FN_TIOC3D_C, | ||||
| 	GPIO_FN_A14, GPIO_FN_LCD_DATA14_A, GPIO_FN_TIOC3C_C, | ||||
| 	GPIO_FN_A13, GPIO_FN_LCD_DATA13_A, GPIO_FN_TIOC3B_C, | ||||
| 	GPIO_FN_A12, GPIO_FN_LCD_DATA12_A, GPIO_FN_TIOC3A_C, | ||||
| 	GPIO_FN_A11, GPIO_FN_ST0_D7, GPIO_FN_LCD_DATA11_A, | ||||
| 		GPIO_FN_TIOC2B_C, | ||||
| 	GPIO_FN_A10, GPIO_FN_ST0_D6, GPIO_FN_LCD_DATA10_A, | ||||
| 		GPIO_FN_TIOC2A_C, | ||||
| 	GPIO_FN_A9, GPIO_FN_ST0_D5, GPIO_FN_LCD_DATA9_A, | ||||
| 		GPIO_FN_TIOC1B_C, | ||||
| 	GPIO_FN_A8, GPIO_FN_ST0_D4, GPIO_FN_LCD_DATA8_A, | ||||
| 		GPIO_FN_TIOC1A_C, | ||||
| 	GPIO_FN_A7, GPIO_FN_ST0_D3, GPIO_FN_LCD_DATA7_A, GPIO_FN_TIOC0D_C, | ||||
| 	GPIO_FN_A6, GPIO_FN_ST0_D2, GPIO_FN_LCD_DATA6_A, GPIO_FN_TIOC0C_C, | ||||
| 	GPIO_FN_A5, GPIO_FN_ST0_D1, GPIO_FN_LCD_DATA5_A, GPIO_FN_TIOC0B_C, | ||||
| 	GPIO_FN_A4, GPIO_FN_ST0_D0, GPIO_FN_LCD_DATA4_A, GPIO_FN_TIOC0A_C, | ||||
| 	GPIO_FN_A3, GPIO_FN_ST0_VLD, GPIO_FN_LCD_DATA3_A, GPIO_FN_TCLKD_C, | ||||
| 	GPIO_FN_A2, GPIO_FN_ST0_SYC, GPIO_FN_LCD_DATA2_A, GPIO_FN_TCLKC_C, | ||||
| 	GPIO_FN_A1, GPIO_FN_ST0_REQ, GPIO_FN_LCD_DATA1_A, GPIO_FN_TCLKB_C, | ||||
| 	GPIO_FN_A0, GPIO_FN_ST0_CLKIN, GPIO_FN_LCD_DATA0_A, GPIO_FN_TCLKA_C, | ||||
| 
 | ||||
| 	/* IPSR1 */ | ||||
| 	GPIO_FN_D3, GPIO_FN_SD0_DAT3_A, GPIO_FN_MMC_D3_A, GPIO_FN_ST1_D6, | ||||
| 		GPIO_FN_FD3_A, | ||||
| 	GPIO_FN_D2, GPIO_FN_SD0_DAT2_A, GPIO_FN_MMC_D2_A, GPIO_FN_ST1_D5, | ||||
| 		GPIO_FN_FD2_A, | ||||
| 	GPIO_FN_D1, GPIO_FN_SD0_DAT1_A, GPIO_FN_MMC_D1_A, GPIO_FN_ST1_D4, | ||||
| 		GPIO_FN_FD1_A, | ||||
| 	GPIO_FN_D0, GPIO_FN_SD0_DAT0_A, GPIO_FN_MMC_D0_A, GPIO_FN_ST1_D3, | ||||
| 		GPIO_FN_FD0_A, | ||||
| 	GPIO_FN_A25, GPIO_FN_TX2_D, GPIO_FN_ST1_D2, | ||||
| 	GPIO_FN_A24, GPIO_FN_RX2_D, GPIO_FN_ST1_D1, | ||||
| 	GPIO_FN_A23, GPIO_FN_ST1_D0, GPIO_FN_LCD_M_DISP_A, | ||||
| 	GPIO_FN_A22, GPIO_FN_ST1_VLD, GPIO_FN_LCD_VEPWC_A, | ||||
| 	GPIO_FN_A21, GPIO_FN_ST1_SYC, GPIO_FN_LCD_VCPWC_A, | ||||
| 	GPIO_FN_A20, GPIO_FN_ST1_REQ, GPIO_FN_LCD_FLM_A, | ||||
| 	GPIO_FN_A19, GPIO_FN_ST1_CLKIN, GPIO_FN_LCD_CLK_A, GPIO_FN_TIOC4D_C, | ||||
| 	GPIO_FN_A18, GPIO_FN_ST1_PWM, GPIO_FN_LCD_CL2_A, GPIO_FN_TIOC4C_C, | ||||
| 	GPIO_FN_A17, GPIO_FN_ST1_VCO_CLKIN, GPIO_FN_LCD_CL1_A, GPIO_FN_TIOC4B_C, | ||||
| 	GPIO_FN_A16, GPIO_FN_ST0_PWM, GPIO_FN_LCD_DON_A, GPIO_FN_TIOC4A_C, | ||||
| 
 | ||||
| 	/* IPSR2 */ | ||||
| 	GPIO_FN_D14, GPIO_FN_TX2_B, GPIO_FN_FSE_A, GPIO_FN_ET0_TX_CLK_B, | ||||
| 	GPIO_FN_D13, GPIO_FN_RX2_B, GPIO_FN_FRB_A,	GPIO_FN_ET0_ETXD6_B, | ||||
| 	GPIO_FN_D12, GPIO_FN_FWE_A, GPIO_FN_ET0_ETXD5_B, | ||||
| 	GPIO_FN_D11, GPIO_FN_RSPI_MISO_A, GPIO_FN_QMI_QIO1_A, | ||||
| 		GPIO_FN_FRE_A, GPIO_FN_ET0_ETXD3_B, | ||||
| 	GPIO_FN_D10, GPIO_FN_RSPI_MOSI_A, GPIO_FN_QMO_QIO0_A, | ||||
| 		GPIO_FN_FALE_A, GPIO_FN_ET0_ETXD2_B, | ||||
| 	GPIO_FN_D9, GPIO_FN_SD0_CMD_A, GPIO_FN_MMC_CMD_A, GPIO_FN_QIO3_A, | ||||
| 		GPIO_FN_FCLE_A, GPIO_FN_ET0_ETXD1_B, | ||||
| 	GPIO_FN_D8, GPIO_FN_SD0_CLK_A, GPIO_FN_MMC_CLK_A, GPIO_FN_QIO2_A, | ||||
| 		GPIO_FN_FCE_A, GPIO_FN_ET0_GTX_CLK_B, | ||||
| 	GPIO_FN_D7, GPIO_FN_RSPI_SSL_A, GPIO_FN_MMC_D7_A, GPIO_FN_QSSL_A, | ||||
| 		GPIO_FN_FD7_A, | ||||
| 	GPIO_FN_D6, GPIO_FN_RSPI_RSPCK_A, GPIO_FN_MMC_D6_A, GPIO_FN_QSPCLK_A, | ||||
| 		GPIO_FN_FD6_A, | ||||
| 	GPIO_FN_D5, GPIO_FN_SD0_WP_A, GPIO_FN_MMC_D5_A, GPIO_FN_FD5_A, | ||||
| 	GPIO_FN_D4, GPIO_FN_SD0_CD_A, GPIO_FN_MMC_D4_A, GPIO_FN_ST1_D7, | ||||
| 		GPIO_FN_FD4_A, | ||||
| 
 | ||||
| 	/* IPSR3 */ | ||||
| 	GPIO_FN_DRACK0, GPIO_FN_SD1_DAT2_A, GPIO_FN_ATAG, GPIO_FN_TCLK1_A, | ||||
| 		GPIO_FN_ET0_ETXD7, | ||||
| 	GPIO_FN_EX_WAIT2, GPIO_FN_SD1_DAT1_A, GPIO_FN_DACK2, GPIO_FN_CAN1_RX_C, | ||||
| 		GPIO_FN_ET0_MAGIC_C, GPIO_FN_ET0_ETXD6_A, | ||||
| 	GPIO_FN_EX_WAIT1, GPIO_FN_SD1_DAT0_A, GPIO_FN_DREQ2, GPIO_FN_CAN1_TX_C, | ||||
| 		GPIO_FN_ET0_LINK_C, GPIO_FN_ET0_ETXD5_A, | ||||
| 	GPIO_FN_EX_WAIT0, GPIO_FN_TCLK1_B, | ||||
| 	GPIO_FN_RD_WR, GPIO_FN_TCLK0, | ||||
| 	GPIO_FN_EX_CS5, GPIO_FN_SD1_CMD_A, GPIO_FN_ATADIR, GPIO_FN_QSSL_B, | ||||
| 		GPIO_FN_ET0_ETXD3_A, | ||||
| 	GPIO_FN_EX_CS4, GPIO_FN_SD1_WP_A, GPIO_FN_ATAWR, GPIO_FN_QMI_QIO1_B, | ||||
| 		GPIO_FN_ET0_ETXD2_A, | ||||
| 	GPIO_FN_EX_CS3, GPIO_FN_SD1_CD_A, GPIO_FN_ATARD, GPIO_FN_QMO_QIO0_B, | ||||
| 		GPIO_FN_ET0_ETXD1_A, | ||||
| 	GPIO_FN_EX_CS2, GPIO_FN_TX3_B, GPIO_FN_ATACS1, GPIO_FN_QSPCLK_B, | ||||
| 		GPIO_FN_ET0_GTX_CLK_A, | ||||
| 	GPIO_FN_EX_CS1, GPIO_FN_RX3_B, GPIO_FN_ATACS0, GPIO_FN_QIO2_B, | ||||
| 		GPIO_FN_ET0_ETXD0, | ||||
| 	GPIO_FN_CS1_A26, GPIO_FN_QIO3_B, | ||||
| 	GPIO_FN_D15, GPIO_FN_SCK2_B, | ||||
| 
 | ||||
| 	/* IPSR4 */ | ||||
| 	GPIO_FN_SCK2_A, GPIO_FN_VI0_G3, | ||||
| 	GPIO_FN_RTS1_B, GPIO_FN_VI0_G2, | ||||
| 	GPIO_FN_CTS1_B, GPIO_FN_VI0_DATA7_VI0_G1, | ||||
| 	GPIO_FN_TX1_B, GPIO_FN_VI0_DATA6_VI0_G0, GPIO_FN_ET0_PHY_INT_A, | ||||
| 	GPIO_FN_RX1_B, GPIO_FN_VI0_DATA5_VI0_B5, GPIO_FN_ET0_MAGIC_A, | ||||
| 	GPIO_FN_SCK1_B, GPIO_FN_VI0_DATA4_VI0_B4, GPIO_FN_ET0_LINK_A, | ||||
| 	GPIO_FN_RTS0_B, GPIO_FN_VI0_DATA3_VI0_B3, GPIO_FN_ET0_MDIO_A, | ||||
| 	GPIO_FN_CTS0_B, GPIO_FN_VI0_DATA2_VI0_B2, GPIO_FN_RMII0_MDIO_A, | ||||
| 		GPIO_FN_ET0_MDC, | ||||
| 	GPIO_FN_HTX0_A, GPIO_FN_TX1_A, GPIO_FN_VI0_DATA1_VI0_B1, | ||||
| 		GPIO_FN_RMII0_MDC_A, GPIO_FN_ET0_COL, | ||||
| 	GPIO_FN_HRX0_A, GPIO_FN_RX1_A, GPIO_FN_VI0_DATA0_VI0_B0, | ||||
| 		GPIO_FN_RMII0_CRS_DV_A, GPIO_FN_ET0_CRS, | ||||
| 	GPIO_FN_HSCK0_A, GPIO_FN_SCK1_A, GPIO_FN_VI0_VSYNC, | ||||
| 		GPIO_FN_RMII0_RX_ER_A, GPIO_FN_ET0_RX_ER, | ||||
| 	GPIO_FN_HRTS0_A, GPIO_FN_RTS1_A, GPIO_FN_VI0_HSYNC, | ||||
| 		GPIO_FN_RMII0_TXD_EN_A, GPIO_FN_ET0_RX_DV, | ||||
| 	GPIO_FN_HCTS0_A, GPIO_FN_CTS1_A, GPIO_FN_VI0_FIELD, | ||||
| 		GPIO_FN_RMII0_RXD1_A, GPIO_FN_ET0_ERXD7, | ||||
| 
 | ||||
| 	/* IPSR5 */ | ||||
| 	GPIO_FN_SD2_CLK_A, GPIO_FN_RX2_A, GPIO_FN_VI0_G4, GPIO_FN_ET0_RX_CLK_B, | ||||
| 	GPIO_FN_SD2_CMD_A, GPIO_FN_TX2_A, GPIO_FN_VI0_G5, GPIO_FN_ET0_ERXD2_B, | ||||
| 	GPIO_FN_SD2_DAT0_A, GPIO_FN_RX3_A, GPIO_FN_VI0_R0, GPIO_FN_ET0_ERXD3_B, | ||||
| 	GPIO_FN_SD2_DAT1_A, GPIO_FN_TX3_A, GPIO_FN_VI0_R1, GPIO_FN_ET0_MDIO_B, | ||||
| 	GPIO_FN_SD2_DAT2_A, GPIO_FN_RX4_A, GPIO_FN_VI0_R2, GPIO_FN_ET0_LINK_B, | ||||
| 	GPIO_FN_SD2_DAT3_A, GPIO_FN_TX4_A, GPIO_FN_VI0_R3, GPIO_FN_ET0_MAGIC_B, | ||||
| 	GPIO_FN_SD2_CD_A, GPIO_FN_RX5_A, GPIO_FN_VI0_R4, GPIO_FN_ET0_PHY_INT_B, | ||||
| 	GPIO_FN_SD2_WP_A, GPIO_FN_TX5_A, GPIO_FN_VI0_R5, | ||||
| 	GPIO_FN_REF125CK, GPIO_FN_ADTRG, GPIO_FN_RX5_C, | ||||
| 	GPIO_FN_REF50CK, GPIO_FN_CTS1_E, GPIO_FN_HCTS0_D, | ||||
| 
 | ||||
| 	/* IPSR6 */ | ||||
| 	GPIO_FN_DU0_DR0, GPIO_FN_SCIF_CLK_B, GPIO_FN_HRX0_D, GPIO_FN_IETX_A, | ||||
| 		GPIO_FN_TCLKA_A, GPIO_FN_HIFD00, | ||||
| 	GPIO_FN_DU0_DR1, GPIO_FN_SCK0_B, GPIO_FN_HTX0_D, GPIO_FN_IERX_A, | ||||
| 		GPIO_FN_TCLKB_A, GPIO_FN_HIFD01, | ||||
| 	GPIO_FN_DU0_DR2, GPIO_FN_RX0_B, GPIO_FN_TCLKC_A, GPIO_FN_HIFD02, | ||||
| 	GPIO_FN_DU0_DR3, GPIO_FN_TX0_B, GPIO_FN_TCLKD_A, GPIO_FN_HIFD03, | ||||
| 	GPIO_FN_DU0_DR4, GPIO_FN_CTS0_C, GPIO_FN_TIOC0A_A, GPIO_FN_HIFD04, | ||||
| 	GPIO_FN_DU0_DR5, GPIO_FN_RTS0_C, GPIO_FN_TIOC0B_A, GPIO_FN_HIFD05, | ||||
| 	GPIO_FN_DU0_DR6, GPIO_FN_SCK1_C, GPIO_FN_TIOC0C_A, GPIO_FN_HIFD06, | ||||
| 	GPIO_FN_DU0_DR7, GPIO_FN_RX1_C, GPIO_FN_TIOC0D_A, GPIO_FN_HIFD07, | ||||
| 	GPIO_FN_DU0_DG0, GPIO_FN_TX1_C, GPIO_FN_HSCK0_D, GPIO_FN_IECLK_A, | ||||
| 		GPIO_FN_TIOC1A_A, GPIO_FN_HIFD08, | ||||
| 	GPIO_FN_DU0_DG1, GPIO_FN_CTS1_C, GPIO_FN_HRTS0_D, GPIO_FN_TIOC1B_A, | ||||
| 		GPIO_FN_HIFD09, | ||||
| 
 | ||||
| 	/* IPSR7 */ | ||||
| 	GPIO_FN_DU0_DG2, GPIO_FN_RTS1_C, GPIO_FN_RMII0_MDC_B, GPIO_FN_TIOC2A_A, | ||||
| 		GPIO_FN_HIFD10, | ||||
| 	GPIO_FN_DU0_DG3, GPIO_FN_SCK2_C, GPIO_FN_RMII0_MDIO_B, GPIO_FN_TIOC2B_A, | ||||
| 		GPIO_FN_HIFD11, | ||||
| 	GPIO_FN_DU0_DG4, GPIO_FN_RX2_C, GPIO_FN_RMII0_CRS_DV_B, | ||||
| 		GPIO_FN_TIOC3A_A, GPIO_FN_HIFD12, | ||||
| 	GPIO_FN_DU0_DG5, GPIO_FN_TX2_C, GPIO_FN_RMII0_RX_ER_B, | ||||
| 		GPIO_FN_TIOC3B_A, GPIO_FN_HIFD13, | ||||
| 	GPIO_FN_DU0_DG6, GPIO_FN_RX3_C, GPIO_FN_RMII0_RXD0_B, | ||||
| 		GPIO_FN_TIOC3C_A, GPIO_FN_HIFD14, | ||||
| 	GPIO_FN_DU0_DG7, GPIO_FN_TX3_C, GPIO_FN_RMII0_RXD1_B, | ||||
| 		GPIO_FN_TIOC3D_A, GPIO_FN_HIFD15, | ||||
| 	GPIO_FN_DU0_DB0, GPIO_FN_RX4_C, GPIO_FN_RMII0_TXD_EN_B, | ||||
| 		GPIO_FN_TIOC4A_A, GPIO_FN_HIFCS, | ||||
| 	GPIO_FN_DU0_DB1, GPIO_FN_TX4_C, GPIO_FN_RMII0_TXD0_B, | ||||
| 		GPIO_FN_TIOC4B_A, GPIO_FN_HIFRS, | ||||
| 	GPIO_FN_DU0_DB2, GPIO_FN_RX5_B, GPIO_FN_RMII0_TXD1_B, | ||||
| 		GPIO_FN_TIOC4C_A, GPIO_FN_HIFWR, | ||||
| 	GPIO_FN_DU0_DB3, GPIO_FN_TX5_B, GPIO_FN_TIOC4D_A, GPIO_FN_HIFRD, | ||||
| 	GPIO_FN_DU0_DB4, GPIO_FN_HIFINT, | ||||
| 
 | ||||
| 	/* IPSR8 */ | ||||
| 	GPIO_FN_DU0_DB5, GPIO_FN_HIFDREQ, | ||||
| 	GPIO_FN_DU0_DB6, GPIO_FN_HIFRDY, | ||||
| 	GPIO_FN_DU0_DB7, GPIO_FN_SSI_SCK0_B, GPIO_FN_HIFEBL_B, | ||||
| 	GPIO_FN_DU0_DOTCLKIN, GPIO_FN_HSPI_CS0_C, GPIO_FN_SSI_WS0_B, | ||||
| 	GPIO_FN_DU0_DOTCLKOUT, GPIO_FN_HSPI_CLK0_C, GPIO_FN_SSI_SDATA0_B, | ||||
| 	GPIO_FN_DU0_EXHSYNC_DU0_HSYNC, GPIO_FN_HSPI_TX0_C, GPIO_FN_SSI_SCK1_B, | ||||
| 	GPIO_FN_DU0_EXVSYNC_DU0_VSYNC, GPIO_FN_HSPI_RX0_C, GPIO_FN_SSI_WS1_B, | ||||
| 	GPIO_FN_DU0_EXODDF_DU0_ODDF, GPIO_FN_CAN0_RX_B, GPIO_FN_HSCK0_B, | ||||
| 		GPIO_FN_SSI_SDATA1_B, | ||||
| 	GPIO_FN_DU0_DISP, GPIO_FN_CAN0_TX_B, GPIO_FN_HRX0_B, | ||||
| 		GPIO_FN_AUDIO_CLKA_B, | ||||
| 	GPIO_FN_DU0_CDE, GPIO_FN_HTX0_B, GPIO_FN_AUDIO_CLKB_B, | ||||
| 		GPIO_FN_LCD_VCPWC_B, | ||||
| 	GPIO_FN_IRQ0_A, GPIO_FN_HSPI_TX_B, GPIO_FN_RX3_E, GPIO_FN_ET0_ERXD0, | ||||
| 	GPIO_FN_IRQ1_A, GPIO_FN_HSPI_RX_B, GPIO_FN_TX3_E, GPIO_FN_ET0_ERXD1, | ||||
| 	GPIO_FN_IRQ2_A, GPIO_FN_CTS0_A, GPIO_FN_HCTS0_B, GPIO_FN_ET0_ERXD2_A, | ||||
| 	GPIO_FN_IRQ3_A, GPIO_FN_RTS0_A, GPIO_FN_HRTS0_B, GPIO_FN_ET0_ERXD3_A, | ||||
| 
 | ||||
| 	/* IPSR9 */ | ||||
| 	GPIO_FN_VI1_CLK_A, GPIO_FN_FD0_B, GPIO_FN_LCD_DATA0_B, | ||||
| 	GPIO_FN_VI1_0_A, GPIO_FN_FD1_B, GPIO_FN_LCD_DATA1_B, | ||||
| 	GPIO_FN_VI1_1_A, GPIO_FN_FD2_B, GPIO_FN_LCD_DATA2_B, | ||||
| 	GPIO_FN_VI1_2_A, GPIO_FN_FD3_B, GPIO_FN_LCD_DATA3_B, | ||||
| 	GPIO_FN_VI1_3_A, GPIO_FN_FD4_B, GPIO_FN_LCD_DATA4_B, | ||||
| 	GPIO_FN_VI1_4_A, GPIO_FN_FD5_B, GPIO_FN_LCD_DATA5_B, | ||||
| 	GPIO_FN_VI1_5_A, GPIO_FN_FD6_B, GPIO_FN_LCD_DATA6_B, | ||||
| 	GPIO_FN_VI1_6_A, GPIO_FN_FD7_B, GPIO_FN_LCD_DATA7_B, | ||||
| 	GPIO_FN_VI1_7_A, GPIO_FN_FCE_B, GPIO_FN_LCD_DATA8_B, | ||||
| 	GPIO_FN_SSI_SCK0_A, GPIO_FN_TIOC1A_B, GPIO_FN_LCD_DATA9_B, | ||||
| 	GPIO_FN_SSI_WS0_A, GPIO_FN_TIOC1B_B, GPIO_FN_LCD_DATA10_B, | ||||
| 	GPIO_FN_SSI_SDATA0_A, GPIO_FN_VI1_0_B, GPIO_FN_TIOC2A_B, | ||||
| 		GPIO_FN_LCD_DATA11_B, | ||||
| 	GPIO_FN_SSI_SCK1_A, GPIO_FN_VI1_1_B, GPIO_FN_TIOC2B_B, | ||||
| 		GPIO_FN_LCD_DATA12_B, | ||||
| 	GPIO_FN_SSI_WS1_A, GPIO_FN_VI1_2_B, GPIO_FN_LCD_DATA13_B, | ||||
| 	GPIO_FN_SSI_SDATA1_A, GPIO_FN_VI1_3_B, GPIO_FN_LCD_DATA14_B, | ||||
| 
 | ||||
| 	/* IPSR10 */ | ||||
| 	GPIO_FN_SSI_SCK23, GPIO_FN_VI1_4_B, GPIO_FN_RX1_D, GPIO_FN_FCLE_B, | ||||
| 		GPIO_FN_LCD_DATA15_B, | ||||
| 	GPIO_FN_SSI_WS23, GPIO_FN_VI1_5_B, GPIO_FN_TX1_D, GPIO_FN_HSCK0_C, | ||||
| 		GPIO_FN_FALE_B, GPIO_FN_LCD_DON_B, | ||||
| 	GPIO_FN_SSI_SDATA2, GPIO_FN_VI1_6_B, GPIO_FN_HRX0_C, GPIO_FN_FRE_B, | ||||
| 		GPIO_FN_LCD_CL1_B, | ||||
| 	GPIO_FN_SSI_SDATA3, GPIO_FN_VI1_7_B, GPIO_FN_HTX0_C, GPIO_FN_FWE_B, | ||||
| 		GPIO_FN_LCD_CL2_B, | ||||
| 	GPIO_FN_AUDIO_CLKA_A, GPIO_FN_VI1_CLK_B, GPIO_FN_SCK1_D, | ||||
| 		GPIO_FN_IECLK_B, GPIO_FN_LCD_FLM_B, | ||||
| 	GPIO_FN_AUDIO_CLKB_A, GPIO_FN_LCD_CLK_B, | ||||
| 	GPIO_FN_AUDIO_CLKC, GPIO_FN_SCK1_E, GPIO_FN_HCTS0_C, GPIO_FN_FRB_B, | ||||
| 		GPIO_FN_LCD_VEPWC_B, | ||||
| 	GPIO_FN_AUDIO_CLKOUT, GPIO_FN_TX1_E, GPIO_FN_HRTS0_C, GPIO_FN_FSE_B, | ||||
| 		GPIO_FN_LCD_M_DISP_B, | ||||
| 	GPIO_FN_CAN_CLK_A, GPIO_FN_RX4_D, | ||||
| 	GPIO_FN_CAN0_TX_A, GPIO_FN_TX4_D, GPIO_FN_MLB_CLK, | ||||
| 	GPIO_FN_CAN1_RX_A, GPIO_FN_IRQ1_B, | ||||
| 	GPIO_FN_CAN0_RX_A, GPIO_FN_IRQ0_B, GPIO_FN_MLB_SIG, | ||||
| 	GPIO_FN_CAN1_TX_A, GPIO_FN_TX5_C, GPIO_FN_MLB_DAT, | ||||
| 
 | ||||
| 	/* IPSR11 */ | ||||
| 	GPIO_FN_SCL1, GPIO_FN_SCIF_CLK_C, | ||||
| 	GPIO_FN_SDA1, GPIO_FN_RX1_E, | ||||
| 	GPIO_FN_SDA0, GPIO_FN_HIFEBL_A, | ||||
| 	GPIO_FN_SDSELF, GPIO_FN_RTS1_E, | ||||
| 	GPIO_FN_SCIF_CLK_A, GPIO_FN_HSPI_CLK_A, GPIO_FN_VI0_CLK, | ||||
| 		GPIO_FN_RMII0_TXD0_A, GPIO_FN_ET0_ERXD4, | ||||
| 	GPIO_FN_SCK0_A, GPIO_FN_HSPI_CS_A, GPIO_FN_VI0_CLKENB, | ||||
| 		GPIO_FN_RMII0_TXD1_A, GPIO_FN_ET0_ERXD5, | ||||
| 	GPIO_FN_RX0_A, GPIO_FN_HSPI_RX_A, GPIO_FN_RMII0_RXD0_A, | ||||
| 		GPIO_FN_ET0_ERXD6, | ||||
| 	GPIO_FN_TX0_A, GPIO_FN_HSPI_TX_A, | ||||
| 	GPIO_FN_PENC1, GPIO_FN_TX3_D, GPIO_FN_CAN1_TX_B, GPIO_FN_TX5_D, | ||||
| 		GPIO_FN_IETX_B, | ||||
| 	GPIO_FN_USB_OVC1, GPIO_FN_RX3_D, GPIO_FN_CAN1_RX_B, GPIO_FN_RX5_D, | ||||
| 		GPIO_FN_IERX_B, | ||||
| 	GPIO_FN_DREQ0, GPIO_FN_SD1_CLK_A, GPIO_FN_ET0_TX_EN, | ||||
| 	GPIO_FN_DACK0, GPIO_FN_SD1_DAT3_A, GPIO_FN_ET0_TX_ER, | ||||
| 	GPIO_FN_DREQ1, GPIO_FN_HSPI_CLK_B, GPIO_FN_RX4_B, GPIO_FN_ET0_PHY_INT_C, | ||||
| 		GPIO_FN_ET0_TX_CLK_A, | ||||
| 	GPIO_FN_DACK1, GPIO_FN_HSPI_CS_B, GPIO_FN_TX4_B, GPIO_FN_ET0_RX_CLK_A, | ||||
| 	GPIO_FN_PRESETOUT, GPIO_FN_ST_CLKOUT, | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| #endif /* __ASM_SH7734_H__ */ | ||||
| @ -25,7 +25,8 @@ static const char *cpu_name[] = { | ||||
| 	[CPU_SH5_101]	= "SH5-101",	[CPU_SH5_103]	= "SH5-103", | ||||
| 	[CPU_MXG]	= "MX-G",	[CPU_SH7723]	= "SH7723", | ||||
| 	[CPU_SH7366]	= "SH7366",	[CPU_SH7724]	= "SH7724", | ||||
| 	[CPU_SH7372]	= "SH7372",	[CPU_SH_NONE]	= "Unknown" | ||||
| 	[CPU_SH7372]	= "SH7372",	[CPU_SH7734]	= "SH7734", | ||||
| 	[CPU_SH_NONE]	= "Unknown" | ||||
| }; | ||||
| 
 | ||||
| const char *get_cpu_subtype(struct sh_cpuinfo *c) | ||||
|  | ||||
| @ -158,6 +158,9 @@ void __cpuinit cpu_probe(void) | ||||
| 		case 0x40: /* yon-ten-go */ | ||||
| 			boot_cpu_data.type = CPU_SH7372; | ||||
| 			break; | ||||
| 		case 0xE0: /* 0x4E0 */ | ||||
| 			boot_cpu_data.type = CPU_SH7734; /* SH7733/SH7734 */ | ||||
| 			break; | ||||
| 
 | ||||
| 		} | ||||
| 		break; | ||||
|  | ||||
| @ -13,6 +13,7 @@ obj-$(CONFIG_CPU_SUBTYPE_SH7343)	+= setup-sh7343.o | ||||
| obj-$(CONFIG_CPU_SUBTYPE_SH7722)	+= setup-sh7722.o serial-sh7722.o | ||||
| obj-$(CONFIG_CPU_SUBTYPE_SH7723)	+= setup-sh7723.o | ||||
| obj-$(CONFIG_CPU_SUBTYPE_SH7724)	+= setup-sh7724.o | ||||
| obj-$(CONFIG_CPU_SUBTYPE_SH7734)	+= setup-sh7734.o | ||||
| obj-$(CONFIG_CPU_SUBTYPE_SH7366)	+= setup-sh7366.o | ||||
| obj-$(CONFIG_CPU_SUBTYPE_SHX3)		+= setup-shx3.o intc-shx3.o | ||||
| 
 | ||||
| @ -30,6 +31,7 @@ clock-$(CONFIG_CPU_SUBTYPE_SH7343)	:= clock-sh7343.o | ||||
| clock-$(CONFIG_CPU_SUBTYPE_SH7722)	:= clock-sh7722.o | ||||
| clock-$(CONFIG_CPU_SUBTYPE_SH7723)	:= clock-sh7723.o | ||||
| clock-$(CONFIG_CPU_SUBTYPE_SH7724)	:= clock-sh7724.o | ||||
| clock-$(CONFIG_CPU_SUBTYPE_SH7734)	:= clock-sh7734.o | ||||
| clock-$(CONFIG_CPU_SUBTYPE_SH7366)	:= clock-sh7366.o | ||||
| clock-$(CONFIG_CPU_SUBTYPE_SHX3)	:= clock-shx3.o | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										266
									
								
								arch/sh/kernel/cpu/sh4a/clock-sh7734.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										266
									
								
								arch/sh/kernel/cpu/sh4a/clock-sh7734.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,266 @@ | ||||
| /*
 | ||||
|  * arch/sh/kernel/cpu/sh4a/clock-sh7734.c | ||||
|  * | ||||
|  * Clock framework for SH7734 | ||||
|  * | ||||
|  * Copyright (C) 2011, 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> | ||||
|  * Copyright (C) 2011, 2012 Renesas Solutions Corp. | ||||
|  * | ||||
|  * This file is subject to the terms and conditions of the GNU General Public | ||||
|  * License.  See the file "COPYING" in the main directory of this archive | ||||
|  * for more details. | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/init.h> | ||||
| #include <linux/kernel.h> | ||||
| #include <linux/io.h> | ||||
| #include <linux/clkdev.h> | ||||
| #include <linux/delay.h> | ||||
| #include <asm/clock.h> | ||||
| #include <asm/freq.h> | ||||
| 
 | ||||
| static struct clk extal_clk = { | ||||
| 	.rate       = 33333333, | ||||
| }; | ||||
| 
 | ||||
| #define MODEMR          (0xFFCC0020) | ||||
| #define MODEMR_MASK     (0x6) | ||||
| #define MODEMR_533MHZ   (0x2) | ||||
| 
 | ||||
| static unsigned long pll_recalc(struct clk *clk) | ||||
| { | ||||
| 	int mode = 12; | ||||
| 	u32 r = __raw_readl(MODEMR); | ||||
| 
 | ||||
| 	if ((r & MODEMR_MASK) & MODEMR_533MHZ) | ||||
| 		mode = 16; | ||||
| 
 | ||||
| 	return clk->parent->rate * mode; | ||||
| } | ||||
| 
 | ||||
| static struct sh_clk_ops pll_clk_ops = { | ||||
| 	.recalc		= pll_recalc, | ||||
| }; | ||||
| 
 | ||||
| static struct clk pll_clk = { | ||||
| 	.ops        = &pll_clk_ops, | ||||
| 	.parent     = &extal_clk, | ||||
| 	.flags      = CLK_ENABLE_ON_INIT, | ||||
| }; | ||||
| 
 | ||||
| static struct clk *main_clks[] = { | ||||
| 	&extal_clk, | ||||
| 	&pll_clk, | ||||
| }; | ||||
| 
 | ||||
| static int multipliers[] = { 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; | ||||
| static int divisors[] = { 1, 3, 2, 3, 4, 6, 8, 9, 12, 16, 18, 24 }; | ||||
| 
 | ||||
| static struct clk_div_mult_table div4_div_mult_table = { | ||||
| 	.divisors = divisors, | ||||
| 	.nr_divisors = ARRAY_SIZE(divisors), | ||||
| 	.multipliers = multipliers, | ||||
| 	.nr_multipliers = ARRAY_SIZE(multipliers), | ||||
| }; | ||||
| 
 | ||||
| static struct clk_div4_table div4_table = { | ||||
| 	.div_mult_table = &div4_div_mult_table, | ||||
| }; | ||||
| 
 | ||||
| enum { DIV4_I, DIV4_S, DIV4_B, DIV4_M, DIV4_S1, DIV4_P, DIV4_NR }; | ||||
| 
 | ||||
| #define DIV4(_reg, _bit, _mask, _flags) \ | ||||
| 	SH_CLK_DIV4(&pll_clk, _reg, _bit, _mask, _flags) | ||||
| 
 | ||||
| struct clk div4_clks[DIV4_NR] = { | ||||
| 	[DIV4_I] = DIV4(FRQMR1, 28, 0x0003, CLK_ENABLE_ON_INIT), | ||||
| 	[DIV4_S] = DIV4(FRQMR1, 20, 0x000C, CLK_ENABLE_ON_INIT), | ||||
| 	[DIV4_B] = DIV4(FRQMR1, 16, 0x0140, CLK_ENABLE_ON_INIT), | ||||
| 	[DIV4_M] = DIV4(FRQMR1, 12, 0x0004, CLK_ENABLE_ON_INIT), | ||||
| 	[DIV4_S1] = DIV4(FRQMR1, 4, 0x0030, CLK_ENABLE_ON_INIT), | ||||
| 	[DIV4_P] = DIV4(FRQMR1, 0, 0x0140, CLK_ENABLE_ON_INIT), | ||||
| }; | ||||
| 
 | ||||
| #define MSTPCR0	0xFFC80030 | ||||
| #define MSTPCR1	0xFFC80034 | ||||
| #define MSTPCR3	0xFFC8003C | ||||
| 
 | ||||
| enum { | ||||
| 	MSTP030, MSTP029, /* IIC */ | ||||
| 	MSTP026, MSTP025, MSTP024, /* SCIF */ | ||||
| 	MSTP023, | ||||
| 	MSTP022, MSTP021, | ||||
| 	MSTP019, /* HSCIF */ | ||||
| 	MSTP016, MSTP015, MSTP014, /* TMU / TIMER */ | ||||
| 	MSTP012, MSTP011, MSTP010, MSTP009, MSTP008, /* SSI */ | ||||
| 	MSTP007, /* HSPI */ | ||||
| 	MSTP115, /* ADMAC */ | ||||
| 	MSTP114, /* GETHER */ | ||||
| 	MSTP111, /* DMAC */ | ||||
| 	MSTP109, /* VIDEOIN1 */ | ||||
| 	MSTP108, /* VIDEOIN0 */ | ||||
| 	MSTP107, /* RGPVBG */ | ||||
| 	MSTP106, /* 2DG */ | ||||
| 	MSTP103, /* VIEW */ | ||||
| 	MSTP100, /* USB */ | ||||
| 	MSTP331, /* MMC */ | ||||
| 	MSTP330, /* MIMLB */ | ||||
| 	MSTP323, /* SDHI0 */ | ||||
| 	MSTP322, /* SDHI1 */ | ||||
| 	MSTP321, /* SDHI2 */ | ||||
| 	MSTP320, /* RQSPI */ | ||||
| 	MSTP319, /* SRC0 */ | ||||
| 	MSTP318, /* SRC1 */ | ||||
| 	MSTP317, /* RSPI */ | ||||
| 	MSTP316, /* RCAN0 */ | ||||
| 	MSTP315, /* RCAN1 */ | ||||
| 	MSTP314, /* FLTCL */ | ||||
| 	MSTP313, /* ADC */ | ||||
| 	MSTP312, /* MTU */ | ||||
| 	MSTP304, /* IE-BUS */ | ||||
| 	MSTP303, /* RTC */ | ||||
| 	MSTP302, /* HIF */ | ||||
| 	MSTP301, /* STIF0 */ | ||||
| 	MSTP300, /* STIF1 */ | ||||
| 	MSTP_NR }; | ||||
| 
 | ||||
| static struct clk mstp_clks[MSTP_NR] = { | ||||
| 	/* MSTPCR0 */ | ||||
| 	[MSTP030] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 30, 0), | ||||
| 	[MSTP029] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 29, 0), | ||||
| 	[MSTP026] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 26, 0), | ||||
| 	[MSTP025] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 25, 0), | ||||
| 	[MSTP024] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 24, 0), | ||||
| 	[MSTP023] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 23, 0), | ||||
| 	[MSTP022] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 22, 0), | ||||
| 	[MSTP021] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 21, 0), | ||||
| 	[MSTP019] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 19, 0), | ||||
| 	[MSTP016] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 16, 0), | ||||
| 	[MSTP015] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 15, 0), | ||||
| 	[MSTP014] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 14, 0), | ||||
| 	[MSTP012] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 12, 0), | ||||
| 	[MSTP011] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 11, 0), | ||||
| 	[MSTP010] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 10, 0), | ||||
| 	[MSTP009] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 9, 0), | ||||
| 	[MSTP008] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 8, 0), | ||||
| 	[MSTP007] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 7, 0), | ||||
| 
 | ||||
| 	/* MSTPCR1 */ | ||||
| 	[MSTP115] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 15, 0), | ||||
| 	[MSTP114] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 14, 0), | ||||
| 	[MSTP111] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 11, 0), | ||||
| 	[MSTP109] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 9, 0), | ||||
| 	[MSTP108] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 8, 0), | ||||
| 	[MSTP107] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 7, 0), | ||||
| 	[MSTP106] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 6, 0), | ||||
| 	[MSTP103] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 3, 0), | ||||
| 	[MSTP100] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 0, 0), | ||||
| 
 | ||||
| 	/* MSTPCR3 */ | ||||
| 	[MSTP331] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 31, 0), | ||||
| 	[MSTP330] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 30, 0), | ||||
| 	[MSTP323] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 23, 0), | ||||
| 	[MSTP322] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 22, 0), | ||||
| 	[MSTP321] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 21, 0), | ||||
| 	[MSTP320] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 20, 0), | ||||
| 	[MSTP319] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 19, 0), | ||||
| 	[MSTP318] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 18, 0), | ||||
| 	[MSTP317] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 17, 0), | ||||
| 	[MSTP316] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 16, 0), | ||||
| 	[MSTP315] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 15, 0), | ||||
| 	[MSTP314] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 14, 0), | ||||
| 	[MSTP313] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 13, 0), | ||||
| 	[MSTP312] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 12, 0), | ||||
| 	[MSTP304] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3,  4, 0), | ||||
| 	[MSTP303] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3,  3, 0), | ||||
| 	[MSTP302] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3,  2, 0), | ||||
| 	[MSTP301] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3,  1, 0), | ||||
| 	[MSTP300] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3,  0, 0), | ||||
| }; | ||||
| 
 | ||||
| static struct clk_lookup lookups[] = { | ||||
| 	/* main clocks */ | ||||
| 	CLKDEV_CON_ID("extal", &extal_clk), | ||||
| 	CLKDEV_CON_ID("pll_clk", &pll_clk), | ||||
| 
 | ||||
| 	/* clocks */ | ||||
| 	CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]), | ||||
| 	CLKDEV_CON_ID("shyway_clk", &div4_clks[DIV4_S]), | ||||
| 	CLKDEV_CON_ID("ddr_clk", &div4_clks[DIV4_M]), | ||||
| 	CLKDEV_CON_ID("bus_clk", &div4_clks[DIV4_B]), | ||||
| 	CLKDEV_CON_ID("shyway_clk1", &div4_clks[DIV4_S1]), | ||||
| 	CLKDEV_CON_ID("peripheral_clk", &div4_clks[DIV4_P]), | ||||
| 
 | ||||
| 	/* MSTP32 clocks */ | ||||
| 	CLKDEV_DEV_ID("i2c-sh7734.0", &mstp_clks[MSTP030]), | ||||
| 	CLKDEV_DEV_ID("i2c-sh7734.1", &mstp_clks[MSTP029]), | ||||
| 	CLKDEV_ICK_ID("sci_fck", "sh-sci.0", &mstp_clks[MSTP026]), | ||||
| 	CLKDEV_ICK_ID("sci_fck", "sh-sci.1", &mstp_clks[MSTP025]), | ||||
| 	CLKDEV_ICK_ID("sci_fck", "sh-sci.2", &mstp_clks[MSTP024]), | ||||
| 	CLKDEV_ICK_ID("sci_fck", "sh-sci.3", &mstp_clks[MSTP023]), | ||||
| 	CLKDEV_ICK_ID("sci_fck", "sh-sci.4", &mstp_clks[MSTP022]), | ||||
| 	CLKDEV_ICK_ID("sci_fck", "sh-sci.5", &mstp_clks[MSTP021]), | ||||
| 	CLKDEV_CON_ID("hscif", &mstp_clks[MSTP019]), | ||||
| 	CLKDEV_ICK_ID("tmu_fck", "sh_tmu.0", &mstp_clks[MSTP016]), | ||||
| 	CLKDEV_ICK_ID("tmu_fck", "sh_tmu.1", &mstp_clks[MSTP016]), | ||||
| 	CLKDEV_ICK_ID("tmu_fck", "sh_tmu.2", &mstp_clks[MSTP016]), | ||||
| 	CLKDEV_ICK_ID("tmu_fck", "sh_tmu.3", &mstp_clks[MSTP015]), | ||||
| 	CLKDEV_ICK_ID("tmu_fck", "sh_tmu.4", &mstp_clks[MSTP015]), | ||||
| 	CLKDEV_ICK_ID("tmu_fck", "sh_tmu.5", &mstp_clks[MSTP015]), | ||||
| 	CLKDEV_ICK_ID("tmu_fck", "sh_tmu.6", &mstp_clks[MSTP014]), | ||||
| 	CLKDEV_ICK_ID("tmu_fck", "sh_tmu.7", &mstp_clks[MSTP014]), | ||||
| 	CLKDEV_ICK_ID("tmu_fck", "sh_tmu.8", &mstp_clks[MSTP014]), | ||||
| 	CLKDEV_CON_ID("ssi0", &mstp_clks[MSTP012]), | ||||
| 	CLKDEV_CON_ID("ssi1", &mstp_clks[MSTP011]), | ||||
| 	CLKDEV_CON_ID("ssi2", &mstp_clks[MSTP010]), | ||||
| 	CLKDEV_CON_ID("ssi3", &mstp_clks[MSTP009]), | ||||
| 	CLKDEV_CON_ID("sss", &mstp_clks[MSTP008]), | ||||
| 	CLKDEV_CON_ID("hspi", &mstp_clks[MSTP007]), | ||||
| 	CLKDEV_CON_ID("usb_fck", &mstp_clks[MSTP100]), | ||||
| 	CLKDEV_CON_ID("videoin0", &mstp_clks[MSTP109]), | ||||
| 	CLKDEV_CON_ID("videoin1", &mstp_clks[MSTP108]), | ||||
| 	CLKDEV_CON_ID("rgpvg", &mstp_clks[MSTP107]), | ||||
| 	CLKDEV_CON_ID("2dg", &mstp_clks[MSTP106]), | ||||
| 	CLKDEV_CON_ID("view", &mstp_clks[MSTP103]), | ||||
| 
 | ||||
| 	CLKDEV_CON_ID("mmc0", &mstp_clks[MSTP331]), | ||||
| 	CLKDEV_CON_ID("mimlb0", &mstp_clks[MSTP330]), | ||||
| 	CLKDEV_CON_ID("sdhi0", &mstp_clks[MSTP323]), | ||||
| 	CLKDEV_CON_ID("sdhi1", &mstp_clks[MSTP322]), | ||||
| 	CLKDEV_CON_ID("sdhi2", &mstp_clks[MSTP321]), | ||||
| 	CLKDEV_CON_ID("rqspi0", &mstp_clks[MSTP320]), | ||||
| 	CLKDEV_CON_ID("src0", &mstp_clks[MSTP319]), | ||||
| 	CLKDEV_CON_ID("src1", &mstp_clks[MSTP318]), | ||||
| 	CLKDEV_CON_ID("rsp0", &mstp_clks[MSTP317]), | ||||
| 	CLKDEV_CON_ID("rcan0", &mstp_clks[MSTP316]), | ||||
| 	CLKDEV_CON_ID("rcan1", &mstp_clks[MSTP315]), | ||||
| 	CLKDEV_CON_ID("fltcl0", &mstp_clks[MSTP314]), | ||||
| 	CLKDEV_CON_ID("adc0", &mstp_clks[MSTP313]), | ||||
| 	CLKDEV_CON_ID("mtu0", &mstp_clks[MSTP312]), | ||||
| 	CLKDEV_CON_ID("iebus0", &mstp_clks[MSTP304]), | ||||
| 	CLKDEV_DEV_ID("sh-eth.0", &mstp_clks[MSTP114]), | ||||
| 	CLKDEV_CON_ID("rtc0", &mstp_clks[MSTP303]), | ||||
| 	CLKDEV_CON_ID("hif0", &mstp_clks[MSTP302]), | ||||
| 	CLKDEV_CON_ID("stif0", &mstp_clks[MSTP301]), | ||||
| 	CLKDEV_CON_ID("stif1", &mstp_clks[MSTP300]), | ||||
| }; | ||||
| 
 | ||||
| int __init arch_clk_init(void) | ||||
| { | ||||
| 	int i, ret = 0; | ||||
| 
 | ||||
| 	for (i = 0; i < ARRAY_SIZE(main_clks); i++) | ||||
| 		ret |= clk_register(main_clks[i]); | ||||
| 
 | ||||
| 	for (i = 0; i < ARRAY_SIZE(lookups); i++) | ||||
| 		clkdev_add(&lookups[i]); | ||||
| 
 | ||||
| 	if (!ret) | ||||
| 		ret = sh_clk_div4_register(div4_clks, ARRAY_SIZE(div4_clks), | ||||
| 			&div4_table); | ||||
| 
 | ||||
| 	if (!ret) | ||||
| 		ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR); | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
							
								
								
									
										800
									
								
								arch/sh/kernel/cpu/sh4a/setup-sh7734.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										800
									
								
								arch/sh/kernel/cpu/sh4a/setup-sh7734.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,800 @@ | ||||
| /*
 | ||||
|  * arch/sh/kernel/cpu/sh4a/setup-sh7734.c | ||||
| 
 | ||||
|  * SH7734 Setup | ||||
|  * | ||||
|  * Copyright (C) 2011,2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> | ||||
|  * Copyright (C) 2011,2012 Renesas Solutions Corp. | ||||
|  * | ||||
|  * This file is subject to the terms and conditions of the GNU General Public | ||||
|  * License.  See the file "COPYING" in the main directory of this archive | ||||
|  * for more details. | ||||
|  */ | ||||
| 
 | ||||
| #include <linux/platform_device.h> | ||||
| #include <linux/init.h> | ||||
| #include <linux/serial.h> | ||||
| #include <linux/mm.h> | ||||
| #include <linux/dma-mapping.h> | ||||
| #include <linux/serial_sci.h> | ||||
| #include <linux/sh_timer.h> | ||||
| #include <linux/io.h> | ||||
| #include <asm/clock.h> | ||||
| #include <asm/irq.h> | ||||
| #include <cpu/sh7734.h> | ||||
| 
 | ||||
| /* SCIF */ | ||||
| static struct plat_sci_port scif0_platform_data = { | ||||
| 	.mapbase        = 0xFFE40000, | ||||
| 	.flags          = UPF_BOOT_AUTOCONF, | ||||
| 	.scscr          = SCSCR_RE | SCSCR_TE | SCSCR_REIE, | ||||
| 	.scbrr_algo_id  = SCBRR_ALGO_2, | ||||
| 	.type           = PORT_SCIF, | ||||
| 	.irqs           = SCIx_IRQ_MUXED(evt2irq(0x8C0)), | ||||
| 	.regtype        = SCIx_SH4_SCIF_REGTYPE, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device scif0_device = { | ||||
| 	.name		= "sh-sci", | ||||
| 	.id			= 0, | ||||
| 	.dev		= { | ||||
| 		.platform_data	= &scif0_platform_data, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct plat_sci_port scif1_platform_data = { | ||||
| 	.mapbase        = 0xFFE41000, | ||||
| 	.flags          = UPF_BOOT_AUTOCONF, | ||||
| 	.scscr          = SCSCR_RE | SCSCR_TE | SCSCR_REIE, | ||||
| 	.scbrr_algo_id	= SCBRR_ALGO_2, | ||||
| 	.type           = PORT_SCIF, | ||||
| 	.irqs           = SCIx_IRQ_MUXED(evt2irq(0x8E0)), | ||||
| 	.regtype        = SCIx_SH4_SCIF_REGTYPE, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device scif1_device = { | ||||
| 	.name		= "sh-sci", | ||||
| 	.id         = 1, | ||||
| 	.dev		= { | ||||
| 		.platform_data = &scif1_platform_data, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct plat_sci_port scif2_platform_data = { | ||||
| 	.mapbase        = 0xFFE42000, | ||||
| 	.flags          = UPF_BOOT_AUTOCONF, | ||||
| 	.scscr          = SCSCR_RE | SCSCR_TE | SCSCR_REIE, | ||||
| 	.scbrr_algo_id  = SCBRR_ALGO_2, | ||||
| 	.type           = PORT_SCIF, | ||||
| 	.irqs           = SCIx_IRQ_MUXED(evt2irq(0x900)), | ||||
| 	.regtype        = SCIx_SH4_SCIF_REGTYPE, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device scif2_device = { | ||||
| 	.name		= "sh-sci", | ||||
| 	.id         = 2, | ||||
| 	.dev		= { | ||||
| 		.platform_data = &scif2_platform_data, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct plat_sci_port scif3_platform_data = { | ||||
| 	.mapbase        = 0xFFE43000, | ||||
| 	.flags          = UPF_BOOT_AUTOCONF, | ||||
| 	.scscr          = SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_TOIE, | ||||
| 	.scbrr_algo_id  = SCBRR_ALGO_2, | ||||
| 	.type           = PORT_SCIF, | ||||
| 	.irqs           = SCIx_IRQ_MUXED(evt2irq(0x920)), | ||||
| 	.regtype        = SCIx_SH4_SCIF_REGTYPE, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device scif3_device = { | ||||
| 	.name		= "sh-sci", | ||||
| 	.id	        = 3, | ||||
| 	.dev		= { | ||||
| 		.platform_data	= &scif3_platform_data, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct plat_sci_port scif4_platform_data = { | ||||
| 	.mapbase        = 0xFFE44000, | ||||
| 	.flags          = UPF_BOOT_AUTOCONF, | ||||
| 	.scscr          = SCSCR_RE | SCSCR_TE | SCSCR_REIE, | ||||
| 	.scbrr_algo_id	= SCBRR_ALGO_2, | ||||
| 	.type           = PORT_SCIF, | ||||
| 	.irqs           = SCIx_IRQ_MUXED(evt2irq(0x940)), | ||||
| 	.regtype        = SCIx_SH4_SCIF_REGTYPE, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device scif4_device = { | ||||
| 	.name		= "sh-sci", | ||||
| 	.id	        = 4, | ||||
| 	.dev		= { | ||||
| 		.platform_data	= &scif4_platform_data, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct plat_sci_port scif5_platform_data = { | ||||
| 	.mapbase        = 0xFFE43000, | ||||
| 	.flags          = UPF_BOOT_AUTOCONF, | ||||
| 	.scscr          = SCSCR_RE | SCSCR_TE | SCSCR_REIE, | ||||
| 	.scbrr_algo_id	= SCBRR_ALGO_2, | ||||
| 	.type           = PORT_SCIF, | ||||
| 	.irqs           = SCIx_IRQ_MUXED(evt2irq(0x960)), | ||||
| 	.regtype		= SCIx_SH4_SCIF_REGTYPE, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device scif5_device = { | ||||
| 	.name		= "sh-sci", | ||||
| 	.id	        = 5, | ||||
| 	.dev		= { | ||||
| 		.platform_data	= &scif5_platform_data, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| /* RTC */ | ||||
| static struct resource rtc_resources[] = { | ||||
| 	[0] = { | ||||
| 		.name	= "rtc", | ||||
| 		.start	= 0xFFFC5000, | ||||
| 		.end	= 0xFFFC5000 + 0x26 - 1, | ||||
| 		.flags	= IORESOURCE_IO, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= evt2irq(0xC00), | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device rtc_device = { | ||||
| 	.name		= "sh-rtc", | ||||
| 	.id		= -1, | ||||
| 	.num_resources	= ARRAY_SIZE(rtc_resources), | ||||
| 	.resource	= rtc_resources, | ||||
| }; | ||||
| 
 | ||||
| /* I2C 0 */ | ||||
| static struct resource i2c0_resources[] = { | ||||
| 	[0] = { | ||||
| 		.name	= "IIC0", | ||||
| 		.start  = 0xFFC70000, | ||||
| 		.end    = 0xFFC7000A - 1, | ||||
| 		.flags  = IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start  = evt2irq(0x860), | ||||
| 		.flags  = IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device i2c0_device = { | ||||
| 	.name           = "i2c-sh7734", | ||||
| 	.id             = 0, | ||||
| 	.num_resources  = ARRAY_SIZE(i2c0_resources), | ||||
| 	.resource       = i2c0_resources, | ||||
| }; | ||||
| 
 | ||||
| /* TMU */ | ||||
| static struct sh_timer_config tmu0_platform_data = { | ||||
| 	.channel_offset = 0x04, | ||||
| 	.timer_bit = 0, | ||||
| 	.clockevent_rating = 200, | ||||
| }; | ||||
| 
 | ||||
| static struct resource tmu0_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= 0xFFD80008, | ||||
| 		.end	= 0xFFD80014 - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= evt2irq(0x400), | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device tmu0_device = { | ||||
| 	.name	= "sh_tmu", | ||||
| 	.id		= 0, | ||||
| 	.dev = { | ||||
| 		.platform_data	= &tmu0_platform_data, | ||||
| 	}, | ||||
| 	.resource	= tmu0_resources, | ||||
| 	.num_resources	= ARRAY_SIZE(tmu0_resources), | ||||
| }; | ||||
| 
 | ||||
| static struct sh_timer_config tmu1_platform_data = { | ||||
| 	.channel_offset = 0x10, | ||||
| 	.timer_bit = 1, | ||||
| 	.clocksource_rating = 200, | ||||
| }; | ||||
| 
 | ||||
| static struct resource tmu1_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= 0xFFD80014, | ||||
| 		.end	= 0xFFD80020 - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= evt2irq(0x420), | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device tmu1_device = { | ||||
| 	.name		= "sh_tmu", | ||||
| 	.id			= 1, | ||||
| 	.dev = { | ||||
| 		.platform_data	= &tmu1_platform_data, | ||||
| 	}, | ||||
| 	.resource	= tmu1_resources, | ||||
| 	.num_resources	= ARRAY_SIZE(tmu1_resources), | ||||
| }; | ||||
| 
 | ||||
| static struct sh_timer_config tmu2_platform_data = { | ||||
| 	.channel_offset = 0x1c, | ||||
| 	.timer_bit = 2, | ||||
| }; | ||||
| 
 | ||||
| static struct resource tmu2_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= 0xFFD80020, | ||||
| 		.end	= 0xFFD80030 - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= evt2irq(0x440), | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device tmu2_device = { | ||||
| 	.name		= "sh_tmu", | ||||
| 	.id			= 2, | ||||
| 	.dev = { | ||||
| 		.platform_data	= &tmu2_platform_data, | ||||
| 	}, | ||||
| 	.resource	= tmu2_resources, | ||||
| 	.num_resources	= ARRAY_SIZE(tmu2_resources), | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| static struct sh_timer_config tmu3_platform_data = { | ||||
| 	.channel_offset = 0x04, | ||||
| 	.timer_bit = 0, | ||||
| }; | ||||
| 
 | ||||
| static struct resource tmu3_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= 0xFFD81008, | ||||
| 		.end	= 0xFFD81014 - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= evt2irq(0x480), | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device tmu3_device = { | ||||
| 	.name		= "sh_tmu", | ||||
| 	.id			= 3, | ||||
| 	.dev = { | ||||
| 		.platform_data	= &tmu3_platform_data, | ||||
| 	}, | ||||
| 	.resource	= tmu3_resources, | ||||
| 	.num_resources	= ARRAY_SIZE(tmu3_resources), | ||||
| }; | ||||
| 
 | ||||
| static struct sh_timer_config tmu4_platform_data = { | ||||
| 	.channel_offset = 0x10, | ||||
| 	.timer_bit = 1, | ||||
| }; | ||||
| 
 | ||||
| static struct resource tmu4_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= 0xFFD81014, | ||||
| 		.end	= 0xFFD81020 - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= evt2irq(0x4A0), | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device tmu4_device = { | ||||
| 	.name		= "sh_tmu", | ||||
| 	.id			= 4, | ||||
| 	.dev = { | ||||
| 		.platform_data	= &tmu4_platform_data, | ||||
| 	}, | ||||
| 	.resource	= tmu4_resources, | ||||
| 	.num_resources	= ARRAY_SIZE(tmu4_resources), | ||||
| }; | ||||
| 
 | ||||
| static struct sh_timer_config tmu5_platform_data = { | ||||
| 	.channel_offset = 0x1c, | ||||
| 	.timer_bit = 2, | ||||
| }; | ||||
| 
 | ||||
| static struct resource tmu5_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= 0xFFD81020, | ||||
| 		.end	= 0xFFD81030 - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= evt2irq(0x4C0), | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device tmu5_device = { | ||||
| 	.name		= "sh_tmu", | ||||
| 	.id			= 5, | ||||
| 	.dev = { | ||||
| 		.platform_data	= &tmu5_platform_data, | ||||
| 	}, | ||||
| 	.resource	= tmu5_resources, | ||||
| 	.num_resources	= ARRAY_SIZE(tmu5_resources), | ||||
| }; | ||||
| 
 | ||||
| static struct sh_timer_config tmu6_platform_data = { | ||||
| 	.channel_offset = 0x4, | ||||
| 	.timer_bit = 0, | ||||
| }; | ||||
| 
 | ||||
| static struct resource tmu6_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= 0xFFD82008, | ||||
| 		.end	= 0xFFD82014 - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= evt2irq(0x500), | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device tmu6_device = { | ||||
| 	.name		= "sh_tmu", | ||||
| 	.id			= 6, | ||||
| 	.dev = { | ||||
| 		.platform_data	= &tmu6_platform_data, | ||||
| 	}, | ||||
| 	.resource	= tmu6_resources, | ||||
| 	.num_resources	= ARRAY_SIZE(tmu6_resources), | ||||
| }; | ||||
| 
 | ||||
| static struct sh_timer_config tmu7_platform_data = { | ||||
| 	.channel_offset = 0x10, | ||||
| 	.timer_bit = 1, | ||||
| }; | ||||
| 
 | ||||
| static struct resource tmu7_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= 0xFFD82014, | ||||
| 		.end	= 0xFFD82020 - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= evt2irq(0x520), | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device tmu7_device = { | ||||
| 	.name		= "sh_tmu", | ||||
| 	.id			= 7, | ||||
| 	.dev = { | ||||
| 		.platform_data	= &tmu7_platform_data, | ||||
| 	}, | ||||
| 	.resource	= tmu7_resources, | ||||
| 	.num_resources	= ARRAY_SIZE(tmu7_resources), | ||||
| }; | ||||
| 
 | ||||
| static struct sh_timer_config tmu8_platform_data = { | ||||
| 	.channel_offset = 0x1c, | ||||
| 	.timer_bit = 2, | ||||
| }; | ||||
| 
 | ||||
| static struct resource tmu8_resources[] = { | ||||
| 	[0] = { | ||||
| 		.start	= 0xFFD82020, | ||||
| 		.end	= 0xFFD82030 - 1, | ||||
| 		.flags	= IORESOURCE_MEM, | ||||
| 	}, | ||||
| 	[1] = { | ||||
| 		.start	= evt2irq(0x540), | ||||
| 		.flags	= IORESOURCE_IRQ, | ||||
| 	}, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device tmu8_device = { | ||||
| 	.name		= "sh_tmu", | ||||
| 	.id			= 8, | ||||
| 	.dev = { | ||||
| 		.platform_data	= &tmu8_platform_data, | ||||
| 	}, | ||||
| 	.resource	= tmu8_resources, | ||||
| 	.num_resources	= ARRAY_SIZE(tmu8_resources), | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device *sh7734_devices[] __initdata = { | ||||
| 	&scif0_device, | ||||
| 	&scif1_device, | ||||
| 	&scif2_device, | ||||
| 	&scif3_device, | ||||
| 	&scif4_device, | ||||
| 	&scif5_device, | ||||
| 	&tmu0_device, | ||||
| 	&tmu1_device, | ||||
| 	&tmu2_device, | ||||
| 	&tmu3_device, | ||||
| 	&tmu4_device, | ||||
| 	&tmu5_device, | ||||
| 	&tmu6_device, | ||||
| 	&tmu7_device, | ||||
| 	&tmu8_device, | ||||
| 	&rtc_device, | ||||
| }; | ||||
| 
 | ||||
| static struct platform_device *sh7734_early_devices[] __initdata = { | ||||
| 	&scif0_device, | ||||
| 	&scif1_device, | ||||
| 	&scif2_device, | ||||
| 	&scif3_device, | ||||
| 	&scif4_device, | ||||
| 	&scif5_device, | ||||
| 	&tmu0_device, | ||||
| 	&tmu1_device, | ||||
| 	&tmu2_device, | ||||
| 	&tmu3_device, | ||||
| 	&tmu4_device, | ||||
| 	&tmu5_device, | ||||
| 	&tmu6_device, | ||||
| 	&tmu7_device, | ||||
| 	&tmu8_device, | ||||
| }; | ||||
| 
 | ||||
| void __init plat_early_device_setup(void) | ||||
| { | ||||
| 	early_platform_add_devices(sh7734_early_devices, | ||||
| 		ARRAY_SIZE(sh7734_early_devices)); | ||||
| } | ||||
| 
 | ||||
| #define GROUP 0 | ||||
| enum { | ||||
| 	UNUSED = 0, | ||||
| 
 | ||||
| 	/* interrupt sources */ | ||||
| 
 | ||||
| 	IRL0_LLLL, IRL0_LLLH, IRL0_LLHL, IRL0_LLHH, | ||||
| 	IRL0_LHLL, IRL0_LHLH, IRL0_LHHL, IRL0_LHHH, | ||||
| 	IRL0_HLLL, IRL0_HLLH, IRL0_HLHL, IRL0_HLHH, | ||||
| 	IRL0_HHLL, IRL0_HHLH, IRL0_HHHL, | ||||
| 
 | ||||
| 	IRQ0, IRQ1, IRQ2, IRQ3, | ||||
| 	DU, | ||||
| 	TMU00, TMU10, TMU20, TMU21, | ||||
| 	TMU30, TMU40, TMU50, TMU51, | ||||
| 	TMU60, TMU70, TMU80, | ||||
| 	RESET_WDT, | ||||
| 	USB, | ||||
| 	HUDI, | ||||
| 	SHDMAC, | ||||
| 	SSI0, SSI1,	SSI2, SSI3, | ||||
| 	VIN0, | ||||
| 	RGPVG, | ||||
| 	_2DG, | ||||
| 	MMC, | ||||
| 	HSPI, | ||||
| 	LBSCATA, | ||||
| 	I2C0, | ||||
| 	RCAN0, | ||||
| 	MIMLB, | ||||
| 	SCIF0, SCIF1, SCIF2, SCIF3, SCIF4, SCIF5, | ||||
| 	LBSCDMAC0, LBSCDMAC1, LBSCDMAC2, | ||||
| 	RCAN1, | ||||
| 	SDHI0, SDHI1, | ||||
| 	IEBUS, | ||||
| 	HPBDMAC0_3, HPBDMAC4_10, HPBDMAC11_18, HPBDMAC19_22, HPBDMAC23_25_27_28, | ||||
| 	RTC, | ||||
| 	VIN1, | ||||
| 	LCDC, | ||||
| 	SRC0, SRC1, | ||||
| 	GETHER, | ||||
| 	SDHI2, | ||||
| 	GPIO0_3, GPIO4_5, | ||||
| 	STIF0, STIF1, | ||||
| 	ADMAC, | ||||
| 	HIF, | ||||
| 	FLCTL, | ||||
| 	ADC, | ||||
| 	MTU2, | ||||
| 	RSPI, | ||||
| 	QSPI, | ||||
| 	HSCIF, | ||||
| 	VEU3F_VE3, | ||||
| 
 | ||||
| 	/* Group */ | ||||
| 	/* Mask */ | ||||
| 	STIF_M, | ||||
| 	GPIO_M, | ||||
| 	HPBDMAC_M, | ||||
| 	LBSCDMAC_M, | ||||
| 	RCAN_M, | ||||
| 	SRC_M, | ||||
| 	SCIF_M, | ||||
| 	LCDC_M, | ||||
| 	_2DG_M, | ||||
| 	VIN_M, | ||||
| 	TMU_3_M, | ||||
| 	TMU_0_M, | ||||
| 
 | ||||
| 	/* Priority */ | ||||
| 	RCAN_P, | ||||
| 	LBSCDMAC_P, | ||||
| 
 | ||||
| 	/* Common */ | ||||
| 	SDHI, | ||||
| 	SSI, | ||||
| 	SPI, | ||||
| }; | ||||
| 
 | ||||
| static struct intc_vect vectors[] __initdata = { | ||||
| 	INTC_VECT(DU, 0x3E0), | ||||
| 	INTC_VECT(TMU00, 0x400), | ||||
| 	INTC_VECT(TMU10, 0x420), | ||||
| 	INTC_VECT(TMU20, 0x440), | ||||
| 	INTC_VECT(TMU30, 0x480), | ||||
| 	INTC_VECT(TMU40, 0x4A0), | ||||
| 	INTC_VECT(TMU50, 0x4C0), | ||||
| 	INTC_VECT(TMU51, 0x4E0), | ||||
| 	INTC_VECT(TMU60, 0x500), | ||||
| 	INTC_VECT(TMU70, 0x520), | ||||
| 	INTC_VECT(TMU80, 0x540), | ||||
| 	INTC_VECT(RESET_WDT, 0x560), | ||||
| 	INTC_VECT(USB, 0x580), | ||||
| 	INTC_VECT(HUDI, 0x600), | ||||
| 	INTC_VECT(SHDMAC, 0x620), | ||||
| 	INTC_VECT(SSI0, 0x6C0), | ||||
| 	INTC_VECT(SSI1, 0x6E0), | ||||
| 	INTC_VECT(SSI2, 0x700), | ||||
| 	INTC_VECT(SSI3, 0x720), | ||||
| 	INTC_VECT(VIN0, 0x740), | ||||
| 	INTC_VECT(RGPVG, 0x760), | ||||
| 	INTC_VECT(_2DG, 0x780), | ||||
| 	INTC_VECT(MMC, 0x7A0), | ||||
| 	INTC_VECT(HSPI, 0x7E0), | ||||
| 	INTC_VECT(LBSCATA, 0x840), | ||||
| 	INTC_VECT(I2C0, 0x860), | ||||
| 	INTC_VECT(RCAN0, 0x880), | ||||
| 	INTC_VECT(SCIF0, 0x8A0), | ||||
| 	INTC_VECT(SCIF1, 0x8C0), | ||||
| 	INTC_VECT(SCIF2, 0x900), | ||||
| 	INTC_VECT(SCIF3, 0x920), | ||||
| 	INTC_VECT(SCIF4, 0x940), | ||||
| 	INTC_VECT(SCIF5, 0x960), | ||||
| 	INTC_VECT(LBSCDMAC0, 0x9E0), | ||||
| 	INTC_VECT(LBSCDMAC1, 0xA00), | ||||
| 	INTC_VECT(LBSCDMAC2, 0xA20), | ||||
| 	INTC_VECT(RCAN1, 0xA60), | ||||
| 	INTC_VECT(SDHI0, 0xAE0), | ||||
| 	INTC_VECT(SDHI1, 0xB00), | ||||
| 	INTC_VECT(IEBUS, 0xB20), | ||||
| 	INTC_VECT(HPBDMAC0_3, 0xB60), | ||||
| 	INTC_VECT(HPBDMAC4_10, 0xB80), | ||||
| 	INTC_VECT(HPBDMAC11_18, 0xBA0), | ||||
| 	INTC_VECT(HPBDMAC19_22, 0xBC0), | ||||
| 	INTC_VECT(HPBDMAC23_25_27_28, 0xBE0), | ||||
| 	INTC_VECT(RTC, 0xC00), | ||||
| 	INTC_VECT(VIN1, 0xC20), | ||||
| 	INTC_VECT(LCDC, 0xC40), | ||||
| 	INTC_VECT(SRC0, 0xC60), | ||||
| 	INTC_VECT(SRC1, 0xC80), | ||||
| 	INTC_VECT(GETHER, 0xCA0), | ||||
| 	INTC_VECT(SDHI2, 0xCC0), | ||||
| 	INTC_VECT(GPIO0_3, 0xCE0), | ||||
| 	INTC_VECT(GPIO4_5, 0xD00), | ||||
| 	INTC_VECT(STIF0, 0xD20), | ||||
| 	INTC_VECT(STIF1, 0xD40), | ||||
| 	INTC_VECT(ADMAC, 0xDA0), | ||||
| 	INTC_VECT(HIF, 0xDC0), | ||||
| 	INTC_VECT(FLCTL, 0xDE0), | ||||
| 	INTC_VECT(ADC, 0xE00), | ||||
| 	INTC_VECT(MTU2, 0xE20), | ||||
| 	INTC_VECT(RSPI, 0xE40), | ||||
| 	INTC_VECT(QSPI, 0xE60), | ||||
| 	INTC_VECT(HSCIF, 0xFC0), | ||||
| 	INTC_VECT(VEU3F_VE3, 0xF40), | ||||
| }; | ||||
| 
 | ||||
| static struct intc_group groups[] __initdata = { | ||||
| 	/* Common */ | ||||
| 	INTC_GROUP(SDHI, SDHI0, SDHI1, SDHI2), | ||||
| 	INTC_GROUP(SPI, HSPI, RSPI, QSPI), | ||||
| 	INTC_GROUP(SSI, SSI0, SSI1, SSI2, SSI3), | ||||
| 
 | ||||
| 	/* Mask group */ | ||||
| 	INTC_GROUP(STIF_M, STIF0, STIF1), /* 22 */ | ||||
| 	INTC_GROUP(GPIO_M, GPIO0_3, GPIO4_5), /* 21 */ | ||||
| 	INTC_GROUP(HPBDMAC_M, HPBDMAC0_3, HPBDMAC4_10, HPBDMAC11_18, | ||||
| 			HPBDMAC19_22, HPBDMAC23_25_27_28), /* 19 */ | ||||
| 	INTC_GROUP(LBSCDMAC_M, LBSCDMAC0, LBSCDMAC1, LBSCDMAC2), /* 18 */ | ||||
| 	INTC_GROUP(RCAN_M, RCAN0, RCAN1, IEBUS), /* 17 */ | ||||
| 	INTC_GROUP(SRC_M, SRC0, SRC1), /* 16 */ | ||||
| 	INTC_GROUP(SCIF_M, SCIF0, SCIF1, SCIF2, SCIF3, SCIF4, SCIF5, | ||||
| 			HSCIF), /* 14 */ | ||||
| 	INTC_GROUP(LCDC_M, LCDC, MIMLB), /* 13 */ | ||||
| 	INTC_GROUP(_2DG_M, _2DG, RGPVG), /* 12 */ | ||||
| 	INTC_GROUP(VIN_M, VIN0, VIN1), /* 10 */ | ||||
| 	INTC_GROUP(TMU_3_M, TMU30, TMU40, TMU50, TMU51, | ||||
| 			TMU60, TMU60, TMU70, TMU80), /* 2 */ | ||||
| 	INTC_GROUP(TMU_0_M, TMU00, TMU10, TMU20, TMU21), /* 1 */ | ||||
| 
 | ||||
| 	/* Priority group*/ | ||||
| 	INTC_GROUP(RCAN_P, RCAN0, RCAN1), /* INT2PRI5 */ | ||||
| 	INTC_GROUP(LBSCDMAC_P, LBSCDMAC0, LBSCDMAC1), /* INT2PRI5 */ | ||||
| }; | ||||
| 
 | ||||
| static struct intc_mask_reg mask_registers[] __initdata = { | ||||
| 	{ 0xFF804040, 0xFF804044, 32, /* INT2MSKRG / INT2MSKCR */ | ||||
| 	  { 0, | ||||
| 		VEU3F_VE3, | ||||
| 		SDHI, /* SDHI 0-2 */ | ||||
| 		ADMAC, | ||||
| 		FLCTL, | ||||
| 		RESET_WDT, | ||||
| 		HIF, | ||||
| 		ADC, | ||||
| 		MTU2, | ||||
| 		STIF_M, /* STIF 0,1 */ | ||||
| 		GPIO_M, /* GPIO 0-5*/ | ||||
| 		GETHER, | ||||
| 		HPBDMAC_M, /* HPBDMAC 0_3 - 23_25_27_28 */ | ||||
| 		LBSCDMAC_M, /* LBSCDMAC 0 - 2 */ | ||||
| 		RCAN_M, /* RCAN, IEBUS */ | ||||
| 		SRC_M,	/* SRC 0,1 */ | ||||
| 		LBSCATA, | ||||
| 		SCIF_M, /* SCIF 0-5, HSCIF */ | ||||
| 		LCDC_M, /* LCDC, MIMLB */ | ||||
| 		_2DG_M,	/* 2DG, RGPVG */ | ||||
| 		SPI, /* HSPI, RSPI, QSPI */ | ||||
| 		VIN_M,	/* VIN0, 1 */ | ||||
| 		SSI,	/* SSI 0-3 */ | ||||
| 		USB, | ||||
| 		SHDMAC, | ||||
| 		HUDI, | ||||
| 		MMC, | ||||
| 		RTC, | ||||
| 		I2C0, /* I2C */ /* I2C 0, 1*/ | ||||
| 		TMU_3_M, /* TMU30 - TMU80 */ | ||||
| 		TMU_0_M, /* TMU00 - TMU21 */ | ||||
| 		DU } }, | ||||
| }; | ||||
| 
 | ||||
| static struct intc_prio_reg prio_registers[] __initdata = { | ||||
| 	{ 0xFF804000, 0, 32, 8, /* INT2PRI0 */ | ||||
| 		{ DU, TMU00, TMU10, TMU20 } }, | ||||
| 	{ 0xFF804004, 0, 32, 8, /* INT2PRI1 */ | ||||
| 		{ TMU30, TMU60, RTC, SDHI } }, | ||||
| 	{ 0xFF804008, 0, 32, 8, /* INT2PRI2 */ | ||||
| 		{ HUDI, SHDMAC, USB, SSI } }, | ||||
| 	{ 0xFF80400C, 0, 32, 8, /* INT2PRI3 */ | ||||
| 		{ VIN0, SPI, _2DG, LBSCATA } }, | ||||
| 	{ 0xFF804010, 0, 32, 8, /* INT2PRI4 */ | ||||
| 		{ SCIF0, SCIF3, HSCIF, LCDC } }, | ||||
| 	{ 0xFF804014, 0, 32, 8, /* INT2PRI5 */ | ||||
| 		{ RCAN_P, LBSCDMAC_P, LBSCDMAC2, MMC } }, | ||||
| 	{ 0xFF804018, 0, 32, 8, /* INT2PRI6 */ | ||||
| 		{ HPBDMAC0_3, HPBDMAC4_10, HPBDMAC11_18, HPBDMAC19_22 } }, | ||||
| 	{ 0xFF80401C, 0, 32, 8, /* INT2PRI7 */ | ||||
| 		{ HPBDMAC23_25_27_28, I2C0, SRC0, SRC1 } }, | ||||
| 	{ 0xFF804020, 0, 32, 8, /* INT2PRI8 */ | ||||
| 		{ 0 /* ADIF */, VIN1, RESET_WDT, HIF } }, | ||||
| 	{ 0xFF804024, 0, 32, 8, /* INT2PRI9 */ | ||||
| 		{ ADMAC, FLCTL, GPIO0_3, GPIO4_5 } }, | ||||
| 	{ 0xFF804028, 0, 32, 8, /* INT2PRI10 */ | ||||
| 		{ STIF0, STIF1, VEU3F_VE3, GETHER } }, | ||||
| 	{ 0xFF80402C, 0, 32, 8, /* INT2PRI11 */ | ||||
| 		{ MTU2, RGPVG, MIMLB, IEBUS } }, | ||||
| }; | ||||
| 
 | ||||
| static DECLARE_INTC_DESC(intc_desc, "sh7734", vectors, groups, | ||||
| 	mask_registers, prio_registers, NULL); | ||||
| 
 | ||||
| /* Support for external interrupt pins in IRQ mode */ | ||||
| 
 | ||||
| static struct intc_vect irq3210_vectors[] __initdata = { | ||||
| 	INTC_VECT(IRQ0, 0x240), INTC_VECT(IRQ1, 0x280), | ||||
| 	INTC_VECT(IRQ2, 0x2C0), INTC_VECT(IRQ3, 0x300), | ||||
| }; | ||||
| 
 | ||||
| static struct intc_sense_reg irq3210_sense_registers[] __initdata = { | ||||
| 	{ 0xFF80201C, 32, 2, /* ICR1 */ | ||||
| 	{ IRQ0, IRQ1, IRQ2, IRQ3, } }, | ||||
| }; | ||||
| 
 | ||||
| static struct intc_mask_reg irq3210_ack_registers[] __initdata = { | ||||
| 	{ 0xFF802024, 0, 32, /* INTREQ */ | ||||
| 	{ IRQ0, IRQ1, IRQ2, IRQ3, } }, | ||||
| }; | ||||
| 
 | ||||
| static struct intc_mask_reg irq3210_mask_registers[] __initdata = { | ||||
| 	{ 0xFF802044, 0xFF802064, 32, /* INTMSK0 / INTMSKCLR0 */ | ||||
| 	{ IRQ0, IRQ1, IRQ2, IRQ3, } }, | ||||
| }; | ||||
| 
 | ||||
| static struct intc_prio_reg irq3210_prio_registers[] __initdata = { | ||||
| 	{ 0xFF802010, 0, 32, 4, /* INTPRI */ | ||||
| 	{ IRQ0, IRQ1, IRQ2, IRQ3, } }, | ||||
| }; | ||||
| 
 | ||||
| static DECLARE_INTC_DESC_ACK(intc_desc_irq3210, "sh7734-irq3210", | ||||
| 	irq3210_vectors, NULL, | ||||
| 	irq3210_mask_registers, irq3210_prio_registers, | ||||
| 	irq3210_sense_registers, irq3210_ack_registers); | ||||
| 
 | ||||
| /* External interrupt pins in IRL mode */ | ||||
| 
 | ||||
| static struct intc_vect vectors_irl3210[] __initdata = { | ||||
| 	INTC_VECT(IRL0_LLLL, 0x200), INTC_VECT(IRL0_LLLH, 0x220), | ||||
| 	INTC_VECT(IRL0_LLHL, 0x240), INTC_VECT(IRL0_LLHH, 0x260), | ||||
| 	INTC_VECT(IRL0_LHLL, 0x280), INTC_VECT(IRL0_LHLH, 0x2a0), | ||||
| 	INTC_VECT(IRL0_LHHL, 0x2c0), INTC_VECT(IRL0_LHHH, 0x2e0), | ||||
| 	INTC_VECT(IRL0_HLLL, 0x300), INTC_VECT(IRL0_HLLH, 0x320), | ||||
| 	INTC_VECT(IRL0_HLHL, 0x340), INTC_VECT(IRL0_HLHH, 0x360), | ||||
| 	INTC_VECT(IRL0_HHLL, 0x380), INTC_VECT(IRL0_HHLH, 0x3a0), | ||||
| 	INTC_VECT(IRL0_HHHL, 0x3c0), | ||||
| }; | ||||
| 
 | ||||
| static DECLARE_INTC_DESC(intc_desc_irl3210, "sh7734-irl3210", | ||||
| 	vectors_irl3210, NULL, mask_registers, NULL, NULL); | ||||
| 
 | ||||
| #define INTC_ICR0		0xFF802000 | ||||
| #define INTC_INTMSK0    0xFF802044 | ||||
| #define INTC_INTMSK1    0xFF802048 | ||||
| #define INTC_INTMSKCLR0 0xFF802064 | ||||
| #define INTC_INTMSKCLR1 0xFF802068 | ||||
| 
 | ||||
| void __init plat_irq_setup(void) | ||||
| { | ||||
| 	/* disable IRQ3-0 */ | ||||
| 	__raw_writel(0xF0000000, INTC_INTMSK0); | ||||
| 
 | ||||
| 	/* disable IRL3-0 */ | ||||
| 	__raw_writel(0x80000000, INTC_INTMSK1); | ||||
| 
 | ||||
| 	/* select IRL mode for IRL3-0 */ | ||||
| 	__raw_writel(__raw_readl(INTC_ICR0) & ~0x00800000, INTC_ICR0); | ||||
| 
 | ||||
| 	/* disable holding function, ie enable "SH-4 Mode (LVLMODE)" */ | ||||
| 	__raw_writel(__raw_readl(INTC_ICR0) | 0x00200000, INTC_ICR0); | ||||
| 
 | ||||
| 	register_intc_controller(&intc_desc); | ||||
| } | ||||
| 
 | ||||
| void __init plat_irq_setup_pins(int mode) | ||||
| { | ||||
| 	switch (mode) { | ||||
| 	case IRQ_MODE_IRQ3210: | ||||
| 		/* select IRQ mode for IRL3-0 */ | ||||
| 		__raw_writel(__raw_readl(INTC_ICR0) | 0x00800000, INTC_ICR0); | ||||
| 		register_intc_controller(&intc_desc_irq3210); | ||||
| 		break; | ||||
| 	case IRQ_MODE_IRL3210: | ||||
| 		/* enable IRL0-3 but don't provide any masking */ | ||||
| 		__raw_writel(0x80000000, INTC_INTMSKCLR1); | ||||
| 		__raw_writel(0xf0000000, INTC_INTMSKCLR0); | ||||
| 		break; | ||||
| 	case IRQ_MODE_IRL3210_MASK: | ||||
| 		/* enable IRL0-3 and mask using cpu intc controller */ | ||||
| 		__raw_writel(0x80000000, INTC_INTMSKCLR0); | ||||
| 		register_intc_controller(&intc_desc_irl3210); | ||||
| 		break; | ||||
| 	default: | ||||
| 		BUG(); | ||||
| 	} | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user