1*c942fddfSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 27e2a9035SAndy Yan /* 37e2a9035SAndy Yan * Copyright (c) 2016 Rockchip Electronics Co. Ltd. 47e2a9035SAndy Yan * Author: Shawn Lin <shawn.lin@rock-chips.com> 57e2a9035SAndy Yan */ 67e2a9035SAndy Yan 77e2a9035SAndy Yan #ifndef _DT_BINDINGS_CLK_ROCKCHIP_RV1108_H 87e2a9035SAndy Yan #define _DT_BINDINGS_CLK_ROCKCHIP_RV1108_H 97e2a9035SAndy Yan 107e2a9035SAndy Yan /* pll id */ 117e2a9035SAndy Yan #define PLL_APLL 0 127e2a9035SAndy Yan #define PLL_DPLL 1 137e2a9035SAndy Yan #define PLL_GPLL 2 147e2a9035SAndy Yan #define ARMCLK 3 157e2a9035SAndy Yan 167e2a9035SAndy Yan /* sclk gates (special clocks) */ 177e2a9035SAndy Yan #define SCLK_SPI0 65 187e2a9035SAndy Yan #define SCLK_NANDC 67 197e2a9035SAndy Yan #define SCLK_SDMMC 68 207e2a9035SAndy Yan #define SCLK_SDIO 69 217e2a9035SAndy Yan #define SCLK_EMMC 71 227e2a9035SAndy Yan #define SCLK_UART0 72 237e2a9035SAndy Yan #define SCLK_UART1 73 247e2a9035SAndy Yan #define SCLK_UART2 74 257e2a9035SAndy Yan #define SCLK_I2S0 75 267e2a9035SAndy Yan #define SCLK_I2S1 76 277e2a9035SAndy Yan #define SCLK_I2S2 77 287e2a9035SAndy Yan #define SCLK_TIMER0 78 297e2a9035SAndy Yan #define SCLK_TIMER1 79 307e2a9035SAndy Yan #define SCLK_SFC 80 317e2a9035SAndy Yan #define SCLK_SDMMC_DRV 81 327e2a9035SAndy Yan #define SCLK_SDIO_DRV 82 337e2a9035SAndy Yan #define SCLK_EMMC_DRV 83 347e2a9035SAndy Yan #define SCLK_SDMMC_SAMPLE 84 357e2a9035SAndy Yan #define SCLK_SDIO_SAMPLE 85 367e2a9035SAndy Yan #define SCLK_EMMC_SAMPLE 86 37cbbd6c2fSElaine Zhang #define SCLK_VENC_CORE 87 38cbbd6c2fSElaine Zhang #define SCLK_HEVC_CORE 88 39cbbd6c2fSElaine Zhang #define SCLK_HEVC_CABAC 89 40cbbd6c2fSElaine Zhang #define SCLK_PWM0_PMU 90 41cbbd6c2fSElaine Zhang #define SCLK_I2C0_PMU 91 42cbbd6c2fSElaine Zhang #define SCLK_WIFI 92 43cbbd6c2fSElaine Zhang #define SCLK_CIFOUT 93 44cbbd6c2fSElaine Zhang #define SCLK_MIPI_CSI_OUT 94 45cbbd6c2fSElaine Zhang #define SCLK_CIF0 95 46cbbd6c2fSElaine Zhang #define SCLK_CIF1 96 47cbbd6c2fSElaine Zhang #define SCLK_CIF2 97 48cbbd6c2fSElaine Zhang #define SCLK_CIF3 98 49cbbd6c2fSElaine Zhang #define SCLK_DSP 99 50cbbd6c2fSElaine Zhang #define SCLK_DSP_IOP 100 51cbbd6c2fSElaine Zhang #define SCLK_DSP_EPP 101 52cbbd6c2fSElaine Zhang #define SCLK_DSP_EDP 102 53cbbd6c2fSElaine Zhang #define SCLK_DSP_EDAP 103 54cbbd6c2fSElaine Zhang #define SCLK_CVBS_HOST 104 55cbbd6c2fSElaine Zhang #define SCLK_HDMI_SFR 105 56cbbd6c2fSElaine Zhang #define SCLK_HDMI_CEC 106 57cbbd6c2fSElaine Zhang #define SCLK_CRYPTO 107 58cbbd6c2fSElaine Zhang #define SCLK_SPI 108 59cbbd6c2fSElaine Zhang #define SCLK_SARADC 109 60cbbd6c2fSElaine Zhang #define SCLK_TSADC 110 61c7d0045bSElaine Zhang #define SCLK_MAC_PRE 111 62c7d0045bSElaine Zhang #define SCLK_MAC 112 63c7d0045bSElaine Zhang #define SCLK_MAC_RX 113 64cbbd6c2fSElaine Zhang #define SCLK_MAC_REF 114 65cbbd6c2fSElaine Zhang #define SCLK_MAC_REFOUT 115 66cbbd6c2fSElaine Zhang #define SCLK_DSP_PFM 116 67cbbd6c2fSElaine Zhang #define SCLK_RGA 117 68cbbd6c2fSElaine Zhang #define SCLK_I2C1 118 69cbbd6c2fSElaine Zhang #define SCLK_I2C2 119 70cbbd6c2fSElaine Zhang #define SCLK_I2C3 120 71cbbd6c2fSElaine Zhang #define SCLK_PWM 121 72cbbd6c2fSElaine Zhang #define SCLK_ISP 122 73cbbd6c2fSElaine Zhang #define SCLK_USBPHY 123 74cbbd6c2fSElaine Zhang #define SCLK_I2S0_SRC 124 75cbbd6c2fSElaine Zhang #define SCLK_I2S1_SRC 125 76cbbd6c2fSElaine Zhang #define SCLK_I2S2_SRC 126 77cbbd6c2fSElaine Zhang #define SCLK_UART0_SRC 127 78cbbd6c2fSElaine Zhang #define SCLK_UART1_SRC 128 79cbbd6c2fSElaine Zhang #define SCLK_UART2_SRC 129 80cbbd6c2fSElaine Zhang 81cbbd6c2fSElaine Zhang #define DCLK_VOP_SRC 185 82cbbd6c2fSElaine Zhang #define DCLK_HDMIPHY 186 83cbbd6c2fSElaine Zhang #define DCLK_VOP 187 847e2a9035SAndy Yan 857e2a9035SAndy Yan /* aclk gates */ 867e2a9035SAndy Yan #define ACLK_DMAC 192 877e2a9035SAndy Yan #define ACLK_PRE 193 887e2a9035SAndy Yan #define ACLK_CORE 194 897e2a9035SAndy Yan #define ACLK_ENMCORE 195 90cbbd6c2fSElaine Zhang #define ACLK_RKVENC 196 91cbbd6c2fSElaine Zhang #define ACLK_RKVDEC 197 92cbbd6c2fSElaine Zhang #define ACLK_VPU 198 93cbbd6c2fSElaine Zhang #define ACLK_CIF0 199 94cbbd6c2fSElaine Zhang #define ACLK_VIO0 200 95cbbd6c2fSElaine Zhang #define ACLK_VIO1 201 96cbbd6c2fSElaine Zhang #define ACLK_VOP 202 97cbbd6c2fSElaine Zhang #define ACLK_IEP 203 98cbbd6c2fSElaine Zhang #define ACLK_RGA 204 99cbbd6c2fSElaine Zhang #define ACLK_ISP 205 100cbbd6c2fSElaine Zhang #define ACLK_CIF1 206 101cbbd6c2fSElaine Zhang #define ACLK_CIF2 207 102cbbd6c2fSElaine Zhang #define ACLK_CIF3 208 103cbbd6c2fSElaine Zhang #define ACLK_PERI 209 1041858698eSElaine Zhang #define ACLK_GMAC 210 1057e2a9035SAndy Yan 1067e2a9035SAndy Yan /* pclk gates */ 1077e2a9035SAndy Yan #define PCLK_GPIO1 256 1087e2a9035SAndy Yan #define PCLK_GPIO2 257 1097e2a9035SAndy Yan #define PCLK_GPIO3 258 1107e2a9035SAndy Yan #define PCLK_GRF 259 1117e2a9035SAndy Yan #define PCLK_I2C1 260 1127e2a9035SAndy Yan #define PCLK_I2C2 261 1137e2a9035SAndy Yan #define PCLK_I2C3 262 1147e2a9035SAndy Yan #define PCLK_SPI 263 1157e2a9035SAndy Yan #define PCLK_SFC 264 1167e2a9035SAndy Yan #define PCLK_UART0 265 1177e2a9035SAndy Yan #define PCLK_UART1 266 1187e2a9035SAndy Yan #define PCLK_UART2 267 1197e2a9035SAndy Yan #define PCLK_TSADC 268 1207e2a9035SAndy Yan #define PCLK_PWM 269 1217e2a9035SAndy Yan #define PCLK_TIMER 270 1227e2a9035SAndy Yan #define PCLK_PERI 271 123cbbd6c2fSElaine Zhang #define PCLK_GPIO0_PMU 272 124cbbd6c2fSElaine Zhang #define PCLK_I2C0_PMU 273 125cbbd6c2fSElaine Zhang #define PCLK_PWM0_PMU 274 126cbbd6c2fSElaine Zhang #define PCLK_ISP 275 127cbbd6c2fSElaine Zhang #define PCLK_VIO 276 128cbbd6c2fSElaine Zhang #define PCLK_MIPI_DSI 277 129cbbd6c2fSElaine Zhang #define PCLK_HDMI_CTRL 278 130cbbd6c2fSElaine Zhang #define PCLK_SARADC 279 131cbbd6c2fSElaine Zhang #define PCLK_DSP_CFG 280 132cbbd6c2fSElaine Zhang #define PCLK_BUS 281 133cbbd6c2fSElaine Zhang #define PCLK_EFUSE0 282 134cbbd6c2fSElaine Zhang #define PCLK_EFUSE1 283 135cbbd6c2fSElaine Zhang #define PCLK_WDT 284 1361858698eSElaine Zhang #define PCLK_GMAC 285 1377e2a9035SAndy Yan 1387e2a9035SAndy Yan /* hclk gates */ 1397e2a9035SAndy Yan #define HCLK_I2S0_8CH 320 1401b6428a2SElaine Zhang #define HCLK_I2S1_2CH 321 1417e2a9035SAndy Yan #define HCLK_I2S2_2CH 322 1427e2a9035SAndy Yan #define HCLK_NANDC 323 1437e2a9035SAndy Yan #define HCLK_SDMMC 324 1447e2a9035SAndy Yan #define HCLK_SDIO 325 1457e2a9035SAndy Yan #define HCLK_EMMC 326 1467e2a9035SAndy Yan #define HCLK_PERI 327 1477e2a9035SAndy Yan #define HCLK_SFC 328 148cbbd6c2fSElaine Zhang #define HCLK_RKVENC 329 149cbbd6c2fSElaine Zhang #define HCLK_RKVDEC 330 150cbbd6c2fSElaine Zhang #define HCLK_CIF0 331 151cbbd6c2fSElaine Zhang #define HCLK_VIO 332 152cbbd6c2fSElaine Zhang #define HCLK_VOP 333 153cbbd6c2fSElaine Zhang #define HCLK_IEP 334 154cbbd6c2fSElaine Zhang #define HCLK_RGA 335 155cbbd6c2fSElaine Zhang #define HCLK_ISP 336 156cbbd6c2fSElaine Zhang #define HCLK_CRYPTO_MST 337 157cbbd6c2fSElaine Zhang #define HCLK_CRYPTO_SLV 338 158cbbd6c2fSElaine Zhang #define HCLK_HOST0 339 159cbbd6c2fSElaine Zhang #define HCLK_OTG 340 160cbbd6c2fSElaine Zhang #define HCLK_CIF1 341 161cbbd6c2fSElaine Zhang #define HCLK_CIF2 342 162cbbd6c2fSElaine Zhang #define HCLK_CIF3 343 163cbbd6c2fSElaine Zhang #define HCLK_BUS 344 164cbbd6c2fSElaine Zhang #define HCLK_VPU 345 1657e2a9035SAndy Yan 166cbbd6c2fSElaine Zhang #define CLK_NR_CLKS (HCLK_VPU + 1) 1677e2a9035SAndy Yan 1687e2a9035SAndy Yan /* reset id */ 1697e2a9035SAndy Yan #define SRST_CORE_PO_AD 0 1707e2a9035SAndy Yan #define SRST_CORE_AD 1 1717e2a9035SAndy Yan #define SRST_L2_AD 2 1727e2a9035SAndy Yan #define SRST_CPU_NIU_AD 3 1737e2a9035SAndy Yan #define SRST_CORE_PO 4 1747e2a9035SAndy Yan #define SRST_CORE 5 1757e2a9035SAndy Yan #define SRST_L2 6 1767e2a9035SAndy Yan #define SRST_CORE_DBG 8 1777e2a9035SAndy Yan #define PRST_DBG 9 1787e2a9035SAndy Yan #define RST_DAP 10 1797e2a9035SAndy Yan #define PRST_DBG_NIU 11 1807e2a9035SAndy Yan #define ARST_STRC_SYS_AD 15 1817e2a9035SAndy Yan 1827e2a9035SAndy Yan #define SRST_DDRPHY_CLKDIV 16 1837e2a9035SAndy Yan #define SRST_DDRPHY 17 1847e2a9035SAndy Yan #define PRST_DDRPHY 18 1857e2a9035SAndy Yan #define PRST_HDMIPHY 19 1867e2a9035SAndy Yan #define PRST_VDACPHY 20 1877e2a9035SAndy Yan #define PRST_VADCPHY 21 1887e2a9035SAndy Yan #define PRST_MIPI_CSI_PHY 22 1897e2a9035SAndy Yan #define PRST_MIPI_DSI_PHY 23 1907e2a9035SAndy Yan #define PRST_ACODEC 24 1917e2a9035SAndy Yan #define ARST_BUS_NIU 25 1927e2a9035SAndy Yan #define PRST_TOP_NIU 26 1937e2a9035SAndy Yan #define ARST_INTMEM 27 1947e2a9035SAndy Yan #define HRST_ROM 28 1957e2a9035SAndy Yan #define ARST_DMAC 29 1967e2a9035SAndy Yan #define SRST_MSCH_NIU 30 1977e2a9035SAndy Yan #define PRST_MSCH_NIU 31 1987e2a9035SAndy Yan 1997e2a9035SAndy Yan #define PRST_DDRUPCTL 32 2007e2a9035SAndy Yan #define NRST_DDRUPCTL 33 2017e2a9035SAndy Yan #define PRST_DDRMON 34 2027e2a9035SAndy Yan #define HRST_I2S0_8CH 35 2037e2a9035SAndy Yan #define MRST_I2S0_8CH 36 2047e2a9035SAndy Yan #define HRST_I2S1_2CH 37 2057e2a9035SAndy Yan #define MRST_IS21_2CH 38 2067e2a9035SAndy Yan #define HRST_I2S2_2CH 39 2077e2a9035SAndy Yan #define MRST_I2S2_2CH 40 2087e2a9035SAndy Yan #define HRST_CRYPTO 41 2097e2a9035SAndy Yan #define SRST_CRYPTO 42 2107e2a9035SAndy Yan #define PRST_SPI 43 2117e2a9035SAndy Yan #define SRST_SPI 44 2127e2a9035SAndy Yan #define PRST_UART0 45 2137e2a9035SAndy Yan #define PRST_UART1 46 2147e2a9035SAndy Yan #define PRST_UART2 47 2157e2a9035SAndy Yan 2167e2a9035SAndy Yan #define SRST_UART0 48 2177e2a9035SAndy Yan #define SRST_UART1 49 2187e2a9035SAndy Yan #define SRST_UART2 50 2197e2a9035SAndy Yan #define PRST_I2C1 51 2207e2a9035SAndy Yan #define PRST_I2C2 52 2217e2a9035SAndy Yan #define PRST_I2C3 53 2227e2a9035SAndy Yan #define SRST_I2C1 54 2237e2a9035SAndy Yan #define SRST_I2C2 55 2247e2a9035SAndy Yan #define SRST_I2C3 56 2257e2a9035SAndy Yan #define PRST_PWM1 58 2267e2a9035SAndy Yan #define SRST_PWM1 60 2277e2a9035SAndy Yan #define PRST_WDT 61 2287e2a9035SAndy Yan #define PRST_GPIO1 62 2297e2a9035SAndy Yan #define PRST_GPIO2 63 2307e2a9035SAndy Yan 2317e2a9035SAndy Yan #define PRST_GPIO3 64 2327e2a9035SAndy Yan #define PRST_GRF 65 2337e2a9035SAndy Yan #define PRST_EFUSE 66 2347e2a9035SAndy Yan #define PRST_EFUSE512 67 2357e2a9035SAndy Yan #define PRST_TIMER0 68 2367e2a9035SAndy Yan #define SRST_TIMER0 69 2377e2a9035SAndy Yan #define SRST_TIMER1 70 2387e2a9035SAndy Yan #define PRST_TSADC 71 2397e2a9035SAndy Yan #define SRST_TSADC 72 2407e2a9035SAndy Yan #define PRST_SARADC 73 2417e2a9035SAndy Yan #define SRST_SARADC 74 2427e2a9035SAndy Yan #define HRST_SYSBUS 75 2437e2a9035SAndy Yan #define PRST_USBGRF 76 2447e2a9035SAndy Yan 2457e2a9035SAndy Yan #define ARST_PERIPH_NIU 80 2467e2a9035SAndy Yan #define HRST_PERIPH_NIU 81 2477e2a9035SAndy Yan #define PRST_PERIPH_NIU 82 2487e2a9035SAndy Yan #define HRST_PERIPH 83 2497e2a9035SAndy Yan #define HRST_SDMMC 84 2507e2a9035SAndy Yan #define HRST_SDIO 85 2517e2a9035SAndy Yan #define HRST_EMMC 86 2527e2a9035SAndy Yan #define HRST_NANDC 87 2537e2a9035SAndy Yan #define NRST_NANDC 88 2547e2a9035SAndy Yan #define HRST_SFC 89 2557e2a9035SAndy Yan #define SRST_SFC 90 2567e2a9035SAndy Yan #define ARST_GMAC 91 2577e2a9035SAndy Yan #define HRST_OTG 92 2587e2a9035SAndy Yan #define SRST_OTG 93 2597e2a9035SAndy Yan #define SRST_OTG_ADP 94 2607e2a9035SAndy Yan #define HRST_HOST0 95 2617e2a9035SAndy Yan 2627e2a9035SAndy Yan #define HRST_HOST0_AUX 96 2637e2a9035SAndy Yan #define HRST_HOST0_ARB 97 2647e2a9035SAndy Yan #define SRST_HOST0_EHCIPHY 98 2657e2a9035SAndy Yan #define SRST_HOST0_UTMI 99 2667e2a9035SAndy Yan #define SRST_USBPOR 100 2677e2a9035SAndy Yan #define SRST_UTMI0 101 2687e2a9035SAndy Yan #define SRST_UTMI1 102 2697e2a9035SAndy Yan 2707e2a9035SAndy Yan #define ARST_VIO0_NIU 102 2717e2a9035SAndy Yan #define ARST_VIO1_NIU 103 2727e2a9035SAndy Yan #define HRST_VIO_NIU 104 2737e2a9035SAndy Yan #define PRST_VIO_NIU 105 2747e2a9035SAndy Yan #define ARST_VOP 106 2757e2a9035SAndy Yan #define HRST_VOP 107 2767e2a9035SAndy Yan #define DRST_VOP 108 2777e2a9035SAndy Yan #define ARST_IEP 109 2787e2a9035SAndy Yan #define HRST_IEP 110 2797e2a9035SAndy Yan #define ARST_RGA 111 2807e2a9035SAndy Yan #define HRST_RGA 112 2817e2a9035SAndy Yan #define SRST_RGA 113 2827e2a9035SAndy Yan #define PRST_CVBS 114 2837e2a9035SAndy Yan #define PRST_HDMI 115 2847e2a9035SAndy Yan #define SRST_HDMI 116 2857e2a9035SAndy Yan #define PRST_MIPI_DSI 117 2867e2a9035SAndy Yan 2877e2a9035SAndy Yan #define ARST_ISP_NIU 118 2887e2a9035SAndy Yan #define HRST_ISP_NIU 119 2897e2a9035SAndy Yan #define HRST_ISP 120 2907e2a9035SAndy Yan #define SRST_ISP 121 2917e2a9035SAndy Yan #define ARST_VIP0 122 2927e2a9035SAndy Yan #define HRST_VIP0 123 2937e2a9035SAndy Yan #define PRST_VIP0 124 2947e2a9035SAndy Yan #define ARST_VIP1 125 2957e2a9035SAndy Yan #define HRST_VIP1 126 2967e2a9035SAndy Yan #define PRST_VIP1 127 2977e2a9035SAndy Yan #define ARST_VIP2 128 2987e2a9035SAndy Yan #define HRST_VIP2 129 2997e2a9035SAndy Yan #define PRST_VIP2 120 3007e2a9035SAndy Yan #define ARST_VIP3 121 3017e2a9035SAndy Yan #define HRST_VIP3 122 3027e2a9035SAndy Yan #define PRST_VIP4 123 3037e2a9035SAndy Yan 3047e2a9035SAndy Yan #define PRST_CIF1TO4 124 3057e2a9035SAndy Yan #define SRST_CVBS_CLK 125 3067e2a9035SAndy Yan #define HRST_CVBS 126 3077e2a9035SAndy Yan 3087e2a9035SAndy Yan #define ARST_VPU_NIU 140 3097e2a9035SAndy Yan #define HRST_VPU_NIU 141 3107e2a9035SAndy Yan #define ARST_VPU 142 3117e2a9035SAndy Yan #define HRST_VPU 143 3127e2a9035SAndy Yan #define ARST_RKVDEC_NIU 144 3137e2a9035SAndy Yan #define HRST_RKVDEC_NIU 145 3147e2a9035SAndy Yan #define ARST_RKVDEC 146 3157e2a9035SAndy Yan #define HRST_RKVDEC 147 3167e2a9035SAndy Yan #define SRST_RKVDEC_CABAC 148 3177e2a9035SAndy Yan #define SRST_RKVDEC_CORE 149 3187e2a9035SAndy Yan #define ARST_RKVENC_NIU 150 3197e2a9035SAndy Yan #define HRST_RKVENC_NIU 151 3207e2a9035SAndy Yan #define ARST_RKVENC 152 3217e2a9035SAndy Yan #define HRST_RKVENC 153 3227e2a9035SAndy Yan #define SRST_RKVENC_CORE 154 3237e2a9035SAndy Yan 3247e2a9035SAndy Yan #define SRST_DSP_CORE 156 3257e2a9035SAndy Yan #define SRST_DSP_SYS 157 3267e2a9035SAndy Yan #define SRST_DSP_GLOBAL 158 3277e2a9035SAndy Yan #define SRST_DSP_OECM 159 3287e2a9035SAndy Yan #define PRST_DSP_IOP_NIU 160 3297e2a9035SAndy Yan #define ARST_DSP_EPP_NIU 161 3307e2a9035SAndy Yan #define ARST_DSP_EDP_NIU 162 3317e2a9035SAndy Yan #define PRST_DSP_DBG_NIU 163 3327e2a9035SAndy Yan #define PRST_DSP_CFG_NIU 164 3337e2a9035SAndy Yan #define PRST_DSP_GRF 165 3347e2a9035SAndy Yan #define PRST_DSP_MAILBOX 166 3357e2a9035SAndy Yan #define PRST_DSP_INTC 167 3367e2a9035SAndy Yan #define PRST_DSP_PFM_MON 169 3377e2a9035SAndy Yan #define SRST_DSP_PFM_MON 170 3387e2a9035SAndy Yan #define ARST_DSP_EDAP_NIU 171 3397e2a9035SAndy Yan 3407e2a9035SAndy Yan #define SRST_PMU 172 3417e2a9035SAndy Yan #define SRST_PMU_I2C0 173 3427e2a9035SAndy Yan #define PRST_PMU_I2C0 174 3437e2a9035SAndy Yan #define PRST_PMU_GPIO0 175 3447e2a9035SAndy Yan #define PRST_PMU_INTMEM 176 3457e2a9035SAndy Yan #define PRST_PMU_PWM0 177 3467e2a9035SAndy Yan #define SRST_PMU_PWM0 178 3477e2a9035SAndy Yan #define PRST_PMU_GRF 179 3487e2a9035SAndy Yan #define SRST_PMU_NIU 180 3497e2a9035SAndy Yan #define SRST_PMU_PVTM 181 3507e2a9035SAndy Yan #define ARST_DSP_EDP_PERF 184 3517e2a9035SAndy Yan #define ARST_DSP_EPP_PERF 185 3527e2a9035SAndy Yan 3537e2a9035SAndy Yan #endif /* _DT_BINDINGS_CLK_ROCKCHIP_RV1108_H */ 354