[Freedreno] [PATCH] drm/msm: Fix shutdown

Dmitry Baryshkov dmitry.baryshkov at linaro.org
Wed May 4 23:29:12 UTC 2022


On Thu, 5 May 2022 at 01:49, Douglas Anderson <dianders at chromium.org> wrote:
>
> When rebooting on my sc7280-herobrine based device, I got a
> crash. Upon debugging, I found that I was in msm_drv_shutdown() and my
> "pdev" was the one associated with mdss_probe().
>
> From source, I found that mdss_probe() has the line:
>   platform_set_drvdata(pdev, mdss);
> ...where "mdss" is of type "struct msm_mdss *".
>
> Also from source, I saw that in msm_drv_shutdown() we have the line:
>   struct msm_drm_private *priv = platform_get_drvdata(pdev);
>
> This is a mismatch and is the root of the problem.
>
> Further digging made it apparent that msm_drv_shutdown() is only
> supposed to be used for parts of the msm display framework that also
> call msm_drv_probe() but mdss_probe() doesn't call
> msm_drv_probe(). Let's remove the shutdown functon from msm_mdss.c.
>
> Digging a little further, code inspection found that two drivers that
> use msm_drv_probe() weren't calling msm_drv_shutdown(). Let's add it
> to them.
>
> Fixes: ecb23f2e3009 ("drm/msm: split the main platform driver")

More likely:
Fixes: 6874f48bb8b0 ("drm/msm: make mdp5/dpu devices master components")

With that fixed:
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov at linaro.org>

> Signed-off-by: Douglas Anderson <dianders at chromium.org>
> ---
>
>  drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c  | 1 +
>  drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c | 1 +
>  drivers/gpu/drm/msm/msm_mdss.c           | 1 -
>  3 files changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> index 143d6643be53..2b9d931474e0 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
> @@ -1350,6 +1350,7 @@ MODULE_DEVICE_TABLE(of, dpu_dt_match);
>  static struct platform_driver dpu_driver = {
>         .probe = dpu_dev_probe,
>         .remove = dpu_dev_remove,
> +       .shutdown = msm_drv_shutdown,
>         .driver = {
>                 .name = "msm_dpu",
>                 .of_match_table = dpu_dt_match,
> diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
> index 9b7bbc3adb97..3d5621a68f85 100644
> --- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
> +++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
> @@ -1009,6 +1009,7 @@ MODULE_DEVICE_TABLE(of, mdp5_dt_match);
>  static struct platform_driver mdp5_driver = {
>         .probe = mdp5_dev_probe,
>         .remove = mdp5_dev_remove,
> +       .shutdown = msm_drv_shutdown,
>         .driver = {
>                 .name = "msm_mdp",
>                 .of_match_table = mdp5_dt_match,
> diff --git a/drivers/gpu/drm/msm/msm_mdss.c b/drivers/gpu/drm/msm/msm_mdss.c
> index 20f154dda9cf..0454a571adf7 100644
> --- a/drivers/gpu/drm/msm/msm_mdss.c
> +++ b/drivers/gpu/drm/msm/msm_mdss.c
> @@ -397,7 +397,6 @@ MODULE_DEVICE_TABLE(of, mdss_dt_match);
>  static struct platform_driver mdss_platform_driver = {
>         .probe      = mdss_probe,
>         .remove     = mdss_remove,
> -       .shutdown   = msm_drv_shutdown,
>         .driver     = {
>                 .name   = "msm-mdss",
>                 .of_match_table = mdss_dt_match,
> --
> 2.36.0.464.gb9c8b46e94-goog
>


-- 
With best wishes
Dmitry


More information about the Freedreno mailing list