Patch "drm/msm: Fix suspend/resume on i.MX5" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    drm/msm: Fix suspend/resume on i.MX5

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     drm-msm-fix-suspend-resume-on-i.mx5.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 6c2b88eb88c9fd6871807dbf72b327a2b9363d90
Author: Fabio Estevam <festevam@xxxxxxxxx>
Date:   Sat Mar 20 08:56:03 2021 -0300

    drm/msm: Fix suspend/resume on i.MX5
    
    [ Upstream commit a9748134ea4aad989e52a6a91479e0acfd306e5b ]
    
    When putting iMX5 into suspend, the following flow is
    observed:
    
    [   70.023427] [<c07755f0>] (msm_atomic_commit_tail) from [<c06e7218>]
    (commit_tail+0x9c/0x18c)
    [   70.031890] [<c06e7218>] (commit_tail) from [<c0e2920c>]
    (drm_atomic_helper_commit+0x1a0/0x1d4)
    [   70.040627] [<c0e2920c>] (drm_atomic_helper_commit) from
    [<c06e74d4>] (drm_atomic_helper_disable_all+0x1c4/0x1d4)
    [   70.050913] [<c06e74d4>] (drm_atomic_helper_disable_all) from
    [<c0e2943c>] (drm_atomic_helper_suspend+0xb8/0x170)
    [   70.061198] [<c0e2943c>] (drm_atomic_helper_suspend) from
    [<c06e84bc>] (drm_mode_config_helper_suspend+0x24/0x58)
    
    In the i.MX5 case, priv->kms is not populated (as i.MX5 does not use any
    of the Qualcomm display controllers), causing a NULL pointer
    dereference in msm_atomic_commit_tail():
    
    [   24.268964] 8<--- cut here ---
    [   24.274602] Unable to handle kernel NULL pointer dereference at
    virtual address 00000000
    [   24.283434] pgd = (ptrval)
    [   24.286387] [00000000] *pgd=ca212831
    [   24.290788] Internal error: Oops: 17 [#1] SMP ARM
    [   24.295609] Modules linked in:
    [   24.298777] CPU: 0 PID: 197 Comm: init Not tainted 5.11.0-rc2-next-20210111 #333
    [   24.306276] Hardware name: Freescale i.MX53 (Device Tree Support)
    [   24.312442] PC is at msm_atomic_commit_tail+0x54/0xb9c
    [   24.317743] LR is at commit_tail+0xa4/0x1b0
    
    Fix the problem by calling drm_mode_config_helper_suspend/resume()
    only when priv->kms is available.
    
    Fixes: ca8199f13498 ("drm/msm/dpu: ensure device suspend happens during PM sleep")
    Signed-off-by: Fabio Estevam <festevam@xxxxxxxxx>
    Signed-off-by: Rob Clark <robdclark@xxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 45e325c982c2..b38ebccad42f 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -1079,6 +1079,10 @@ static int __maybe_unused msm_pm_resume(struct device *dev)
 static int __maybe_unused msm_pm_prepare(struct device *dev)
 {
 	struct drm_device *ddev = dev_get_drvdata(dev);
+	struct msm_drm_private *priv = ddev ? ddev->dev_private : NULL;
+
+	if (!priv || !priv->kms)
+		return 0;
 
 	return drm_mode_config_helper_suspend(ddev);
 }
@@ -1086,6 +1090,10 @@ static int __maybe_unused msm_pm_prepare(struct device *dev)
 static void __maybe_unused msm_pm_complete(struct device *dev)
 {
 	struct drm_device *ddev = dev_get_drvdata(dev);
+	struct msm_drm_private *priv = ddev ? ddev->dev_private : NULL;
+
+	if (!priv || !priv->kms)
+		return;
 
 	drm_mode_config_helper_resume(ddev);
 }



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux