[PATCH] mmc: dw_mmc-rockchip: Add missing private data for very old controllers

Ulf Hansson ulf.hansson at oss.qualcomm.com
Fri May 29 07:45:47 PDT 2026


On Fri, May 22, 2026 at 8:43 PM Heiko Stuebner <heiko at sntech.de> wrote:
>
> 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.
>
> 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>

Applied for fixes, thanks!

Kind regards
Uffe


> ---
>  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 = {
> --
> 2.47.3
>
>
> _______________________________________________
> Linux-rockchip mailing list
> Linux-rockchip at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-rockchip



More information about the Linux-rockchip mailing list