xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-rockchip/cru_rv1126.h (revision 2304b5d318f8fc2e2cbbf2b5aae7021bbaab052b)
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