clk: rockchip: Add support for RK3528

Add clock driver for RK3528.

Imported from vendor U-Boot linux-6.1-stan-rkr5 tag with minor
adjustments and fixes for mainline.

Signed-off-by: Joseph Chen <chenjh@rock-chips.com>
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
This commit is contained in:
Joseph Chen
2025-04-07 22:46:49 +00:00
committed by Kever Yang
parent d26203beb9
commit 5a7a856b13
7 changed files with 2480 additions and 7 deletions

View File

@@ -15,6 +15,13 @@ struct udevice;
#define RKCLK_PLL_MODE_NORMAL 1
#define RKCLK_PLL_MODE_DEEP 2
/*
* PLL flags
*/
#define ROCKCHIP_PLL_SYNC_RATE BIT(0)
/* normal mode only. now only for pll_rk3036, pll_rk3328 type */
#define ROCKCHIP_PLL_FIXED_MODE BIT(1)
enum {
ROCKCHIP_SYSCON_NOC,
ROCKCHIP_SYSCON_GRF,
@@ -207,6 +214,16 @@ int rockchip_reset_bind(struct udevice *pdev, u32 reg_offset, u32 reg_number);
*/
int rockchip_reset_bind_lut(struct udevice *pdev, const int *lookup_table,
u32 reg_offset, u32 reg_number);
/*
* rk3528_reset_bind_lut() - Bind soft reset device as child of clock device
* using dedicated RK3528 lookup table
*
* @pdev: clock udevice
* @reg_offset: the first offset in cru for softreset registers
* @reg_number: the reg numbers of softreset registers
* Return: 0 success, or error value
*/
int rk3528_reset_bind_lut(struct udevice *pdev, u32 reg_offset, u32 reg_number);
/*
* rk3588_reset_bind_lut() - Bind soft reset device as child of clock device
* using dedicated RK3588 lookup table

View File

@@ -0,0 +1,388 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2022 Rockchip Electronics Co., Ltd.
* Author: Joseph Chen <chenjh@rock-chips.com>
*/
#ifndef _ASM_ARCH_CRU_RK3528_H
#define _ASM_ARCH_CRU_RK3528_H
#define MHz 1000000
#define KHz 1000
#define OSC_HZ (24 * MHz)
#define CPU_PVTPLL_HZ (1200 * MHz)
#define APLL_HZ (600 * MHz)
#define GPLL_HZ (1188 * MHz)
#define CPLL_HZ (996 * MHz)
#define PPLL_HZ (1000 * MHz)
/* RK3528 pll id */
enum rk3528_pll_id {
APLL,
CPLL,
GPLL,
PPLL,
DPLL,
PLL_COUNT,
};
struct rk3528_clk_priv {
struct rk3528_cru *cru;
unsigned long ppll_hz;
unsigned long gpll_hz;
unsigned long cpll_hz;
unsigned long armclk_hz;
unsigned long armclk_enter_hz;
unsigned long armclk_init_hz;
bool sync_kernel;
};
struct rk3528_pll {
unsigned int con0;
unsigned int con1;
unsigned int con2;
unsigned int con3;
unsigned int con4;
unsigned int reserved0[3];
};
#define RK3528_CRU_BASE ((struct rk3528_cru *)0xff4a0000)
struct rk3528_cru {
unsigned int apll_con[5];
unsigned int reserved0014[3];
unsigned int cpll_con[5];
unsigned int reserved0034[11];
unsigned int gpll_con[5];
unsigned int reserved0074[51 + 32];
unsigned int reserved01c0[48];
unsigned int mode_con[1];
unsigned int reserved0284[31];
unsigned int clksel_con[91];
unsigned int reserved046c[229];
unsigned int gate_con[46];
unsigned int reserved08b8[82];
unsigned int softrst_con[47];
unsigned int reserved0abc[81];
unsigned int glb_cnt_th;
unsigned int glb_rst_st;
unsigned int glb_srst_fst;
unsigned int glb_srst_snd;
unsigned int glb_rst_con;
unsigned int reserved0c14[6];
unsigned int corewfi_con;
unsigned int reserved0c30[15604];
/* pmucru */
unsigned int reserved10000[192];
unsigned int pmuclksel_con[3];
unsigned int reserved1030c[317];
unsigned int pmugate_con[3];
unsigned int reserved1080c[125];
unsigned int pmusoftrst_con[3];
unsigned int reserved10a08[7550 + 8191];
/* pciecru */
unsigned int reserved20000[32];
unsigned int ppll_con[5];
unsigned int reserved20094[155];
unsigned int pcieclksel_con[2];
unsigned int reserved20308[318];
unsigned int pciegate_con;
};
check_member(rk3528_cru, pciegate_con, 0x20800);
struct pll_rate_table {
unsigned long rate;
unsigned int fbdiv;
unsigned int postdiv1;
unsigned int refdiv;
unsigned int postdiv2;
unsigned int dsmpd;
unsigned int frac;
};
#define RK3528_PMU_CRU_BASE 0x10000
#define RK3528_PCIE_CRU_BASE 0x20000
#define RK3528_DDRPHY_CRU_BASE 0x28000
#define RK3528_PLL_CON(x) ((x) * 0x4)
#define RK3528_PCIE_PLL_CON(x) ((x) * 0x4 + RK3528_PCIE_CRU_BASE)
#define RK3528_DDRPHY_PLL_CON(x) ((x) * 0x4 + RK3528_DDRPHY_CRU_BASE)
#define RK3528_MODE_CON 0x280
#define RK3528_CLKSEL_CON(x) ((x) * 0x4 + 0x300)
#define RK3528_PMU_CLKSEL_CON(x) ((x) * 0x4 + 0x300 + RK3528_PMU_CRU_BASE)
#define RK3528_PCIE_CLKSEL_CON(x) ((x) * 0x4 + 0x300 + RK3528_PCIE_CRU_BASE)
#define RK3528_DDRPHY_MODE_CON (0x280 + RK3528_DDRPHY_CRU_BASE)
#define RK3528_DIV_ACLK_M_CORE_SHIFT 11
#define RK3528_DIV_ACLK_M_CORE_MASK (0x1f << RK3528_DIV_ACLK_M_CORE_SHIFT)
#define RK3528_DIV_PCLK_DBG_SHIFT 1
#define RK3528_DIV_PCLK_DBG_MASK (0x1f << RK3528_DIV_PCLK_DBG_SHIFT)
enum {
/* CRU_CLKSEL_CON00 */
CLK_MATRIX_50M_SRC_DIV_SHIFT = 2,
CLK_MATRIX_50M_SRC_DIV_MASK = 0x1F << CLK_MATRIX_50M_SRC_DIV_SHIFT,
CLK_MATRIX_100M_SRC_DIV_SHIFT = 7,
CLK_MATRIX_100M_SRC_DIV_MASK = 0x1F << CLK_MATRIX_100M_SRC_DIV_SHIFT,
/* CRU_CLKSEL_CON01 */
CLK_MATRIX_150M_SRC_DIV_SHIFT = 0,
CLK_MATRIX_150M_SRC_DIV_MASK = 0x1F << CLK_MATRIX_150M_SRC_DIV_SHIFT,
CLK_MATRIX_200M_SRC_DIV_SHIFT = 5,
CLK_MATRIX_200M_SRC_DIV_MASK = 0x1F << CLK_MATRIX_200M_SRC_DIV_SHIFT,
CLK_MATRIX_250M_SRC_DIV_SHIFT = 10,
CLK_MATRIX_250M_SRC_DIV_MASK = 0x1F << CLK_MATRIX_250M_SRC_DIV_SHIFT,
CLK_MATRIX_250M_SRC_SEL_SHIFT = 15,
CLK_MATRIX_250M_SRC_SEL_MASK = 0x1 << CLK_MATRIX_250M_SRC_SEL_SHIFT,
/* CRU_CLKSEL_CON02 */
CLK_MATRIX_300M_SRC_DIV_SHIFT = 0,
CLK_MATRIX_300M_SRC_DIV_MASK = 0x1F << CLK_MATRIX_300M_SRC_DIV_SHIFT,
CLK_MATRIX_339M_SRC_DIV_SHIFT = 5,
CLK_MATRIX_339M_SRC_DIV_MASK = 0x1F << CLK_MATRIX_339M_SRC_DIV_SHIFT,
CLK_MATRIX_400M_SRC_DIV_SHIFT = 10,
CLK_MATRIX_400M_SRC_DIV_MASK = 0x1F << CLK_MATRIX_400M_SRC_DIV_SHIFT,
/* CRU_CLKSEL_CON03 */
CLK_MATRIX_500M_SRC_DIV_SHIFT = 6,
CLK_MATRIX_500M_SRC_DIV_MASK = 0x1F << CLK_MATRIX_500M_SRC_DIV_SHIFT,
CLK_MATRIX_500M_SRC_SEL_SHIFT = 11,
CLK_MATRIX_500M_SRC_SEL_MASK = 0x1 << CLK_MATRIX_500M_SRC_SEL_SHIFT,
/* CRU_CLKSEL_CON04 */
CLK_MATRIX_600M_SRC_DIV_SHIFT = 0,
CLK_MATRIX_600M_SRC_DIV_MASK = 0x1F << CLK_MATRIX_600M_SRC_DIV_SHIFT,
CLK_MATRIX_250M_SRC_SEL_CLK_GPLL_MUX = 0U,
CLK_MATRIX_250M_SRC_SEL_CLK_CPLL_MUX = 1U,
CLK_MATRIX_500M_SRC_SEL_CLK_GPLL_MUX = 0U,
CLK_MATRIX_500M_SRC_SEL_CLK_CPLL_MUX = 1U,
/* PMUCRU_CLKSEL_CON00 */
CLK_I2C2_SEL_SHIFT = 0,
CLK_I2C2_SEL_MASK = 0x3 << CLK_I2C2_SEL_SHIFT,
/* PCIE_CRU_CLKSEL_CON01 */
PCIE_CLK_MATRIX_50M_SRC_DIV_SHIFT = 7,
PCIE_CLK_MATRIX_50M_SRC_DIV_MASK = 0x1f << PCIE_CLK_MATRIX_50M_SRC_DIV_SHIFT,
PCIE_CLK_MATRIX_100M_SRC_DIV_SHIFT = 11,
PCIE_CLK_MATRIX_100M_SRC_DIV_MASK = 0x1f << PCIE_CLK_MATRIX_100M_SRC_DIV_SHIFT,
/* CRU_CLKSEL_CON32 */
DCLK_VOP_SRC0_SEL_SHIFT = 10,
DCLK_VOP_SRC0_SEL_MASK = 0x1 << DCLK_VOP_SRC0_SEL_SHIFT,
DCLK_VOP_SRC0_DIV_SHIFT = 2,
DCLK_VOP_SRC0_DIV_MASK = 0xFF << DCLK_VOP_SRC0_DIV_SHIFT,
/* CRU_CLKSEL_CON33 */
DCLK_VOP_SRC1_SEL_SHIFT = 8,
DCLK_VOP_SRC1_SEL_MASK = 0x1 << DCLK_VOP_SRC1_SEL_SHIFT,
DCLK_VOP_SRC1_DIV_SHIFT = 0,
DCLK_VOP_SRC1_DIV_MASK = 0xFF << DCLK_VOP_SRC1_DIV_SHIFT,
/* CRU_CLKSEL_CON43 */
CLK_CORE_CRYPTO_SEL_SHIFT = 14,
CLK_CORE_CRYPTO_SEL_MASK = 0x3 << CLK_CORE_CRYPTO_SEL_SHIFT,
ACLK_BUS_VOPGL_ROOT_DIV_SHIFT = 0U,
ACLK_BUS_VOPGL_ROOT_DIV_MASK = 0x7U << ACLK_BUS_VOPGL_ROOT_DIV_SHIFT,
/* CRU_CLKSEL_CON44 */
CLK_PWM0_SEL_SHIFT = 6,
CLK_PWM0_SEL_MASK = 0x3 << CLK_PWM0_SEL_SHIFT,
CLK_PWM1_SEL_SHIFT = 8,
CLK_PWM1_SEL_MASK = 0x3 << CLK_PWM1_SEL_SHIFT,
CLK_PWM0_SEL_CLK_MATRIX_100M_SRC = 0U,
CLK_PWM0_SEL_CLK_MATRIX_50M_SRC = 1U,
CLK_PWM0_SEL_XIN_OSC0_FUNC = 2U,
CLK_PWM1_SEL_CLK_MATRIX_100M_SRC = 0U,
CLK_PWM1_SEL_CLK_MATRIX_50M_SRC = 1U,
CLK_PWM1_SEL_XIN_OSC0_FUNC = 2U,
CLK_PKA_CRYPTO_SEL_SHIFT = 0,
CLK_PKA_CRYPTO_SEL_MASK = 0x3 << CLK_PKA_CRYPTO_SEL_SHIFT,
CLK_CORE_CRYPTO_SEL_CLK_MATRIX_300M_SRC = 0U,
CLK_CORE_CRYPTO_SEL_CLK_MATRIX_200M_SRC = 1U,
CLK_CORE_CRYPTO_SEL_CLK_MATRIX_100M_SRC = 2U,
CLK_CORE_CRYPTO_SEL_XIN_OSC0_FUNC = 3U,
CLK_PKA_CRYPTO_SEL_CLK_MATRIX_300M_SRC = 0U,
CLK_PKA_CRYPTO_SEL_CLK_MATRIX_200M_SRC = 1U,
CLK_PKA_CRYPTO_SEL_CLK_MATRIX_100M_SRC = 2U,
CLK_PKA_CRYPTO_SEL_XIN_OSC0_FUNC = 3U,
/* CRU_CLKSEL_CON60 */
CLK_MATRIX_25M_SRC_DIV_SHIFT = 2,
CLK_MATRIX_25M_SRC_DIV_MASK = 0xff << CLK_MATRIX_25M_SRC_DIV_SHIFT,
CLK_MATRIX_125M_SRC_DIV_SHIFT = 10,
CLK_MATRIX_125M_SRC_DIV_MASK = 0x1f << CLK_MATRIX_125M_SRC_DIV_SHIFT,
/* CRU_CLKSEL_CON61 */
SCLK_SFC_DIV_SHIFT = 6,
SCLK_SFC_DIV_MASK = 0x3F << SCLK_SFC_DIV_SHIFT,
SCLK_SFC_SEL_SHIFT = 12,
SCLK_SFC_SEL_MASK = 0x3 << SCLK_SFC_SEL_SHIFT,
SCLK_SFC_SEL_CLK_GPLL_MUX = 0U,
SCLK_SFC_SEL_CLK_CPLL_MUX = 1U,
SCLK_SFC_SEL_XIN_OSC0_FUNC = 2U,
/* CRU_CLKSEL_CON62 */
CCLK_SRC_EMMC_DIV_SHIFT = 0,
CCLK_SRC_EMMC_DIV_MASK = 0x3F << CCLK_SRC_EMMC_DIV_SHIFT,
CCLK_SRC_EMMC_SEL_SHIFT = 6,
CCLK_SRC_EMMC_SEL_MASK = 0x3 << CCLK_SRC_EMMC_SEL_SHIFT,
BCLK_EMMC_SEL_SHIFT = 8,
BCLK_EMMC_SEL_MASK = 0x3 << BCLK_EMMC_SEL_SHIFT,
/* CRU_CLKSEL_CON63 */
CLK_I2C3_SEL_SHIFT = 12,
CLK_I2C3_SEL_MASK = 0x3 << CLK_I2C3_SEL_SHIFT,
CLK_I2C5_SEL_SHIFT = 14,
CLK_I2C5_SEL_MASK = 0x3 << CLK_I2C5_SEL_SHIFT,
CLK_SPI1_SEL_SHIFT = 10,
CLK_SPI1_SEL_MASK = 0x3 << CLK_SPI1_SEL_SHIFT,
/* CRU_CLKSEL_CON64 */
CLK_I2C6_SEL_SHIFT = 0,
CLK_I2C6_SEL_MASK = 0x3 << CLK_I2C6_SEL_SHIFT,
/* CRU_CLKSEL_CON74 */
CLK_SARADC_DIV_SHIFT = 0,
CLK_SARADC_DIV_MASK = 0x7 << CLK_SARADC_DIV_SHIFT,
CLK_TSADC_DIV_SHIFT = 3,
CLK_TSADC_DIV_MASK = 0x1F << CLK_TSADC_DIV_SHIFT,
CLK_TSADC_TSEN_DIV_SHIFT = 8,
CLK_TSADC_TSEN_DIV_MASK = 0x1F << CLK_TSADC_TSEN_DIV_SHIFT,
/* CRU_CLKSEL_CON79 */
CLK_I2C1_SEL_SHIFT = 9,
CLK_I2C1_SEL_MASK = 0x3 << CLK_I2C1_SEL_SHIFT,
CLK_I2C0_SEL_SHIFT = 11,
CLK_I2C0_SEL_MASK = 0x3 << CLK_I2C0_SEL_SHIFT,
CLK_SPI0_SEL_SHIFT = 13,
CLK_SPI0_SEL_MASK = 0x3 << CLK_SPI0_SEL_SHIFT,
/* CRU_CLKSEL_CON83 */
ACLK_VOP_ROOT_DIV_SHIFT = 12,
ACLK_VOP_ROOT_DIV_MASK = 0x7 << ACLK_VOP_ROOT_DIV_SHIFT,
ACLK_VOP_ROOT_SEL_SHIFT = 15,
ACLK_VOP_ROOT_SEL_MASK = 0x1 << ACLK_VOP_ROOT_SEL_SHIFT,
/* CRU_CLKSEL_CON84 */
DCLK_VOP0_SEL_SHIFT = 0,
DCLK_VOP0_SEL_MASK = 0x1 << DCLK_VOP0_SEL_SHIFT,
DCLK_VOP_SRC_SEL_CLK_GPLL_MUX = 0U,
DCLK_VOP_SRC_SEL_CLK_CPLL_MUX = 1U,
ACLK_VOP_ROOT_SEL_CLK_GPLL_MUX = 0U,
ACLK_VOP_ROOT_SEL_CLK_CPLL_MUX = 1U,
DCLK_VOP0_SEL_DCLK_VOP_SRC0 = 0U,
DCLK_VOP0_SEL_CLK_HDMIPHY_PIXEL_IO = 1U,
/* CRU_CLKSEL_CON85 */
CLK_I2C4_SEL_SHIFT = 13,
CLK_I2C4_SEL_MASK = 0x3 << CLK_I2C4_SEL_SHIFT,
CLK_I2C7_SEL_SHIFT = 0,
CLK_I2C7_SEL_MASK = 0x3 << CLK_I2C7_SEL_SHIFT,
CLK_I2C3_SEL_CLK_MATRIX_200M_SRC = 0U,
CLK_I2C3_SEL_CLK_MATRIX_100M_SRC = 1U,
CLK_I2C3_SEL_CLK_MATRIX_50M_SRC = 2U,
CLK_I2C3_SEL_XIN_OSC0_FUNC = 3U,
CLK_SPI1_SEL_CLK_MATRIX_200M_SRC = 0U,
CLK_SPI1_SEL_CLK_MATRIX_100M_SRC = 1U,
CLK_SPI1_SEL_CLK_MATRIX_50M_SRC = 2U,
CLK_SPI1_SEL_XIN_OSC0_FUNC = 3U,
CCLK_SRC_SDMMC0_DIV_SHIFT = 0,
CCLK_SRC_SDMMC0_DIV_MASK = 0x3F << CCLK_SRC_SDMMC0_DIV_SHIFT,
CCLK_SRC_SDMMC0_SEL_SHIFT = 6,
CCLK_SRC_SDMMC0_SEL_MASK = 0x3 << CCLK_SRC_SDMMC0_SEL_SHIFT,
CCLK_SRC_EMMC_SEL_CLK_GPLL_MUX = 0U,
CCLK_SRC_EMMC_SEL_CLK_CPLL_MUX = 1U,
CCLK_SRC_EMMC_SEL_XIN_OSC0_FUNC = 2U,
BCLK_EMMC_SEL_CLK_MATRIX_200M_SRC = 0U,
BCLK_EMMC_SEL_CLK_MATRIX_100M_SRC = 1U,
BCLK_EMMC_SEL_CLK_MATRIX_50M_SRC = 2U,
BCLK_EMMC_SEL_XIN_OSC0_FUNC = 3U,
CCLK_SRC_SDMMC0_SEL_CLK_GPLL_MUX = 0U,
CCLK_SRC_SDMMC0_SEL_CLK_CPLL_MUX = 1U,
CCLK_SRC_SDMMC0_SEL_XIN_OSC0_FUNC = 2U,
/* CRU_CLKSEL_CON04 */
CLK_UART0_SRC_DIV_SHIFT = 5,
CLK_UART0_SRC_DIV_MASK = 0x1F << CLK_UART0_SRC_DIV_SHIFT,
/* CRU_CLKSEL_CON05 */
CLK_UART0_FRAC_DIV_SHIFT = 0,
CLK_UART0_FRAC_DIV_MASK = 0xFFFFFFFF << CLK_UART0_FRAC_DIV_SHIFT,
/* CRU_CLKSEL_CON06 */
SCLK_UART0_SRC_SEL_SHIFT = 0,
SCLK_UART0_SRC_SEL_MASK = 0x3 << SCLK_UART0_SRC_SEL_SHIFT,
CLK_UART1_SRC_DIV_SHIFT = 2,
CLK_UART1_SRC_DIV_MASK = 0x1F << CLK_UART1_SRC_DIV_SHIFT,
/* CRU_CLKSEL_CON07 */
CLK_UART1_FRAC_DIV_SHIFT = 0,
CLK_UART1_FRAC_DIV_MASK = 0xFFFFFFFF << CLK_UART1_FRAC_DIV_SHIFT,
/* CRU_CLKSEL_CON08 */
SCLK_UART1_SRC_SEL_SHIFT = 0,
SCLK_UART1_SRC_SEL_MASK = 0x3 << SCLK_UART1_SRC_SEL_SHIFT,
CLK_UART2_SRC_DIV_SHIFT = 2,
CLK_UART2_SRC_DIV_MASK = 0x1F << CLK_UART2_SRC_DIV_SHIFT,
/* CRU_CLKSEL_CON09 */
CLK_UART2_FRAC_DIV_SHIFT = 0,
CLK_UART2_FRAC_DIV_MASK = 0xFFFFFFFF << CLK_UART2_FRAC_DIV_SHIFT,
/* CRU_CLKSEL_CON10 */
SCLK_UART2_SRC_SEL_SHIFT = 0,
SCLK_UART2_SRC_SEL_MASK = 0x3 << SCLK_UART2_SRC_SEL_SHIFT,
CLK_UART3_SRC_DIV_SHIFT = 2,
CLK_UART3_SRC_DIV_MASK = 0x1F << CLK_UART3_SRC_DIV_SHIFT,
/* CRU_CLKSEL_CON11 */
CLK_UART3_FRAC_DIV_SHIFT = 0,
CLK_UART3_FRAC_DIV_MASK = 0xFFFFFFFF << CLK_UART3_FRAC_DIV_SHIFT,
/* CRU_CLKSEL_CON12 */
SCLK_UART3_SRC_SEL_SHIFT = 0,
SCLK_UART3_SRC_SEL_MASK = 0x3 << SCLK_UART3_SRC_SEL_SHIFT,
CLK_UART4_SRC_DIV_SHIFT = 2,
CLK_UART4_SRC_DIV_MASK = 0x1F << CLK_UART4_SRC_DIV_SHIFT,
/* CRU_CLKSEL_CON13 */
CLK_UART4_FRAC_DIV_SHIFT = 0,
CLK_UART4_FRAC_DIV_MASK = 0xFFFFFFFF << CLK_UART4_FRAC_DIV_SHIFT,
/* CRU_CLKSEL_CON14 */
SCLK_UART4_SRC_SEL_SHIFT = 0,
SCLK_UART4_SRC_SEL_MASK = 0x3 << SCLK_UART4_SRC_SEL_SHIFT,
CLK_UART5_SRC_DIV_SHIFT = 2,
CLK_UART5_SRC_DIV_MASK = 0x1F << CLK_UART5_SRC_DIV_SHIFT,
/* CRU_CLKSEL_CON15 */
CLK_UART5_FRAC_DIV_SHIFT = 0,
CLK_UART5_FRAC_DIV_MASK = 0xFFFFFFFF << CLK_UART5_FRAC_DIV_SHIFT,
/* CRU_CLKSEL_CON16 */
SCLK_UART5_SRC_SEL_SHIFT = 0,
SCLK_UART5_SRC_SEL_MASK = 0x3 << SCLK_UART5_SRC_SEL_SHIFT,
CLK_UART6_SRC_DIV_SHIFT = 2,
CLK_UART6_SRC_DIV_MASK = 0x1F << CLK_UART6_SRC_DIV_SHIFT,
/* CRU_CLKSEL_CON17 */
CLK_UART6_FRAC_DIV_SHIFT = 0,
CLK_UART6_FRAC_DIV_MASK = 0xFFFFFFFF << CLK_UART6_FRAC_DIV_SHIFT,
/* CRU_CLKSEL_CON18 */
SCLK_UART6_SRC_SEL_SHIFT = 0,
SCLK_UART6_SRC_SEL_MASK = 0x3 << SCLK_UART6_SRC_SEL_SHIFT,
CLK_UART7_SRC_DIV_SHIFT = 2,
CLK_UART7_SRC_DIV_MASK = 0x1F << CLK_UART7_SRC_DIV_SHIFT,
/* CRU_CLKSEL_CON19 */
CLK_UART7_FRAC_DIV_SHIFT = 0,
CLK_UART7_FRAC_DIV_MASK = 0xFFFFFFFF << CLK_UART7_FRAC_DIV_SHIFT,
/* CRU_CLKSEL_CON20 */
SCLK_UART7_SRC_SEL_SHIFT = 0,
SCLK_UART7_SRC_SEL_MASK = 0x3 << SCLK_UART7_SRC_SEL_SHIFT,
SCLK_UART0_SRC_SEL_CLK_UART0_SRC = 0U,
SCLK_UART0_SRC_SEL_CLK_UART0_FRAC = 1U,
SCLK_UART0_SRC_SEL_XIN_OSC0_FUNC = 2U,
/* CRU_CLKSEL_CON60 */
CLK_GMAC1_VPU_25M_DIV_SHIFT = 2,
CLK_GMAC1_VPU_25M_DIV_MASK = 0xFF << CLK_GMAC1_VPU_25M_DIV_SHIFT,
/* CRU_CLKSEL_CON66 */
CLK_GMAC1_SRC_VPU_DIV_SHIFT = 0,
CLK_GMAC1_SRC_VPU_DIV_MASK = 0x3F << CLK_GMAC1_SRC_VPU_DIV_SHIFT,
/* CRU_CLKSEL_CON84 */
CLK_GMAC0_SRC_DIV_SHIFT = 3,
CLK_GMAC0_SRC_DIV_MASK = 0x3F << CLK_GMAC0_SRC_DIV_SHIFT,
};
#endif /* _ASM_ARCH_CRU_RK3528_H */

View File

@@ -15,6 +15,7 @@ obj-$(CONFIG_ROCKCHIP_RK3308) += clk_rk3308.o
obj-$(CONFIG_ROCKCHIP_RK3328) += clk_rk3328.o
obj-$(CONFIG_ROCKCHIP_RK3368) += clk_rk3368.o
obj-$(CONFIG_ROCKCHIP_RK3399) += clk_rk3399.o
obj-$(CONFIG_ROCKCHIP_RK3528) += clk_rk3528.o
obj-$(CONFIG_ROCKCHIP_RK3568) += clk_rk3568.o
obj-$(CONFIG_ROCKCHIP_RK3588) += clk_rk3588.o
obj-$(CONFIG_ROCKCHIP_RV1108) += clk_rv1108.o

View File

@@ -309,9 +309,11 @@ static int rk3036_pll_set_rate(struct rockchip_pll_clock *pll,
* When power on or changing PLL setting,
* we must force PLL into slow mode to ensure output stable clock.
*/
rk_clrsetreg(base + pll->mode_offset,
pll->mode_mask << pll->mode_shift,
RKCLK_PLL_MODE_SLOW << pll->mode_shift);
if (!(pll->pll_flags & ROCKCHIP_PLL_FIXED_MODE)) {
rk_clrsetreg(base + pll->mode_offset,
pll->mode_mask << pll->mode_shift,
RKCLK_PLL_MODE_SLOW << pll->mode_shift);
}
/* Power down */
rk_setreg(base + pll->con_offset + 0x4,
@@ -345,8 +347,11 @@ static int rk3036_pll_set_rate(struct rockchip_pll_clock *pll,
while (!(readl(base + pll->con_offset + 0x4) & (1 << pll->lock_shift)))
udelay(1);
rk_clrsetreg(base + pll->mode_offset, pll->mode_mask << pll->mode_shift,
RKCLK_PLL_MODE_NORMAL << pll->mode_shift);
if (!(pll->pll_flags & ROCKCHIP_PLL_FIXED_MODE)) {
rk_clrsetreg(base + pll->mode_offset,
pll->mode_mask << pll->mode_shift,
RKCLK_PLL_MODE_NORMAL << pll->mode_shift);
}
debug("PLL at %p: con0=%x con1= %x con2= %x mode= %x\n",
pll, readl(base + pll->con_offset),
readl(base + pll->con_offset + 0x4),
@@ -362,12 +367,18 @@ static ulong rk3036_pll_get_rate(struct rockchip_pll_clock *pll,
u32 refdiv, fbdiv, postdiv1, postdiv2, dsmpd, frac;
u32 con = 0, shift, mask;
ulong rate;
int mode;
con = readl(base + pll->mode_offset);
shift = pll->mode_shift;
mask = pll->mode_mask << shift;
switch ((con & mask) >> shift) {
if (!(pll->pll_flags & ROCKCHIP_PLL_FIXED_MODE))
mode = (con & mask) >> shift;
else
mode = RKCLK_PLL_MODE_NORMAL;
switch (mode) {
case RKCLK_PLL_MODE_SLOW:
return OSC_HZ;
case RKCLK_PLL_MODE_NORMAL:

File diff suppressed because it is too large Load Diff

View File

@@ -17,7 +17,7 @@ obj-$(CONFIG_RESET_BCM6345) += reset-bcm6345.o
obj-$(CONFIG_RESET_UNIPHIER) += reset-uniphier.o
obj-$(CONFIG_RESET_AST2500) += reset-ast2500.o
obj-$(CONFIG_RESET_AST2600) += reset-ast2600.o
obj-$(CONFIG_RESET_ROCKCHIP) += reset-rockchip.o rst-rk3588.o
obj-$(CONFIG_RESET_ROCKCHIP) += reset-rockchip.o rst-rk3528.o rst-rk3588.o
obj-$(CONFIG_RESET_MESON) += reset-meson.o
obj-$(CONFIG_RESET_SOCFPGA) += reset-socfpga.o
obj-$(CONFIG_RESET_MEDIATEK) += reset-mediatek.o

302
drivers/reset/rst-rk3528.c Normal file
View File

@@ -0,0 +1,302 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (c) 2022 Rockchip Electronics Co., Ltd.
* Based on Sebastian Reichel's implementation for RK3588
*/
#include <dm.h>
#include <asm/arch-rockchip/clock.h>
#include <dt-bindings/reset/rockchip,rk3528-cru.h>
/* 0xFF4A0000 + 0x0A00 */
#define RK3528_CRU_RESET_OFFSET(id, reg, bit) [id] = (0 + reg * 16 + bit)
/* mapping table for reset ID to register offset */
static const int rk3528_register_offset[] = {
/* CRU_SOFTRST_CON03 */
RK3528_CRU_RESET_OFFSET(SRST_CORE0_PO, 3, 0),
RK3528_CRU_RESET_OFFSET(SRST_CORE1_PO, 3, 1),
RK3528_CRU_RESET_OFFSET(SRST_CORE2_PO, 3, 2),
RK3528_CRU_RESET_OFFSET(SRST_CORE3_PO, 3, 3),
RK3528_CRU_RESET_OFFSET(SRST_CORE0, 3, 4),
RK3528_CRU_RESET_OFFSET(SRST_CORE1, 3, 5),
RK3528_CRU_RESET_OFFSET(SRST_CORE2, 3, 6),
RK3528_CRU_RESET_OFFSET(SRST_CORE3, 3, 7),
RK3528_CRU_RESET_OFFSET(SRST_NL2, 3, 8),
RK3528_CRU_RESET_OFFSET(SRST_CORE_BIU, 3, 9),
RK3528_CRU_RESET_OFFSET(SRST_CORE_CRYPTO, 3, 10),
/* CRU_SOFTRST_CON05 */
RK3528_CRU_RESET_OFFSET(SRST_P_DBG, 5, 13),
RK3528_CRU_RESET_OFFSET(SRST_POT_DBG, 5, 14),
RK3528_CRU_RESET_OFFSET(SRST_NT_DBG, 5, 15),
/* CRU_SOFTRST_CON06 */
RK3528_CRU_RESET_OFFSET(SRST_P_CORE_GRF, 6, 2),
RK3528_CRU_RESET_OFFSET(SRST_P_DAPLITE_BIU, 6, 3),
RK3528_CRU_RESET_OFFSET(SRST_P_CPU_BIU, 6, 4),
RK3528_CRU_RESET_OFFSET(SRST_REF_PVTPLL_CORE, 6, 7),
/* CRU_SOFTRST_CON08 */
RK3528_CRU_RESET_OFFSET(SRST_A_BUS_VOPGL_BIU, 8, 1),
RK3528_CRU_RESET_OFFSET(SRST_A_BUS_H_BIU, 8, 3),
RK3528_CRU_RESET_OFFSET(SRST_A_SYSMEM_BIU, 8, 8),
RK3528_CRU_RESET_OFFSET(SRST_A_BUS_BIU, 8, 10),
RK3528_CRU_RESET_OFFSET(SRST_H_BUS_BIU, 8, 11),
RK3528_CRU_RESET_OFFSET(SRST_P_BUS_BIU, 8, 12),
RK3528_CRU_RESET_OFFSET(SRST_P_DFT2APB, 8, 13),
RK3528_CRU_RESET_OFFSET(SRST_P_BUS_GRF, 8, 15),
/* CRU_SOFTRST_CON09 */
RK3528_CRU_RESET_OFFSET(SRST_A_BUS_M_BIU, 9, 0),
RK3528_CRU_RESET_OFFSET(SRST_A_GIC, 9, 1),
RK3528_CRU_RESET_OFFSET(SRST_A_SPINLOCK, 9, 2),
RK3528_CRU_RESET_OFFSET(SRST_A_DMAC, 9, 4),
RK3528_CRU_RESET_OFFSET(SRST_P_TIMER, 9, 5),
RK3528_CRU_RESET_OFFSET(SRST_TIMER0, 9, 6),
RK3528_CRU_RESET_OFFSET(SRST_TIMER1, 9, 7),
RK3528_CRU_RESET_OFFSET(SRST_TIMER2, 9, 8),
RK3528_CRU_RESET_OFFSET(SRST_TIMER3, 9, 9),
RK3528_CRU_RESET_OFFSET(SRST_TIMER4, 9, 10),
RK3528_CRU_RESET_OFFSET(SRST_TIMER5, 9, 11),
RK3528_CRU_RESET_OFFSET(SRST_P_JDBCK_DAP, 9, 12),
RK3528_CRU_RESET_OFFSET(SRST_JDBCK_DAP, 9, 13),
RK3528_CRU_RESET_OFFSET(SRST_P_WDT_NS, 9, 15),
/* CRU_SOFTRST_CON10 */
RK3528_CRU_RESET_OFFSET(SRST_T_WDT_NS, 10, 0),
RK3528_CRU_RESET_OFFSET(SRST_H_TRNG_NS, 10, 3),
RK3528_CRU_RESET_OFFSET(SRST_P_UART0, 10, 7),
RK3528_CRU_RESET_OFFSET(SRST_S_UART0, 10, 8),
RK3528_CRU_RESET_OFFSET(SRST_PKA_CRYPTO, 10, 10),
RK3528_CRU_RESET_OFFSET(SRST_A_CRYPTO, 10, 11),
RK3528_CRU_RESET_OFFSET(SRST_H_CRYPTO, 10, 12),
RK3528_CRU_RESET_OFFSET(SRST_P_DMA2DDR, 10, 13),
RK3528_CRU_RESET_OFFSET(SRST_A_DMA2DDR, 10, 14),
/* CRU_SOFTRST_CON11 */
RK3528_CRU_RESET_OFFSET(SRST_P_PWM0, 11, 4),
RK3528_CRU_RESET_OFFSET(SRST_PWM0, 11, 5),
RK3528_CRU_RESET_OFFSET(SRST_P_PWM1, 11, 7),
RK3528_CRU_RESET_OFFSET(SRST_PWM1, 11, 8),
RK3528_CRU_RESET_OFFSET(SRST_P_SCR, 11, 10),
RK3528_CRU_RESET_OFFSET(SRST_A_DCF, 11, 11),
RK3528_CRU_RESET_OFFSET(SRST_P_INTMUX, 11, 12),
/* CRU_SOFTRST_CON25 */
RK3528_CRU_RESET_OFFSET(SRST_A_VPU_BIU, 25, 6),
RK3528_CRU_RESET_OFFSET(SRST_H_VPU_BIU, 25, 7),
RK3528_CRU_RESET_OFFSET(SRST_P_VPU_BIU, 25, 8),
RK3528_CRU_RESET_OFFSET(SRST_A_VPU, 25, 9),
RK3528_CRU_RESET_OFFSET(SRST_H_VPU, 25, 10),
RK3528_CRU_RESET_OFFSET(SRST_P_CRU_PCIE, 25, 11),
RK3528_CRU_RESET_OFFSET(SRST_P_VPU_GRF, 25, 12),
RK3528_CRU_RESET_OFFSET(SRST_H_SFC, 25, 13),
RK3528_CRU_RESET_OFFSET(SRST_S_SFC, 25, 14),
RK3528_CRU_RESET_OFFSET(SRST_C_EMMC, 25, 15),
/* CRU_SOFTRST_CON26 */
RK3528_CRU_RESET_OFFSET(SRST_H_EMMC, 26, 0),
RK3528_CRU_RESET_OFFSET(SRST_A_EMMC, 26, 1),
RK3528_CRU_RESET_OFFSET(SRST_B_EMMC, 26, 2),
RK3528_CRU_RESET_OFFSET(SRST_T_EMMC, 26, 3),
RK3528_CRU_RESET_OFFSET(SRST_P_GPIO1, 26, 4),
RK3528_CRU_RESET_OFFSET(SRST_DB_GPIO1, 26, 5),
RK3528_CRU_RESET_OFFSET(SRST_A_VPU_L_BIU, 26, 6),
RK3528_CRU_RESET_OFFSET(SRST_P_VPU_IOC, 26, 8),
RK3528_CRU_RESET_OFFSET(SRST_H_SAI_I2S0, 26, 9),
RK3528_CRU_RESET_OFFSET(SRST_M_SAI_I2S0, 26, 10),
RK3528_CRU_RESET_OFFSET(SRST_H_SAI_I2S2, 26, 11),
RK3528_CRU_RESET_OFFSET(SRST_M_SAI_I2S2, 26, 12),
RK3528_CRU_RESET_OFFSET(SRST_P_ACODEC, 26, 13),
/* CRU_SOFTRST_CON27 */
RK3528_CRU_RESET_OFFSET(SRST_P_GPIO3, 27, 0),
RK3528_CRU_RESET_OFFSET(SRST_DB_GPIO3, 27, 1),
RK3528_CRU_RESET_OFFSET(SRST_P_SPI1, 27, 4),
RK3528_CRU_RESET_OFFSET(SRST_SPI1, 27, 5),
RK3528_CRU_RESET_OFFSET(SRST_P_UART2, 27, 7),
RK3528_CRU_RESET_OFFSET(SRST_S_UART2, 27, 8),
RK3528_CRU_RESET_OFFSET(SRST_P_UART5, 27, 9),
RK3528_CRU_RESET_OFFSET(SRST_S_UART5, 27, 10),
RK3528_CRU_RESET_OFFSET(SRST_P_UART6, 27, 11),
RK3528_CRU_RESET_OFFSET(SRST_S_UART6, 27, 12),
RK3528_CRU_RESET_OFFSET(SRST_P_UART7, 27, 13),
RK3528_CRU_RESET_OFFSET(SRST_S_UART7, 27, 14),
RK3528_CRU_RESET_OFFSET(SRST_P_I2C3, 27, 15),
/* CRU_SOFTRST_CON28 */
RK3528_CRU_RESET_OFFSET(SRST_I2C3, 28, 0),
RK3528_CRU_RESET_OFFSET(SRST_P_I2C5, 28, 1),
RK3528_CRU_RESET_OFFSET(SRST_I2C5, 28, 2),
RK3528_CRU_RESET_OFFSET(SRST_P_I2C6, 28, 3),
RK3528_CRU_RESET_OFFSET(SRST_I2C6, 28, 4),
RK3528_CRU_RESET_OFFSET(SRST_A_MAC, 28, 5),
/* CRU_SOFTRST_CON30 */
RK3528_CRU_RESET_OFFSET(SRST_P_PCIE, 30, 1),
RK3528_CRU_RESET_OFFSET(SRST_PCIE_PIPE_PHY, 30, 2),
RK3528_CRU_RESET_OFFSET(SRST_PCIE_POWER_UP, 30, 3),
RK3528_CRU_RESET_OFFSET(SRST_P_PCIE_PHY, 30, 6),
RK3528_CRU_RESET_OFFSET(SRST_P_PIPE_GRF, 30, 7),
/* CRU_SOFTRST_CON32 */
RK3528_CRU_RESET_OFFSET(SRST_H_SDIO0, 32, 2),
RK3528_CRU_RESET_OFFSET(SRST_H_SDIO1, 32, 4),
RK3528_CRU_RESET_OFFSET(SRST_TS_0, 32, 5),
RK3528_CRU_RESET_OFFSET(SRST_TS_1, 32, 6),
RK3528_CRU_RESET_OFFSET(SRST_P_CAN2, 32, 7),
RK3528_CRU_RESET_OFFSET(SRST_CAN2, 32, 8),
RK3528_CRU_RESET_OFFSET(SRST_P_CAN3, 32, 9),
RK3528_CRU_RESET_OFFSET(SRST_CAN3, 32, 10),
RK3528_CRU_RESET_OFFSET(SRST_P_SARADC, 32, 11),
RK3528_CRU_RESET_OFFSET(SRST_SARADC, 32, 12),
RK3528_CRU_RESET_OFFSET(SRST_SARADC_PHY, 32, 13),
RK3528_CRU_RESET_OFFSET(SRST_P_TSADC, 32, 14),
RK3528_CRU_RESET_OFFSET(SRST_TSADC, 32, 15),
/* CRU_SOFTRST_CON33 */
RK3528_CRU_RESET_OFFSET(SRST_A_USB3OTG, 33, 1),
/* CRU_SOFTRST_CON34 */
RK3528_CRU_RESET_OFFSET(SRST_A_GPU_BIU, 34, 3),
RK3528_CRU_RESET_OFFSET(SRST_P_GPU_BIU, 34, 5),
RK3528_CRU_RESET_OFFSET(SRST_A_GPU, 34, 8),
RK3528_CRU_RESET_OFFSET(SRST_REF_PVTPLL_GPU, 34, 9),
/* CRU_SOFTRST_CON36 */
RK3528_CRU_RESET_OFFSET(SRST_H_RKVENC_BIU, 36, 3),
RK3528_CRU_RESET_OFFSET(SRST_A_RKVENC_BIU, 36, 4),
RK3528_CRU_RESET_OFFSET(SRST_P_RKVENC_BIU, 36, 5),
RK3528_CRU_RESET_OFFSET(SRST_H_RKVENC, 36, 6),
RK3528_CRU_RESET_OFFSET(SRST_A_RKVENC, 36, 7),
RK3528_CRU_RESET_OFFSET(SRST_CORE_RKVENC, 36, 8),
RK3528_CRU_RESET_OFFSET(SRST_H_SAI_I2S1, 36, 9),
RK3528_CRU_RESET_OFFSET(SRST_M_SAI_I2S1, 36, 10),
RK3528_CRU_RESET_OFFSET(SRST_P_I2C1, 36, 11),
RK3528_CRU_RESET_OFFSET(SRST_I2C1, 36, 12),
RK3528_CRU_RESET_OFFSET(SRST_P_I2C0, 36, 13),
RK3528_CRU_RESET_OFFSET(SRST_I2C0, 36, 14),
/* CRU_SOFTRST_CON37 */
RK3528_CRU_RESET_OFFSET(SRST_P_SPI0, 37, 2),
RK3528_CRU_RESET_OFFSET(SRST_SPI0, 37, 3),
RK3528_CRU_RESET_OFFSET(SRST_P_GPIO4, 37, 8),
RK3528_CRU_RESET_OFFSET(SRST_DB_GPIO4, 37, 9),
RK3528_CRU_RESET_OFFSET(SRST_P_RKVENC_IOC, 37, 10),
RK3528_CRU_RESET_OFFSET(SRST_H_SPDIF, 37, 14),
RK3528_CRU_RESET_OFFSET(SRST_M_SPDIF, 37, 15),
/* CRU_SOFTRST_CON38 */
RK3528_CRU_RESET_OFFSET(SRST_H_PDM, 38, 0),
RK3528_CRU_RESET_OFFSET(SRST_M_PDM, 38, 1),
RK3528_CRU_RESET_OFFSET(SRST_P_UART1, 38, 2),
RK3528_CRU_RESET_OFFSET(SRST_S_UART1, 38, 3),
RK3528_CRU_RESET_OFFSET(SRST_P_UART3, 38, 4),
RK3528_CRU_RESET_OFFSET(SRST_S_UART3, 38, 5),
RK3528_CRU_RESET_OFFSET(SRST_P_RKVENC_GRF, 38, 6),
RK3528_CRU_RESET_OFFSET(SRST_P_CAN0, 38, 7),
RK3528_CRU_RESET_OFFSET(SRST_CAN0, 38, 8),
RK3528_CRU_RESET_OFFSET(SRST_P_CAN1, 38, 9),
RK3528_CRU_RESET_OFFSET(SRST_CAN1, 38, 10),
/* CRU_SOFTRST_CON39 */
RK3528_CRU_RESET_OFFSET(SRST_A_VO_BIU, 39, 3),
RK3528_CRU_RESET_OFFSET(SRST_H_VO_BIU, 39, 4),
RK3528_CRU_RESET_OFFSET(SRST_P_VO_BIU, 39, 5),
RK3528_CRU_RESET_OFFSET(SRST_H_RGA2E, 39, 7),
RK3528_CRU_RESET_OFFSET(SRST_A_RGA2E, 39, 8),
RK3528_CRU_RESET_OFFSET(SRST_CORE_RGA2E, 39, 9),
RK3528_CRU_RESET_OFFSET(SRST_H_VDPP, 39, 10),
RK3528_CRU_RESET_OFFSET(SRST_A_VDPP, 39, 11),
RK3528_CRU_RESET_OFFSET(SRST_CORE_VDPP, 39, 12),
RK3528_CRU_RESET_OFFSET(SRST_P_VO_GRF, 39, 13),
RK3528_CRU_RESET_OFFSET(SRST_P_CRU, 39, 15),
/* CRU_SOFTRST_CON40 */
RK3528_CRU_RESET_OFFSET(SRST_A_VOP_BIU, 40, 1),
RK3528_CRU_RESET_OFFSET(SRST_H_VOP, 40, 2),
RK3528_CRU_RESET_OFFSET(SRST_D_VOP0, 40, 3),
RK3528_CRU_RESET_OFFSET(SRST_D_VOP1, 40, 4),
RK3528_CRU_RESET_OFFSET(SRST_A_VOP, 40, 5),
RK3528_CRU_RESET_OFFSET(SRST_P_HDMI, 40, 6),
RK3528_CRU_RESET_OFFSET(SRST_HDMI, 40, 7),
RK3528_CRU_RESET_OFFSET(SRST_P_HDMIPHY, 40, 14),
RK3528_CRU_RESET_OFFSET(SRST_H_HDCP_KEY, 40, 15),
/* CRU_SOFTRST_CON41 */
RK3528_CRU_RESET_OFFSET(SRST_A_HDCP, 41, 0),
RK3528_CRU_RESET_OFFSET(SRST_H_HDCP, 41, 1),
RK3528_CRU_RESET_OFFSET(SRST_P_HDCP, 41, 2),
RK3528_CRU_RESET_OFFSET(SRST_H_CVBS, 41, 3),
RK3528_CRU_RESET_OFFSET(SRST_D_CVBS_VOP, 41, 4),
RK3528_CRU_RESET_OFFSET(SRST_D_4X_CVBS_VOP, 41, 5),
RK3528_CRU_RESET_OFFSET(SRST_A_JPEG_DECODER, 41, 6),
RK3528_CRU_RESET_OFFSET(SRST_H_JPEG_DECODER, 41, 7),
RK3528_CRU_RESET_OFFSET(SRST_A_VO_L_BIU, 41, 9),
RK3528_CRU_RESET_OFFSET(SRST_A_MAC_VO, 41, 10),
/* CRU_SOFTRST_CON42 */
RK3528_CRU_RESET_OFFSET(SRST_A_JPEG_BIU, 42, 0),
RK3528_CRU_RESET_OFFSET(SRST_H_SAI_I2S3, 42, 1),
RK3528_CRU_RESET_OFFSET(SRST_M_SAI_I2S3, 42, 2),
RK3528_CRU_RESET_OFFSET(SRST_MACPHY, 42, 3),
RK3528_CRU_RESET_OFFSET(SRST_P_VCDCPHY, 42, 4),
RK3528_CRU_RESET_OFFSET(SRST_P_GPIO2, 42, 5),
RK3528_CRU_RESET_OFFSET(SRST_DB_GPIO2, 42, 6),
RK3528_CRU_RESET_OFFSET(SRST_P_VO_IOC, 42, 7),
RK3528_CRU_RESET_OFFSET(SRST_H_SDMMC0, 42, 9),
RK3528_CRU_RESET_OFFSET(SRST_P_OTPC_NS, 42, 11),
RK3528_CRU_RESET_OFFSET(SRST_SBPI_OTPC_NS, 42, 12),
RK3528_CRU_RESET_OFFSET(SRST_USER_OTPC_NS, 42, 13),
/* CRU_SOFTRST_CON43 */
RK3528_CRU_RESET_OFFSET(SRST_HDMIHDP0, 43, 2),
RK3528_CRU_RESET_OFFSET(SRST_H_USBHOST, 43, 3),
RK3528_CRU_RESET_OFFSET(SRST_H_USBHOST_ARB, 43, 4),
RK3528_CRU_RESET_OFFSET(SRST_HOST_UTMI, 43, 6),
RK3528_CRU_RESET_OFFSET(SRST_P_UART4, 43, 7),
RK3528_CRU_RESET_OFFSET(SRST_S_UART4, 43, 8),
RK3528_CRU_RESET_OFFSET(SRST_P_I2C4, 43, 9),
RK3528_CRU_RESET_OFFSET(SRST_I2C4, 43, 10),
RK3528_CRU_RESET_OFFSET(SRST_P_I2C7, 43, 11),
RK3528_CRU_RESET_OFFSET(SRST_I2C7, 43, 12),
RK3528_CRU_RESET_OFFSET(SRST_P_USBPHY, 43, 13),
RK3528_CRU_RESET_OFFSET(SRST_USBPHY_POR, 43, 14),
RK3528_CRU_RESET_OFFSET(SRST_USBPHY_OTG, 43, 15),
/* CRU_SOFTRST_CON44 */
RK3528_CRU_RESET_OFFSET(SRST_USBPHY_HOST, 44, 0),
RK3528_CRU_RESET_OFFSET(SRST_P_DDRPHY_CRU, 44, 4),
RK3528_CRU_RESET_OFFSET(SRST_H_RKVDEC_BIU, 44, 6),
RK3528_CRU_RESET_OFFSET(SRST_A_RKVDEC_BIU, 44, 7),
RK3528_CRU_RESET_OFFSET(SRST_A_RKVDEC, 44, 8),
RK3528_CRU_RESET_OFFSET(SRST_H_RKVDEC, 44, 9),
RK3528_CRU_RESET_OFFSET(SRST_HEVC_CA_RKVDEC, 44, 11),
RK3528_CRU_RESET_OFFSET(SRST_REF_PVTPLL_RKVDEC, 44, 12),
/* CRU_SOFTRST_CON45 */
RK3528_CRU_RESET_OFFSET(SRST_P_DDR_BIU, 45, 1),
RK3528_CRU_RESET_OFFSET(SRST_P_DDRC, 45, 2),
RK3528_CRU_RESET_OFFSET(SRST_P_DDRMON, 45, 3),
RK3528_CRU_RESET_OFFSET(SRST_TIMER_DDRMON, 45, 4),
RK3528_CRU_RESET_OFFSET(SRST_P_MSCH_BIU, 45, 5),
RK3528_CRU_RESET_OFFSET(SRST_P_DDR_GRF, 45, 6),
RK3528_CRU_RESET_OFFSET(SRST_P_DDR_HWLP, 45, 8),
RK3528_CRU_RESET_OFFSET(SRST_P_DDRPHY, 45, 9),
RK3528_CRU_RESET_OFFSET(SRST_MSCH_BIU, 45, 10),
RK3528_CRU_RESET_OFFSET(SRST_A_DDR_UPCTL, 45, 11),
RK3528_CRU_RESET_OFFSET(SRST_DDR_UPCTL, 45, 12),
RK3528_CRU_RESET_OFFSET(SRST_DDRMON, 45, 13),
RK3528_CRU_RESET_OFFSET(SRST_A_DDR_SCRAMBLE, 45, 14),
RK3528_CRU_RESET_OFFSET(SRST_A_SPLIT, 45, 15),
/* CRU_SOFTRST_CON46 */
RK3528_CRU_RESET_OFFSET(SRST_DDR_PHY, 46, 0),
};
int rk3528_reset_bind_lut(struct udevice *pdev, u32 reg_offset, u32 reg_number)
{
return rockchip_reset_bind_lut(pdev, rk3528_register_offset,
reg_offset, reg_number);
}