[PATCH] mmc: rockchip_dw_mmc: fix DDR52 8-bit mode handling
Jaehoon Chung
jh80.chung at gmail.com
Tue Jan 31 13:44:40 CET 2023
Hi,
On 1/18/23 02:07, John Keeping wrote:
> The RK3288 TRM states that, for 8-bit DDR modes:
>
> The CLKDIV register should always be programmed with a value
> higher than zero (0); that is, a clock divider should always be
> used for 8-bit DDR mode.
>
> In Linux, the driver applies this logic for all SoCs using the driver
> and does not distinguish RK3288, so presumably this requirement is the
> same for all other Rockchip SoCs using this IP.
>
> Add the necessary code to double the clock frequency when 8-bit DDR is
> selected. The dw_mmc core already handles setting CLKDIV correctly
> given the input clock and desired bus clock.
>
> Signed-off-by: John Keeping <john at metanate.com>
Reviewed-by: Jaehoon Chung <jh80.chung at samsung.com>
Best Regards,
Jaehoon Chung
> ---
> drivers/mmc/rockchip_dw_mmc.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/drivers/mmc/rockchip_dw_mmc.c b/drivers/mmc/rockchip_dw_mmc.c
> index 573bf16c87..3661ce3314 100644
> --- a/drivers/mmc/rockchip_dw_mmc.c
> +++ b/drivers/mmc/rockchip_dw_mmc.c
> @@ -41,6 +41,14 @@ static uint rockchip_dwmmc_get_mmc_clk(struct dwmci_host *host, uint freq)
> struct rockchip_dwmmc_priv *priv = dev_get_priv(dev);
> int ret;
>
> + /*
> + * The clock frequency chosen here affects CLKDIV in the dw_mmc core.
> + * That can be either 0 or 1, but it must be set to 1 for eMMC DDR52
> + * 8-bit mode. It will be set to 0 for all other modes.
> + */
> + if (host->mmc->selected_mode == MMC_DDR_52 && host->mmc->bus_width == 8)
> + freq *= 2;
> +
> ret = clk_set_rate(&priv->clk, freq);
> if (ret < 0) {
> debug("%s: err=%d\n", __func__, ret);
More information about the U-Boot
mailing list