Re: [v1] drm/msm: add shutdown support for display platform_driver
Quoting Krishna Manikandan (2020-05-28 01:38:23) > diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c > index e4b750b..7a8953f 100644 > --- a/drivers/gpu/drm/msm/msm_drv.c > +++ b/drivers/gpu/drm/msm/msm_drv.c > @@ -1322,6 +1322,18 @@ static int msm_pdev_remove(struct platform_device > *pdev) > return 0; > } > > +static void msm_pdev_shutdown(struct platform_device *pdev) > +{ > + struct drm_device *drm = platform_get_drvdata(pdev); > + > + if (!drm) { > + DRM_ERROR("Invalid drm device node\n"); > + return; > + } When would this ever happen? Please drop this useless check. > + > + drm_atomic_helper_shutdown(drm); > +} > + > static const struct of_device_id dt_match[] = { > { .compatible = "qcom,mdp4", .data = (void *)KMS_MDP4 }, > { .compatible = "qcom,mdss", .data = (void *)KMS_MDP5 },
Re: [v1] drm/msm: add shutdown support for display platform_driver
Hi Krishna, On 2020-05-28 14:08, Krishna Manikandan wrote: Define shutdown callback for display drm driver, so as to disable all the CRTCS when shutdown notification is received by the driver. Would be nice to add some more context for adding this shutdown callback something like below: If the hardware is still accessing memory after SMMU translation is disabled as part of smmu shutdown callback, then the IOVAs(I/O virtual address) which it was using will go on the bus as the physical addresses which will result in unknown crashes (NoC/interconnect errors on QCOM SoCs). PS: Credits for description: Robin Murphy Thanks, Sai -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
[v1] drm/msm: add shutdown support for display platform_driver
Define shutdown callback for display drm driver, so as to disable all the CRTCS when shutdown notification is received by the driver. Signed-off-by: Krishna Manikandan --- drivers/gpu/drm/msm/msm_drv.c | 13 + 1 file changed, 13 insertions(+) diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index e4b750b..7a8953f 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c @@ -1322,6 +1322,18 @@ static int msm_pdev_remove(struct platform_device *pdev) return 0; } +static void msm_pdev_shutdown(struct platform_device *pdev) +{ + struct drm_device *drm = platform_get_drvdata(pdev); + + if (!drm) { + DRM_ERROR("Invalid drm device node\n"); + return; + } + + drm_atomic_helper_shutdown(drm); +} + static const struct of_device_id dt_match[] = { { .compatible = "qcom,mdp4", .data = (void *)KMS_MDP4 }, { .compatible = "qcom,mdss", .data = (void *)KMS_MDP5 }, @@ -1334,6 +1346,7 @@ static int msm_pdev_remove(struct platform_device *pdev) static struct platform_driver msm_platform_driver = { .probe = msm_pdev_probe, .remove = msm_pdev_remove, + .shutdown = msm_pdev_shutdown, .driver = { .name = "msm", .of_match_table = dt_match, -- 1.9.1