From 9df731a176aab8e03b984b681b1bea01ccff6644 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 06 Nov 2023 07:23:06 +0000 Subject: [PATCH] rk3568 rt uboot init --- u-boot/drivers/ram/rockchip/sdram_rv1126.c | 38 ++++++++++++++++++++++++++++++-------- 1 files changed, 30 insertions(+), 8 deletions(-) diff --git a/u-boot/drivers/ram/rockchip/sdram_rv1126.c b/u-boot/drivers/ram/rockchip/sdram_rv1126.c index bb2ce37..65f08a2 100644 --- a/u-boot/drivers/ram/rockchip/sdram_rv1126.c +++ b/u-boot/drivers/ram/rockchip/sdram_rv1126.c @@ -374,6 +374,8 @@ break; delay--; } + if (delay <= 0) + printascii("ERROR: DPLL lock timeout!\n"); writel(DPLL_MODE(CLOCK_FROM_PLL), &dram->cru->mode); } @@ -557,11 +559,18 @@ { void __iomem *phy_base = dram->phy; u32 fbdiv, prediv, postdiv, postdiv_en; + int delay = 1000; if (wait) { clrbits_le32(PHY_REG(phy_base, 0x53), PHY_PD_DISB); - while (!(readl(PHY_REG(phy_base, 0x90)) & PHY_PLL_LOCK)) - continue; + while (!(readl(PHY_REG(phy_base, 0x90)) & PHY_PLL_LOCK)) { + udelay(1); + if (delay-- <= 0) { + printascii("ERROR: phy pll lock timeout!\n"); + while (1) + ; + } + } } else { freq /= MHz; prediv = 1; @@ -2484,13 +2493,13 @@ return 0; } -static int sdram_init_(struct dram_info *dram, - struct rv1126_sdram_params *sdram_params, u32 post_init) +int sdram_init_(struct dram_info *dram, struct rv1126_sdram_params *sdram_params, u32 post_init) { void __iomem *pctl_base = dram->pctl; void __iomem *phy_base = dram->phy; u32 ddr4_vref; u32 mr_tmp, tmp; + int delay = 1000; rkclk_configure_ddr(dram, sdram_params); @@ -2538,8 +2547,14 @@ rkclk_ddr_reset(dram, 0, 0, 0, 0); - while ((readl(pctl_base + DDR_PCTL2_STAT) & 0x7) == 0) - continue; + while ((readl(pctl_base + DDR_PCTL2_STAT) & 0x7) == 0) { + udelay(1); + if (delay-- <= 0) { + printascii("ERROR: Cannot wait dfi_init_done!\n"); + while (1) + ; + } + } if (sdram_params->base.dramtype == LPDDR3) { pctl_write_mr(dram->pctl, 3, 11, lp3_odt_value, LPDDR3); @@ -3300,6 +3315,7 @@ struct rv1126_sdram_params *sdram_params_new; void __iomem *pctl_base = dram->pctl; void __iomem *phy_base = dram->phy; + int delay = 1000; lp_stat = low_power_update(dram, 0); sdram_params_new = get_default_sdram_config(freq); @@ -3388,8 +3404,14 @@ (0x0 << ACLK_DDR_UPCTL_EN_SHIFT), BUS_SGRF_BASE_ADDR + SGRF_SOC_CON12); while ((readl(pctl_base + DDR_PCTL2_DFISTAT) & - PCTL2_DFI_INIT_COMPLETE) != PCTL2_DFI_INIT_COMPLETE) - continue; + PCTL2_DFI_INIT_COMPLETE) != PCTL2_DFI_INIT_COMPLETE) { + udelay(1); + if (delay-- <= 0) { + printascii("ERROR: Cannot wait DFI_INIT_COMPLETE\n"); + while (1) + ; + } + } sw_set_req(dram); setbits_le32(pctl_base + DDR_PCTL2_MSTR, 0x1 << 29); -- Gitblit v1.6.2