Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Nobuhiro Iwamatsu and committed by
Paul Mundt
fea88a0c e00e7cb3

+1396 -3
+11 -1
arch/sh/Kconfig
··· 427 427 help 428 428 Select SH7724 if you have an SH-MobileR2R CPU. 429 429 430 + config CPU_SUBTYPE_SH7734 431 + bool "Support SH7734 processor" 432 + select CPU_SH4A 433 + select CPU_SHX2 434 + select ARCH_WANT_OPTIONAL_GPIOLIB 435 + select USB_ARCH_HAS_OHCI 436 + select USB_ARCH_HAS_EHCI 437 + help 438 + Select SH7734 if you have a SH4A SH7734 CPU. 439 + 430 440 config CPU_SUBTYPE_SH7757 431 441 bool "Support SH7757 processor" 432 442 select CPU_SH4A ··· 594 584 config SH_CLK_CPG_LEGACY 595 585 depends on SH_CLK_CPG 596 586 def_bool y if !CPU_SUBTYPE_SH7785 && !ARCH_SHMOBILE && \ 597 - !CPU_SHX3 && !CPU_SUBTYPE_SH7757 587 + !CPU_SHX3 && !CPU_SUBTYPE_SH7757 && !CPU_SUBTYPE_SH7734 598 588 599 589 source "kernel/time/Kconfig" 600 590
+1 -1
arch/sh/include/asm/processor.h
··· 32 32 33 33 /* SH-4A types */ 34 34 CPU_SH7763, CPU_SH7770, CPU_SH7780, CPU_SH7781, CPU_SH7785, CPU_SH7786, 35 - CPU_SH7723, CPU_SH7724, CPU_SH7757, CPU_SHX3, 35 + CPU_SH7723, CPU_SH7724, CPU_SH7757, CPU_SH7734, CPU_SHX3, 36 36 37 37 /* SH4AL-DSP types */ 38 38 CPU_SH7343, CPU_SH7722, CPU_SH7366, CPU_SH7372,
+5
arch/sh/include/cpu-sh4/cpu/freq.h
··· 47 47 #define MSTPCR1 0xa4150034 48 48 #define MSTPCR2 0xa4150038 49 49 50 + #elif defined(CONFIG_CPU_SUBTYPE_SH7734) 51 + #define FRQCR0 0xffc80000 52 + #define FRQCR2 0xffc80008 53 + #define FRQMR1 0xffc80014 54 + #define FRQMR2 0xffc80018 50 55 #elif defined(CONFIG_CPU_SUBTYPE_SH7785) 51 56 #define FRQCR0 0xffc80000 52 57 #define FRQCR1 0xffc80004
+306
arch/sh/include/cpu-sh4/cpu/sh7734.h
··· 1 + #ifndef __ASM_SH7734_H__ 2 + #define __ASM_SH7734_H__ 3 + 4 + /* Pin Function Controller: 5 + * GPIO_FN_xx - GPIO used to select pin function 6 + * GPIO_GP_x_x - GPIO mapped to real I/O pin on CPU 7 + */ 8 + enum { 9 + GPIO_GP_0_0, GPIO_GP_0_1, GPIO_GP_0_2, GPIO_GP_0_3, 10 + GPIO_GP_0_4, GPIO_GP_0_5, GPIO_GP_0_6, GPIO_GP_0_7, 11 + GPIO_GP_0_8, GPIO_GP_0_9, GPIO_GP_0_10, GPIO_GP_0_11, 12 + GPIO_GP_0_12, GPIO_GP_0_13, GPIO_GP_0_14, GPIO_GP_0_15, 13 + GPIO_GP_0_16, GPIO_GP_0_17, GPIO_GP_0_18, GPIO_GP_0_19, 14 + GPIO_GP_0_20, GPIO_GP_0_21, GPIO_GP_0_22, GPIO_GP_0_23, 15 + GPIO_GP_0_24, GPIO_GP_0_25, GPIO_GP_0_26, GPIO_GP_0_27, 16 + GPIO_GP_0_28, GPIO_GP_0_29, GPIO_GP_0_30, GPIO_GP_0_31, 17 + 18 + GPIO_GP_1_0, GPIO_GP_1_1, GPIO_GP_1_2, GPIO_GP_1_3, 19 + GPIO_GP_1_4, GPIO_GP_1_5, GPIO_GP_1_6, GPIO_GP_1_7, 20 + GPIO_GP_1_8, GPIO_GP_1_9, GPIO_GP_1_10, GPIO_GP_1_11, 21 + GPIO_GP_1_12, GPIO_GP_1_13, GPIO_GP_1_14, GPIO_GP_1_15, 22 + GPIO_GP_1_16, GPIO_GP_1_17, GPIO_GP_1_18, GPIO_GP_1_19, 23 + GPIO_GP_1_20, GPIO_GP_1_21, GPIO_GP_1_22, GPIO_GP_1_23, 24 + GPIO_GP_1_24, GPIO_GP_1_25, GPIO_GP_1_26, GPIO_GP_1_27, 25 + GPIO_GP_1_28, GPIO_GP_1_29, GPIO_GP_1_30, GPIO_GP_1_31, 26 + 27 + GPIO_GP_2_0, GPIO_GP_2_1, GPIO_GP_2_2, GPIO_GP_2_3, 28 + GPIO_GP_2_4, GPIO_GP_2_5, GPIO_GP_2_6, GPIO_GP_2_7, 29 + GPIO_GP_2_8, GPIO_GP_2_9, GPIO_GP_2_10, GPIO_GP_2_11, 30 + GPIO_GP_2_12, GPIO_GP_2_13, GPIO_GP_2_14, GPIO_GP_2_15, 31 + GPIO_GP_2_16, GPIO_GP_2_17, GPIO_GP_2_18, GPIO_GP_2_19, 32 + GPIO_GP_2_20, GPIO_GP_2_21, GPIO_GP_2_22, GPIO_GP_2_23, 33 + GPIO_GP_2_24, GPIO_GP_2_25, GPIO_GP_2_26, GPIO_GP_2_27, 34 + GPIO_GP_2_28, GPIO_GP_2_29, GPIO_GP_2_30, GPIO_GP_2_31, 35 + 36 + GPIO_GP_3_0, GPIO_GP_3_1, GPIO_GP_3_2, GPIO_GP_3_3, 37 + GPIO_GP_3_4, GPIO_GP_3_5, GPIO_GP_3_6, GPIO_GP_3_7, 38 + GPIO_GP_3_8, GPIO_GP_3_9, GPIO_GP_3_10, GPIO_GP_3_11, 39 + GPIO_GP_3_12, GPIO_GP_3_13, GPIO_GP_3_14, GPIO_GP_3_15, 40 + GPIO_GP_3_16, GPIO_GP_3_17, GPIO_GP_3_18, GPIO_GP_3_19, 41 + GPIO_GP_3_20, GPIO_GP_3_21, GPIO_GP_3_22, GPIO_GP_3_23, 42 + GPIO_GP_3_24, GPIO_GP_3_25, GPIO_GP_3_26, GPIO_GP_3_27, 43 + GPIO_GP_3_28, GPIO_GP_3_29, GPIO_GP_3_30, GPIO_GP_3_31, 44 + 45 + GPIO_GP_4_0, GPIO_GP_4_1, GPIO_GP_4_2, GPIO_GP_4_3, 46 + GPIO_GP_4_4, GPIO_GP_4_5, GPIO_GP_4_6, GPIO_GP_4_7, 47 + GPIO_GP_4_8, GPIO_GP_4_9, GPIO_GP_4_10, GPIO_GP_4_11, 48 + GPIO_GP_4_12, GPIO_GP_4_13, GPIO_GP_4_14, GPIO_GP_4_15, 49 + GPIO_GP_4_16, GPIO_GP_4_17, GPIO_GP_4_18, GPIO_GP_4_19, 50 + GPIO_GP_4_20, GPIO_GP_4_21, GPIO_GP_4_22, GPIO_GP_4_23, 51 + GPIO_GP_4_24, GPIO_GP_4_25, GPIO_GP_4_26, GPIO_GP_4_27, 52 + GPIO_GP_4_28, GPIO_GP_4_29, GPIO_GP_4_30, GPIO_GP_4_31, 53 + 54 + GPIO_GP_5_0, GPIO_GP_5_1, GPIO_GP_5_2, GPIO_GP_5_3, 55 + GPIO_GP_5_4, GPIO_GP_5_5, GPIO_GP_5_6, GPIO_GP_5_7, 56 + GPIO_GP_5_8, GPIO_GP_5_9, GPIO_GP_5_10, GPIO_GP_5_11, 57 + 58 + GPIO_FN_CLKOUT, GPIO_FN_BS, GPIO_FN_CS0, GPIO_FN_EX_CS0, GPIO_FN_RD, 59 + GPIO_FN_WE0, GPIO_FN_WE1, 60 + 61 + GPIO_FN_SCL0, GPIO_FN_PENC0, GPIO_FN_USB_OVC0, 62 + 63 + GPIO_FN_IRQ2_B, GPIO_FN_IRQ3_B, 64 + 65 + /* IPSR0 */ 66 + GPIO_FN_A15, GPIO_FN_ST0_VCO_CLKIN, GPIO_FN_LCD_DATA15_A, 67 + GPIO_FN_TIOC3D_C, 68 + GPIO_FN_A14, GPIO_FN_LCD_DATA14_A, GPIO_FN_TIOC3C_C, 69 + GPIO_FN_A13, GPIO_FN_LCD_DATA13_A, GPIO_FN_TIOC3B_C, 70 + GPIO_FN_A12, GPIO_FN_LCD_DATA12_A, GPIO_FN_TIOC3A_C, 71 + GPIO_FN_A11, GPIO_FN_ST0_D7, GPIO_FN_LCD_DATA11_A, 72 + GPIO_FN_TIOC2B_C, 73 + GPIO_FN_A10, GPIO_FN_ST0_D6, GPIO_FN_LCD_DATA10_A, 74 + GPIO_FN_TIOC2A_C, 75 + GPIO_FN_A9, GPIO_FN_ST0_D5, GPIO_FN_LCD_DATA9_A, 76 + GPIO_FN_TIOC1B_C, 77 + GPIO_FN_A8, GPIO_FN_ST0_D4, GPIO_FN_LCD_DATA8_A, 78 + GPIO_FN_TIOC1A_C, 79 + GPIO_FN_A7, GPIO_FN_ST0_D3, GPIO_FN_LCD_DATA7_A, GPIO_FN_TIOC0D_C, 80 + GPIO_FN_A6, GPIO_FN_ST0_D2, GPIO_FN_LCD_DATA6_A, GPIO_FN_TIOC0C_C, 81 + GPIO_FN_A5, GPIO_FN_ST0_D1, GPIO_FN_LCD_DATA5_A, GPIO_FN_TIOC0B_C, 82 + GPIO_FN_A4, GPIO_FN_ST0_D0, GPIO_FN_LCD_DATA4_A, GPIO_FN_TIOC0A_C, 83 + GPIO_FN_A3, GPIO_FN_ST0_VLD, GPIO_FN_LCD_DATA3_A, GPIO_FN_TCLKD_C, 84 + GPIO_FN_A2, GPIO_FN_ST0_SYC, GPIO_FN_LCD_DATA2_A, GPIO_FN_TCLKC_C, 85 + GPIO_FN_A1, GPIO_FN_ST0_REQ, GPIO_FN_LCD_DATA1_A, GPIO_FN_TCLKB_C, 86 + GPIO_FN_A0, GPIO_FN_ST0_CLKIN, GPIO_FN_LCD_DATA0_A, GPIO_FN_TCLKA_C, 87 + 88 + /* IPSR1 */ 89 + GPIO_FN_D3, GPIO_FN_SD0_DAT3_A, GPIO_FN_MMC_D3_A, GPIO_FN_ST1_D6, 90 + GPIO_FN_FD3_A, 91 + GPIO_FN_D2, GPIO_FN_SD0_DAT2_A, GPIO_FN_MMC_D2_A, GPIO_FN_ST1_D5, 92 + GPIO_FN_FD2_A, 93 + GPIO_FN_D1, GPIO_FN_SD0_DAT1_A, GPIO_FN_MMC_D1_A, GPIO_FN_ST1_D4, 94 + GPIO_FN_FD1_A, 95 + GPIO_FN_D0, GPIO_FN_SD0_DAT0_A, GPIO_FN_MMC_D0_A, GPIO_FN_ST1_D3, 96 + GPIO_FN_FD0_A, 97 + GPIO_FN_A25, GPIO_FN_TX2_D, GPIO_FN_ST1_D2, 98 + GPIO_FN_A24, GPIO_FN_RX2_D, GPIO_FN_ST1_D1, 99 + GPIO_FN_A23, GPIO_FN_ST1_D0, GPIO_FN_LCD_M_DISP_A, 100 + GPIO_FN_A22, GPIO_FN_ST1_VLD, GPIO_FN_LCD_VEPWC_A, 101 + GPIO_FN_A21, GPIO_FN_ST1_SYC, GPIO_FN_LCD_VCPWC_A, 102 + GPIO_FN_A20, GPIO_FN_ST1_REQ, GPIO_FN_LCD_FLM_A, 103 + GPIO_FN_A19, GPIO_FN_ST1_CLKIN, GPIO_FN_LCD_CLK_A, GPIO_FN_TIOC4D_C, 104 + GPIO_FN_A18, GPIO_FN_ST1_PWM, GPIO_FN_LCD_CL2_A, GPIO_FN_TIOC4C_C, 105 + GPIO_FN_A17, GPIO_FN_ST1_VCO_CLKIN, GPIO_FN_LCD_CL1_A, GPIO_FN_TIOC4B_C, 106 + GPIO_FN_A16, GPIO_FN_ST0_PWM, GPIO_FN_LCD_DON_A, GPIO_FN_TIOC4A_C, 107 + 108 + /* IPSR2 */ 109 + GPIO_FN_D14, GPIO_FN_TX2_B, GPIO_FN_FSE_A, GPIO_FN_ET0_TX_CLK_B, 110 + GPIO_FN_D13, GPIO_FN_RX2_B, GPIO_FN_FRB_A, GPIO_FN_ET0_ETXD6_B, 111 + GPIO_FN_D12, GPIO_FN_FWE_A, GPIO_FN_ET0_ETXD5_B, 112 + GPIO_FN_D11, GPIO_FN_RSPI_MISO_A, GPIO_FN_QMI_QIO1_A, 113 + GPIO_FN_FRE_A, GPIO_FN_ET0_ETXD3_B, 114 + GPIO_FN_D10, GPIO_FN_RSPI_MOSI_A, GPIO_FN_QMO_QIO0_A, 115 + GPIO_FN_FALE_A, GPIO_FN_ET0_ETXD2_B, 116 + GPIO_FN_D9, GPIO_FN_SD0_CMD_A, GPIO_FN_MMC_CMD_A, GPIO_FN_QIO3_A, 117 + GPIO_FN_FCLE_A, GPIO_FN_ET0_ETXD1_B, 118 + GPIO_FN_D8, GPIO_FN_SD0_CLK_A, GPIO_FN_MMC_CLK_A, GPIO_FN_QIO2_A, 119 + GPIO_FN_FCE_A, GPIO_FN_ET0_GTX_CLK_B, 120 + GPIO_FN_D7, GPIO_FN_RSPI_SSL_A, GPIO_FN_MMC_D7_A, GPIO_FN_QSSL_A, 121 + GPIO_FN_FD7_A, 122 + GPIO_FN_D6, GPIO_FN_RSPI_RSPCK_A, GPIO_FN_MMC_D6_A, GPIO_FN_QSPCLK_A, 123 + GPIO_FN_FD6_A, 124 + GPIO_FN_D5, GPIO_FN_SD0_WP_A, GPIO_FN_MMC_D5_A, GPIO_FN_FD5_A, 125 + GPIO_FN_D4, GPIO_FN_SD0_CD_A, GPIO_FN_MMC_D4_A, GPIO_FN_ST1_D7, 126 + GPIO_FN_FD4_A, 127 + 128 + /* IPSR3 */ 129 + GPIO_FN_DRACK0, GPIO_FN_SD1_DAT2_A, GPIO_FN_ATAG, GPIO_FN_TCLK1_A, 130 + GPIO_FN_ET0_ETXD7, 131 + GPIO_FN_EX_WAIT2, GPIO_FN_SD1_DAT1_A, GPIO_FN_DACK2, GPIO_FN_CAN1_RX_C, 132 + GPIO_FN_ET0_MAGIC_C, GPIO_FN_ET0_ETXD6_A, 133 + GPIO_FN_EX_WAIT1, GPIO_FN_SD1_DAT0_A, GPIO_FN_DREQ2, GPIO_FN_CAN1_TX_C, 134 + GPIO_FN_ET0_LINK_C, GPIO_FN_ET0_ETXD5_A, 135 + GPIO_FN_EX_WAIT0, GPIO_FN_TCLK1_B, 136 + GPIO_FN_RD_WR, GPIO_FN_TCLK0, 137 + GPIO_FN_EX_CS5, GPIO_FN_SD1_CMD_A, GPIO_FN_ATADIR, GPIO_FN_QSSL_B, 138 + GPIO_FN_ET0_ETXD3_A, 139 + GPIO_FN_EX_CS4, GPIO_FN_SD1_WP_A, GPIO_FN_ATAWR, GPIO_FN_QMI_QIO1_B, 140 + GPIO_FN_ET0_ETXD2_A, 141 + GPIO_FN_EX_CS3, GPIO_FN_SD1_CD_A, GPIO_FN_ATARD, GPIO_FN_QMO_QIO0_B, 142 + GPIO_FN_ET0_ETXD1_A, 143 + GPIO_FN_EX_CS2, GPIO_FN_TX3_B, GPIO_FN_ATACS1, GPIO_FN_QSPCLK_B, 144 + GPIO_FN_ET0_GTX_CLK_A, 145 + GPIO_FN_EX_CS1, GPIO_FN_RX3_B, GPIO_FN_ATACS0, GPIO_FN_QIO2_B, 146 + GPIO_FN_ET0_ETXD0, 147 + GPIO_FN_CS1_A26, GPIO_FN_QIO3_B, 148 + GPIO_FN_D15, GPIO_FN_SCK2_B, 149 + 150 + /* IPSR4 */ 151 + GPIO_FN_SCK2_A, GPIO_FN_VI0_G3, 152 + GPIO_FN_RTS1_B, GPIO_FN_VI0_G2, 153 + GPIO_FN_CTS1_B, GPIO_FN_VI0_DATA7_VI0_G1, 154 + GPIO_FN_TX1_B, GPIO_FN_VI0_DATA6_VI0_G0, GPIO_FN_ET0_PHY_INT_A, 155 + GPIO_FN_RX1_B, GPIO_FN_VI0_DATA5_VI0_B5, GPIO_FN_ET0_MAGIC_A, 156 + GPIO_FN_SCK1_B, GPIO_FN_VI0_DATA4_VI0_B4, GPIO_FN_ET0_LINK_A, 157 + GPIO_FN_RTS0_B, GPIO_FN_VI0_DATA3_VI0_B3, GPIO_FN_ET0_MDIO_A, 158 + GPIO_FN_CTS0_B, GPIO_FN_VI0_DATA2_VI0_B2, GPIO_FN_RMII0_MDIO_A, 159 + GPIO_FN_ET0_MDC, 160 + GPIO_FN_HTX0_A, GPIO_FN_TX1_A, GPIO_FN_VI0_DATA1_VI0_B1, 161 + GPIO_FN_RMII0_MDC_A, GPIO_FN_ET0_COL, 162 + GPIO_FN_HRX0_A, GPIO_FN_RX1_A, GPIO_FN_VI0_DATA0_VI0_B0, 163 + GPIO_FN_RMII0_CRS_DV_A, GPIO_FN_ET0_CRS, 164 + GPIO_FN_HSCK0_A, GPIO_FN_SCK1_A, GPIO_FN_VI0_VSYNC, 165 + GPIO_FN_RMII0_RX_ER_A, GPIO_FN_ET0_RX_ER, 166 + GPIO_FN_HRTS0_A, GPIO_FN_RTS1_A, GPIO_FN_VI0_HSYNC, 167 + GPIO_FN_RMII0_TXD_EN_A, GPIO_FN_ET0_RX_DV, 168 + GPIO_FN_HCTS0_A, GPIO_FN_CTS1_A, GPIO_FN_VI0_FIELD, 169 + GPIO_FN_RMII0_RXD1_A, GPIO_FN_ET0_ERXD7, 170 + 171 + /* IPSR5 */ 172 + GPIO_FN_SD2_CLK_A, GPIO_FN_RX2_A, GPIO_FN_VI0_G4, GPIO_FN_ET0_RX_CLK_B, 173 + GPIO_FN_SD2_CMD_A, GPIO_FN_TX2_A, GPIO_FN_VI0_G5, GPIO_FN_ET0_ERXD2_B, 174 + GPIO_FN_SD2_DAT0_A, GPIO_FN_RX3_A, GPIO_FN_VI0_R0, GPIO_FN_ET0_ERXD3_B, 175 + GPIO_FN_SD2_DAT1_A, GPIO_FN_TX3_A, GPIO_FN_VI0_R1, GPIO_FN_ET0_MDIO_B, 176 + GPIO_FN_SD2_DAT2_A, GPIO_FN_RX4_A, GPIO_FN_VI0_R2, GPIO_FN_ET0_LINK_B, 177 + GPIO_FN_SD2_DAT3_A, GPIO_FN_TX4_A, GPIO_FN_VI0_R3, GPIO_FN_ET0_MAGIC_B, 178 + GPIO_FN_SD2_CD_A, GPIO_FN_RX5_A, GPIO_FN_VI0_R4, GPIO_FN_ET0_PHY_INT_B, 179 + GPIO_FN_SD2_WP_A, GPIO_FN_TX5_A, GPIO_FN_VI0_R5, 180 + GPIO_FN_REF125CK, GPIO_FN_ADTRG, GPIO_FN_RX5_C, 181 + GPIO_FN_REF50CK, GPIO_FN_CTS1_E, GPIO_FN_HCTS0_D, 182 + 183 + /* IPSR6 */ 184 + GPIO_FN_DU0_DR0, GPIO_FN_SCIF_CLK_B, GPIO_FN_HRX0_D, GPIO_FN_IETX_A, 185 + GPIO_FN_TCLKA_A, GPIO_FN_HIFD00, 186 + GPIO_FN_DU0_DR1, GPIO_FN_SCK0_B, GPIO_FN_HTX0_D, GPIO_FN_IERX_A, 187 + GPIO_FN_TCLKB_A, GPIO_FN_HIFD01, 188 + GPIO_FN_DU0_DR2, GPIO_FN_RX0_B, GPIO_FN_TCLKC_A, GPIO_FN_HIFD02, 189 + GPIO_FN_DU0_DR3, GPIO_FN_TX0_B, GPIO_FN_TCLKD_A, GPIO_FN_HIFD03, 190 + GPIO_FN_DU0_DR4, GPIO_FN_CTS0_C, GPIO_FN_TIOC0A_A, GPIO_FN_HIFD04, 191 + GPIO_FN_DU0_DR5, GPIO_FN_RTS0_C, GPIO_FN_TIOC0B_A, GPIO_FN_HIFD05, 192 + GPIO_FN_DU0_DR6, GPIO_FN_SCK1_C, GPIO_FN_TIOC0C_A, GPIO_FN_HIFD06, 193 + GPIO_FN_DU0_DR7, GPIO_FN_RX1_C, GPIO_FN_TIOC0D_A, GPIO_FN_HIFD07, 194 + GPIO_FN_DU0_DG0, GPIO_FN_TX1_C, GPIO_FN_HSCK0_D, GPIO_FN_IECLK_A, 195 + GPIO_FN_TIOC1A_A, GPIO_FN_HIFD08, 196 + GPIO_FN_DU0_DG1, GPIO_FN_CTS1_C, GPIO_FN_HRTS0_D, GPIO_FN_TIOC1B_A, 197 + GPIO_FN_HIFD09, 198 + 199 + /* IPSR7 */ 200 + GPIO_FN_DU0_DG2, GPIO_FN_RTS1_C, GPIO_FN_RMII0_MDC_B, GPIO_FN_TIOC2A_A, 201 + GPIO_FN_HIFD10, 202 + GPIO_FN_DU0_DG3, GPIO_FN_SCK2_C, GPIO_FN_RMII0_MDIO_B, GPIO_FN_TIOC2B_A, 203 + GPIO_FN_HIFD11, 204 + GPIO_FN_DU0_DG4, GPIO_FN_RX2_C, GPIO_FN_RMII0_CRS_DV_B, 205 + GPIO_FN_TIOC3A_A, GPIO_FN_HIFD12, 206 + GPIO_FN_DU0_DG5, GPIO_FN_TX2_C, GPIO_FN_RMII0_RX_ER_B, 207 + GPIO_FN_TIOC3B_A, GPIO_FN_HIFD13, 208 + GPIO_FN_DU0_DG6, GPIO_FN_RX3_C, GPIO_FN_RMII0_RXD0_B, 209 + GPIO_FN_TIOC3C_A, GPIO_FN_HIFD14, 210 + GPIO_FN_DU0_DG7, GPIO_FN_TX3_C, GPIO_FN_RMII0_RXD1_B, 211 + GPIO_FN_TIOC3D_A, GPIO_FN_HIFD15, 212 + GPIO_FN_DU0_DB0, GPIO_FN_RX4_C, GPIO_FN_RMII0_TXD_EN_B, 213 + GPIO_FN_TIOC4A_A, GPIO_FN_HIFCS, 214 + GPIO_FN_DU0_DB1, GPIO_FN_TX4_C, GPIO_FN_RMII0_TXD0_B, 215 + GPIO_FN_TIOC4B_A, GPIO_FN_HIFRS, 216 + GPIO_FN_DU0_DB2, GPIO_FN_RX5_B, GPIO_FN_RMII0_TXD1_B, 217 + GPIO_FN_TIOC4C_A, GPIO_FN_HIFWR, 218 + GPIO_FN_DU0_DB3, GPIO_FN_TX5_B, GPIO_FN_TIOC4D_A, GPIO_FN_HIFRD, 219 + GPIO_FN_DU0_DB4, GPIO_FN_HIFINT, 220 + 221 + /* IPSR8 */ 222 + GPIO_FN_DU0_DB5, GPIO_FN_HIFDREQ, 223 + GPIO_FN_DU0_DB6, GPIO_FN_HIFRDY, 224 + GPIO_FN_DU0_DB7, GPIO_FN_SSI_SCK0_B, GPIO_FN_HIFEBL_B, 225 + GPIO_FN_DU0_DOTCLKIN, GPIO_FN_HSPI_CS0_C, GPIO_FN_SSI_WS0_B, 226 + GPIO_FN_DU0_DOTCLKOUT, GPIO_FN_HSPI_CLK0_C, GPIO_FN_SSI_SDATA0_B, 227 + GPIO_FN_DU0_EXHSYNC_DU0_HSYNC, GPIO_FN_HSPI_TX0_C, GPIO_FN_SSI_SCK1_B, 228 + GPIO_FN_DU0_EXVSYNC_DU0_VSYNC, GPIO_FN_HSPI_RX0_C, GPIO_FN_SSI_WS1_B, 229 + GPIO_FN_DU0_EXODDF_DU0_ODDF, GPIO_FN_CAN0_RX_B, GPIO_FN_HSCK0_B, 230 + GPIO_FN_SSI_SDATA1_B, 231 + GPIO_FN_DU0_DISP, GPIO_FN_CAN0_TX_B, GPIO_FN_HRX0_B, 232 + GPIO_FN_AUDIO_CLKA_B, 233 + GPIO_FN_DU0_CDE, GPIO_FN_HTX0_B, GPIO_FN_AUDIO_CLKB_B, 234 + GPIO_FN_LCD_VCPWC_B, 235 + GPIO_FN_IRQ0_A, GPIO_FN_HSPI_TX_B, GPIO_FN_RX3_E, GPIO_FN_ET0_ERXD0, 236 + GPIO_FN_IRQ1_A, GPIO_FN_HSPI_RX_B, GPIO_FN_TX3_E, GPIO_FN_ET0_ERXD1, 237 + GPIO_FN_IRQ2_A, GPIO_FN_CTS0_A, GPIO_FN_HCTS0_B, GPIO_FN_ET0_ERXD2_A, 238 + GPIO_FN_IRQ3_A, GPIO_FN_RTS0_A, GPIO_FN_HRTS0_B, GPIO_FN_ET0_ERXD3_A, 239 + 240 + /* IPSR9 */ 241 + GPIO_FN_VI1_CLK_A, GPIO_FN_FD0_B, GPIO_FN_LCD_DATA0_B, 242 + GPIO_FN_VI1_0_A, GPIO_FN_FD1_B, GPIO_FN_LCD_DATA1_B, 243 + GPIO_FN_VI1_1_A, GPIO_FN_FD2_B, GPIO_FN_LCD_DATA2_B, 244 + GPIO_FN_VI1_2_A, GPIO_FN_FD3_B, GPIO_FN_LCD_DATA3_B, 245 + GPIO_FN_VI1_3_A, GPIO_FN_FD4_B, GPIO_FN_LCD_DATA4_B, 246 + GPIO_FN_VI1_4_A, GPIO_FN_FD5_B, GPIO_FN_LCD_DATA5_B, 247 + GPIO_FN_VI1_5_A, GPIO_FN_FD6_B, GPIO_FN_LCD_DATA6_B, 248 + GPIO_FN_VI1_6_A, GPIO_FN_FD7_B, GPIO_FN_LCD_DATA7_B, 249 + GPIO_FN_VI1_7_A, GPIO_FN_FCE_B, GPIO_FN_LCD_DATA8_B, 250 + GPIO_FN_SSI_SCK0_A, GPIO_FN_TIOC1A_B, GPIO_FN_LCD_DATA9_B, 251 + GPIO_FN_SSI_WS0_A, GPIO_FN_TIOC1B_B, GPIO_FN_LCD_DATA10_B, 252 + GPIO_FN_SSI_SDATA0_A, GPIO_FN_VI1_0_B, GPIO_FN_TIOC2A_B, 253 + GPIO_FN_LCD_DATA11_B, 254 + GPIO_FN_SSI_SCK1_A, GPIO_FN_VI1_1_B, GPIO_FN_TIOC2B_B, 255 + GPIO_FN_LCD_DATA12_B, 256 + GPIO_FN_SSI_WS1_A, GPIO_FN_VI1_2_B, GPIO_FN_LCD_DATA13_B, 257 + GPIO_FN_SSI_SDATA1_A, GPIO_FN_VI1_3_B, GPIO_FN_LCD_DATA14_B, 258 + 259 + /* IPSR10 */ 260 + GPIO_FN_SSI_SCK23, GPIO_FN_VI1_4_B, GPIO_FN_RX1_D, GPIO_FN_FCLE_B, 261 + GPIO_FN_LCD_DATA15_B, 262 + GPIO_FN_SSI_WS23, GPIO_FN_VI1_5_B, GPIO_FN_TX1_D, GPIO_FN_HSCK0_C, 263 + GPIO_FN_FALE_B, GPIO_FN_LCD_DON_B, 264 + GPIO_FN_SSI_SDATA2, GPIO_FN_VI1_6_B, GPIO_FN_HRX0_C, GPIO_FN_FRE_B, 265 + GPIO_FN_LCD_CL1_B, 266 + GPIO_FN_SSI_SDATA3, GPIO_FN_VI1_7_B, GPIO_FN_HTX0_C, GPIO_FN_FWE_B, 267 + GPIO_FN_LCD_CL2_B, 268 + GPIO_FN_AUDIO_CLKA_A, GPIO_FN_VI1_CLK_B, GPIO_FN_SCK1_D, 269 + GPIO_FN_IECLK_B, GPIO_FN_LCD_FLM_B, 270 + GPIO_FN_AUDIO_CLKB_A, GPIO_FN_LCD_CLK_B, 271 + GPIO_FN_AUDIO_CLKC, GPIO_FN_SCK1_E, GPIO_FN_HCTS0_C, GPIO_FN_FRB_B, 272 + GPIO_FN_LCD_VEPWC_B, 273 + GPIO_FN_AUDIO_CLKOUT, GPIO_FN_TX1_E, GPIO_FN_HRTS0_C, GPIO_FN_FSE_B, 274 + GPIO_FN_LCD_M_DISP_B, 275 + GPIO_FN_CAN_CLK_A, GPIO_FN_RX4_D, 276 + GPIO_FN_CAN0_TX_A, GPIO_FN_TX4_D, GPIO_FN_MLB_CLK, 277 + GPIO_FN_CAN1_RX_A, GPIO_FN_IRQ1_B, 278 + GPIO_FN_CAN0_RX_A, GPIO_FN_IRQ0_B, GPIO_FN_MLB_SIG, 279 + GPIO_FN_CAN1_TX_A, GPIO_FN_TX5_C, GPIO_FN_MLB_DAT, 280 + 281 + /* IPSR11 */ 282 + GPIO_FN_SCL1, GPIO_FN_SCIF_CLK_C, 283 + GPIO_FN_SDA1, GPIO_FN_RX1_E, 284 + GPIO_FN_SDA0, GPIO_FN_HIFEBL_A, 285 + GPIO_FN_SDSELF, GPIO_FN_RTS1_E, 286 + GPIO_FN_SCIF_CLK_A, GPIO_FN_HSPI_CLK_A, GPIO_FN_VI0_CLK, 287 + GPIO_FN_RMII0_TXD0_A, GPIO_FN_ET0_ERXD4, 288 + GPIO_FN_SCK0_A, GPIO_FN_HSPI_CS_A, GPIO_FN_VI0_CLKENB, 289 + GPIO_FN_RMII0_TXD1_A, GPIO_FN_ET0_ERXD5, 290 + GPIO_FN_RX0_A, GPIO_FN_HSPI_RX_A, GPIO_FN_RMII0_RXD0_A, 291 + GPIO_FN_ET0_ERXD6, 292 + GPIO_FN_TX0_A, GPIO_FN_HSPI_TX_A, 293 + GPIO_FN_PENC1, GPIO_FN_TX3_D, GPIO_FN_CAN1_TX_B, GPIO_FN_TX5_D, 294 + GPIO_FN_IETX_B, 295 + GPIO_FN_USB_OVC1, GPIO_FN_RX3_D, GPIO_FN_CAN1_RX_B, GPIO_FN_RX5_D, 296 + GPIO_FN_IERX_B, 297 + GPIO_FN_DREQ0, GPIO_FN_SD1_CLK_A, GPIO_FN_ET0_TX_EN, 298 + GPIO_FN_DACK0, GPIO_FN_SD1_DAT3_A, GPIO_FN_ET0_TX_ER, 299 + GPIO_FN_DREQ1, GPIO_FN_HSPI_CLK_B, GPIO_FN_RX4_B, GPIO_FN_ET0_PHY_INT_C, 300 + GPIO_FN_ET0_TX_CLK_A, 301 + GPIO_FN_DACK1, GPIO_FN_HSPI_CS_B, GPIO_FN_TX4_B, GPIO_FN_ET0_RX_CLK_A, 302 + GPIO_FN_PRESETOUT, GPIO_FN_ST_CLKOUT, 303 + 304 + }; 305 + 306 + #endif /* __ASM_SH7734_H__ */
+2 -1
arch/sh/kernel/cpu/proc.c
··· 25 25 [CPU_SH5_101] = "SH5-101", [CPU_SH5_103] = "SH5-103", 26 26 [CPU_MXG] = "MX-G", [CPU_SH7723] = "SH7723", 27 27 [CPU_SH7366] = "SH7366", [CPU_SH7724] = "SH7724", 28 - [CPU_SH7372] = "SH7372", [CPU_SH_NONE] = "Unknown" 28 + [CPU_SH7372] = "SH7372", [CPU_SH7734] = "SH7734", 29 + [CPU_SH_NONE] = "Unknown" 29 30 }; 30 31 31 32 const char *get_cpu_subtype(struct sh_cpuinfo *c)
+3
arch/sh/kernel/cpu/sh4/probe.c
··· 158 158 case 0x40: /* yon-ten-go */ 159 159 boot_cpu_data.type = CPU_SH7372; 160 160 break; 161 + case 0xE0: /* 0x4E0 */ 162 + boot_cpu_data.type = CPU_SH7734; /* SH7733/SH7734 */ 163 + break; 161 164 162 165 } 163 166 break;
+2
arch/sh/kernel/cpu/sh4a/Makefile
··· 13 13 obj-$(CONFIG_CPU_SUBTYPE_SH7722) += setup-sh7722.o serial-sh7722.o 14 14 obj-$(CONFIG_CPU_SUBTYPE_SH7723) += setup-sh7723.o 15 15 obj-$(CONFIG_CPU_SUBTYPE_SH7724) += setup-sh7724.o 16 + obj-$(CONFIG_CPU_SUBTYPE_SH7734) += setup-sh7734.o 16 17 obj-$(CONFIG_CPU_SUBTYPE_SH7366) += setup-sh7366.o 17 18 obj-$(CONFIG_CPU_SUBTYPE_SHX3) += setup-shx3.o intc-shx3.o 18 19 ··· 31 30 clock-$(CONFIG_CPU_SUBTYPE_SH7722) := clock-sh7722.o 32 31 clock-$(CONFIG_CPU_SUBTYPE_SH7723) := clock-sh7723.o 33 32 clock-$(CONFIG_CPU_SUBTYPE_SH7724) := clock-sh7724.o 33 + clock-$(CONFIG_CPU_SUBTYPE_SH7734) := clock-sh7734.o 34 34 clock-$(CONFIG_CPU_SUBTYPE_SH7366) := clock-sh7366.o 35 35 clock-$(CONFIG_CPU_SUBTYPE_SHX3) := clock-shx3.o 36 36
+266
arch/sh/kernel/cpu/sh4a/clock-sh7734.c
··· 1 + /* 2 + * arch/sh/kernel/cpu/sh4a/clock-sh7734.c 3 + * 4 + * Clock framework for SH7734 5 + * 6 + * Copyright (C) 2011, 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> 7 + * Copyright (C) 2011, 2012 Renesas Solutions Corp. 8 + * 9 + * This file is subject to the terms and conditions of the GNU General Public 10 + * License. See the file "COPYING" in the main directory of this archive 11 + * for more details. 12 + */ 13 + 14 + #include <linux/init.h> 15 + #include <linux/kernel.h> 16 + #include <linux/io.h> 17 + #include <linux/clkdev.h> 18 + #include <linux/delay.h> 19 + #include <asm/clock.h> 20 + #include <asm/freq.h> 21 + 22 + static struct clk extal_clk = { 23 + .rate = 33333333, 24 + }; 25 + 26 + #define MODEMR (0xFFCC0020) 27 + #define MODEMR_MASK (0x6) 28 + #define MODEMR_533MHZ (0x2) 29 + 30 + static unsigned long pll_recalc(struct clk *clk) 31 + { 32 + int mode = 12; 33 + u32 r = __raw_readl(MODEMR); 34 + 35 + if ((r & MODEMR_MASK) & MODEMR_533MHZ) 36 + mode = 16; 37 + 38 + return clk->parent->rate * mode; 39 + } 40 + 41 + static struct sh_clk_ops pll_clk_ops = { 42 + .recalc = pll_recalc, 43 + }; 44 + 45 + static struct clk pll_clk = { 46 + .ops = &pll_clk_ops, 47 + .parent = &extal_clk, 48 + .flags = CLK_ENABLE_ON_INIT, 49 + }; 50 + 51 + static struct clk *main_clks[] = { 52 + &extal_clk, 53 + &pll_clk, 54 + }; 55 + 56 + static int multipliers[] = { 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; 57 + static int divisors[] = { 1, 3, 2, 3, 4, 6, 8, 9, 12, 16, 18, 24 }; 58 + 59 + static struct clk_div_mult_table div4_div_mult_table = { 60 + .divisors = divisors, 61 + .nr_divisors = ARRAY_SIZE(divisors), 62 + .multipliers = multipliers, 63 + .nr_multipliers = ARRAY_SIZE(multipliers), 64 + }; 65 + 66 + static struct clk_div4_table div4_table = { 67 + .div_mult_table = &div4_div_mult_table, 68 + }; 69 + 70 + enum { DIV4_I, DIV4_S, DIV4_B, DIV4_M, DIV4_S1, DIV4_P, DIV4_NR }; 71 + 72 + #define DIV4(_reg, _bit, _mask, _flags) \ 73 + SH_CLK_DIV4(&pll_clk, _reg, _bit, _mask, _flags) 74 + 75 + struct clk div4_clks[DIV4_NR] = { 76 + [DIV4_I] = DIV4(FRQMR1, 28, 0x0003, CLK_ENABLE_ON_INIT), 77 + [DIV4_S] = DIV4(FRQMR1, 20, 0x000C, CLK_ENABLE_ON_INIT), 78 + [DIV4_B] = DIV4(FRQMR1, 16, 0x0140, CLK_ENABLE_ON_INIT), 79 + [DIV4_M] = DIV4(FRQMR1, 12, 0x0004, CLK_ENABLE_ON_INIT), 80 + [DIV4_S1] = DIV4(FRQMR1, 4, 0x0030, CLK_ENABLE_ON_INIT), 81 + [DIV4_P] = DIV4(FRQMR1, 0, 0x0140, CLK_ENABLE_ON_INIT), 82 + }; 83 + 84 + #define MSTPCR0 0xFFC80030 85 + #define MSTPCR1 0xFFC80034 86 + #define MSTPCR3 0xFFC8003C 87 + 88 + enum { 89 + MSTP030, MSTP029, /* IIC */ 90 + MSTP026, MSTP025, MSTP024, /* SCIF */ 91 + MSTP023, 92 + MSTP022, MSTP021, 93 + MSTP019, /* HSCIF */ 94 + MSTP016, MSTP015, MSTP014, /* TMU / TIMER */ 95 + MSTP012, MSTP011, MSTP010, MSTP009, MSTP008, /* SSI */ 96 + MSTP007, /* HSPI */ 97 + MSTP115, /* ADMAC */ 98 + MSTP114, /* GETHER */ 99 + MSTP111, /* DMAC */ 100 + MSTP109, /* VIDEOIN1 */ 101 + MSTP108, /* VIDEOIN0 */ 102 + MSTP107, /* RGPVBG */ 103 + MSTP106, /* 2DG */ 104 + MSTP103, /* VIEW */ 105 + MSTP100, /* USB */ 106 + MSTP331, /* MMC */ 107 + MSTP330, /* MIMLB */ 108 + MSTP323, /* SDHI0 */ 109 + MSTP322, /* SDHI1 */ 110 + MSTP321, /* SDHI2 */ 111 + MSTP320, /* RQSPI */ 112 + MSTP319, /* SRC0 */ 113 + MSTP318, /* SRC1 */ 114 + MSTP317, /* RSPI */ 115 + MSTP316, /* RCAN0 */ 116 + MSTP315, /* RCAN1 */ 117 + MSTP314, /* FLTCL */ 118 + MSTP313, /* ADC */ 119 + MSTP312, /* MTU */ 120 + MSTP304, /* IE-BUS */ 121 + MSTP303, /* RTC */ 122 + MSTP302, /* HIF */ 123 + MSTP301, /* STIF0 */ 124 + MSTP300, /* STIF1 */ 125 + MSTP_NR }; 126 + 127 + static struct clk mstp_clks[MSTP_NR] = { 128 + /* MSTPCR0 */ 129 + [MSTP030] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 30, 0), 130 + [MSTP029] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 29, 0), 131 + [MSTP026] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 26, 0), 132 + [MSTP025] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 25, 0), 133 + [MSTP024] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 24, 0), 134 + [MSTP023] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 23, 0), 135 + [MSTP022] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 22, 0), 136 + [MSTP021] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 21, 0), 137 + [MSTP019] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 19, 0), 138 + [MSTP016] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 16, 0), 139 + [MSTP015] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 15, 0), 140 + [MSTP014] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 14, 0), 141 + [MSTP012] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 12, 0), 142 + [MSTP011] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 11, 0), 143 + [MSTP010] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 10, 0), 144 + [MSTP009] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 9, 0), 145 + [MSTP008] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 8, 0), 146 + [MSTP007] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR0, 7, 0), 147 + 148 + /* MSTPCR1 */ 149 + [MSTP115] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 15, 0), 150 + [MSTP114] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 14, 0), 151 + [MSTP111] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 11, 0), 152 + [MSTP109] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 9, 0), 153 + [MSTP108] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 8, 0), 154 + [MSTP107] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 7, 0), 155 + [MSTP106] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 6, 0), 156 + [MSTP103] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 3, 0), 157 + [MSTP100] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR1, 0, 0), 158 + 159 + /* MSTPCR3 */ 160 + [MSTP331] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 31, 0), 161 + [MSTP330] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 30, 0), 162 + [MSTP323] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 23, 0), 163 + [MSTP322] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 22, 0), 164 + [MSTP321] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 21, 0), 165 + [MSTP320] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 20, 0), 166 + [MSTP319] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 19, 0), 167 + [MSTP318] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 18, 0), 168 + [MSTP317] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 17, 0), 169 + [MSTP316] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 16, 0), 170 + [MSTP315] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 15, 0), 171 + [MSTP314] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 14, 0), 172 + [MSTP313] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 13, 0), 173 + [MSTP312] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 12, 0), 174 + [MSTP304] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 4, 0), 175 + [MSTP303] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 3, 0), 176 + [MSTP302] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 2, 0), 177 + [MSTP301] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 1, 0), 178 + [MSTP300] = SH_CLK_MSTP32(&div4_clks[DIV4_P], MSTPCR3, 0, 0), 179 + }; 180 + 181 + static struct clk_lookup lookups[] = { 182 + /* main clocks */ 183 + CLKDEV_CON_ID("extal", &extal_clk), 184 + CLKDEV_CON_ID("pll_clk", &pll_clk), 185 + 186 + /* clocks */ 187 + CLKDEV_CON_ID("cpu_clk", &div4_clks[DIV4_I]), 188 + CLKDEV_CON_ID("shyway_clk", &div4_clks[DIV4_S]), 189 + CLKDEV_CON_ID("ddr_clk", &div4_clks[DIV4_M]), 190 + CLKDEV_CON_ID("bus_clk", &div4_clks[DIV4_B]), 191 + CLKDEV_CON_ID("shyway_clk1", &div4_clks[DIV4_S1]), 192 + CLKDEV_CON_ID("peripheral_clk", &div4_clks[DIV4_P]), 193 + 194 + /* MSTP32 clocks */ 195 + CLKDEV_DEV_ID("i2c-sh7734.0", &mstp_clks[MSTP030]), 196 + CLKDEV_DEV_ID("i2c-sh7734.1", &mstp_clks[MSTP029]), 197 + CLKDEV_ICK_ID("sci_fck", "sh-sci.0", &mstp_clks[MSTP026]), 198 + CLKDEV_ICK_ID("sci_fck", "sh-sci.1", &mstp_clks[MSTP025]), 199 + CLKDEV_ICK_ID("sci_fck", "sh-sci.2", &mstp_clks[MSTP024]), 200 + CLKDEV_ICK_ID("sci_fck", "sh-sci.3", &mstp_clks[MSTP023]), 201 + CLKDEV_ICK_ID("sci_fck", "sh-sci.4", &mstp_clks[MSTP022]), 202 + CLKDEV_ICK_ID("sci_fck", "sh-sci.5", &mstp_clks[MSTP021]), 203 + CLKDEV_CON_ID("hscif", &mstp_clks[MSTP019]), 204 + CLKDEV_ICK_ID("tmu_fck", "sh_tmu.0", &mstp_clks[MSTP016]), 205 + CLKDEV_ICK_ID("tmu_fck", "sh_tmu.1", &mstp_clks[MSTP016]), 206 + CLKDEV_ICK_ID("tmu_fck", "sh_tmu.2", &mstp_clks[MSTP016]), 207 + CLKDEV_ICK_ID("tmu_fck", "sh_tmu.3", &mstp_clks[MSTP015]), 208 + CLKDEV_ICK_ID("tmu_fck", "sh_tmu.4", &mstp_clks[MSTP015]), 209 + CLKDEV_ICK_ID("tmu_fck", "sh_tmu.5", &mstp_clks[MSTP015]), 210 + CLKDEV_ICK_ID("tmu_fck", "sh_tmu.6", &mstp_clks[MSTP014]), 211 + CLKDEV_ICK_ID("tmu_fck", "sh_tmu.7", &mstp_clks[MSTP014]), 212 + CLKDEV_ICK_ID("tmu_fck", "sh_tmu.8", &mstp_clks[MSTP014]), 213 + CLKDEV_CON_ID("ssi0", &mstp_clks[MSTP012]), 214 + CLKDEV_CON_ID("ssi1", &mstp_clks[MSTP011]), 215 + CLKDEV_CON_ID("ssi2", &mstp_clks[MSTP010]), 216 + CLKDEV_CON_ID("ssi3", &mstp_clks[MSTP009]), 217 + CLKDEV_CON_ID("sss", &mstp_clks[MSTP008]), 218 + CLKDEV_CON_ID("hspi", &mstp_clks[MSTP007]), 219 + CLKDEV_CON_ID("usb_fck", &mstp_clks[MSTP100]), 220 + CLKDEV_CON_ID("videoin0", &mstp_clks[MSTP109]), 221 + CLKDEV_CON_ID("videoin1", &mstp_clks[MSTP108]), 222 + CLKDEV_CON_ID("rgpvg", &mstp_clks[MSTP107]), 223 + CLKDEV_CON_ID("2dg", &mstp_clks[MSTP106]), 224 + CLKDEV_CON_ID("view", &mstp_clks[MSTP103]), 225 + 226 + CLKDEV_CON_ID("mmc0", &mstp_clks[MSTP331]), 227 + CLKDEV_CON_ID("mimlb0", &mstp_clks[MSTP330]), 228 + CLKDEV_CON_ID("sdhi0", &mstp_clks[MSTP323]), 229 + CLKDEV_CON_ID("sdhi1", &mstp_clks[MSTP322]), 230 + CLKDEV_CON_ID("sdhi2", &mstp_clks[MSTP321]), 231 + CLKDEV_CON_ID("rqspi0", &mstp_clks[MSTP320]), 232 + CLKDEV_CON_ID("src0", &mstp_clks[MSTP319]), 233 + CLKDEV_CON_ID("src1", &mstp_clks[MSTP318]), 234 + CLKDEV_CON_ID("rsp0", &mstp_clks[MSTP317]), 235 + CLKDEV_CON_ID("rcan0", &mstp_clks[MSTP316]), 236 + CLKDEV_CON_ID("rcan1", &mstp_clks[MSTP315]), 237 + CLKDEV_CON_ID("fltcl0", &mstp_clks[MSTP314]), 238 + CLKDEV_CON_ID("adc0", &mstp_clks[MSTP313]), 239 + CLKDEV_CON_ID("mtu0", &mstp_clks[MSTP312]), 240 + CLKDEV_CON_ID("iebus0", &mstp_clks[MSTP304]), 241 + CLKDEV_DEV_ID("sh-eth.0", &mstp_clks[MSTP114]), 242 + CLKDEV_CON_ID("rtc0", &mstp_clks[MSTP303]), 243 + CLKDEV_CON_ID("hif0", &mstp_clks[MSTP302]), 244 + CLKDEV_CON_ID("stif0", &mstp_clks[MSTP301]), 245 + CLKDEV_CON_ID("stif1", &mstp_clks[MSTP300]), 246 + }; 247 + 248 + int __init arch_clk_init(void) 249 + { 250 + int i, ret = 0; 251 + 252 + for (i = 0; i < ARRAY_SIZE(main_clks); i++) 253 + ret |= clk_register(main_clks[i]); 254 + 255 + for (i = 0; i < ARRAY_SIZE(lookups); i++) 256 + clkdev_add(&lookups[i]); 257 + 258 + if (!ret) 259 + ret = sh_clk_div4_register(div4_clks, ARRAY_SIZE(div4_clks), 260 + &div4_table); 261 + 262 + if (!ret) 263 + ret = sh_clk_mstp32_register(mstp_clks, MSTP_NR); 264 + 265 + return ret; 266 + }
+800
arch/sh/kernel/cpu/sh4a/setup-sh7734.c
··· 1 + /* 2 + * arch/sh/kernel/cpu/sh4a/setup-sh7734.c 3 + 4 + * SH7734 Setup 5 + * 6 + * Copyright (C) 2011,2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> 7 + * Copyright (C) 2011,2012 Renesas Solutions Corp. 8 + * 9 + * This file is subject to the terms and conditions of the GNU General Public 10 + * License. See the file "COPYING" in the main directory of this archive 11 + * for more details. 12 + */ 13 + 14 + #include <linux/platform_device.h> 15 + #include <linux/init.h> 16 + #include <linux/serial.h> 17 + #include <linux/mm.h> 18 + #include <linux/dma-mapping.h> 19 + #include <linux/serial_sci.h> 20 + #include <linux/sh_timer.h> 21 + #include <linux/io.h> 22 + #include <asm/clock.h> 23 + #include <asm/irq.h> 24 + #include <cpu/sh7734.h> 25 + 26 + /* SCIF */ 27 + static struct plat_sci_port scif0_platform_data = { 28 + .mapbase = 0xFFE40000, 29 + .flags = UPF_BOOT_AUTOCONF, 30 + .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE, 31 + .scbrr_algo_id = SCBRR_ALGO_2, 32 + .type = PORT_SCIF, 33 + .irqs = SCIx_IRQ_MUXED(evt2irq(0x8C0)), 34 + .regtype = SCIx_SH4_SCIF_REGTYPE, 35 + }; 36 + 37 + static struct platform_device scif0_device = { 38 + .name = "sh-sci", 39 + .id = 0, 40 + .dev = { 41 + .platform_data = &scif0_platform_data, 42 + }, 43 + }; 44 + 45 + static struct plat_sci_port scif1_platform_data = { 46 + .mapbase = 0xFFE41000, 47 + .flags = UPF_BOOT_AUTOCONF, 48 + .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE, 49 + .scbrr_algo_id = SCBRR_ALGO_2, 50 + .type = PORT_SCIF, 51 + .irqs = SCIx_IRQ_MUXED(evt2irq(0x8E0)), 52 + .regtype = SCIx_SH4_SCIF_REGTYPE, 53 + }; 54 + 55 + static struct platform_device scif1_device = { 56 + .name = "sh-sci", 57 + .id = 1, 58 + .dev = { 59 + .platform_data = &scif1_platform_data, 60 + }, 61 + }; 62 + 63 + static struct plat_sci_port scif2_platform_data = { 64 + .mapbase = 0xFFE42000, 65 + .flags = UPF_BOOT_AUTOCONF, 66 + .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE, 67 + .scbrr_algo_id = SCBRR_ALGO_2, 68 + .type = PORT_SCIF, 69 + .irqs = SCIx_IRQ_MUXED(evt2irq(0x900)), 70 + .regtype = SCIx_SH4_SCIF_REGTYPE, 71 + }; 72 + 73 + static struct platform_device scif2_device = { 74 + .name = "sh-sci", 75 + .id = 2, 76 + .dev = { 77 + .platform_data = &scif2_platform_data, 78 + }, 79 + }; 80 + 81 + static struct plat_sci_port scif3_platform_data = { 82 + .mapbase = 0xFFE43000, 83 + .flags = UPF_BOOT_AUTOCONF, 84 + .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE | SCSCR_TOIE, 85 + .scbrr_algo_id = SCBRR_ALGO_2, 86 + .type = PORT_SCIF, 87 + .irqs = SCIx_IRQ_MUXED(evt2irq(0x920)), 88 + .regtype = SCIx_SH4_SCIF_REGTYPE, 89 + }; 90 + 91 + static struct platform_device scif3_device = { 92 + .name = "sh-sci", 93 + .id = 3, 94 + .dev = { 95 + .platform_data = &scif3_platform_data, 96 + }, 97 + }; 98 + 99 + static struct plat_sci_port scif4_platform_data = { 100 + .mapbase = 0xFFE44000, 101 + .flags = UPF_BOOT_AUTOCONF, 102 + .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE, 103 + .scbrr_algo_id = SCBRR_ALGO_2, 104 + .type = PORT_SCIF, 105 + .irqs = SCIx_IRQ_MUXED(evt2irq(0x940)), 106 + .regtype = SCIx_SH4_SCIF_REGTYPE, 107 + }; 108 + 109 + static struct platform_device scif4_device = { 110 + .name = "sh-sci", 111 + .id = 4, 112 + .dev = { 113 + .platform_data = &scif4_platform_data, 114 + }, 115 + }; 116 + 117 + static struct plat_sci_port scif5_platform_data = { 118 + .mapbase = 0xFFE43000, 119 + .flags = UPF_BOOT_AUTOCONF, 120 + .scscr = SCSCR_RE | SCSCR_TE | SCSCR_REIE, 121 + .scbrr_algo_id = SCBRR_ALGO_2, 122 + .type = PORT_SCIF, 123 + .irqs = SCIx_IRQ_MUXED(evt2irq(0x960)), 124 + .regtype = SCIx_SH4_SCIF_REGTYPE, 125 + }; 126 + 127 + static struct platform_device scif5_device = { 128 + .name = "sh-sci", 129 + .id = 5, 130 + .dev = { 131 + .platform_data = &scif5_platform_data, 132 + }, 133 + }; 134 + 135 + /* RTC */ 136 + static struct resource rtc_resources[] = { 137 + [0] = { 138 + .name = "rtc", 139 + .start = 0xFFFC5000, 140 + .end = 0xFFFC5000 + 0x26 - 1, 141 + .flags = IORESOURCE_IO, 142 + }, 143 + [1] = { 144 + .start = evt2irq(0xC00), 145 + .flags = IORESOURCE_IRQ, 146 + }, 147 + }; 148 + 149 + static struct platform_device rtc_device = { 150 + .name = "sh-rtc", 151 + .id = -1, 152 + .num_resources = ARRAY_SIZE(rtc_resources), 153 + .resource = rtc_resources, 154 + }; 155 + 156 + /* I2C 0 */ 157 + static struct resource i2c0_resources[] = { 158 + [0] = { 159 + .name = "IIC0", 160 + .start = 0xFFC70000, 161 + .end = 0xFFC7000A - 1, 162 + .flags = IORESOURCE_MEM, 163 + }, 164 + [1] = { 165 + .start = evt2irq(0x860), 166 + .flags = IORESOURCE_IRQ, 167 + }, 168 + }; 169 + 170 + static struct platform_device i2c0_device = { 171 + .name = "i2c-sh7734", 172 + .id = 0, 173 + .num_resources = ARRAY_SIZE(i2c0_resources), 174 + .resource = i2c0_resources, 175 + }; 176 + 177 + /* TMU */ 178 + static struct sh_timer_config tmu0_platform_data = { 179 + .channel_offset = 0x04, 180 + .timer_bit = 0, 181 + .clockevent_rating = 200, 182 + }; 183 + 184 + static struct resource tmu0_resources[] = { 185 + [0] = { 186 + .start = 0xFFD80008, 187 + .end = 0xFFD80014 - 1, 188 + .flags = IORESOURCE_MEM, 189 + }, 190 + [1] = { 191 + .start = evt2irq(0x400), 192 + .flags = IORESOURCE_IRQ, 193 + }, 194 + }; 195 + 196 + static struct platform_device tmu0_device = { 197 + .name = "sh_tmu", 198 + .id = 0, 199 + .dev = { 200 + .platform_data = &tmu0_platform_data, 201 + }, 202 + .resource = tmu0_resources, 203 + .num_resources = ARRAY_SIZE(tmu0_resources), 204 + }; 205 + 206 + static struct sh_timer_config tmu1_platform_data = { 207 + .channel_offset = 0x10, 208 + .timer_bit = 1, 209 + .clocksource_rating = 200, 210 + }; 211 + 212 + static struct resource tmu1_resources[] = { 213 + [0] = { 214 + .start = 0xFFD80014, 215 + .end = 0xFFD80020 - 1, 216 + .flags = IORESOURCE_MEM, 217 + }, 218 + [1] = { 219 + .start = evt2irq(0x420), 220 + .flags = IORESOURCE_IRQ, 221 + }, 222 + }; 223 + 224 + static struct platform_device tmu1_device = { 225 + .name = "sh_tmu", 226 + .id = 1, 227 + .dev = { 228 + .platform_data = &tmu1_platform_data, 229 + }, 230 + .resource = tmu1_resources, 231 + .num_resources = ARRAY_SIZE(tmu1_resources), 232 + }; 233 + 234 + static struct sh_timer_config tmu2_platform_data = { 235 + .channel_offset = 0x1c, 236 + .timer_bit = 2, 237 + }; 238 + 239 + static struct resource tmu2_resources[] = { 240 + [0] = { 241 + .start = 0xFFD80020, 242 + .end = 0xFFD80030 - 1, 243 + .flags = IORESOURCE_MEM, 244 + }, 245 + [1] = { 246 + .start = evt2irq(0x440), 247 + .flags = IORESOURCE_IRQ, 248 + }, 249 + }; 250 + 251 + static struct platform_device tmu2_device = { 252 + .name = "sh_tmu", 253 + .id = 2, 254 + .dev = { 255 + .platform_data = &tmu2_platform_data, 256 + }, 257 + .resource = tmu2_resources, 258 + .num_resources = ARRAY_SIZE(tmu2_resources), 259 + }; 260 + 261 + 262 + static struct sh_timer_config tmu3_platform_data = { 263 + .channel_offset = 0x04, 264 + .timer_bit = 0, 265 + }; 266 + 267 + static struct resource tmu3_resources[] = { 268 + [0] = { 269 + .start = 0xFFD81008, 270 + .end = 0xFFD81014 - 1, 271 + .flags = IORESOURCE_MEM, 272 + }, 273 + [1] = { 274 + .start = evt2irq(0x480), 275 + .flags = IORESOURCE_IRQ, 276 + }, 277 + }; 278 + 279 + static struct platform_device tmu3_device = { 280 + .name = "sh_tmu", 281 + .id = 3, 282 + .dev = { 283 + .platform_data = &tmu3_platform_data, 284 + }, 285 + .resource = tmu3_resources, 286 + .num_resources = ARRAY_SIZE(tmu3_resources), 287 + }; 288 + 289 + static struct sh_timer_config tmu4_platform_data = { 290 + .channel_offset = 0x10, 291 + .timer_bit = 1, 292 + }; 293 + 294 + static struct resource tmu4_resources[] = { 295 + [0] = { 296 + .start = 0xFFD81014, 297 + .end = 0xFFD81020 - 1, 298 + .flags = IORESOURCE_MEM, 299 + }, 300 + [1] = { 301 + .start = evt2irq(0x4A0), 302 + .flags = IORESOURCE_IRQ, 303 + }, 304 + }; 305 + 306 + static struct platform_device tmu4_device = { 307 + .name = "sh_tmu", 308 + .id = 4, 309 + .dev = { 310 + .platform_data = &tmu4_platform_data, 311 + }, 312 + .resource = tmu4_resources, 313 + .num_resources = ARRAY_SIZE(tmu4_resources), 314 + }; 315 + 316 + static struct sh_timer_config tmu5_platform_data = { 317 + .channel_offset = 0x1c, 318 + .timer_bit = 2, 319 + }; 320 + 321 + static struct resource tmu5_resources[] = { 322 + [0] = { 323 + .start = 0xFFD81020, 324 + .end = 0xFFD81030 - 1, 325 + .flags = IORESOURCE_MEM, 326 + }, 327 + [1] = { 328 + .start = evt2irq(0x4C0), 329 + .flags = IORESOURCE_IRQ, 330 + }, 331 + }; 332 + 333 + static struct platform_device tmu5_device = { 334 + .name = "sh_tmu", 335 + .id = 5, 336 + .dev = { 337 + .platform_data = &tmu5_platform_data, 338 + }, 339 + .resource = tmu5_resources, 340 + .num_resources = ARRAY_SIZE(tmu5_resources), 341 + }; 342 + 343 + static struct sh_timer_config tmu6_platform_data = { 344 + .channel_offset = 0x4, 345 + .timer_bit = 0, 346 + }; 347 + 348 + static struct resource tmu6_resources[] = { 349 + [0] = { 350 + .start = 0xFFD82008, 351 + .end = 0xFFD82014 - 1, 352 + .flags = IORESOURCE_MEM, 353 + }, 354 + [1] = { 355 + .start = evt2irq(0x500), 356 + .flags = IORESOURCE_IRQ, 357 + }, 358 + }; 359 + 360 + static struct platform_device tmu6_device = { 361 + .name = "sh_tmu", 362 + .id = 6, 363 + .dev = { 364 + .platform_data = &tmu6_platform_data, 365 + }, 366 + .resource = tmu6_resources, 367 + .num_resources = ARRAY_SIZE(tmu6_resources), 368 + }; 369 + 370 + static struct sh_timer_config tmu7_platform_data = { 371 + .channel_offset = 0x10, 372 + .timer_bit = 1, 373 + }; 374 + 375 + static struct resource tmu7_resources[] = { 376 + [0] = { 377 + .start = 0xFFD82014, 378 + .end = 0xFFD82020 - 1, 379 + .flags = IORESOURCE_MEM, 380 + }, 381 + [1] = { 382 + .start = evt2irq(0x520), 383 + .flags = IORESOURCE_IRQ, 384 + }, 385 + }; 386 + 387 + static struct platform_device tmu7_device = { 388 + .name = "sh_tmu", 389 + .id = 7, 390 + .dev = { 391 + .platform_data = &tmu7_platform_data, 392 + }, 393 + .resource = tmu7_resources, 394 + .num_resources = ARRAY_SIZE(tmu7_resources), 395 + }; 396 + 397 + static struct sh_timer_config tmu8_platform_data = { 398 + .channel_offset = 0x1c, 399 + .timer_bit = 2, 400 + }; 401 + 402 + static struct resource tmu8_resources[] = { 403 + [0] = { 404 + .start = 0xFFD82020, 405 + .end = 0xFFD82030 - 1, 406 + .flags = IORESOURCE_MEM, 407 + }, 408 + [1] = { 409 + .start = evt2irq(0x540), 410 + .flags = IORESOURCE_IRQ, 411 + }, 412 + }; 413 + 414 + static struct platform_device tmu8_device = { 415 + .name = "sh_tmu", 416 + .id = 8, 417 + .dev = { 418 + .platform_data = &tmu8_platform_data, 419 + }, 420 + .resource = tmu8_resources, 421 + .num_resources = ARRAY_SIZE(tmu8_resources), 422 + }; 423 + 424 + static struct platform_device *sh7734_devices[] __initdata = { 425 + &scif0_device, 426 + &scif1_device, 427 + &scif2_device, 428 + &scif3_device, 429 + &scif4_device, 430 + &scif5_device, 431 + &tmu0_device, 432 + &tmu1_device, 433 + &tmu2_device, 434 + &tmu3_device, 435 + &tmu4_device, 436 + &tmu5_device, 437 + &tmu6_device, 438 + &tmu7_device, 439 + &tmu8_device, 440 + &rtc_device, 441 + }; 442 + 443 + static struct platform_device *sh7734_early_devices[] __initdata = { 444 + &scif0_device, 445 + &scif1_device, 446 + &scif2_device, 447 + &scif3_device, 448 + &scif4_device, 449 + &scif5_device, 450 + &tmu0_device, 451 + &tmu1_device, 452 + &tmu2_device, 453 + &tmu3_device, 454 + &tmu4_device, 455 + &tmu5_device, 456 + &tmu6_device, 457 + &tmu7_device, 458 + &tmu8_device, 459 + }; 460 + 461 + void __init plat_early_device_setup(void) 462 + { 463 + early_platform_add_devices(sh7734_early_devices, 464 + ARRAY_SIZE(sh7734_early_devices)); 465 + } 466 + 467 + #define GROUP 0 468 + enum { 469 + UNUSED = 0, 470 + 471 + /* interrupt sources */ 472 + 473 + IRL0_LLLL, IRL0_LLLH, IRL0_LLHL, IRL0_LLHH, 474 + IRL0_LHLL, IRL0_LHLH, IRL0_LHHL, IRL0_LHHH, 475 + IRL0_HLLL, IRL0_HLLH, IRL0_HLHL, IRL0_HLHH, 476 + IRL0_HHLL, IRL0_HHLH, IRL0_HHHL, 477 + 478 + IRQ0, IRQ1, IRQ2, IRQ3, 479 + DU, 480 + TMU00, TMU10, TMU20, TMU21, 481 + TMU30, TMU40, TMU50, TMU51, 482 + TMU60, TMU70, TMU80, 483 + RESET_WDT, 484 + USB, 485 + HUDI, 486 + SHDMAC, 487 + SSI0, SSI1, SSI2, SSI3, 488 + VIN0, 489 + RGPVG, 490 + _2DG, 491 + MMC, 492 + HSPI, 493 + LBSCATA, 494 + I2C0, 495 + RCAN0, 496 + MIMLB, 497 + SCIF0, SCIF1, SCIF2, SCIF3, SCIF4, SCIF5, 498 + LBSCDMAC0, LBSCDMAC1, LBSCDMAC2, 499 + RCAN1, 500 + SDHI0, SDHI1, 501 + IEBUS, 502 + HPBDMAC0_3, HPBDMAC4_10, HPBDMAC11_18, HPBDMAC19_22, HPBDMAC23_25_27_28, 503 + RTC, 504 + VIN1, 505 + LCDC, 506 + SRC0, SRC1, 507 + GETHER, 508 + SDHI2, 509 + GPIO0_3, GPIO4_5, 510 + STIF0, STIF1, 511 + ADMAC, 512 + HIF, 513 + FLCTL, 514 + ADC, 515 + MTU2, 516 + RSPI, 517 + QSPI, 518 + HSCIF, 519 + VEU3F_VE3, 520 + 521 + /* Group */ 522 + /* Mask */ 523 + STIF_M, 524 + GPIO_M, 525 + HPBDMAC_M, 526 + LBSCDMAC_M, 527 + RCAN_M, 528 + SRC_M, 529 + SCIF_M, 530 + LCDC_M, 531 + _2DG_M, 532 + VIN_M, 533 + TMU_3_M, 534 + TMU_0_M, 535 + 536 + /* Priority */ 537 + RCAN_P, 538 + LBSCDMAC_P, 539 + 540 + /* Common */ 541 + SDHI, 542 + SSI, 543 + SPI, 544 + }; 545 + 546 + static struct intc_vect vectors[] __initdata = { 547 + INTC_VECT(DU, 0x3E0), 548 + INTC_VECT(TMU00, 0x400), 549 + INTC_VECT(TMU10, 0x420), 550 + INTC_VECT(TMU20, 0x440), 551 + INTC_VECT(TMU30, 0x480), 552 + INTC_VECT(TMU40, 0x4A0), 553 + INTC_VECT(TMU50, 0x4C0), 554 + INTC_VECT(TMU51, 0x4E0), 555 + INTC_VECT(TMU60, 0x500), 556 + INTC_VECT(TMU70, 0x520), 557 + INTC_VECT(TMU80, 0x540), 558 + INTC_VECT(RESET_WDT, 0x560), 559 + INTC_VECT(USB, 0x580), 560 + INTC_VECT(HUDI, 0x600), 561 + INTC_VECT(SHDMAC, 0x620), 562 + INTC_VECT(SSI0, 0x6C0), 563 + INTC_VECT(SSI1, 0x6E0), 564 + INTC_VECT(SSI2, 0x700), 565 + INTC_VECT(SSI3, 0x720), 566 + INTC_VECT(VIN0, 0x740), 567 + INTC_VECT(RGPVG, 0x760), 568 + INTC_VECT(_2DG, 0x780), 569 + INTC_VECT(MMC, 0x7A0), 570 + INTC_VECT(HSPI, 0x7E0), 571 + INTC_VECT(LBSCATA, 0x840), 572 + INTC_VECT(I2C0, 0x860), 573 + INTC_VECT(RCAN0, 0x880), 574 + INTC_VECT(SCIF0, 0x8A0), 575 + INTC_VECT(SCIF1, 0x8C0), 576 + INTC_VECT(SCIF2, 0x900), 577 + INTC_VECT(SCIF3, 0x920), 578 + INTC_VECT(SCIF4, 0x940), 579 + INTC_VECT(SCIF5, 0x960), 580 + INTC_VECT(LBSCDMAC0, 0x9E0), 581 + INTC_VECT(LBSCDMAC1, 0xA00), 582 + INTC_VECT(LBSCDMAC2, 0xA20), 583 + INTC_VECT(RCAN1, 0xA60), 584 + INTC_VECT(SDHI0, 0xAE0), 585 + INTC_VECT(SDHI1, 0xB00), 586 + INTC_VECT(IEBUS, 0xB20), 587 + INTC_VECT(HPBDMAC0_3, 0xB60), 588 + INTC_VECT(HPBDMAC4_10, 0xB80), 589 + INTC_VECT(HPBDMAC11_18, 0xBA0), 590 + INTC_VECT(HPBDMAC19_22, 0xBC0), 591 + INTC_VECT(HPBDMAC23_25_27_28, 0xBE0), 592 + INTC_VECT(RTC, 0xC00), 593 + INTC_VECT(VIN1, 0xC20), 594 + INTC_VECT(LCDC, 0xC40), 595 + INTC_VECT(SRC0, 0xC60), 596 + INTC_VECT(SRC1, 0xC80), 597 + INTC_VECT(GETHER, 0xCA0), 598 + INTC_VECT(SDHI2, 0xCC0), 599 + INTC_VECT(GPIO0_3, 0xCE0), 600 + INTC_VECT(GPIO4_5, 0xD00), 601 + INTC_VECT(STIF0, 0xD20), 602 + INTC_VECT(STIF1, 0xD40), 603 + INTC_VECT(ADMAC, 0xDA0), 604 + INTC_VECT(HIF, 0xDC0), 605 + INTC_VECT(FLCTL, 0xDE0), 606 + INTC_VECT(ADC, 0xE00), 607 + INTC_VECT(MTU2, 0xE20), 608 + INTC_VECT(RSPI, 0xE40), 609 + INTC_VECT(QSPI, 0xE60), 610 + INTC_VECT(HSCIF, 0xFC0), 611 + INTC_VECT(VEU3F_VE3, 0xF40), 612 + }; 613 + 614 + static struct intc_group groups[] __initdata = { 615 + /* Common */ 616 + INTC_GROUP(SDHI, SDHI0, SDHI1, SDHI2), 617 + INTC_GROUP(SPI, HSPI, RSPI, QSPI), 618 + INTC_GROUP(SSI, SSI0, SSI1, SSI2, SSI3), 619 + 620 + /* Mask group */ 621 + INTC_GROUP(STIF_M, STIF0, STIF1), /* 22 */ 622 + INTC_GROUP(GPIO_M, GPIO0_3, GPIO4_5), /* 21 */ 623 + INTC_GROUP(HPBDMAC_M, HPBDMAC0_3, HPBDMAC4_10, HPBDMAC11_18, 624 + HPBDMAC19_22, HPBDMAC23_25_27_28), /* 19 */ 625 + INTC_GROUP(LBSCDMAC_M, LBSCDMAC0, LBSCDMAC1, LBSCDMAC2), /* 18 */ 626 + INTC_GROUP(RCAN_M, RCAN0, RCAN1, IEBUS), /* 17 */ 627 + INTC_GROUP(SRC_M, SRC0, SRC1), /* 16 */ 628 + INTC_GROUP(SCIF_M, SCIF0, SCIF1, SCIF2, SCIF3, SCIF4, SCIF5, 629 + HSCIF), /* 14 */ 630 + INTC_GROUP(LCDC_M, LCDC, MIMLB), /* 13 */ 631 + INTC_GROUP(_2DG_M, _2DG, RGPVG), /* 12 */ 632 + INTC_GROUP(VIN_M, VIN0, VIN1), /* 10 */ 633 + INTC_GROUP(TMU_3_M, TMU30, TMU40, TMU50, TMU51, 634 + TMU60, TMU60, TMU70, TMU80), /* 2 */ 635 + INTC_GROUP(TMU_0_M, TMU00, TMU10, TMU20, TMU21), /* 1 */ 636 + 637 + /* Priority group*/ 638 + INTC_GROUP(RCAN_P, RCAN0, RCAN1), /* INT2PRI5 */ 639 + INTC_GROUP(LBSCDMAC_P, LBSCDMAC0, LBSCDMAC1), /* INT2PRI5 */ 640 + }; 641 + 642 + static struct intc_mask_reg mask_registers[] __initdata = { 643 + { 0xFF804040, 0xFF804044, 32, /* INT2MSKRG / INT2MSKCR */ 644 + { 0, 645 + VEU3F_VE3, 646 + SDHI, /* SDHI 0-2 */ 647 + ADMAC, 648 + FLCTL, 649 + RESET_WDT, 650 + HIF, 651 + ADC, 652 + MTU2, 653 + STIF_M, /* STIF 0,1 */ 654 + GPIO_M, /* GPIO 0-5*/ 655 + GETHER, 656 + HPBDMAC_M, /* HPBDMAC 0_3 - 23_25_27_28 */ 657 + LBSCDMAC_M, /* LBSCDMAC 0 - 2 */ 658 + RCAN_M, /* RCAN, IEBUS */ 659 + SRC_M, /* SRC 0,1 */ 660 + LBSCATA, 661 + SCIF_M, /* SCIF 0-5, HSCIF */ 662 + LCDC_M, /* LCDC, MIMLB */ 663 + _2DG_M, /* 2DG, RGPVG */ 664 + SPI, /* HSPI, RSPI, QSPI */ 665 + VIN_M, /* VIN0, 1 */ 666 + SSI, /* SSI 0-3 */ 667 + USB, 668 + SHDMAC, 669 + HUDI, 670 + MMC, 671 + RTC, 672 + I2C0, /* I2C */ /* I2C 0, 1*/ 673 + TMU_3_M, /* TMU30 - TMU80 */ 674 + TMU_0_M, /* TMU00 - TMU21 */ 675 + DU } }, 676 + }; 677 + 678 + static struct intc_prio_reg prio_registers[] __initdata = { 679 + { 0xFF804000, 0, 32, 8, /* INT2PRI0 */ 680 + { DU, TMU00, TMU10, TMU20 } }, 681 + { 0xFF804004, 0, 32, 8, /* INT2PRI1 */ 682 + { TMU30, TMU60, RTC, SDHI } }, 683 + { 0xFF804008, 0, 32, 8, /* INT2PRI2 */ 684 + { HUDI, SHDMAC, USB, SSI } }, 685 + { 0xFF80400C, 0, 32, 8, /* INT2PRI3 */ 686 + { VIN0, SPI, _2DG, LBSCATA } }, 687 + { 0xFF804010, 0, 32, 8, /* INT2PRI4 */ 688 + { SCIF0, SCIF3, HSCIF, LCDC } }, 689 + { 0xFF804014, 0, 32, 8, /* INT2PRI5 */ 690 + { RCAN_P, LBSCDMAC_P, LBSCDMAC2, MMC } }, 691 + { 0xFF804018, 0, 32, 8, /* INT2PRI6 */ 692 + { HPBDMAC0_3, HPBDMAC4_10, HPBDMAC11_18, HPBDMAC19_22 } }, 693 + { 0xFF80401C, 0, 32, 8, /* INT2PRI7 */ 694 + { HPBDMAC23_25_27_28, I2C0, SRC0, SRC1 } }, 695 + { 0xFF804020, 0, 32, 8, /* INT2PRI8 */ 696 + { 0 /* ADIF */, VIN1, RESET_WDT, HIF } }, 697 + { 0xFF804024, 0, 32, 8, /* INT2PRI9 */ 698 + { ADMAC, FLCTL, GPIO0_3, GPIO4_5 } }, 699 + { 0xFF804028, 0, 32, 8, /* INT2PRI10 */ 700 + { STIF0, STIF1, VEU3F_VE3, GETHER } }, 701 + { 0xFF80402C, 0, 32, 8, /* INT2PRI11 */ 702 + { MTU2, RGPVG, MIMLB, IEBUS } }, 703 + }; 704 + 705 + static DECLARE_INTC_DESC(intc_desc, "sh7734", vectors, groups, 706 + mask_registers, prio_registers, NULL); 707 + 708 + /* Support for external interrupt pins in IRQ mode */ 709 + 710 + static struct intc_vect irq3210_vectors[] __initdata = { 711 + INTC_VECT(IRQ0, 0x240), INTC_VECT(IRQ1, 0x280), 712 + INTC_VECT(IRQ2, 0x2C0), INTC_VECT(IRQ3, 0x300), 713 + }; 714 + 715 + static struct intc_sense_reg irq3210_sense_registers[] __initdata = { 716 + { 0xFF80201C, 32, 2, /* ICR1 */ 717 + { IRQ0, IRQ1, IRQ2, IRQ3, } }, 718 + }; 719 + 720 + static struct intc_mask_reg irq3210_ack_registers[] __initdata = { 721 + { 0xFF802024, 0, 32, /* INTREQ */ 722 + { IRQ0, IRQ1, IRQ2, IRQ3, } }, 723 + }; 724 + 725 + static struct intc_mask_reg irq3210_mask_registers[] __initdata = { 726 + { 0xFF802044, 0xFF802064, 32, /* INTMSK0 / INTMSKCLR0 */ 727 + { IRQ0, IRQ1, IRQ2, IRQ3, } }, 728 + }; 729 + 730 + static struct intc_prio_reg irq3210_prio_registers[] __initdata = { 731 + { 0xFF802010, 0, 32, 4, /* INTPRI */ 732 + { IRQ0, IRQ1, IRQ2, IRQ3, } }, 733 + }; 734 + 735 + static DECLARE_INTC_DESC_ACK(intc_desc_irq3210, "sh7734-irq3210", 736 + irq3210_vectors, NULL, 737 + irq3210_mask_registers, irq3210_prio_registers, 738 + irq3210_sense_registers, irq3210_ack_registers); 739 + 740 + /* External interrupt pins in IRL mode */ 741 + 742 + static struct intc_vect vectors_irl3210[] __initdata = { 743 + INTC_VECT(IRL0_LLLL, 0x200), INTC_VECT(IRL0_LLLH, 0x220), 744 + INTC_VECT(IRL0_LLHL, 0x240), INTC_VECT(IRL0_LLHH, 0x260), 745 + INTC_VECT(IRL0_LHLL, 0x280), INTC_VECT(IRL0_LHLH, 0x2a0), 746 + INTC_VECT(IRL0_LHHL, 0x2c0), INTC_VECT(IRL0_LHHH, 0x2e0), 747 + INTC_VECT(IRL0_HLLL, 0x300), INTC_VECT(IRL0_HLLH, 0x320), 748 + INTC_VECT(IRL0_HLHL, 0x340), INTC_VECT(IRL0_HLHH, 0x360), 749 + INTC_VECT(IRL0_HHLL, 0x380), INTC_VECT(IRL0_HHLH, 0x3a0), 750 + INTC_VECT(IRL0_HHHL, 0x3c0), 751 + }; 752 + 753 + static DECLARE_INTC_DESC(intc_desc_irl3210, "sh7734-irl3210", 754 + vectors_irl3210, NULL, mask_registers, NULL, NULL); 755 + 756 + #define INTC_ICR0 0xFF802000 757 + #define INTC_INTMSK0 0xFF802044 758 + #define INTC_INTMSK1 0xFF802048 759 + #define INTC_INTMSKCLR0 0xFF802064 760 + #define INTC_INTMSKCLR1 0xFF802068 761 + 762 + void __init plat_irq_setup(void) 763 + { 764 + /* disable IRQ3-0 */ 765 + __raw_writel(0xF0000000, INTC_INTMSK0); 766 + 767 + /* disable IRL3-0 */ 768 + __raw_writel(0x80000000, INTC_INTMSK1); 769 + 770 + /* select IRL mode for IRL3-0 */ 771 + __raw_writel(__raw_readl(INTC_ICR0) & ~0x00800000, INTC_ICR0); 772 + 773 + /* disable holding function, ie enable "SH-4 Mode (LVLMODE)" */ 774 + __raw_writel(__raw_readl(INTC_ICR0) | 0x00200000, INTC_ICR0); 775 + 776 + register_intc_controller(&intc_desc); 777 + } 778 + 779 + void __init plat_irq_setup_pins(int mode) 780 + { 781 + switch (mode) { 782 + case IRQ_MODE_IRQ3210: 783 + /* select IRQ mode for IRL3-0 */ 784 + __raw_writel(__raw_readl(INTC_ICR0) | 0x00800000, INTC_ICR0); 785 + register_intc_controller(&intc_desc_irq3210); 786 + break; 787 + case IRQ_MODE_IRL3210: 788 + /* enable IRL0-3 but don't provide any masking */ 789 + __raw_writel(0x80000000, INTC_INTMSKCLR1); 790 + __raw_writel(0xf0000000, INTC_INTMSKCLR0); 791 + break; 792 + case IRQ_MODE_IRL3210_MASK: 793 + /* enable IRL0-3 and mask using cpu intc controller */ 794 + __raw_writel(0x80000000, INTC_INTMSKCLR0); 795 + register_intc_controller(&intc_desc_irl3210); 796 + break; 797 + default: 798 + BUG(); 799 + } 800 + }