11633e8d2SJoseph Chen /* SPDX-License-Identifier: GPL-2.0 */ 21633e8d2SJoseph Chen /* 31633e8d2SJoseph Chen * Copyright (c) 2019 Rockchip Electronics Co. Ltd. 41633e8d2SJoseph Chen * Author: Finley Xiao <finley.xiao@rock-chips.com> 51633e8d2SJoseph Chen */ 61633e8d2SJoseph Chen 71633e8d2SJoseph Chen #ifndef _ASM_ARCH_CRU_RV1126_H 81633e8d2SJoseph Chen #define _ASM_ARCH_CRU_RV1126_H 91633e8d2SJoseph Chen 101633e8d2SJoseph Chen #include <common.h> 111633e8d2SJoseph Chen 121633e8d2SJoseph Chen #define MHz 1000000 131633e8d2SJoseph Chen #define KHz 1000 141633e8d2SJoseph Chen #define OSC_HZ (24 * MHz) 151633e8d2SJoseph Chen 162bff5c68SFinley Xiao #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_KERNEL_BOOT) 17c1bad47fSFinley Xiao #define APLL_HZ (1008 * MHz) 182bff5c68SFinley Xiao #else 192bff5c68SFinley Xiao #define APLL_HZ (816 * MHz) 202bff5c68SFinley Xiao #endif 211633e8d2SJoseph Chen #define GPLL_HZ (1188 * MHz) 22322971a6SFinley Xiao #define CPLL_HZ (500 * MHz) 23322971a6SFinley Xiao #define HPLL_HZ (1400 * MHz) 241633e8d2SJoseph Chen #define PCLK_PDPMU_HZ (100 * MHz) 25a964d8e5SZiyuan Xu #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_KERNEL_BOOT) 26a964d8e5SZiyuan Xu #define ACLK_PDBUS_HZ (396 * MHz) 27a964d8e5SZiyuan Xu #else 281633e8d2SJoseph Chen #define ACLK_PDBUS_HZ (500 * MHz) 29a964d8e5SZiyuan Xu #endif 301633e8d2SJoseph Chen #define HCLK_PDBUS_HZ (200 * MHz) 311633e8d2SJoseph Chen #define PCLK_PDBUS_HZ (100 * MHz) 321633e8d2SJoseph Chen #define ACLK_PDPHP_HZ (300 * MHz) 331633e8d2SJoseph Chen #define HCLK_PDPHP_HZ (200 * MHz) 3495bd63d1SFinley Xiao #define HCLK_PDCORE_HZ (200 * MHz) 351633e8d2SJoseph Chen #define HCLK_PDAUDIO_HZ (150 * MHz) 3656a06ac8SFinley Xiao #define CLK_OSC0_DIV_HZ (32768) 375410c5c2SFinley Xiao #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_KERNEL_BOOT) 38a964d8e5SZiyuan Xu #define ACLK_PDVI_HZ (297 * MHz) 39a964d8e5SZiyuan Xu #define CLK_ISP_HZ (297 * MHz) 40a964d8e5SZiyuan Xu #define ACLK_PDISPP_HZ (297 * MHz) 41a964d8e5SZiyuan Xu #define CLK_ISPP_HZ (237 * MHz) 425410c5c2SFinley Xiao #define ACLK_VOP_HZ (300 * MHz) 435410c5c2SFinley Xiao #define DCLK_VOP_HZ (65 * MHz) 445410c5c2SFinley Xiao #endif 451633e8d2SJoseph Chen 461633e8d2SJoseph Chen /* RV1126 pll id */ 471633e8d2SJoseph Chen enum rv1126_pll_id { 481633e8d2SJoseph Chen APLL, 491633e8d2SJoseph Chen DPLL, 501633e8d2SJoseph Chen CPLL, 511633e8d2SJoseph Chen HPLL, 521633e8d2SJoseph Chen GPLL, 531633e8d2SJoseph Chen PLL_COUNT, 541633e8d2SJoseph Chen }; 551633e8d2SJoseph Chen 561633e8d2SJoseph Chen struct rv1126_clk_info { 571633e8d2SJoseph Chen unsigned long id; 581633e8d2SJoseph Chen char *name; 591633e8d2SJoseph Chen bool is_cru; 601633e8d2SJoseph Chen }; 611633e8d2SJoseph Chen 621633e8d2SJoseph Chen /* Private data for the clock driver - used by rockchip_get_cru() */ 631633e8d2SJoseph Chen struct rv1126_pmuclk_priv { 641633e8d2SJoseph Chen struct rv1126_pmucru *pmucru; 651633e8d2SJoseph Chen ulong gpll_hz; 661633e8d2SJoseph Chen }; 671633e8d2SJoseph Chen 681633e8d2SJoseph Chen struct rv1126_clk_priv { 691633e8d2SJoseph Chen struct rv1126_cru *cru; 701633e8d2SJoseph Chen struct rv1126_grf *grf; 711633e8d2SJoseph Chen ulong gpll_hz; 721633e8d2SJoseph Chen ulong cpll_hz; 7356a06ac8SFinley Xiao ulong hpll_hz; 741633e8d2SJoseph Chen ulong armclk_hz; 751633e8d2SJoseph Chen ulong armclk_enter_hz; 761633e8d2SJoseph Chen ulong armclk_init_hz; 771633e8d2SJoseph Chen bool sync_kernel; 781633e8d2SJoseph Chen bool set_armclk_rate; 791633e8d2SJoseph Chen }; 801633e8d2SJoseph Chen 811633e8d2SJoseph Chen struct rv1126_pll { 821633e8d2SJoseph Chen unsigned int con0; 831633e8d2SJoseph Chen unsigned int con1; 841633e8d2SJoseph Chen unsigned int con2; 851633e8d2SJoseph Chen unsigned int con3; 861633e8d2SJoseph Chen unsigned int con4; 871633e8d2SJoseph Chen unsigned int con5; 881633e8d2SJoseph Chen unsigned int con6; 891633e8d2SJoseph Chen unsigned int reserved0[1]; 901633e8d2SJoseph Chen }; 911633e8d2SJoseph Chen 921633e8d2SJoseph Chen struct rv1126_pmucru { 931633e8d2SJoseph Chen unsigned int pmu_mode; 941633e8d2SJoseph Chen unsigned int reserved1[3]; 951633e8d2SJoseph Chen struct rv1126_pll pll; 961633e8d2SJoseph Chen unsigned int offsetcal_status; 971633e8d2SJoseph Chen unsigned int reserved2[51]; 981633e8d2SJoseph Chen unsigned int pmu_clksel_con[14]; 991633e8d2SJoseph Chen unsigned int reserved3[18]; 1001633e8d2SJoseph Chen unsigned int pmu_clkgate_con[3]; 1011633e8d2SJoseph Chen unsigned int reserved4[29]; 1021633e8d2SJoseph Chen unsigned int pmu_softrst_con[2]; 1031633e8d2SJoseph Chen unsigned int reserved5[14]; 1041633e8d2SJoseph Chen unsigned int pmu_autocs_con[2]; 1051633e8d2SJoseph Chen }; 1061633e8d2SJoseph Chen 1071633e8d2SJoseph Chen check_member(rv1126_pmucru, pmu_autocs_con[1], 0x244); 1081633e8d2SJoseph Chen 1091633e8d2SJoseph Chen struct rv1126_cru { 1101633e8d2SJoseph Chen struct rv1126_pll pll[4]; 1111633e8d2SJoseph Chen unsigned int offsetcal_status[4]; 1121633e8d2SJoseph Chen unsigned int mode; 1131633e8d2SJoseph Chen unsigned int reserved1[27]; 1141633e8d2SJoseph Chen unsigned int clksel_con[78]; 1151633e8d2SJoseph Chen unsigned int reserved2[18]; 1161633e8d2SJoseph Chen unsigned int clkgate_con[25]; 1171633e8d2SJoseph Chen unsigned int reserved3[7]; 1181633e8d2SJoseph Chen unsigned int softrst_con[15]; 1191633e8d2SJoseph Chen unsigned int reserved4[17]; 1201633e8d2SJoseph Chen unsigned int ssgtbl[32]; 1211633e8d2SJoseph Chen unsigned int glb_cnt_th; 1221633e8d2SJoseph Chen unsigned int glb_rst_st; 1231633e8d2SJoseph Chen unsigned int glb_srst_fst; 1241633e8d2SJoseph Chen unsigned int glb_srst_snd; 1251633e8d2SJoseph Chen unsigned int glb_rst_con; 1261633e8d2SJoseph Chen unsigned int reserved5[11]; 1271633e8d2SJoseph Chen unsigned int sdmmc_con[2]; 1281633e8d2SJoseph Chen unsigned int sdio_con[2]; 1291633e8d2SJoseph Chen unsigned int emmc_con[2]; 1301633e8d2SJoseph Chen unsigned int reserved6[2]; 1311633e8d2SJoseph Chen unsigned int gmac_con; 1321633e8d2SJoseph Chen unsigned int misc[2]; 1331633e8d2SJoseph Chen unsigned int reserved7[45]; 1341633e8d2SJoseph Chen unsigned int autocs_con[26]; 1351633e8d2SJoseph Chen }; 1361633e8d2SJoseph Chen 1371633e8d2SJoseph Chen check_member(rv1126_cru, autocs_con[25], 0x584); 1381633e8d2SJoseph Chen 1391633e8d2SJoseph Chen struct pll_rate_table { 1401633e8d2SJoseph Chen unsigned long rate; 1411633e8d2SJoseph Chen unsigned int fbdiv; 1421633e8d2SJoseph Chen unsigned int postdiv1; 1431633e8d2SJoseph Chen unsigned int refdiv; 1441633e8d2SJoseph Chen unsigned int postdiv2; 1451633e8d2SJoseph Chen unsigned int dsmpd; 1461633e8d2SJoseph Chen unsigned int frac; 1471633e8d2SJoseph Chen }; 1481633e8d2SJoseph Chen 1491633e8d2SJoseph Chen struct cpu_rate_table { 1501633e8d2SJoseph Chen unsigned long rate; 1511633e8d2SJoseph Chen unsigned int aclk_div; 1521633e8d2SJoseph Chen unsigned int pclk_div; 1531633e8d2SJoseph Chen }; 1541633e8d2SJoseph Chen 1551633e8d2SJoseph Chen #define RV1126_PMU_MODE 0x0 1561633e8d2SJoseph Chen #define RV1126_PMU_PLL_CON(x) ((x) * 0x4 + 0x10) 1571633e8d2SJoseph Chen #define RV1126_PLL_CON(x) ((x) * 0x4) 1581633e8d2SJoseph Chen #define RV1126_MODE_CON 0x90 1591633e8d2SJoseph Chen 1601633e8d2SJoseph Chen enum { 1611633e8d2SJoseph Chen /* CRU_PMU_CLK_SEL0_CON */ 1621633e8d2SJoseph Chen RTC32K_SEL_SHIFT = 7, 1631633e8d2SJoseph Chen RTC32K_SEL_MASK = 0x3 << RTC32K_SEL_SHIFT, 1641633e8d2SJoseph Chen RTC32K_SEL_PMUPVTM = 0, 1651633e8d2SJoseph Chen RTC32K_SEL_OSC1_32K, 1661633e8d2SJoseph Chen RTC32K_SEL_OSC0_DIV32K, 1671633e8d2SJoseph Chen 1681633e8d2SJoseph Chen /* CRU_PMU_CLK_SEL1_CON */ 1691633e8d2SJoseph Chen PCLK_PDPMU_DIV_SHIFT = 0, 1701633e8d2SJoseph Chen PCLK_PDPMU_DIV_MASK = 0x1f, 1711633e8d2SJoseph Chen 1721633e8d2SJoseph Chen /* CRU_PMU_CLK_SEL2_CON */ 1731633e8d2SJoseph Chen CLK_I2C0_DIV_SHIFT = 0, 1741633e8d2SJoseph Chen CLK_I2C0_DIV_MASK = 0x7f, 1751633e8d2SJoseph Chen 1761633e8d2SJoseph Chen /* CRU_PMU_CLK_SEL3_CON */ 1771633e8d2SJoseph Chen CLK_I2C2_DIV_SHIFT = 0, 1781633e8d2SJoseph Chen CLK_I2C2_DIV_MASK = 0x7f, 1791633e8d2SJoseph Chen 1801633e8d2SJoseph Chen /* CRU_PMU_CLK_SEL6_CON */ 1811633e8d2SJoseph Chen CLK_PWM1_SEL_SHIFT = 15, 1821633e8d2SJoseph Chen CLK_PWM1_SEL_MASK = 1 << CLK_PWM1_SEL_SHIFT, 1831633e8d2SJoseph Chen CLK_PWM1_SEL_XIN24M = 0, 1841633e8d2SJoseph Chen CLK_PWM1_SEL_GPLL, 1851633e8d2SJoseph Chen CLK_PWM1_DIV_SHIFT = 8, 1861633e8d2SJoseph Chen CLK_PWM1_DIV_MASK = 0x7f << CLK_PWM1_DIV_SHIFT, 1871633e8d2SJoseph Chen CLK_PWM0_SEL_SHIFT = 7, 1881633e8d2SJoseph Chen CLK_PWM0_SEL_MASK = 1 << CLK_PWM0_SEL_SHIFT, 1891633e8d2SJoseph Chen CLK_PWM0_SEL_XIN24M = 0, 1901633e8d2SJoseph Chen CLK_PWM0_SEL_GPLL, 1911633e8d2SJoseph Chen CLK_PWM0_DIV_SHIFT = 0, 1921633e8d2SJoseph Chen CLK_PWM0_DIV_MASK = 0x7f, 1931633e8d2SJoseph Chen 1941633e8d2SJoseph Chen /* CRU_PMU_CLK_SEL9_CON */ 1951633e8d2SJoseph Chen CLK_SPI0_SEL_SHIFT = 7, 1961633e8d2SJoseph Chen CLK_SPI0_SEL_MASK = 1 << CLK_SPI0_SEL_SHIFT, 1971633e8d2SJoseph Chen CLK_SPI0_SEL_GPLL = 0, 1981633e8d2SJoseph Chen CLK_SPI0_SEL_XIN24M, 1991633e8d2SJoseph Chen CLK_SPI0_DIV_SHIFT = 0, 2001633e8d2SJoseph Chen CLK_SPI0_DIV_MASK = 0x7f, 2011633e8d2SJoseph Chen 2021633e8d2SJoseph Chen /* CRU_PMU_CLK_SEL13_CON */ 2031633e8d2SJoseph Chen CLK_RTC32K_FRAC_NUMERATOR_SHIFT = 16, 2041633e8d2SJoseph Chen CLK_RTC32K_FRAC_NUMERATOR_MASK = 0xffff << 16, 2051633e8d2SJoseph Chen CLK_RTC32K_FRAC_DENOMINATOR_SHIFT = 0, 2061633e8d2SJoseph Chen CLK_RTC32K_FRAC_DENOMINATOR_MASK = 0xffff, 2071633e8d2SJoseph Chen 2081633e8d2SJoseph Chen /* CRU_CLK_SEL0_CON */ 2091633e8d2SJoseph Chen CORE_HCLK_DIV_SHIFT = 8, 2101633e8d2SJoseph Chen CORE_HCLK_DIV_MASK = 0x1f << CORE_HCLK_DIV_SHIFT, 2111633e8d2SJoseph Chen 2121633e8d2SJoseph Chen /* CRU_CLK_SEL1_CON */ 213c71b5c88SFinley Xiao CORE_ACLK_DIV_SHIFT = 4, 214c71b5c88SFinley Xiao CORE_ACLK_DIV_MASK = 0xf << CORE_ACLK_DIV_SHIFT, 215c71b5c88SFinley Xiao CORE_DBG_DIV_SHIFT = 0, 216c71b5c88SFinley Xiao CORE_DBG_DIV_MASK = 0x7, 2171633e8d2SJoseph Chen 2181633e8d2SJoseph Chen /* CRU_CLK_SEL2_CON */ 2191633e8d2SJoseph Chen HCLK_PDBUS_SEL_SHIFT = 15, 2201633e8d2SJoseph Chen HCLK_PDBUS_SEL_MASK = 1 << HCLK_PDBUS_SEL_SHIFT, 2211633e8d2SJoseph Chen HCLK_PDBUS_SEL_GPLL = 0, 2221633e8d2SJoseph Chen HCLK_PDBUS_SEL_CPLL, 2231633e8d2SJoseph Chen HCLK_PDBUS_DIV_SHIFT = 8, 2241633e8d2SJoseph Chen HCLK_PDBUS_DIV_MASK = 0x1f << HCLK_PDBUS_DIV_SHIFT, 2251633e8d2SJoseph Chen ACLK_PDBUS_SEL_SHIFT = 6, 2261633e8d2SJoseph Chen ACLK_PDBUS_SEL_MASK = 0x3 << ACLK_PDBUS_SEL_SHIFT, 2271633e8d2SJoseph Chen ACLK_PDBUS_SEL_GPLL = 0, 2281633e8d2SJoseph Chen ACLK_PDBUS_SEL_CPLL, 2291633e8d2SJoseph Chen ACLK_PDBUS_SEL_DPLL, 2301633e8d2SJoseph Chen ACLK_PDBUS_DIV_SHIFT = 0, 2311633e8d2SJoseph Chen ACLK_PDBUS_DIV_MASK = 0x1f, 2321633e8d2SJoseph Chen 2331633e8d2SJoseph Chen /* CRU_CLK_SEL3_CON */ 234f8cddc3eSFinley Xiao CLK_SCR1_SEL_SHIFT = 15, 235f8cddc3eSFinley Xiao CLK_SCR1_SEL_MASK = 1 << CLK_SCR1_SEL_SHIFT, 236f8cddc3eSFinley Xiao CLK_SCR1_SEL_GPLL = 0, 237f8cddc3eSFinley Xiao CLK_SCR1_SEL_CPLL, 238f8cddc3eSFinley Xiao CLK_SCR1_DIV_SHIFT = 8, 239f8cddc3eSFinley Xiao CLK_SCR1_DIV_MASK = 0x1f << CLK_SCR1_DIV_SHIFT, 2401633e8d2SJoseph Chen PCLK_PDBUS_SEL_SHIFT = 7, 2411633e8d2SJoseph Chen PCLK_PDBUS_SEL_MASK = 1 << PCLK_PDBUS_SEL_SHIFT, 2421633e8d2SJoseph Chen PCLK_PDBUS_SEL_GPLL = 0, 2431633e8d2SJoseph Chen PCLK_PDBUS_SEL_CPLL, 2441633e8d2SJoseph Chen PCLK_PDBUS_DIV_SHIFT = 0, 2451633e8d2SJoseph Chen PCLK_PDBUS_DIV_MASK = 0x1f, 2461633e8d2SJoseph Chen 2471633e8d2SJoseph Chen /* CRU_CLK_SEL4_CON */ 2481633e8d2SJoseph Chen ACLK_CRYPTO_SEL_SHIFT = 7, 2491633e8d2SJoseph Chen ACLK_CRYPTO_SEL_MASK = 1 << ACLK_CRYPTO_SEL_SHIFT, 2501633e8d2SJoseph Chen ACLK_CRYPTO_SEL_GPLL = 0, 2511633e8d2SJoseph Chen ACLK_CRYPTO_SEL_CPLL, 2521633e8d2SJoseph Chen ACLK_CRYPTO_DIV_SHIFT = 0, 2531633e8d2SJoseph Chen ACLK_CRYPTO_DIV_MASK = 0x1f, 2541633e8d2SJoseph Chen 2551633e8d2SJoseph Chen /* CRU_CLK_SEL5_CON */ 2561633e8d2SJoseph Chen CLK_I2C3_DIV_SHIFT = 8, 2571633e8d2SJoseph Chen CLK_I2C3_DIV_MASK = 0x7f << CLK_I2C3_DIV_SHIFT, 2581633e8d2SJoseph Chen CLK_I2C1_DIV_SHIFT = 0, 2591633e8d2SJoseph Chen CLK_I2C1_DIV_MASK = 0x7f, 2601633e8d2SJoseph Chen 2611633e8d2SJoseph Chen /* CRU_CLK_SEL6_CON */ 2621633e8d2SJoseph Chen CLK_I2C5_DIV_SHIFT = 8, 2631633e8d2SJoseph Chen CLK_I2C5_DIV_MASK = 0x7f << CLK_I2C5_DIV_SHIFT, 2641633e8d2SJoseph Chen CLK_I2C4_DIV_SHIFT = 0, 2651633e8d2SJoseph Chen CLK_I2C4_DIV_MASK = 0x7f, 2661633e8d2SJoseph Chen 2671633e8d2SJoseph Chen /* CRU_CLK_SEL7_CON */ 2681633e8d2SJoseph Chen CLK_CRYPTO_PKA_SEL_SHIFT = 15, 2691633e8d2SJoseph Chen CLK_CRYPTO_PKA_SEL_MASK = 1 << CLK_CRYPTO_PKA_SEL_SHIFT, 2701633e8d2SJoseph Chen CLK_CRYPTO_PKA_SEL_GPLL = 0, 2711633e8d2SJoseph Chen CLK_CRYPTO_PKA_SEL_CPLL, 2721633e8d2SJoseph Chen CLK_CRYPTO_PKA_DIV_SHIFT = 8, 2731633e8d2SJoseph Chen CLK_CRYPTO_PKA_DIV_MASK = 0x1f << CLK_CRYPTO_PKA_DIV_SHIFT, 2741633e8d2SJoseph Chen CLK_CRYPTO_CORE_SEL_SHIFT = 7, 2751633e8d2SJoseph Chen CLK_CRYPTO_CORE_SEL_MASK = 1 << CLK_CRYPTO_CORE_SEL_SHIFT, 2761633e8d2SJoseph Chen CLK_CRYPTO_CORE_SEL_GPLL = 0, 2771633e8d2SJoseph Chen CLK_CRYPTO_CORE_SEL_CPLL, 2781633e8d2SJoseph Chen CLK_CRYPTO_CORE_DIV_SHIFT = 0, 2791633e8d2SJoseph Chen CLK_CRYPTO_CORE_DIV_MASK = 0x1f, 2801633e8d2SJoseph Chen 2811633e8d2SJoseph Chen /* CRU_CLK_SEL8_CON */ 2821633e8d2SJoseph Chen CLK_SPI1_SEL_SHIFT = 8, 2831633e8d2SJoseph Chen CLK_SPI1_SEL_MASK = 1 << CLK_SPI1_SEL_SHIFT, 2841633e8d2SJoseph Chen CLK_SPI1_SEL_GPLL = 0, 2851633e8d2SJoseph Chen CLK_SPI1_SEL_XIN24M, 2861633e8d2SJoseph Chen CLK_SPI1_DIV_SHIFT = 0, 2871633e8d2SJoseph Chen CLK_SPI1_DIV_MASK = 0x7f, 2881633e8d2SJoseph Chen 2891633e8d2SJoseph Chen /* CRU_CLK_SEL9_CON */ 2901633e8d2SJoseph Chen CLK_PWM2_SEL_SHIFT = 15, 2911633e8d2SJoseph Chen CLK_PWM2_SEL_MASK = 1 << CLK_PWM2_SEL_SHIFT, 2921633e8d2SJoseph Chen CLK_PWM2_SEL_XIN24M = 0, 2931633e8d2SJoseph Chen CLK_PWM2_SEL_GPLL, 2941633e8d2SJoseph Chen CLK_PWM2_DIV_SHIFT = 8, 2951633e8d2SJoseph Chen CLK_PWM2_DIV_MASK = 0x7f << CLK_PWM2_DIV_SHIFT, 2961633e8d2SJoseph Chen 2971633e8d2SJoseph Chen /* CRU_CLK_SEL20_CON */ 2981633e8d2SJoseph Chen CLK_SARADC_DIV_SHIFT = 0, 2991633e8d2SJoseph Chen CLK_SARADC_DIV_MASK = 0x7ff, 3001633e8d2SJoseph Chen 3015ecc545eSFinley Xiao /* CRU_CLK_SEL25_CON */ 3025ecc545eSFinley Xiao DCLK_DECOM_SEL_SHIFT = 15, 3035ecc545eSFinley Xiao DCLK_DECOM_SEL_MASK = 1 << DCLK_DECOM_SEL_SHIFT, 3045ecc545eSFinley Xiao DCLK_DECOM_SEL_GPLL = 0, 3055ecc545eSFinley Xiao DCLK_DECOM_SEL_CPLL, 3065ecc545eSFinley Xiao DCLK_DECOM_DIV_SHIFT = 8, 3075ecc545eSFinley Xiao DCLK_DECOM_DIV_MASK = 0x7f << DCLK_DECOM_DIV_SHIFT, 3085ecc545eSFinley Xiao 3091633e8d2SJoseph Chen /* CRU_CLK_SEL26_CON */ 3101633e8d2SJoseph Chen HCLK_PDAUDIO_DIV_SHIFT = 0, 3111633e8d2SJoseph Chen HCLK_PDAUDIO_DIV_MASK = 0x1f, 3121633e8d2SJoseph Chen 3131633e8d2SJoseph Chen /* CRU_CLK_SEL45_CON */ 3141633e8d2SJoseph Chen ACLK_PDVO_SEL_SHIFT = 7, 3151633e8d2SJoseph Chen ACLK_PDVO_SEL_MASK = 1 << ACLK_PDVO_SEL_SHIFT, 3161633e8d2SJoseph Chen ACLK_PDVO_SEL_GPLL = 0, 3171633e8d2SJoseph Chen ACLK_PDVO_SEL_CPLL, 3181633e8d2SJoseph Chen ACLK_PDVO_DIV_SHIFT = 0, 3191633e8d2SJoseph Chen ACLK_PDVO_DIV_MASK = 0x1f, 3201633e8d2SJoseph Chen 3211633e8d2SJoseph Chen /* CRU_CLK_SEL47_CON */ 3221633e8d2SJoseph Chen DCLK_VOP_SEL_SHIFT = 8, 3231633e8d2SJoseph Chen DCLK_VOP_SEL_MASK = 1 << DCLK_VOP_SEL_SHIFT, 3241633e8d2SJoseph Chen DCLK_VOP_SEL_GPLL = 0, 3251633e8d2SJoseph Chen DCLK_VOP_SEL_CPLL, 3261633e8d2SJoseph Chen DCLK_VOP_DIV_SHIFT = 0, 3271633e8d2SJoseph Chen DCLK_VOP_DIV_MASK = 0xff, 3281633e8d2SJoseph Chen 329c17ccbf6SFinley Xiao #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_KERNEL_BOOT) 330c17ccbf6SFinley Xiao /* CRU_CLK_SEL49_CON */ 331c17ccbf6SFinley Xiao ACLK_PDVI_SEL_SHIFT = 6, 332c17ccbf6SFinley Xiao ACLK_PDVI_SEL_MASK = 0x3 << ACLK_PDVI_SEL_SHIFT, 333c17ccbf6SFinley Xiao ACLK_PDVI_SEL_CPLL = 0, 334c17ccbf6SFinley Xiao ACLK_PDVI_SEL_GPLL, 335c17ccbf6SFinley Xiao ACLK_PDVI_SEL_HPLL, 336c17ccbf6SFinley Xiao ACLK_PDVI_DIV_SHIFT = 0, 337c17ccbf6SFinley Xiao ACLK_PDVI_DIV_MASK = 0x1f, 338c17ccbf6SFinley Xiao 339c17ccbf6SFinley Xiao /* CRU_CLK_SEL50_CON */ 340c17ccbf6SFinley Xiao CLK_ISP_SEL_SHIFT = 6, 341c17ccbf6SFinley Xiao CLK_ISP_SEL_MASK = 0x3 << CLK_ISP_SEL_SHIFT, 342c17ccbf6SFinley Xiao CLK_ISP_SEL_GPLL = 0, 343c17ccbf6SFinley Xiao CLK_ISP_SEL_CPLL, 344c17ccbf6SFinley Xiao CLK_ISP_SEL_HPLL, 345c17ccbf6SFinley Xiao CLK_ISP_DIV_SHIFT = 0, 346c17ccbf6SFinley Xiao CLK_ISP_DIV_MASK = 0x1f, 347c17ccbf6SFinley Xiao #endif 348c17ccbf6SFinley Xiao 3491633e8d2SJoseph Chen /* CRU_CLK_SEL53_CON */ 3501633e8d2SJoseph Chen HCLK_PDPHP_DIV_SHIFT = 8, 3511633e8d2SJoseph Chen HCLK_PDPHP_DIV_MASK = 0x1f << HCLK_PDPHP_DIV_SHIFT, 3521633e8d2SJoseph Chen ACLK_PDPHP_SEL_SHIFT = 7, 3531633e8d2SJoseph Chen ACLK_PDPHP_SEL_MASK = 1 << ACLK_PDPHP_SEL_SHIFT, 3541633e8d2SJoseph Chen ACLK_PDPHP_SEL_GPLL = 0, 3551633e8d2SJoseph Chen ACLK_PDPHP_SEL_CPLL, 3561633e8d2SJoseph Chen ACLK_PDPHP_DIV_SHIFT = 0, 3571633e8d2SJoseph Chen ACLK_PDPHP_DIV_MASK = 0x1f, 3581633e8d2SJoseph Chen 3591633e8d2SJoseph Chen /* CRU_CLK_SEL57_CON */ 3601633e8d2SJoseph Chen EMMC_SEL_SHIFT = 14, 3611633e8d2SJoseph Chen EMMC_SEL_MASK = 0x3 << EMMC_SEL_SHIFT, 3621633e8d2SJoseph Chen EMMC_SEL_GPLL = 0, 3631633e8d2SJoseph Chen EMMC_SEL_CPLL, 3641633e8d2SJoseph Chen EMMC_SEL_XIN24M, 3651633e8d2SJoseph Chen EMMC_DIV_SHIFT = 0, 3661633e8d2SJoseph Chen EMMC_DIV_MASK = 0xff, 3671633e8d2SJoseph Chen 36857ae0852SFinley Xiao /* CRU_CLK_SEL58_CON */ 36957ae0852SFinley Xiao SCLK_SFC_SEL_SHIFT = 15, 37057ae0852SFinley Xiao SCLK_SFC_SEL_MASK = 0x1 << SCLK_SFC_SEL_SHIFT, 37157ae0852SFinley Xiao SCLK_SFC_SEL_CPLL = 0, 37257ae0852SFinley Xiao SCLK_SFC_SEL_GPLL, 37357ae0852SFinley Xiao SCLK_SFC_DIV_SHIFT = 0, 37457ae0852SFinley Xiao SCLK_SFC_DIV_MASK = 0xff, 37557ae0852SFinley Xiao 37657ae0852SFinley Xiao /* CRU_CLK_SEL59_CON */ 37757ae0852SFinley Xiao CLK_NANDC_SEL_SHIFT = 15, 37857ae0852SFinley Xiao CLK_NANDC_SEL_MASK = 0x1 << CLK_NANDC_SEL_SHIFT, 37957ae0852SFinley Xiao CLK_NANDC_SEL_GPLL = 0, 38057ae0852SFinley Xiao CLK_NANDC_SEL_CPLL, 38157ae0852SFinley Xiao CLK_NANDC_DIV_SHIFT = 0, 38257ae0852SFinley Xiao CLK_NANDC_DIV_MASK = 0xff, 38357ae0852SFinley Xiao 3842438a166SFinley Xiao /* CRU_CLK_SEL61_CON */ 3852438a166SFinley Xiao CLK_GMAC_OUT_SEL_SHIFT = 15, 3862438a166SFinley Xiao CLK_GMAC_OUT_SEL_MASK = 0x1 << CLK_GMAC_OUT_SEL_SHIFT, 3872438a166SFinley Xiao CLK_GMAC_OUT_SEL_CPLL = 0, 3882438a166SFinley Xiao CLK_GMAC_OUT_SEL_GPLL, 3892438a166SFinley Xiao CLK_GMAC_OUT_DIV_SHIFT = 8, 3902438a166SFinley Xiao CLK_GMAC_OUT_DIV_MASK = 0x1f << CLK_GMAC_OUT_DIV_SHIFT, 3912438a166SFinley Xiao 3922438a166SFinley Xiao /* CRU_CLK_SEL63_CON */ 3932438a166SFinley Xiao PCLK_GMAC_DIV_SHIFT = 8, 3942438a166SFinley Xiao PCLK_GMAC_DIV_MASK = 0x1f << PCLK_GMAC_DIV_SHIFT, 3952438a166SFinley Xiao CLK_GMAC_SRC_SEL_SHIFT = 7, 3962438a166SFinley Xiao CLK_GMAC_SRC_SEL_MASK = 0x1 << CLK_GMAC_SRC_SEL_SHIFT, 3972438a166SFinley Xiao CLK_GMAC_SRC_SEL_CPLL = 0, 3982438a166SFinley Xiao CLK_GMAC_SRC_SEL_GPLL, 3992438a166SFinley Xiao CLK_GMAC_SRC_DIV_SHIFT = 0, 4002438a166SFinley Xiao CLK_GMAC_SRC_DIV_MASK = 0x1f << CLK_GMAC_SRC_DIV_SHIFT, 4012438a166SFinley Xiao 402c17ccbf6SFinley Xiao #if defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_KERNEL_BOOT) 403c17ccbf6SFinley Xiao /* CRU_CLK_SEL68_CON */ 404c17ccbf6SFinley Xiao ACLK_PDISPP_SEL_SHIFT = 6, 405c17ccbf6SFinley Xiao ACLK_PDISPP_SEL_MASK = 0x3 << ACLK_PDISPP_SEL_SHIFT, 406c17ccbf6SFinley Xiao ACLK_PDISPP_SEL_CPLL = 0, 407c17ccbf6SFinley Xiao ACLK_PDISPP_SEL_GPLL, 408c17ccbf6SFinley Xiao ACLK_PDISPP_SEL_HPLL, 409c17ccbf6SFinley Xiao ACLK_PDISPP_DIV_SHIFT = 0, 410c17ccbf6SFinley Xiao ACLK_PDISPP_DIV_MASK = 0x1f, 411c17ccbf6SFinley Xiao 412c17ccbf6SFinley Xiao /* CRU_CLK_SEL69_CON */ 413c17ccbf6SFinley Xiao CLK_ISPP_SEL_SHIFT = 6, 414c17ccbf6SFinley Xiao CLK_ISPP_SEL_MASK = 0x3 << CLK_ISPP_SEL_SHIFT, 415c17ccbf6SFinley Xiao CLK_ISPP_SEL_CPLL = 0, 416c17ccbf6SFinley Xiao CLK_ISPP_SEL_GPLL, 417c17ccbf6SFinley Xiao CLK_ISPP_SEL_HPLL, 418c17ccbf6SFinley Xiao CLK_ISPP_DIV_SHIFT = 0, 419c17ccbf6SFinley Xiao CLK_ISPP_DIV_MASK = 0x1f, 420*2304b5d3SFinley Xiao 421*2304b5d3SFinley Xiao /* CRU_CLK_SEL73_CON */ 422*2304b5d3SFinley Xiao MIPICSI_OUT_SEL_SHIFT = 10, 423*2304b5d3SFinley Xiao MIPICSI_OUT_SEL_MASK = 0x3 << MIPICSI_OUT_SEL_SHIFT, 424*2304b5d3SFinley Xiao MIPICSI_OUT_SEL_XIN24M = 0, 425*2304b5d3SFinley Xiao MIPICSI_OUT_SEL_DIV, 426*2304b5d3SFinley Xiao MIPICSI_OUT_SEL_FRACDIV, 427*2304b5d3SFinley Xiao MIPICSI_OUT_DIV_SHIFT = 0, 428*2304b5d3SFinley Xiao MIPICSI_OUT_DIV_MASK = 0x1f, 429c17ccbf6SFinley Xiao #endif 430c17ccbf6SFinley Xiao 4311633e8d2SJoseph Chen /* CRU_GMAC_CON */ 4321633e8d2SJoseph Chen GMAC_SRC_M1_SEL_SHIFT = 5, 4331633e8d2SJoseph Chen GMAC_SRC_M1_SEL_MASK = 0x1 << GMAC_SRC_M1_SEL_SHIFT, 4341633e8d2SJoseph Chen GMAC_SRC_M1_SEL_INT = 0, 4351633e8d2SJoseph Chen GMAC_SRC_M1_SEL_EXT, 4362438a166SFinley Xiao GMAC_MODE_SEL_SHIFT = 4, 4372438a166SFinley Xiao GMAC_MODE_SEL_MASK = 0x1 << GMAC_MODE_SEL_SHIFT, 4382438a166SFinley Xiao GMAC_RGMII_MODE = 0, 4392438a166SFinley Xiao GMAC_RMII_MODE, 4402438a166SFinley Xiao RGMII_CLK_SEL_SHIFT = 2, 4412438a166SFinley Xiao RGMII_CLK_SEL_MASK = 0x3 << RGMII_CLK_SEL_SHIFT, 4422438a166SFinley Xiao RGMII_CLK_DIV0 = 0, 4432438a166SFinley Xiao RGMII_CLK_DIV1, 4442438a166SFinley Xiao RGMII_CLK_DIV50, 4452438a166SFinley Xiao RGMII_CLK_DIV5, 4462438a166SFinley Xiao RMII_CLK_SEL_SHIFT = 1, 4472438a166SFinley Xiao RMII_CLK_SEL_MASK = 0x1 << RMII_CLK_SEL_SHIFT, 4482438a166SFinley Xiao RMII_CLK_DIV20 = 0, 4492438a166SFinley Xiao RMII_CLK_DIV2, 4501633e8d2SJoseph Chen GMAC_SRC_M0_SEL_SHIFT = 0, 4511633e8d2SJoseph Chen GMAC_SRC_M0_SEL_MASK = 0x1, 4521633e8d2SJoseph Chen GMAC_SRC_M0_SEL_INT = 0, 4531633e8d2SJoseph Chen GMAC_SRC_M0_SEL_EXT, 4541633e8d2SJoseph Chen 4551633e8d2SJoseph Chen /* GRF_IOFUNC_CON1 */ 4561633e8d2SJoseph Chen GMAC_SRC_SEL_SHIFT = 12, 457b85730d9SFinley Xiao GMAC_SRC_SEL_MASK = 1 << GMAC_SRC_SEL_SHIFT, 4581633e8d2SJoseph Chen GMAC_SRC_SEL_M0 = 0, 4591633e8d2SJoseph Chen GMAC_SRC_SEL_M1, 4601633e8d2SJoseph Chen }; 4611633e8d2SJoseph Chen #endif 462