| From c16da545ae3f5b784fd3180377c99394acdba4f5 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 17 Jan 2026 05:54:47 +0200 |
| Subject: clk: qcom: gfx3d: add parent to parent request map |
| |
| From: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> |
| |
| [ Upstream commit 2583cb925ca1ce450aa5d74a05a67448db970193 ] |
| |
| After commit d228ece36345 ("clk: divider: remove round_rate() in favor |
| of determine_rate()") determining GFX3D clock rate crashes, because the |
| passed parent map doesn't provide the expected best_parent_hw clock |
| (with the roundd_rate path before the offending commit the |
| best_parent_hw was ignored). |
| |
| Set the field in parent_req in addition to setting it in the req, |
| fixing the crash. |
| |
| clk_hw_round_rate (drivers/clk/clk.c:1764) (P) |
| clk_divider_bestdiv (drivers/clk/clk-divider.c:336) |
| divider_determine_rate (drivers/clk/clk-divider.c:358) |
| clk_alpha_pll_postdiv_determine_rate (drivers/clk/qcom/clk-alpha-pll.c:1275) |
| clk_core_determine_round_nolock (drivers/clk/clk.c:1606) |
| clk_core_round_rate_nolock (drivers/clk/clk.c:1701) |
| __clk_determine_rate (drivers/clk/clk.c:1741) |
| clk_gfx3d_determine_rate (drivers/clk/qcom/clk-rcg2.c:1268) |
| clk_core_determine_round_nolock (drivers/clk/clk.c:1606) |
| clk_core_round_rate_nolock (drivers/clk/clk.c:1701) |
| clk_core_round_rate_nolock (drivers/clk/clk.c:1710) |
| clk_round_rate (drivers/clk/clk.c:1804) |
| dev_pm_opp_set_rate (drivers/opp/core.c:1440 (discriminator 1)) |
| msm_devfreq_target (drivers/gpu/drm/msm/msm_gpu_devfreq.c:51) |
| devfreq_set_target (drivers/devfreq/devfreq.c:360) |
| devfreq_update_target (drivers/devfreq/devfreq.c:426) |
| devfreq_monitor (drivers/devfreq/devfreq.c:458) |
| process_one_work (arch/arm64/include/asm/jump_label.h:36 include/trace/events/workqueue.h:110 kernel/workqueue.c:3284) |
| worker_thread (kernel/workqueue.c:3356 (discriminator 2) kernel/workqueue.c:3443 (discriminator 2)) |
| kthread (kernel/kthread.c:467) |
| ret_from_fork (arch/arm64/kernel/entry.S:861) |
| |
| Fixes: 55213e1acec9 ("clk: qcom: Add gfx3d ping-pong PLL frequency switching") |
| Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> |
| Reviewed-by: Abel Vesa <abel.vesa@oss.qualcomm.com> |
| Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> |
| Reviewed-by: Brian Masney <bmasney@redhat.com> |
| Link: https://lore.kernel.org/r/20260117-db820-fix-gfx3d-v1-1-0f8894d71d63@oss.qualcomm.com |
| Signed-off-by: Bjorn Andersson <andersson@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/clk/qcom/clk-rcg2.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| diff --git a/drivers/clk/qcom/clk-rcg2.c b/drivers/clk/qcom/clk-rcg2.c |
| index 0e26f4f0bdbae..3dc9356b711d5 100644 |
| --- a/drivers/clk/qcom/clk-rcg2.c |
| +++ b/drivers/clk/qcom/clk-rcg2.c |
| @@ -916,6 +916,7 @@ static int clk_gfx3d_determine_rate(struct clk_hw *hw, |
| if (req->max_rate < parent_req.max_rate) |
| parent_req.max_rate = req->max_rate; |
| |
| + parent_req.best_parent_hw = req->best_parent_hw; |
| ret = __clk_determine_rate(req->best_parent_hw, &parent_req); |
| if (ret) |
| return ret; |
| -- |
| 2.51.0 |
| |