From: Nicholas Kazlauskas nicholas.kazlauskas@amd.com
stable inclusion from stable-v6.6.1 commit 2a79e92f23bce01a197486738ac11e3d1c04ef58 category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I8IKRU
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=...
--------------------------------
[ Upstream commit 79df45dc4bfb13d9bd3a75338b9d9dab948be3d6 ]
[Why] These functions can be called from high IRQ levels and the OS will hang if it tries to use a usleep_highres or a msleep.
[How] Replace the fsleep with a udelay.
Reviewed-by: Aric Cyr aric.cyr@amd.com Acked-by: Tom Chung chiahsuan.chung@amd.com Signed-off-by: Nicholas Kazlauskas nicholas.kazlauskas@amd.com Tested-by: Daniel Wheeler daniel.wheeler@amd.com Signed-off-by: Alex Deucher alexander.deucher@amd.com Signed-off-by: Sasha Levin sashal@kernel.org Signed-off-by: Zheng Zengkai zhengzengkai@huawei.com --- drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c | 3 ++- drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c b/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c index b87bfecb7755..a8e79104b684 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_dmcu.c @@ -586,7 +586,8 @@ static void dcn10_dmcu_set_psr_enable(struct dmcu *dmcu, bool enable, bool wait) if (state == PSR_STATE0) break; } - fsleep(500); + /* must *not* be fsleep - this can be called from high irq levels */ + udelay(500); }
/* assert if max retry hit */ diff --git a/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c b/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c index 0f24b6fbd220..4704c9c85ee6 100644 --- a/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c +++ b/drivers/gpu/drm/amd/display/dc/dce/dmub_psr.c @@ -216,7 +216,8 @@ static void dmub_psr_enable(struct dmub_psr *dmub, bool enable, bool wait, uint8 break; }
- fsleep(500); + /* must *not* be fsleep - this can be called from high irq levels */ + udelay(500); }
/* assert if max retry hit */