Skip to contentSkip to conversation

drm/msm: add shutdown support for display platform_driver

PATCH Superseded Krishna Manikandan 3 participants 3 messages May 28, 2020

Subsystems (3)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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.

---
 drivers/gpu/drm/msm/msm_drv.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)
drivers/gpu/drm/msm/msm_drv.c +13 -0
index e4b750b..7a8953f 100644
@@ -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,
Signature · 1 line
1.9.1
#1 lore raw

Hi Krishna,

Quoted 4 lines · Krishna Manikandan

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

Signature · 2 lines
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
#2 lore raw
In reply to Krishna Manikandan

Quoting Krishna Manikandan (2020-05-28 01:38:23)

Quoted 6 lines
drivers/gpu/drm/msm/msm_drv.c +0 -0
index e4b750b..7a8953f 100644
@@ -1322,6 +1322,18 @@ static int msm_pdev_remove(struct platform_device *pdev)
        return 0;

drivers/gpu/drm/msm/msm_drv.c static int msm_pdev_remove(struct platform_device *pdev) · line 1332

Quoted 10 lines
drivers/gpu/drm/msm/msm_drv.c +8 -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.

Quoted 7 lines
drivers/gpu/drm/msm/msm_drv.c +4 -0
+
+       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 },