[U-Boot] [PATCH v2 1/5] clk_rv1108: Sync with vendor tree

Andy Yan andy.yan at rock-chips.com
Tue Nov 27 01:43:03 UTC 2018


Hi

On 2018/11/21 上午2:55, Otavio Salvador wrote:
> Make adjustments to the rv1108 clock driver in order to align it
> with the internal Rockchip version.
>
> Signed-off-by: Otavio Salvador <otavio at ossystems.com.br>
> ---
>
> Changes in v2: None
>
>   .../include/asm/arch-rockchip/cru_rv1108.h    | 143 +++++-
>   drivers/clk/rockchip/clk_rv1108.c             | 457 +++++++++++++++++-
>   include/dt-bindings/clock/rv1108-cru.h        | 154 ++++--
>   3 files changed, 706 insertions(+), 48 deletions(-)
>
> diff --git a/arch/arm/include/asm/arch-rockchip/cru_rv1108.h b/arch/arm/include/asm/arch-rockchip/cru_rv1108.h
> index 3cc2ed0187..4ce8caa40f 100644
> --- a/arch/arm/include/asm/arch-rockchip/cru_rv1108.h
> +++ b/arch/arm/include/asm/arch-rockchip/cru_rv1108.h
> @@ -11,7 +11,11 @@
>   #define OSC_HZ		(24 * 1000 * 1000)
>   
>   #define APLL_HZ		(600 * 1000000)
> -#define GPLL_HZ		(594 * 1000000)
> +#define GPLL_HZ		(1188 * 1000000)
> +#define ACLK_PERI_HZ	(148500000)
> +#define HCLK_PERI_HZ	(148500000)
> +#define PCLK_PERI_HZ	(74250000)
> +#define ACLK_BUS_HZ	(148500000)
>   
>   struct rv1108_clk_priv {
>   	struct rv1108_cru *cru;
> @@ -80,6 +84,11 @@ enum {
>   	WORK_MODE_NORMAL	= 1,
>   	DSMPD_SHIFT             = 3,
>   	DSMPD_MASK		= 1 << DSMPD_SHIFT,
> +	INTEGER_MODE			= 1,
> +	GLOBAL_POWER_DOWN_SHIFT		= 0,
> +	GLOBAL_POWER_DOWN_MASK		= 1 << GLOBAL_POWER_DOWN_SHIFT,
> +	GLOBAL_POWER_DOWN		= 1,
> +	GLOBAL_POWER_UP			= 0,
>   
>   	/* CLKSEL0_CON */
>   	CORE_PLL_SEL_SHIFT	= 8,
> @@ -90,11 +99,77 @@ enum {
>   	CORE_CLK_DIV_SHIFT	= 0,
>   	CORE_CLK_DIV_MASK	= 0x1f << CORE_CLK_DIV_SHIFT,
>   
> +	/* CLKSEL_CON1 */
> +	PCLK_DBG_DIV_CON_SHIFT		= 4,
> +	PCLK_DBG_DIV_CON_MASK		= 0xf << PCLK_DBG_DIV_CON_SHIFT,
> +	ACLK_CORE_DIV_CON_SHIFT		= 0,
> +	ACLK_CORE_DIV_CON_MASK		= 7 << ACLK_CORE_DIV_CON_SHIFT,
> +
> +	/* CLKSEL_CON2 */
> +	ACLK_BUS_PLL_SEL_SHIFT		= 8,
> +	ACLK_BUS_PLL_SEL_MASK		= 3 << ACLK_BUS_PLL_SEL_SHIFT,
> +	ACLK_BUS_PLL_SEL_GPLL		= 0,
> +	ACLK_BUS_PLL_SEL_APLL		= 1,
> +	ACLK_BUS_PLL_SEL_DPLL		= 2,
> +	ACLK_BUS_DIV_CON_SHIFT		= 0,
> +	ACLK_BUS_DIV_CON_MASK		= 0x1f << ACLK_BUS_DIV_CON_SHIFT,
> +	ACLK_BUS_DIV_CON_WIDTH		= 5,
> +
> +	/* CLKSEL_CON3 */
> +	PCLK_BUS_DIV_CON_SHIFT		= 8,
> +	PCLK_BUS_DIV_CON_MASK		= 0x1f << PCLK_BUS_DIV_CON_SHIFT,
> +	HCLK_BUS_DIV_CON_SHIFT		= 0,
> +	HCLK_BUS_DIV_CON_MASK		= 0x1f,
> +
> +	/* CLKSEL_CON4 */
> +	CLK_DDR_PLL_SEL_SHIFT		= 8,
> +	CLK_DDR_PLL_SEL_MASK		= 0x3 << CLK_DDR_PLL_SEL_SHIFT,
> +	CLK_DDR_DIV_CON_SHIFT		= 0,
> +	CLK_DDR_DIV_CON_MASK		= 0x3 << CLK_DDR_DIV_CON_SHIFT,
> +
> +	/* CLKSEL_CON19 */
> +	CLK_I2C1_PLL_SEL_SHIFT		= 15,
> +	CLK_I2C1_PLL_SEL_MASK		= 1 << CLK_I2C1_PLL_SEL_SHIFT,
> +	CLK_I2C1_PLL_SEL_DPLL		= 0,
> +	CLK_I2C1_PLL_SEL_GPLL		= 1,
> +	CLK_I2C1_DIV_CON_SHIFT		= 8,
> +	CLK_I2C1_DIV_CON_MASK		= 0x7f << CLK_I2C1_DIV_CON_SHIFT,
> +	CLK_I2C0_PLL_SEL_SHIFT		= 7,
> +	CLK_I2C0_PLL_SEL_MASK		= 1 << CLK_I2C0_PLL_SEL_SHIFT,
> +	CLK_I2C0_DIV_CON_SHIFT		= 0,
> +	CLK_I2C0_DIV_CON_MASK		= 0x7f,
> +	I2C_DIV_CON_WIDTH		= 7,
> +
> +	/* CLKSEL_CON20 */
> +	CLK_I2C3_PLL_SEL_SHIFT		= 15,
> +	CLK_I2C3_PLL_SEL_MASK		= 1 << CLK_I2C3_PLL_SEL_SHIFT,
> +	CLK_I2C3_PLL_SEL_DPLL		= 0,
> +	CLK_I2C3_PLL_SEL_GPLL		= 1,
> +	CLK_I2C3_DIV_CON_SHIFT		= 8,
> +	CLK_I2C3_DIV_CON_MASK		= 0x7f << CLK_I2C3_DIV_CON_SHIFT,
> +	CLK_I2C2_PLL_SEL_SHIFT		= 7,
> +	CLK_I2C2_PLL_SEL_MASK		= 1 << CLK_I2C2_PLL_SEL_SHIFT,
> +	CLK_I2C2_DIV_CON_SHIFT		= 0,
> +	CLK_I2C2_DIV_CON_MASK		= 0x7f,
> +
>   	/* CLKSEL_CON22 */
>   	CLK_SARADC_DIV_CON_SHIFT= 0,
>   	CLK_SARADC_DIV_CON_MASK	= GENMASK(9, 0),
>   	CLK_SARADC_DIV_CON_WIDTH= 10,
>   
> +	/* CLKSEL_CON23 */
> +	ACLK_PERI_PLL_SEL_SHIFT		= 15,
> +	ACLK_PERI_PLL_SEL_MASK		= 1 << ACLK_PERI_PLL_SEL_SHIFT,
> +	ACLK_PERI_PLL_SEL_GPLL		= 0,
> +	ACLK_PERI_PLL_SEL_DPLL		= 1,
> +	PCLK_PERI_DIV_CON_SHIFT		= 10,
> +	PCLK_PERI_DIV_CON_MASK		= 0x1f << PCLK_PERI_DIV_CON_SHIFT,
> +	HCLK_PERI_DIV_CON_SHIFT		= 5,
> +	HCLK_PERI_DIV_CON_MASK		= 0x1f << HCLK_PERI_DIV_CON_SHIFT,
> +	ACLK_PERI_DIV_CON_SHIFT		= 0,
> +	ACLK_PERI_DIV_CON_MASK		= 0x1f,
> +	PERI_DIV_CON_WIDTH		= 5,
> +
>   	/* CLKSEL24_CON */
>   	MAC_PLL_SEL_SHIFT	= 12,
>   	MAC_PLL_SEL_MASK	= 1 << MAC_PLL_SEL_SHIFT,
> @@ -105,6 +180,16 @@ enum {
>   	MAC_CLK_DIV_MASK	= 0x1f,
>   	MAC_CLK_DIV_SHIFT	= 0,
>   
> +	/* CLKSEL25_CON */
> +	EMMC_PLL_SEL_SHIFT	= 12,
> +	EMMC_PLL_SEL_MASK	= 3 << EMMC_PLL_SEL_SHIFT,
> +	EMMC_PLL_SEL_DPLL	= 0,
> +	EMMC_PLL_SEL_GPLL,
> +
> +	/* CLKSEL26_CON */
> +	EMMC_CLK_DIV_SHIFT	= 8,
> +	EMMC_CLK_DIV_MASK	= 0xff << EMMC_CLK_DIV_SHIFT,
> +
>   	/* CLKSEL27_CON */
>   	SFC_PLL_SEL_SHIFT	= 7,
>   	SFC_PLL_SEL_MASK	= 1 << SFC_PLL_SEL_SHIFT,
> @@ -112,5 +197,61 @@ enum {
>   	SFC_PLL_SEL_GPLL	= 1,
>   	SFC_CLK_DIV_SHIFT	= 0,
>   	SFC_CLK_DIV_MASK	= 0x3f << SFC_CLK_DIV_SHIFT,
> +
> +	/* CLKSEL28_CON */
> +	ACLK_VIO1_PLL_SEL_SHIFT		= 14,
> +	ACLK_VIO1_PLL_SEL_MASK		= 3 << ACLK_VIO1_PLL_SEL_SHIFT,
> +	VIO_PLL_SEL_DPLL		= 0,
> +	VIO_PLL_SEL_GPLL		= 1,
> +	ACLK_VIO1_CLK_DIV_SHIFT		= 8,
> +	ACLK_VIO1_CLK_DIV_MASK		= 0x1f << ACLK_VIO1_CLK_DIV_SHIFT,
> +	CLK_VIO_DIV_CON_WIDTH		= 5,
> +	ACLK_VIO0_PLL_SEL_SHIFT		= 6,
> +	ACLK_VIO0_PLL_SEL_MASK		= 3 << ACLK_VIO0_PLL_SEL_SHIFT,
> +	ACLK_VIO0_CLK_DIV_SHIFT		= 0,
> +	ACLK_VIO0_CLK_DIV_MASK		= 0x1f << ACLK_VIO0_CLK_DIV_SHIFT,
> +
> +	/* CLKSEL29_CON */
> +	PCLK_VIO_CLK_DIV_SHIFT		= 8,
> +	PCLK_VIO_CLK_DIV_MASK		= 0x1f << PCLK_VIO_CLK_DIV_SHIFT,
> +	HCLK_VIO_CLK_DIV_SHIFT		= 0,
> +	HCLK_VIO_CLK_DIV_MASK		= 0x1f << HCLK_VIO_CLK_DIV_SHIFT,
> +
> +	/* CLKSEL32_CON */
> +	DCLK_VOP_SEL_SHIFT		= 7,
> +	DCLK_VOP_SEL_MASK		= 1 << DCLK_VOP_SEL_SHIFT,
> +	DCLK_VOP_SEL_HDMI		= 0,
> +	DCLK_VOP_SEL_PLL		= 1,
> +	DCLK_VOP_PLL_SEL_SHIFT		= 6,
> +	DCLK_VOP_PLL_SEL_MASK		= 1 << DCLK_VOP_PLL_SEL_SHIFT,
> +	DCLK_VOP_PLL_SEL_GPLL		= 0,
> +	DCLK_VOP_PLL_SEL_DPLL		= 1,
> +	DCLK_VOP_CLK_DIV_SHIFT		= 0,
> +	DCLK_VOP_CLK_DIV_MASK		= 0x3f << DCLK_VOP_CLK_DIV_SHIFT,
> +	DCLK_VOP_DIV_CON_WIDTH		= 6,
> +
> +	/* SOFTRST1_CON*/
> +	DDRPHY_SRSTN_CLKDIV_REQ_SHIFT	= 0,
> +	DDRPHY_SRSTN_CLKDIV_REQ		= 1,
> +	DDRPHY_SRSTN_CLKDIV_DIS		= 0,
> +	DDRPHY_SRSTN_CLKDIV_REQ_MASK	= 1 << DDRPHY_SRSTN_CLKDIV_REQ_SHIFT,
> +	DDRPHY_SRSTN_REQ_SHIFT		= 1,
> +	DDRPHY_SRSTN_REQ		= 1,
> +	DDRPHY_SRSTN_DIS		= 0,
> +	DDRPHY_SRSTN_REQ_MASK		= 1 << DDRPHY_SRSTN_REQ_SHIFT,
> +	DDRPHY_PSRSTN_REQ_SHIFT		= 2,
> +	DDRPHY_PSRSTN_REQ		= 1,
> +	DDRPHY_PSRSTN_DIS		= 0,
> +	DDRPHY_PSRSTN_REQ_MASK		= 1 << DDRPHY_PSRSTN_REQ_SHIFT,
> +
> +	/* SOFTRST2_CON*/
> +	DDRUPCTL_PSRSTN_REQ_SHIFT	= 0,
> +	DDRUPCTL_PSRSTN_REQ		= 1,
> +	DDRUPCTL_PSRSTN_DIS		= 0,
> +	DDRUPCTL_PSRSTN_REQ_MASK	= 1 << DDRUPCTL_PSRSTN_REQ_SHIFT,
> +	DDRUPCTL_NSRSTN_REQ_SHIFT	= 1,
> +	DDRUPCTL_NSRSTN_REQ		= 1,
> +	DDRUPCTL_NSRSTN_DIS		= 0,
> +	DDRUPCTL_NSRSTN_REQ_MASK	= 1 << DDRUPCTL_NSRSTN_REQ_SHIFT,
>   };
>   #endif
> diff --git a/drivers/clk/rockchip/clk_rv1108.c b/drivers/clk/rockchip/clk_rv1108.c
> index 1f9f534b28..3603568ee7 100644
> --- a/drivers/clk/rockchip/clk_rv1108.c
> +++ b/drivers/clk/rockchip/clk_rv1108.c
> @@ -35,6 +35,9 @@ enum {
>   			 #hz "Hz cannot be hit with PLL "\
>   			 "divisors on line " __stringify(__LINE__));
>   
> +static const struct pll_div apll_init_cfg = PLL_DIVISORS(APLL_HZ, 1, 3, 1);
> +static const struct pll_div gpll_init_cfg = PLL_DIVISORS(GPLL_HZ, 2, 2, 1);
> +
>   /* use integer mode */
>   static inline int rv1108_pll_id(enum rk_clk_id clk_id)
>   {
> @@ -57,6 +60,58 @@ static inline int rv1108_pll_id(enum rk_clk_id clk_id)
>   	return id;
>   }
>   
> +static int rkclk_set_pll(struct rv1108_cru *cru, enum rk_clk_id clk_id,
> +			 const struct pll_div *div)
> +{
> +	int pll_id = rv1108_pll_id(clk_id);
> +	struct rv1108_pll *pll = &cru->pll[pll_id];
> +
> +	/* All PLLs have same VCO and output frequency range restrictions. */
> +	uint vco_hz = OSC_HZ / 1000 * div->fbdiv / div->refdiv * 1000;
> +	uint output_hz = vco_hz / div->postdiv1 / div->postdiv2;
> +
> +	debug("PLL at %p: fb=%d, ref=%d, pst1=%d, pst2=%d, vco=%u Hz, output=%u Hz\n",
> +	      pll, div->fbdiv, div->refdiv, div->postdiv1,
> +	      div->postdiv2, vco_hz, output_hz);
> +	assert(vco_hz >= VCO_MIN_HZ && vco_hz <= VCO_MAX_HZ &&
> +	       output_hz >= OUTPUT_MIN_HZ && output_hz <= OUTPUT_MAX_HZ);
> +
> +	/*
> +	 * When power on or changing PLL setting,
> +	 * we must force PLL into slow mode to ensure output stable clock.
> +	 */
> +	rk_clrsetreg(&pll->con3, WORK_MODE_MASK,
> +		     WORK_MODE_SLOW << WORK_MODE_SHIFT);
> +
> +	/* use integer mode */
> +	rk_setreg(&pll->con3, 1 << DSMPD_SHIFT);
> +	/* Power down */
> +	rk_setreg(&pll->con3, 1 << GLOBAL_POWER_DOWN_SHIFT);
> +
> +	rk_clrsetreg(&pll->con0, FBDIV_MASK, div->fbdiv << FBDIV_SHIFT);
> +	rk_clrsetreg(&pll->con1, POSTDIV1_MASK | POSTDIV2_MASK | REFDIV_MASK,
> +		     (div->postdiv1 << POSTDIV1_SHIFT |
> +		     div->postdiv2 << POSTDIV2_SHIFT |
> +		     div->refdiv << REFDIV_SHIFT));
> +	rk_clrsetreg(&pll->con2, FRACDIV_MASK,
> +		     (div->refdiv << REFDIV_SHIFT));
> +
> +	/* Power Up */
> +	rk_clrreg(&pll->con3, 1 << GLOBAL_POWER_DOWN_SHIFT);
> +
> +	/* waiting for pll lock */
> +	while (readl(&pll->con2) & (1 << LOCK_STA_SHIFT))
> +		udelay(1);
> +
> +	/*
> +	 * set PLL into normal mode.
> +	 */
> +	rk_clrsetreg(&pll->con3, WORK_MODE_MASK,
> +		     WORK_MODE_NORMAL << WORK_MODE_SHIFT);
> +
> +	return 0;
> +}
> +
>   static uint32_t rkclk_pll_get_rate(struct rv1108_cru *cru,
>   				   enum rk_clk_id clk_id)
>   {
> @@ -74,7 +129,7 @@ static uint32_t rkclk_pll_get_rate(struct rv1108_cru *cru,
>   		fbdiv = (con0 >> FBDIV_SHIFT) & FBDIV_MASK;
>   		postdiv1 = (con1 & POSTDIV1_MASK) >> POSTDIV1_SHIFT;
>   		postdiv2 = (con1 & POSTDIV2_MASK) >> POSTDIV2_SHIFT;
> -		refdiv = (con1 & REFDIV_MASK) >> REFDIV_SHIFT;
> +		refdiv = (con1 >> REFDIV_SHIFT) & REFDIV_MASK;
>   		freq = (24 * fbdiv / (refdiv * postdiv1 * postdiv2)) * 1000000;
>   	} else {
>   		freq = OSC_HZ;
> @@ -154,6 +209,322 @@ static ulong rv1108_saradc_set_clk(struct rv1108_cru *cru, uint hz)
>   	return rv1108_saradc_get_clk(cru);
>   }
>   
> +static ulong rv1108_aclk_vio1_get_clk(struct rv1108_cru *cru)
> +{
> +	u32 div, val;
> +
> +	val = readl(&cru->clksel_con[28]);
> +	div = bitfield_extract(val, ACLK_VIO1_CLK_DIV_SHIFT,
> +			       CLK_VIO_DIV_CON_WIDTH);
> +
> +	return DIV_TO_RATE(GPLL_HZ, div);
> +}
> +
> +static ulong rv1108_aclk_vio1_set_clk(struct rv1108_cru *cru, uint hz)
> +{
> +	int src_clk_div;
> +
> +	src_clk_div = DIV_ROUND_UP(GPLL_HZ, hz) - 1;
> +	assert(src_clk_div < 32);
> +
> +	rk_clrsetreg(&cru->clksel_con[28],
> +		     ACLK_VIO1_CLK_DIV_MASK | ACLK_VIO1_PLL_SEL_MASK,
> +		     (src_clk_div << ACLK_VIO1_CLK_DIV_SHIFT) |
> +		     (VIO_PLL_SEL_GPLL << ACLK_VIO1_PLL_SEL_SHIFT));
> +
> +	return rv1108_aclk_vio1_get_clk(cru);
> +}
> +
> +static ulong rv1108_aclk_vio0_get_clk(struct rv1108_cru *cru)
> +{
> +	u32 div, val;
> +
> +	val = readl(&cru->clksel_con[28]);
> +	div = bitfield_extract(val, ACLK_VIO0_CLK_DIV_SHIFT,
> +			       CLK_VIO_DIV_CON_WIDTH);
> +
> +	return DIV_TO_RATE(GPLL_HZ, div);
> +}
> +
> +static ulong rv1108_aclk_vio0_set_clk(struct rv1108_cru *cru, uint hz)
> +{
> +	int src_clk_div;
> +
> +	src_clk_div = DIV_ROUND_UP(GPLL_HZ, hz) - 1;
> +	assert(src_clk_div < 32);
> +
> +	rk_clrsetreg(&cru->clksel_con[28],
> +		     ACLK_VIO0_CLK_DIV_MASK | ACLK_VIO0_PLL_SEL_MASK,
> +		     (src_clk_div << ACLK_VIO0_CLK_DIV_SHIFT) |
> +		     (VIO_PLL_SEL_GPLL << ACLK_VIO0_PLL_SEL_SHIFT));
> +
> +	/*HCLK_VIO default div = 4*/
> +	rk_clrsetreg(&cru->clksel_con[29],
> +		     HCLK_VIO_CLK_DIV_MASK,
> +		     3 << HCLK_VIO_CLK_DIV_SHIFT);
> +	/*PCLK_VIO default div = 4*/
> +	rk_clrsetreg(&cru->clksel_con[29],
> +		     PCLK_VIO_CLK_DIV_MASK,
> +		     3 << PCLK_VIO_CLK_DIV_SHIFT);
> +
> +	return rv1108_aclk_vio0_get_clk(cru);
> +}
> +
> +static ulong rv1108_dclk_vop_get_clk(struct rv1108_cru *cru)
> +{
> +	u32 div, val;
> +
> +	val = readl(&cru->clksel_con[32]);
> +	div = bitfield_extract(val, DCLK_VOP_CLK_DIV_SHIFT,
> +			       DCLK_VOP_DIV_CON_WIDTH);
> +
> +	return DIV_TO_RATE(GPLL_HZ, div);
> +}
> +
> +static ulong rv1108_dclk_vop_set_clk(struct rv1108_cru *cru, uint hz)
> +{
> +	int src_clk_div;
> +
> +	src_clk_div = DIV_ROUND_UP(GPLL_HZ, hz) - 1;
> +	assert(src_clk_div < 64);
> +
> +	rk_clrsetreg(&cru->clksel_con[32],
> +		     DCLK_VOP_CLK_DIV_MASK | DCLK_VOP_PLL_SEL_MASK |
> +		     DCLK_VOP_SEL_SHIFT,
> +		     (src_clk_div << DCLK_VOP_CLK_DIV_SHIFT) |
> +		     (DCLK_VOP_PLL_SEL_GPLL << DCLK_VOP_PLL_SEL_SHIFT) |
> +		     (DCLK_VOP_SEL_PLL << DCLK_VOP_SEL_SHIFT));
> +
> +	return rv1108_dclk_vop_get_clk(cru);
> +}
> +
> +static ulong rv1108_aclk_bus_get_clk(struct rv1108_cru *cru)
> +{
> +	u32 div, val;
> +	ulong parent_rate = rkclk_pll_get_rate(cru, CLK_GENERAL);
> +
> +	val = readl(&cru->clksel_con[2]);
> +	div = bitfield_extract(val, ACLK_BUS_DIV_CON_SHIFT,
> +			       ACLK_BUS_DIV_CON_WIDTH);
> +
> +	return DIV_TO_RATE(parent_rate, div);
> +}
> +
> +static ulong rv1108_aclk_bus_set_clk(struct rv1108_cru *cru, uint hz)
> +{
> +	int src_clk_div;
> +	ulong parent_rate = rkclk_pll_get_rate(cru, CLK_GENERAL);
> +
> +	src_clk_div = DIV_ROUND_UP(parent_rate, hz) - 1;
> +	assert(src_clk_div < 32);
> +
> +	rk_clrsetreg(&cru->clksel_con[2],
> +		     ACLK_BUS_DIV_CON_MASK | ACLK_BUS_PLL_SEL_MASK,
> +		     (src_clk_div << ACLK_BUS_DIV_CON_SHIFT) |
> +		     (ACLK_BUS_PLL_SEL_GPLL << ACLK_BUS_PLL_SEL_SHIFT));
> +
> +	return rv1108_aclk_bus_get_clk(cru);
> +}
> +
> +static ulong rv1108_aclk_peri_get_clk(struct rv1108_cru *cru)
> +{
> +	u32 div, val;
> +	ulong parent_rate = rkclk_pll_get_rate(cru, CLK_GENERAL);
> +
> +	val = readl(&cru->clksel_con[23]);
> +	div = bitfield_extract(val, ACLK_PERI_DIV_CON_SHIFT,
> +			       PERI_DIV_CON_WIDTH);
> +
> +	return DIV_TO_RATE(parent_rate, div);
> +}
> +
> +static ulong rv1108_hclk_peri_get_clk(struct rv1108_cru *cru)
> +{
> +	u32 div, val;
> +	ulong parent_rate = rkclk_pll_get_rate(cru, CLK_GENERAL);
> +
> +	val = readl(&cru->clksel_con[23]);
> +	div = bitfield_extract(val, HCLK_PERI_DIV_CON_SHIFT,
> +			       PERI_DIV_CON_WIDTH);
> +
> +	return DIV_TO_RATE(parent_rate, div);
> +}
> +
> +static ulong rv1108_pclk_peri_get_clk(struct rv1108_cru *cru)
> +{
> +	u32 div, val;
> +	ulong parent_rate = rkclk_pll_get_rate(cru, CLK_GENERAL);
> +
> +	val = readl(&cru->clksel_con[23]);
> +	div = bitfield_extract(val, PCLK_PERI_DIV_CON_SHIFT,
> +			       PERI_DIV_CON_WIDTH);
> +
> +	return DIV_TO_RATE(parent_rate, div);
> +}
> +
> +static ulong rv1108_aclk_peri_set_clk(struct rv1108_cru *cru, uint hz)
> +{
> +	int src_clk_div;
> +	ulong parent_rate = rkclk_pll_get_rate(cru, CLK_GENERAL);
> +
> +	src_clk_div = DIV_ROUND_UP(parent_rate, hz) - 1;
> +	assert(src_clk_div < 32);
> +
> +	rk_clrsetreg(&cru->clksel_con[23],
> +		     ACLK_PERI_DIV_CON_MASK | ACLK_PERI_PLL_SEL_MASK,
> +		     (src_clk_div << ACLK_PERI_DIV_CON_SHIFT) |
> +		     (ACLK_PERI_PLL_SEL_GPLL << ACLK_PERI_PLL_SEL_SHIFT));
> +
> +	return rv1108_aclk_peri_get_clk(cru);
> +}
> +
> +static ulong rv1108_hclk_peri_set_clk(struct rv1108_cru *cru, uint hz)
> +{
> +	int src_clk_div;
> +	ulong parent_rate = rkclk_pll_get_rate(cru, CLK_GENERAL);
> +
> +	src_clk_div = DIV_ROUND_UP(parent_rate, hz) - 1;
> +	assert(src_clk_div < 32);
> +
> +	rk_clrsetreg(&cru->clksel_con[23],
> +		     HCLK_PERI_DIV_CON_MASK,
> +		     (src_clk_div << HCLK_PERI_DIV_CON_SHIFT));
> +
> +	return rv1108_hclk_peri_get_clk(cru);
> +}
> +
> +static ulong rv1108_pclk_peri_set_clk(struct rv1108_cru *cru, uint hz)
> +{
> +	int src_clk_div;
> +	ulong parent_rate = rkclk_pll_get_rate(cru, CLK_GENERAL);
> +
> +	src_clk_div = DIV_ROUND_UP(parent_rate, hz) - 1;
> +	assert(src_clk_div < 32);
> +
> +	rk_clrsetreg(&cru->clksel_con[23],
> +		     PCLK_PERI_DIV_CON_MASK,
> +		     (src_clk_div << PCLK_PERI_DIV_CON_SHIFT));
> +
> +	return rv1108_pclk_peri_get_clk(cru);
> +}
> +
> +static ulong rv1108_i2c_get_clk(struct rv1108_cru *cru, ulong clk_id)
> +{
> +	u32 div, con;
> +
> +	switch (clk_id) {
> +	case SCLK_I2C0_PMU:
> +		con = readl(&cru->clksel_con[19]);
> +		div = bitfield_extract(con, CLK_I2C0_DIV_CON_SHIFT,
> +				       I2C_DIV_CON_WIDTH);
> +		break;
> +	case SCLK_I2C1:
> +		con = readl(&cru->clksel_con[19]);
> +		div = bitfield_extract(con, CLK_I2C1_DIV_CON_SHIFT,
> +				       I2C_DIV_CON_WIDTH);
> +		break;
> +	case SCLK_I2C2:
> +		con = readl(&cru->clksel_con[20]);
> +		div = bitfield_extract(con, CLK_I2C2_DIV_CON_SHIFT,
> +				       I2C_DIV_CON_WIDTH);
> +		break;
> +	case SCLK_I2C3:
> +		con = readl(&cru->clksel_con[20]);
> +		div = bitfield_extract(con, CLK_I2C3_DIV_CON_SHIFT,
> +				       I2C_DIV_CON_WIDTH);
> +		break;
> +	default:
> +		printf("do not support this i2c bus\n");
> +		return -EINVAL;
> +	}
> +
> +	return DIV_TO_RATE(GPLL_HZ, div);
> +}
> +
> +static ulong rv1108_i2c_set_clk(struct rv1108_cru *cru, ulong clk_id, uint hz)
> +{
> +	int src_clk_div;
> +
> +	/* i2c0,4,8 src clock from ppll, i2c1,2,3,5,6,7 src clock from gpll*/
> +	src_clk_div = GPLL_HZ / hz;
> +	assert(src_clk_div - 1 <= 127);
> +
> +	switch (clk_id) {
> +	case SCLK_I2C0_PMU:
> +		rk_clrsetreg(&cru->clksel_con[19],
> +			     CLK_I2C0_DIV_CON_MASK | CLK_I2C1_PLL_SEL_MASK,
> +			     (src_clk_div << CLK_I2C0_DIV_CON_SHIFT) |
> +			     (CLK_I2C1_PLL_SEL_GPLL << CLK_I2C1_PLL_SEL_SHIFT));
> +		break;
> +	case SCLK_I2C1:
> +		rk_clrsetreg(&cru->clksel_con[19],
> +			     CLK_I2C1_DIV_CON_MASK | CLK_I2C1_PLL_SEL_MASK,
> +			     (src_clk_div << CLK_I2C1_DIV_CON_SHIFT) |
> +			     (CLK_I2C1_PLL_SEL_GPLL << CLK_I2C1_PLL_SEL_SHIFT));
> +		break;
> +	case SCLK_I2C2:
> +		rk_clrsetreg(&cru->clksel_con[20],
> +			     CLK_I2C2_DIV_CON_MASK | CLK_I2C3_PLL_SEL_MASK,
> +			     (src_clk_div << CLK_I2C2_DIV_CON_SHIFT) |
> +			     (CLK_I2C3_PLL_SEL_GPLL << CLK_I2C3_PLL_SEL_SHIFT));
> +		break;
> +	case SCLK_I2C3:
> +		rk_clrsetreg(&cru->clksel_con[20],
> +			     CLK_I2C3_DIV_CON_MASK | CLK_I2C3_PLL_SEL_MASK,
> +			     (src_clk_div << CLK_I2C3_DIV_CON_SHIFT) |
> +			     (CLK_I2C3_PLL_SEL_GPLL << CLK_I2C3_PLL_SEL_SHIFT));
> +		break;
> +	default:
> +		printf("do not support this i2c bus\n");
> +		return -EINVAL;
> +	}
> +
> +	return rv1108_i2c_get_clk(cru, clk_id);
> +}
> +
> +static ulong rv1108_mmc_get_clk(struct clk *clk)
> +{
> +	struct rv1108_clk_priv *priv = dev_get_priv(clk->dev);
> +	struct rv1108_cru *cru = priv->cru;
> +	u32 div, con;
> +
> +	ulong parent_rate = rkclk_pll_get_rate(cru, CLK_GENERAL);
> +
> +	con = readl(&cru->clksel_con[26]);
> +	div = (con & EMMC_CLK_DIV_MASK) >> EMMC_CLK_DIV_SHIFT;
> +
> +
> +	debug("%s id %ld get_clk %ld\n", __func__, clk->id, DIV_TO_RATE(parent_rate, div));
> +
> +	return DIV_TO_RATE(parent_rate, div);
> +
> +}
> +
> +static ulong rv1108_mmc_set_clk(struct clk *clk, ulong set_rate)
> +{
> +	struct rv1108_clk_priv *priv = dev_get_priv(clk->dev);
> +	struct rv1108_cru *cru = priv->cru;
> +	int src_clk_div;
> +
> +	ulong parent_rate = rkclk_pll_get_rate(cru, CLK_GENERAL);
> +	src_clk_div = DIV_ROUND_UP(parent_rate, set_rate);
> +
> +	if (src_clk_div > 127) {
> +		src_clk_div = DIV_ROUND_UP(OSC_HZ / 2, set_rate);
> +	}
> +
> +	debug("%s id %ld src_clk_div %d\n", __func__, clk->id, src_clk_div);
> +
> +	rk_clrsetreg(&cru->clksel_con[26],
> +		     EMMC_CLK_DIV_MASK , (src_clk_div -1) << EMMC_CLK_DIV_SHIFT);
> +
> +	rk_clrsetreg(&cru->clksel_con[25],
> +		     EMMC_PLL_SEL_MASK , EMMC_PLL_SEL_GPLL << EMMC_PLL_SEL_SHIFT);
> +
> +	return rv1108_mmc_get_clk(clk);
> +}
> +
> +
>   static ulong rv1108_clk_get_rate(struct clk *clk)
>   {
>   	struct rv1108_clk_priv *priv = dev_get_priv(clk->dev);
> @@ -163,6 +534,31 @@ static ulong rv1108_clk_get_rate(struct clk *clk)
>   		return rkclk_pll_get_rate(priv->cru, clk->id);
>   	case SCLK_SARADC:
>   		return rv1108_saradc_get_clk(priv->cru);
> +	case ACLK_VIO0:
> +		return rv1108_aclk_vio0_get_clk(priv->cru);
> +	case ACLK_VIO1:
> +		return rv1108_aclk_vio1_get_clk(priv->cru);
> +	case DCLK_VOP:
> +		return rv1108_dclk_vop_get_clk(priv->cru);
> +	case ACLK_PRE:
> +		return rv1108_aclk_bus_get_clk(priv->cru);
> +	case ACLK_PERI:
> +		return rv1108_aclk_peri_get_clk(priv->cru);
> +	case HCLK_PERI:
> +		return rv1108_hclk_peri_get_clk(priv->cru);
> +	case PCLK_PERI:
> +		return rv1108_pclk_peri_get_clk(priv->cru);
> +	case SCLK_I2C0_PMU:
> +	case SCLK_I2C1:
> +	case SCLK_I2C2:
> +	case SCLK_I2C3:
> +		return rv1108_i2c_get_clk(priv->cru, clk->id);
> +	case HCLK_SDMMC:
> +	case HCLK_EMMC:
> +	case SCLK_SDMMC:
> +	case SCLK_EMMC:
> +	case SCLK_EMMC_SAMPLE:
> +		return rv1108_mmc_get_clk(clk);
>   	default:
>   		return -ENOENT;
>   	}
> @@ -183,6 +579,39 @@ static ulong rv1108_clk_set_rate(struct clk *clk, ulong rate)
>   	case SCLK_SARADC:
>   		new_rate = rv1108_saradc_set_clk(priv->cru, rate);
>   		break;
> +	case ACLK_VIO0:
> +		new_rate = rv1108_aclk_vio0_set_clk(priv->cru, rate);
> +		break;
> +	case ACLK_VIO1:
> +		new_rate = rv1108_aclk_vio1_set_clk(priv->cru, rate);
> +		break;
> +	case DCLK_VOP:
> +		new_rate = rv1108_dclk_vop_set_clk(priv->cru, rate);
> +		break;
> +	case ACLK_PRE:
> +		new_rate = rv1108_aclk_bus_set_clk(priv->cru, rate);
> +		break;
> +	case ACLK_PERI:
> +		new_rate = rv1108_aclk_peri_set_clk(priv->cru, rate);
> +		break;
> +	case HCLK_PERI:
> +		new_rate = rv1108_hclk_peri_set_clk(priv->cru, rate);
> +		break;
> +	case PCLK_PERI:
> +		new_rate = rv1108_pclk_peri_set_clk(priv->cru, rate);
> +		break;
> +	case SCLK_I2C0_PMU:
> +	case SCLK_I2C1:
> +	case SCLK_I2C2:
> +	case SCLK_I2C3:
> +		new_rate = rv1108_i2c_set_clk(priv->cru, clk->id, rate);
> +		break;
> +	case HCLK_SDMMC:
> +	case HCLK_EMMC:
> +	case SCLK_SDMMC:
> +	case SCLK_EMMC:
> +		new_rate = rv1108_mmc_set_clk(clk, rate);
> +		break;
>   	default:
>   		return -ENOENT;
>   	}
> @@ -197,14 +626,34 @@ static const struct clk_ops rv1108_clk_ops = {
>   
>   static void rkclk_init(struct rv1108_cru *cru)
>   {
> -	unsigned int apll = rkclk_pll_get_rate(cru, CLK_ARM);
> -	unsigned int dpll = rkclk_pll_get_rate(cru, CLK_DDR);
> -	unsigned int gpll = rkclk_pll_get_rate(cru, CLK_GENERAL);
> +	unsigned int apll, dpll, gpll;
> +	unsigned int aclk_bus, aclk_peri, hclk_peri, pclk_peri;
> +
> +	aclk_bus = rv1108_aclk_bus_set_clk(cru, ACLK_BUS_HZ / 2);
> +	aclk_peri = rv1108_aclk_peri_set_clk(cru, ACLK_PERI_HZ / 2);
> +	hclk_peri = rv1108_hclk_peri_set_clk(cru, HCLK_PERI_HZ / 2);
> +	pclk_peri = rv1108_pclk_peri_set_clk(cru, PCLK_PERI_HZ / 2);
> +	rv1108_aclk_vio0_set_clk(cru, 297000000);
> +	rv1108_aclk_vio1_set_clk(cru, 297000000);
> +
> +	/* configure apll */
> +	rkclk_set_pll(cru, CLK_ARM, &apll_init_cfg);
> +	rkclk_set_pll(cru, CLK_GENERAL, &gpll_init_cfg);
> +	aclk_bus = rv1108_aclk_bus_set_clk(cru, ACLK_BUS_HZ);
> +	aclk_peri = rv1108_aclk_peri_set_clk(cru, ACLK_PERI_HZ);
> +	hclk_peri = rv1108_hclk_peri_set_clk(cru, HCLK_PERI_HZ);
> +	pclk_peri = rv1108_pclk_peri_set_clk(cru, PCLK_PERI_HZ);
> +
> +	apll = rkclk_pll_get_rate(cru, CLK_ARM);
> +	dpll = rkclk_pll_get_rate(cru, CLK_DDR);
> +	gpll = rkclk_pll_get_rate(cru, CLK_GENERAL);
>   
>   	rk_clrsetreg(&cru->clksel_con[0], CORE_CLK_DIV_MASK,
>   		     0 << MAC_CLK_DIV_SHIFT);
>   
>   	printf("APLL: %d DPLL:%d GPLL:%d\n", apll, dpll, gpll);
> +	printf("ACLK_BUS: %d ACLK_PERI:%d HCLK_PERI:%d PCLK_PERI:%d\n",
> +	       aclk_bus, aclk_peri, hclk_peri, pclk_peri);
>   }
>   
>   static int rv1108_clk_ofdata_to_platdata(struct udevice *dev)
> diff --git a/include/dt-bindings/clock/rv1108-cru.h b/include/dt-bindings/clock/rv1108-cru.h
> index 9219a50a24..04e0a59f4b 100644
> --- a/include/dt-bindings/clock/rv1108-cru.h
> +++ b/include/dt-bindings/clock/rv1108-cru.h
> @@ -14,7 +14,6 @@
>   #define ARMCLK				3
>   
>   /* sclk gates (special clocks) */
> -#define SCLK_MAC			64
>   #define SCLK_SPI0			65
>   #define SCLK_NANDC			67
>   #define SCLK_SDMMC			68
> @@ -35,20 +34,77 @@
>   #define SCLK_SDMMC_SAMPLE		84
>   #define SCLK_SDIO_SAMPLE		85
>   #define SCLK_EMMC_SAMPLE		86
> -#define SCLK_MAC_RX			87
> -#define SCLK_MAC_TX			88
> -#define SCLK_MACREF			89
> -#define SCLK_MACREF_OUT			90
> -#define SCLK_SARADC			91
> +#define SCLK_VENC_CORE			87
> +#define SCLK_HEVC_CORE			88
> +#define SCLK_HEVC_CABAC			89
> +#define SCLK_PWM0_PMU			90
> +#define SCLK_I2C0_PMU			91
> +#define SCLK_WIFI			92
> +#define SCLK_CIFOUT			93
> +#define SCLK_MIPI_CSI_OUT		94
> +#define SCLK_CIF0			95
> +#define SCLK_CIF1			96
> +#define SCLK_CIF2			97
> +#define SCLK_CIF3			98
> +#define SCLK_DSP			99
> +#define SCLK_DSP_IOP			100
> +#define SCLK_DSP_EPP			101
> +#define SCLK_DSP_EDP			102
> +#define SCLK_DSP_EDAP			103
> +#define SCLK_CVBS_HOST			104
> +#define SCLK_HDMI_SFR			105
> +#define SCLK_HDMI_CEC			106
> +#define SCLK_CRYPTO			107
> +#define SCLK_SPI			108
> +#define SCLK_SARADC			109
> +#define SCLK_TSADC			110
> +#define SCLK_MAC_PRE			111
> +#define SCLK_MAC			112
> +#define SCLK_MAC_RX			113
> +#define SCLK_MAC_REF			114
> +#define SCLK_MAC_REFOUT			115
> +#define SCLK_DSP_PFM			116
> +#define SCLK_RGA			117
> +#define SCLK_I2C1			118
> +#define SCLK_I2C2			119
> +#define SCLK_I2C3			120
> +#define SCLK_PWM			121
> +#define SCLK_ISP			122
> +#define SCLK_USBPHY			123
> +#define SCLK_I2S0_SRC			124
> +#define SCLK_I2S1_SRC			125
> +#define SCLK_I2S2_SRC			126
> +#define SCLK_UART0_SRC			127
> +#define SCLK_UART1_SRC			128
> +#define SCLK_UART2_SRC			129
> +#define SCLK_MAC_TX			130
> +#define SCLK_MACREF			131
> +#define SCLK_MACREF_OUT			132
>   
> +#define DCLK_VOP_SRC			185
> +#define DCLK_HDMIPHY			186
> +#define DCLK_VOP			187
>   
>   /* aclk gates */
>   #define ACLK_DMAC			192
>   #define ACLK_PRE			193
>   #define ACLK_CORE			194
>   #define ACLK_ENMCORE			195
> -#define ACLK_GMAC			196
> -
> +#define ACLK_RKVENC			196
> +#define ACLK_RKVDEC			197
> +#define ACLK_VPU			198
> +#define ACLK_CIF0			199
> +#define ACLK_VIO0			200
> +#define ACLK_VIO1			201
> +#define ACLK_VOP			202
> +#define ACLK_IEP			203
> +#define ACLK_RGA			204
> +#define ACLK_ISP			205
> +#define ACLK_CIF1			206
> +#define ACLK_CIF2			207
> +#define ACLK_CIF3			208
> +#define ACLK_PERI			209
> +#define ACLK_GMAC			210
>   
>   /* pclk gates */
>   #define PCLK_GPIO1			256
> @@ -67,12 +123,24 @@
>   #define PCLK_PWM			269
>   #define PCLK_TIMER			270
>   #define PCLK_PERI			271
> -#define PCLK_GMAC			272
> -#define PCLK_SARADC			273
> +#define PCLK_GPIO0_PMU			272
> +#define PCLK_I2C0_PMU			273
> +#define PCLK_PWM0_PMU			274
> +#define PCLK_ISP			275
> +#define PCLK_VIO			276
> +#define PCLK_MIPI_DSI			277
> +#define PCLK_HDMI_CTRL			278
> +#define PCLK_SARADC			279
> +#define PCLK_DSP_CFG			280
> +#define PCLK_BUS			281
> +#define PCLK_EFUSE0			282
> +#define PCLK_EFUSE1			283
> +#define PCLK_WDT			284
> +#define PCLK_GMAC			285
>   
>   /* hclk gates */
>   #define HCLK_I2S0_8CH			320
> -#define HCLK_I2S1_8CH			321
> +#define HCLK_I2S1_2CH			321
>   #define HCLK_I2S2_2CH			322
>   #define HCLK_NANDC			323
>   #define HCLK_SDMMC			324
> @@ -80,20 +148,37 @@
>   #define HCLK_EMMC			326
>   #define HCLK_PERI			327
>   #define HCLK_SFC			328
> +#define HCLK_RKVENC			329
> +#define HCLK_RKVDEC			330
> +#define HCLK_CIF0			331
> +#define HCLK_VIO			332
> +#define HCLK_VOP			333
> +#define HCLK_IEP			334
> +#define HCLK_RGA			335
> +#define HCLK_ISP			336
> +#define HCLK_CRYPTO_MST			337
> +#define HCLK_CRYPTO_SLV			338
> +#define HCLK_HOST0			339
> +#define HCLK_OTG			340
> +#define HCLK_CIF1			341
> +#define HCLK_CIF2			342
> +#define HCLK_CIF3			343
> +#define HCLK_BUS			344
> +#define HCLK_VPU			345
>   
> -#define CLK_NR_CLKS			(HCLK_SFC + 1)
> +#define CLK_NR_CLKS			(HCLK_VPU + 1)
>   
>   /* reset id */
> -#define SRST_CORE_PO_AD		0
> +#define SRST_CORE_PO_AD			0
>   #define SRST_CORE_AD			1
>   #define SRST_L2_AD			2
> -#define SRST_CPU_NIU_AD		3
> +#define SRST_CPU_NIU_AD			3
>   #define SRST_CORE_PO			4
>   #define SRST_CORE			5
> -#define SRST_L2			6
> +#define SRST_L2				6
>   #define SRST_CORE_DBG			8
>   #define PRST_DBG			9
> -#define RST_DAP			10
> +#define RST_DAP				10
>   #define PRST_DBG_NIU			11
>   #define ARST_STRC_SYS_AD		15
>   
> @@ -160,9 +245,9 @@
>   #define HRST_SYSBUS			75
>   #define PRST_USBGRF			76
>   
> -#define ARST_PERIPH_NIU		80
> -#define HRST_PERIPH_NIU		81
> -#define PRST_PERIPH_NIU		82
> +#define ARST_PERIPH_NIU			80
> +#define HRST_PERIPH_NIU			81
> +#define PRST_PERIPH_NIU			82
>   #define HRST_PERIPH			83
>   #define HRST_SDMMC			84
>   #define HRST_SDIO			85
> @@ -180,28 +265,11 @@
>   #define HRST_HOST0_AUX			96
>   #define HRST_HOST0_ARB			97
>   #define SRST_HOST0_EHCIPHY		98
> -#define SRST_HOST0_UTMI		99
> +#define SRST_HOST0_UTMI			99
>   #define SRST_USBPOR			100
>   #define SRST_UTMI0			101
>   #define SRST_UTMI1			102
>   
> -#define ARST_VIO0_NIU			102
> -#define ARST_VIO1_NIU			103
> -#define HRST_VIO_NIU			104
> -#define PRST_VIO_NIU			105
> -#define ARST_VOP			106
> -#define HRST_VOP			107
> -#define DRST_VOP			108
> -#define ARST_IEP			109
> -#define HRST_IEP			110
> -#define ARST_RGA			111
> -#define HRST_RGA			112
> -#define SRST_RGA			113
> -#define PRST_CVBS			114
> -#define PRST_HDMI			115
> -#define SRST_HDMI			116
> -#define PRST_MIPI_DSI			117


Why these display devices removed?

> -
>   #define ARST_ISP_NIU			118
>   #define HRST_ISP_NIU			119
>   #define HRST_ISP			120
> @@ -227,21 +295,21 @@
>   #define HRST_VPU_NIU			141
>   #define ARST_VPU			142
>   #define HRST_VPU			143
> -#define ARST_RKVDEC_NIU		144
> -#define HRST_RKVDEC_NIU		145
> +#define ARST_RKVDEC_NIU			144
> +#define HRST_RKVDEC_NIU			145
>   #define ARST_RKVDEC			146
>   #define HRST_RKVDEC			147
>   #define SRST_RKVDEC_CABAC		148
>   #define SRST_RKVDEC_CORE		149
> -#define ARST_RKVENC_NIU		150
> -#define HRST_RKVENC_NIU		151
> +#define ARST_RKVENC_NIU			150
> +#define HRST_RKVENC_NIU			151
>   #define ARST_RKVENC			152
>   #define HRST_RKVENC			153
>   #define SRST_RKVENC_CORE		154
>   
>   #define SRST_DSP_CORE			156
>   #define SRST_DSP_SYS			157
> -#define SRST_DSP_GLOBAL		158
> +#define SRST_DSP_GLOBAL			158
>   #define SRST_DSP_OECM			159
>   #define PRST_DSP_IOP_NIU		160
>   #define ARST_DSP_EPP_NIU		161
> @@ -259,7 +327,7 @@
>   #define SRST_PMU_I2C0			173
>   #define PRST_PMU_I2C0			174
>   #define PRST_PMU_GPIO0			175
> -#define PRST_PMU_INTMEM		176
> +#define PRST_PMU_INTMEM			176
>   #define PRST_PMU_PWM0			177
>   #define SRST_PMU_PWM0			178
>   #define PRST_PMU_GRF			179



More information about the U-Boot mailing list