[PATCH] mmc: dw_mmc-rockchip: Add missing private data for very old controllers
Shawn Lin
shawn.lin at rock-chips.com
Sun May 24 18:44:31 PDT 2026
在 2026/05/23 星期六 2:43, Heiko Stuebner 写道:
> The really old controllers (rk2928, rk3066, rk3188) do not support UHS
> speeds at all, and thus never handled phase data.
>
> For that reason it never had a parse_dt callback and no driver private
> data at all.
>
> Commit ff6f0286c896 ("mmc: dw_mmc-rockchip: Add memory clock auto-gating
> support") makes the private data sort of mandatory, because the init
> function checks whether phases are configured internally or through the
> clock controller.
>
> This results in the old SoCs then experiencing NULL-pointer dereferences
> when they try to access that private-data struct.
>
> While we could have if (priv) conditionals in all places, it's way less
> cluttery to just give the old types their private-data struct.
Thanks for fixing this.
Acked-by: Shawn Lin <shawn.lin at rock-chips.com>
>
> Fixes: ff6f0286c896 ("mmc: dw_mmc-rockchip: Add memory clock auto-gating support")
> Cc: stable at vger.kernel.org
> Signed-off-by: Heiko Stuebner <heiko at sntech.de>
> ---
> drivers/mmc/host/dw_mmc-rockchip.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/drivers/mmc/host/dw_mmc-rockchip.c b/drivers/mmc/host/dw_mmc-rockchip.c
> index c6eece4ec3fd..75c82ff20f17 100644
> --- a/drivers/mmc/host/dw_mmc-rockchip.c
> +++ b/drivers/mmc/host/dw_mmc-rockchip.c
> @@ -441,6 +441,22 @@ static int dw_mci_common_parse_dt(struct dw_mci *host)
> return 0;
> }
>
> +static int dw_mci_rk2928_parse_dt(struct dw_mci *host)
> +{
> + struct dw_mci_rockchip_priv_data *priv;
> + int err;
> +
> + err = dw_mci_common_parse_dt(host);
> + if (err)
> + return err;
> +
> + priv = host->priv;
> +
> + priv->internal_phase = false;
> +
> + return 0;
> +}
> +
> static int dw_mci_rk3288_parse_dt(struct dw_mci *host)
> {
> struct dw_mci_rockchip_priv_data *priv;
> @@ -514,6 +530,7 @@ static int dw_mci_rockchip_init(struct dw_mci *host)
>
> static const struct dw_mci_drv_data rk2928_drv_data = {
> .init = dw_mci_rockchip_init,
> + .parse_dt = dw_mci_rk2928_parse_dt,
> };
>
> static const struct dw_mci_drv_data rk3288_drv_data = {
More information about the linux-arm-kernel
mailing list