* [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks
@ 2026-09-24 12:06 Abel Vesa
2026-09-24 12:06 ` [PATCH v2 01/48] clk: qcom: camcc-sa8775p: Use common probe handling " Abel Vesa
` (48 more replies)
0 siblings, 49 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Many Qualcomm clock controller drivers still enable always-on branches
with individual qcom_branch_set_clk_en() calls in their probe functions.
The common probe code already supports describing these register offsets
through the clk_cbcrs and num_clk_cbcrs fields of qcom_cc_driver_data.
Convert the remaining users of these direct calls to per-controller
critical_cbcrs arrays. This centralizes branch enable handling in the
common probe path and makes the always-on register lists easier to review
alongside the other controller data.
For GCC drivers, also describe DFS RCGs through the common driver data and
move auxiliary register programming into clk_regs_configure callbacks
where appropriate. Drivers whose initialization is fully covered by the
common path can then use qcom_cc_probe() directly. Keep device-specific
setup in the remaining probe functions, including the separate CBCR lists
needed by the SA8775P/QCS8300 camera and SM8350/SC8280XP video variants.
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
Changes in v2:
- Rebased on next-20260923.
- Picked up Konrad's R-b tag for the entire series.
- Use the common alpha PLL configuration handling for GCC SM6375.
- Use regmap_set_bits() for the GPLL0 active-input configuration on SM8250.
- Link to v1: https://patch.msgid.link/20260916-clk-qcom-rework-legacy-always-on-clocks-v1-0-25a24e50f82a@oss.qualcomm.com
---
Abel Vesa (48):
clk: qcom: camcc-sa8775p: Use common probe handling for always-on clocks
clk: qcom: camcc-sc8280xp: Use common probe handling for always-on clocks
clk: qcom: camcc-sm7150: Use common probe handling for always-on clocks
clk: qcom: camcc-sm8150: Use common probe handling for always-on clocks
clk: qcom: dispcc-sc7280: Use common probe handling for always-on clocks
clk: qcom: dispcc-sc8280xp: Use common probe handling for always-on clocks
clk: qcom: dispcc-sm4450: Use common probe handling for always-on clocks
clk: qcom: dispcc-sm6115: Use common probe handling for always-on clocks
clk: qcom: dispcc-sm7150: Use common probe handling for always-on clocks
clk: qcom: dispcc-sm8250: Use common probe handling for always-on clocks
clk: qcom: dispcc-sm8550: Use common probe handling for always-on clocks
clk: qcom: dispcc-sm8750: Use common probe handling for always-on clocks
clk: qcom: dispcc-x1e80100: Use common probe handling for always-on clocks
clk: qcom: dispcc0-sa8775p: Use common probe handling for always-on clocks
clk: qcom: dispcc1-sa8775p: Use common probe handling for always-on clocks
clk: qcom: gcc-qcs615: Use common clock controller probe data
clk: qcom: gcc-qcs8300: Use common clock controller probe data
clk: qcom: gcc-sa8775p: Use common clock controller probe data
clk: qcom: gcc-sar2130p: Use common clock controller probe data
clk: qcom: gcc-sc7180: Use common clock controller probe data
clk: qcom: gcc-sc7280: Use common clock controller probe data
clk: qcom: gcc-sc8280xp: Use common clock controller probe data
clk: qcom: gcc-sdx55: Use common clock controller probe data
clk: qcom: gcc-sdx65: Use common clock controller probe data
clk: qcom: gcc-sdx75: Use common clock controller probe data
clk: qcom: gcc-sm4450: Use common clock controller probe data
clk: qcom: gcc-sm6375: Use common clock controller probe data
clk: qcom: gcc-sm7150: Use common clock controller probe data
clk: qcom: gcc-sm8250: Use common clock controller probe data
clk: qcom: gcc-sm8350: Use common clock controller probe data
clk: qcom: gcc-sm8450: Use common clock controller probe data
clk: qcom: gcc-sm8550: Use common clock controller probe data
clk: qcom: gcc-sm8650: Use common clock controller probe data
clk: qcom: gcc-sm8750: Use common clock controller probe data
clk: qcom: gcc-x1e80100: Use common clock controller probe data
clk: qcom: gpucc-sar2130p: Use common probe handling for always-on clocks
clk: qcom: gpucc-sc7280: Use common probe handling for always-on clocks
clk: qcom: gpucc-sc8280xp: Use common probe handling for always-on clocks
clk: qcom: gpucc-sm4450: Use common probe handling for always-on clocks
clk: qcom: gpucc-sm8550: Use common probe handling for always-on clocks
clk: qcom: gpucc-x1e80100: Use common probe handling for always-on clocks
clk: qcom: gpucc-x1p42100: Use common probe handling for always-on clocks
clk: qcom: lpasscorecc-sc7180: Use common probe handling for always-on clocks
clk: qcom: videocc-sa8775p: Use common probe handling for always-on clocks
clk: qcom: videocc-sm6350: Use common probe handling for always-on clocks
clk: qcom: videocc-sm7150: Use common probe handling for always-on clocks
clk: qcom: videocc-sm8250: Use common probe handling for always-on clocks
clk: qcom: videocc-sm8350: Use common probe handling for always-on clocks
drivers/clk/qcom/camcc-sa8775p.c | 36 ++++++++++++-----
drivers/clk/qcom/camcc-sc8280xp.c | 13 ++++--
drivers/clk/qcom/camcc-sm7150.c | 13 ++++--
drivers/clk/qcom/camcc-sm8150.c | 13 ++++--
drivers/clk/qcom/dispcc-sc7280.c | 13 ++++--
drivers/clk/qcom/dispcc-sc8280xp.c | 18 ++++++---
drivers/clk/qcom/dispcc-sm4450.c | 15 +++++--
drivers/clk/qcom/dispcc-sm6115.c | 13 ++++--
drivers/clk/qcom/dispcc-sm7150.c | 13 ++++--
drivers/clk/qcom/dispcc-sm8250.c | 13 ++++--
drivers/clk/qcom/dispcc-sm8550.c | 13 ++++--
drivers/clk/qcom/dispcc-sm8750.c | 19 ++++++---
drivers/clk/qcom/dispcc-x1e80100.c | 15 +++++--
drivers/clk/qcom/dispcc0-sa8775p.c | 15 +++++--
drivers/clk/qcom/dispcc1-sa8775p.c | 15 +++++--
drivers/clk/qcom/gcc-qcs615.c | 57 +++++++++++++-------------
drivers/clk/qcom/gcc-qcs8300.c | 51 +++++++++++------------
drivers/clk/qcom/gcc-sa8775p.c | 55 ++++++++++++-------------
drivers/clk/qcom/gcc-sar2130p.c | 45 +++++++++++----------
drivers/clk/qcom/gcc-sc7180.c | 60 +++++++++++++--------------
drivers/clk/qcom/gcc-sc7280.c | 54 +++++++++++++------------
drivers/clk/qcom/gcc-sc8280xp.c | 35 +++++++++-------
drivers/clk/qcom/gcc-sdx55.c | 31 ++++++++------
drivers/clk/qcom/gcc-sdx65.c | 31 ++++++++------
drivers/clk/qcom/gcc-sdx75.c | 31 +++++++-------
drivers/clk/qcom/gcc-sm4450.c | 64 ++++++++++++++++-------------
drivers/clk/qcom/gcc-sm6375.c | 46 +++++++++++----------
drivers/clk/qcom/gcc-sm7150.c | 60 +++++++++++++--------------
drivers/clk/qcom/gcc-sm8250.c | 57 +++++++++++++-------------
drivers/clk/qcom/gcc-sm8350.c | 52 ++++++++++++------------
drivers/clk/qcom/gcc-sm8450.c | 51 +++++++++++------------
drivers/clk/qcom/gcc-sm8550.c | 57 +++++++++++++-------------
drivers/clk/qcom/gcc-sm8650.c | 59 ++++++++++++++-------------
drivers/clk/qcom/gcc-sm8750.c | 76 +++++++++++++++--------------------
drivers/clk/qcom/gcc-x1e80100.c | 61 ++++++++++++++--------------
drivers/clk/qcom/gpucc-sar2130p.c | 13 ++++--
drivers/clk/qcom/gpucc-sc7280.c | 22 +++++++---
drivers/clk/qcom/gpucc-sc8280xp.c | 15 +++++--
drivers/clk/qcom/gpucc-sm4450.c | 17 +++++---
drivers/clk/qcom/gpucc-sm8550.c | 15 +++++--
drivers/clk/qcom/gpucc-x1e80100.c | 13 ++++--
drivers/clk/qcom/gpucc-x1p42100.c | 17 +++++---
drivers/clk/qcom/lpasscorecc-sc7180.c | 31 +++++++++-----
drivers/clk/qcom/videocc-sa8775p.c | 17 +++++---
drivers/clk/qcom/videocc-sm6350.c | 13 ++++--
drivers/clk/qcom/videocc-sm7150.c | 13 ++++--
drivers/clk/qcom/videocc-sm8250.c | 15 +++++--
drivers/clk/qcom/videocc-sm8350.c | 31 ++++++++++----
48 files changed, 873 insertions(+), 629 deletions(-)
---
base-commit: 4d7e75152b01862a4ec598435d79a81c4b254dd6
change-id: 20260916-clk-qcom-rework-legacy-always-on-clocks-8be60886f844
prerequisite-change-id: 20260916-clk-qcom-gcc-qcs615-fix-cpuss-gnoc-offset-272641a49214:v2
prerequisite-patch-id: eb58e7f69eb18fb6f7d490e8094d8a3f2c0d0b2f
Best regards,
--
Abel Vesa <abel.vesa@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 01/48] clk: qcom: camcc-sa8775p: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 02/48] clk: qcom: camcc-sc8280xp: " Abel Vesa
` (47 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Keep separate CBCR arrays for SA8775P and QCS8300 to preserve their
different CAMNOC XO, GDSC and sleep clock register offsets.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/camcc-sa8775p.c | 36 ++++++++++++++++++++++++++----------
1 file changed, 26 insertions(+), 10 deletions(-)
diff --git a/drivers/clk/qcom/camcc-sa8775p.c b/drivers/clk/qcom/camcc-sa8775p.c
index 914478139e97..b0a8f0077dd8 100644
--- a/drivers/clk/qcom/camcc-sa8775p.c
+++ b/drivers/clk/qcom/camcc-sa8775p.c
@@ -1818,7 +1818,30 @@ static const struct regmap_config cam_cc_sa8775p_regmap_config = {
.fast_io = true,
};
+static const u32 cam_cc_sa8775p_critical_cbcrs[] = {
+ 0x13194, /* CAM_CC_CAMNOC_XO_CLK */
+ 0x131ec, /* CAM_CC_GDSC_CLK */
+ 0x13208, /* CAM_CC_SLEEP_CLK */
+};
+
+static const u32 cam_cc_qcs8300_critical_cbcrs[] = {
+ 0x13178, /* CAM_CC_CAMNOC_XO_CLK */
+ 0x131d0, /* CAM_CC_GDSC_CLK */
+ 0x131ec, /* CAM_CC_SLEEP_CLK */
+};
+
+static const struct qcom_cc_driver_data cam_cc_sa8775p_driver_data = {
+ .clk_cbcrs = cam_cc_sa8775p_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(cam_cc_sa8775p_critical_cbcrs),
+};
+
+static const struct qcom_cc_driver_data cam_cc_qcs8300_driver_data = {
+ .clk_cbcrs = cam_cc_qcs8300_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(cam_cc_qcs8300_critical_cbcrs),
+};
+
static const struct qcom_cc_desc cam_cc_sa8775p_desc = {
+ .driver_data = &cam_cc_sa8775p_driver_data,
.config = &cam_cc_sa8775p_regmap_config,
.clks = cam_cc_sa8775p_clocks,
.num_clks = ARRAY_SIZE(cam_cc_sa8775p_clocks),
@@ -1837,6 +1860,7 @@ MODULE_DEVICE_TABLE(of, cam_cc_sa8775p_match_table);
static int cam_cc_sa8775p_probe(struct platform_device *pdev)
{
+ struct qcom_cc_desc desc = cam_cc_sa8775p_desc;
struct regmap *regmap;
int ret;
@@ -1927,18 +1951,10 @@ static int cam_cc_sa8775p_probe(struct platform_device *pdev)
cam_cc_sa8775p_clocks[CAM_CC_TITAN_TOP_ACCU_SHIFT_CLK] =
&cam_cc_titan_top_accu_shift_clk.clkr;
- /* Keep some clocks always enabled */
- qcom_branch_set_clk_en(regmap, 0x13178); /* CAM_CC_CAMNOC_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x131d0); /* CAM_CC_GDSC_CLK */
- qcom_branch_set_clk_en(regmap, 0x131ec); /* CAM_CC_SLEEP_CLK */
- } else {
- /* Keep some clocks always enabled */
- qcom_branch_set_clk_en(regmap, 0x13194); /* CAM_CC_CAMNOC_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x131ec); /* CAM_CC_GDSC_CLK */
- qcom_branch_set_clk_en(regmap, 0x13208); /* CAM_CC_SLEEP_CLK */
+ desc.driver_data = &cam_cc_qcs8300_driver_data;
}
- ret = qcom_cc_really_probe(&pdev->dev, &cam_cc_sa8775p_desc, regmap);
+ ret = qcom_cc_really_probe(&pdev->dev, &desc, regmap);
pm_runtime_put(&pdev->dev);
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 02/48] clk: qcom: camcc-sc8280xp: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
2026-09-24 12:06 ` [PATCH v2 01/48] clk: qcom: camcc-sa8775p: Use common probe handling " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 03/48] clk: qcom: camcc-sm7150: " Abel Vesa
` (46 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/camcc-sc8280xp.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/clk/qcom/camcc-sc8280xp.c b/drivers/clk/qcom/camcc-sc8280xp.c
index 660d8655d391..b0f1d40d1df5 100644
--- a/drivers/clk/qcom/camcc-sc8280xp.c
+++ b/drivers/clk/qcom/camcc-sc8280xp.c
@@ -2967,7 +2967,17 @@ static const struct regmap_config camcc_sc8280xp_regmap_config = {
.fast_io = true,
};
+static const u32 camcc_sc8280xp_critical_cbcrs[] = {
+ 0xc1e4, /* CAMCC_GDSC_CLK */
+};
+
+static const struct qcom_cc_driver_data camcc_sc8280xp_driver_data = {
+ .clk_cbcrs = camcc_sc8280xp_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(camcc_sc8280xp_critical_cbcrs),
+};
+
static const struct qcom_cc_desc camcc_sc8280xp_desc = {
+ .driver_data = &camcc_sc8280xp_driver_data,
.config = &camcc_sc8280xp_regmap_config,
.clks = camcc_sc8280xp_clocks,
.num_clks = ARRAY_SIZE(camcc_sc8280xp_clocks),
@@ -3011,9 +3021,6 @@ static int camcc_sc8280xp_probe(struct platform_device *pdev)
clk_lucid_pll_configure(&camcc_pll6, regmap, &camcc_pll6_config);
clk_lucid_pll_configure(&camcc_pll7, regmap, &camcc_pll7_config);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0xc1e4); /* CAMCC_GDSC_CLK */
-
ret = qcom_cc_really_probe(&pdev->dev, &camcc_sc8280xp_desc, regmap);
if (ret)
goto err_disable;
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 03/48] clk: qcom: camcc-sm7150: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
2026-09-24 12:06 ` [PATCH v2 01/48] clk: qcom: camcc-sa8775p: Use common probe handling " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 02/48] clk: qcom: camcc-sc8280xp: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 04/48] clk: qcom: camcc-sm8150: " Abel Vesa
` (45 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/camcc-sm7150.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/clk/qcom/camcc-sm7150.c b/drivers/clk/qcom/camcc-sm7150.c
index 6f75689e9847..d06258327ba7 100644
--- a/drivers/clk/qcom/camcc-sm7150.c
+++ b/drivers/clk/qcom/camcc-sm7150.c
@@ -2008,7 +2008,17 @@ static const struct regmap_config camcc_sm7150_regmap_config = {
.fast_io = true,
};
+static const u32 camcc_sm7150_critical_cbcrs[] = {
+ 0xc1a0, /* CAMCC_GDSC_CLK */
+};
+
+static const struct qcom_cc_driver_data camcc_sm7150_driver_data = {
+ .clk_cbcrs = camcc_sm7150_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(camcc_sm7150_critical_cbcrs),
+};
+
static const struct qcom_cc_desc camcc_sm7150_desc = {
+ .driver_data = &camcc_sm7150_driver_data,
.config = &camcc_sm7150_regmap_config,
.clk_hws = camcc_sm7150_hws,
.num_clk_hws = ARRAY_SIZE(camcc_sm7150_hws),
@@ -2038,9 +2048,6 @@ static int camcc_sm7150_probe(struct platform_device *pdev)
clk_fabia_pll_configure(&camcc_pll3, regmap, &camcc_pll3_config);
clk_fabia_pll_configure(&camcc_pll4, regmap, &camcc_pll3_config);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0xc1a0); /* CAMCC_GDSC_CLK */
-
return qcom_cc_really_probe(&pdev->dev, &camcc_sm7150_desc, regmap);
}
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 04/48] clk: qcom: camcc-sm8150: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (2 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 03/48] clk: qcom: camcc-sm7150: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 05/48] clk: qcom: dispcc-sc7280: " Abel Vesa
` (44 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/camcc-sm8150.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/clk/qcom/camcc-sm8150.c b/drivers/clk/qcom/camcc-sm8150.c
index fcbaff55fc27..27a51abddce2 100644
--- a/drivers/clk/qcom/camcc-sm8150.c
+++ b/drivers/clk/qcom/camcc-sm8150.c
@@ -2093,7 +2093,17 @@ static const struct regmap_config cam_cc_sm8150_regmap_config = {
.fast_io = true,
};
+static const u32 cam_cc_sm8150_critical_cbcrs[] = {
+ 0xc1e4, /* CAM_CC_GDSC_CLK */
+};
+
+static const struct qcom_cc_driver_data cam_cc_sm8150_driver_data = {
+ .clk_cbcrs = cam_cc_sm8150_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(cam_cc_sm8150_critical_cbcrs),
+};
+
static const struct qcom_cc_desc cam_cc_sm8150_desc = {
+ .driver_data = &cam_cc_sm8150_driver_data,
.config = &cam_cc_sm8150_regmap_config,
.clks = cam_cc_sm8150_clocks,
.num_clks = ARRAY_SIZE(cam_cc_sm8150_clocks),
@@ -2134,9 +2144,6 @@ static int cam_cc_sm8150_probe(struct platform_device *pdev)
clk_trion_pll_configure(&cam_cc_pll3, regmap, &cam_cc_pll3_config);
clk_trion_pll_configure(&cam_cc_pll4, regmap, &cam_cc_pll4_config);
- /* Keep the critical clock always-on */
- qcom_branch_set_clk_en(regmap, 0xc1e4); /* cam_cc_gdsc_clk */
-
ret = qcom_cc_really_probe(&pdev->dev, &cam_cc_sm8150_desc, regmap);
pm_runtime_put(&pdev->dev);
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 05/48] clk: qcom: dispcc-sc7280: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (3 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 04/48] clk: qcom: camcc-sm8150: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 06/48] clk: qcom: dispcc-sc8280xp: " Abel Vesa
` (43 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/dispcc-sc7280.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/clk/qcom/dispcc-sc7280.c b/drivers/clk/qcom/dispcc-sc7280.c
index d11265debaf9..24a65cbb1ecf 100644
--- a/drivers/clk/qcom/dispcc-sc7280.c
+++ b/drivers/clk/qcom/dispcc-sc7280.c
@@ -860,7 +860,17 @@ static const struct regmap_config disp_cc_sc7280_regmap_config = {
.fast_io = true,
};
+static const u32 disp_cc_sc7280_critical_cbcrs[] = {
+ 0x5008, /* DISP_CC_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data disp_cc_sc7280_driver_data = {
+ .clk_cbcrs = disp_cc_sc7280_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(disp_cc_sc7280_critical_cbcrs),
+};
+
static const struct qcom_cc_desc disp_cc_sc7280_desc = {
+ .driver_data = &disp_cc_sc7280_driver_data,
.config = &disp_cc_sc7280_regmap_config,
.clks = disp_cc_sc7280_clocks,
.num_clks = ARRAY_SIZE(disp_cc_sc7280_clocks),
@@ -886,9 +896,6 @@ static int disp_cc_sc7280_probe(struct platform_device *pdev)
clk_lucid_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x5008); /* DISP_CC_XO_CLK */
-
return qcom_cc_really_probe(&pdev->dev, &disp_cc_sc7280_desc, regmap);
}
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 06/48] clk: qcom: dispcc-sc8280xp: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (4 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 05/48] clk: qcom: dispcc-sc7280: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 07/48] clk: qcom: dispcc-sm4450: " Abel Vesa
` (42 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Share the CBCR data between the two display controller descriptors. The
XO branch is now enabled by the common probe before clock registration.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/dispcc-sc8280xp.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/drivers/clk/qcom/dispcc-sc8280xp.c b/drivers/clk/qcom/dispcc-sc8280xp.c
index 96609bd5233f..96b3e5505279 100644
--- a/drivers/clk/qcom/dispcc-sc8280xp.c
+++ b/drivers/clk/qcom/dispcc-sc8280xp.c
@@ -3108,7 +3108,17 @@ static const struct regmap_config disp_cc_sc8280xp_regmap_config = {
.fast_io = true,
};
+static const u32 disp_cc_sc8280xp_critical_cbcrs[] = {
+ 0x605c, /* DISP_CC_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data disp_cc_sc8280xp_driver_data = {
+ .clk_cbcrs = disp_cc_sc8280xp_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(disp_cc_sc8280xp_critical_cbcrs),
+};
+
static const struct qcom_cc_desc disp0_cc_sc8280xp_desc = {
+ .driver_data = &disp_cc_sc8280xp_driver_data,
.config = &disp_cc_sc8280xp_regmap_config,
.clks = disp0_cc_sc8280xp_clocks,
.num_clks = ARRAY_SIZE(disp0_cc_sc8280xp_clocks),
@@ -3119,6 +3129,7 @@ static const struct qcom_cc_desc disp0_cc_sc8280xp_desc = {
};
static const struct qcom_cc_desc disp1_cc_sc8280xp_desc = {
+ .driver_data = &disp_cc_sc8280xp_driver_data,
.config = &disp_cc_sc8280xp_regmap_config,
.clks = disp1_cc_sc8280xp_clocks,
.num_clks = ARRAY_SIZE(disp1_cc_sc8280xp_clocks),
@@ -3167,13 +3178,8 @@ static int disp_cc_sc8280xp_probe(struct platform_device *pdev)
clk_lucid_pll_configure(clkr_to_alpha_clk_pll(desc->clks[DISP_CC_PLL2]), regmap, &disp_cc_pll2_config);
ret = qcom_cc_really_probe(&pdev->dev, desc, regmap);
- if (ret) {
+ if (ret)
dev_err(&pdev->dev, "Failed to register display clock controller\n");
- goto out_pm_runtime_put;
- }
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x605c); /* DISP_CC_XO_CLK */
out_pm_runtime_put:
pm_runtime_put_sync(&pdev->dev);
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 07/48] clk: qcom: dispcc-sm4450: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (5 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 06/48] clk: qcom: dispcc-sc8280xp: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 08/48] clk: qcom: dispcc-sm6115: " Abel Vesa
` (41 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/dispcc-sm4450.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/drivers/clk/qcom/dispcc-sm4450.c b/drivers/clk/qcom/dispcc-sm4450.c
index 4a4811db55dd..f39afa067cc6 100644
--- a/drivers/clk/qcom/dispcc-sm4450.c
+++ b/drivers/clk/qcom/dispcc-sm4450.c
@@ -719,7 +719,18 @@ static const struct regmap_config disp_cc_sm4450_regmap_config = {
.fast_io = true,
};
+static const u32 disp_cc_sm4450_critical_cbcrs[] = {
+ 0xe070, /* DISP_CC_SLEEP_CLK */
+ 0xe054, /* DISP_CC_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data disp_cc_sm4450_driver_data = {
+ .clk_cbcrs = disp_cc_sm4450_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(disp_cc_sm4450_critical_cbcrs),
+};
+
static const struct qcom_cc_desc disp_cc_sm4450_desc = {
+ .driver_data = &disp_cc_sm4450_driver_data,
.config = &disp_cc_sm4450_regmap_config,
.clks = disp_cc_sm4450_clocks,
.num_clks = ARRAY_SIZE(disp_cc_sm4450_clocks),
@@ -746,10 +757,6 @@ static int disp_cc_sm4450_probe(struct platform_device *pdev)
clk_lucid_evo_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
clk_lucid_evo_pll_configure(&disp_cc_pll1, regmap, &disp_cc_pll0_config);
- /* Keep some clocks always enabled */
- qcom_branch_set_clk_en(regmap, 0xe070); /* DISP_CC_SLEEP_CLK */
- qcom_branch_set_clk_en(regmap, 0xe054); /* DISP_CC_XO_CLK */
-
return qcom_cc_really_probe(&pdev->dev, &disp_cc_sm4450_desc, regmap);
}
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 08/48] clk: qcom: dispcc-sm6115: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (6 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 07/48] clk: qcom: dispcc-sm4450: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 09/48] clk: qcom: dispcc-sm7150: " Abel Vesa
` (40 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/dispcc-sm6115.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/clk/qcom/dispcc-sm6115.c b/drivers/clk/qcom/dispcc-sm6115.c
index 9a7b8ad646ed..f6f5edf07f03 100644
--- a/drivers/clk/qcom/dispcc-sm6115.c
+++ b/drivers/clk/qcom/dispcc-sm6115.c
@@ -561,7 +561,17 @@ static const struct regmap_config disp_cc_sm6115_regmap_config = {
.fast_io = true,
};
+static const u32 disp_cc_sm6115_critical_cbcrs[] = {
+ 0x604c, /* DISP_CC_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data disp_cc_sm6115_driver_data = {
+ .clk_cbcrs = disp_cc_sm6115_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(disp_cc_sm6115_critical_cbcrs),
+};
+
static const struct qcom_cc_desc disp_cc_sm6115_desc = {
+ .driver_data = &disp_cc_sm6115_driver_data,
.config = &disp_cc_sm6115_regmap_config,
.clks = disp_cc_sm6115_clocks,
.num_clks = ARRAY_SIZE(disp_cc_sm6115_clocks),
@@ -588,9 +598,6 @@ static int disp_cc_sm6115_probe(struct platform_device *pdev)
clk_alpha_pll_configure(&disp_cc_pll0, regmap, &disp_cc_pll0_config);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x604c); /* DISP_CC_XO_CLK */
-
ret = qcom_cc_really_probe(&pdev->dev, &disp_cc_sm6115_desc, regmap);
if (ret) {
dev_err(&pdev->dev, "Failed to register DISP CC clocks\n");
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 09/48] clk: qcom: dispcc-sm7150: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (7 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 08/48] clk: qcom: dispcc-sm6115: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 10/48] clk: qcom: dispcc-sm8250: " Abel Vesa
` (39 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/dispcc-sm7150.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/clk/qcom/dispcc-sm7150.c b/drivers/clk/qcom/dispcc-sm7150.c
index b9df6153e50f..da7610856e56 100644
--- a/drivers/clk/qcom/dispcc-sm7150.c
+++ b/drivers/clk/qcom/dispcc-sm7150.c
@@ -963,7 +963,17 @@ static const struct regmap_config dispcc_sm7150_regmap_config = {
.fast_io = true,
};
+static const u32 dispcc_sm7150_critical_cbcrs[] = {
+ 0x605c, /* DISPCC_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data dispcc_sm7150_driver_data = {
+ .clk_cbcrs = dispcc_sm7150_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(dispcc_sm7150_critical_cbcrs),
+};
+
static const struct qcom_cc_desc dispcc_sm7150_desc = {
+ .driver_data = &dispcc_sm7150_driver_data,
.config = &dispcc_sm7150_regmap_config,
.clks = dispcc_sm7150_clocks,
.num_clks = ARRAY_SIZE(dispcc_sm7150_clocks),
@@ -991,9 +1001,6 @@ static int dispcc_sm7150_probe(struct platform_device *pdev)
/* Enable clock gating for DSI and MDP clocks */
regmap_update_bits(regmap, 0x8000, 0x7f0, 0x7f0);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x605c); /* DISPCC_XO_CLK */
-
return qcom_cc_really_probe(&pdev->dev, &dispcc_sm7150_desc, regmap);
}
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 10/48] clk: qcom: dispcc-sm8250: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (8 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 09/48] clk: qcom: dispcc-sm7150: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 11/48] clk: qcom: dispcc-sm8550: " Abel Vesa
` (38 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/dispcc-sm8250.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/clk/qcom/dispcc-sm8250.c b/drivers/clk/qcom/dispcc-sm8250.c
index fdc07323f298..dc62eb18deed 100644
--- a/drivers/clk/qcom/dispcc-sm8250.c
+++ b/drivers/clk/qcom/dispcc-sm8250.c
@@ -1232,7 +1232,17 @@ static const struct regmap_config disp_cc_sm8250_regmap_config = {
.fast_io = true,
};
+static const u32 disp_cc_sm8250_critical_cbcrs[] = {
+ 0x605c, /* DISP_CC_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data disp_cc_sm8250_driver_data = {
+ .clk_cbcrs = disp_cc_sm8250_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(disp_cc_sm8250_critical_cbcrs),
+};
+
static const struct qcom_cc_desc disp_cc_sm8250_desc = {
+ .driver_data = &disp_cc_sm8250_driver_data,
.config = &disp_cc_sm8250_regmap_config,
.clks = disp_cc_sm8250_clocks,
.num_clks = ARRAY_SIZE(disp_cc_sm8250_clocks),
@@ -1370,9 +1380,6 @@ static int disp_cc_sm8250_probe(struct platform_device *pdev)
/* Enable clock gating for MDP clocks */
regmap_update_bits(regmap, 0x8000, 0x10, 0x10);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x605c); /* DISP_CC_XO_CLK */
-
ret = qcom_cc_really_probe(&pdev->dev, &disp_cc_sm8250_desc, regmap);
pm_runtime_put(&pdev->dev);
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 11/48] clk: qcom: dispcc-sm8550: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (9 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 10/48] clk: qcom: dispcc-sm8250: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 12/48] clk: qcom: dispcc-sm8750: " Abel Vesa
` (37 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/dispcc-sm8550.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/clk/qcom/dispcc-sm8550.c b/drivers/clk/qcom/dispcc-sm8550.c
index 418dcea20f00..030fc7ef1fbf 100644
--- a/drivers/clk/qcom/dispcc-sm8550.c
+++ b/drivers/clk/qcom/dispcc-sm8550.c
@@ -1744,7 +1744,17 @@ static const struct regmap_config disp_cc_sm8550_regmap_config = {
.fast_io = true,
};
+static const u32 disp_cc_sm8550_critical_cbcrs[] = {
+ 0xe054, /* DISP_CC_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data disp_cc_sm8550_driver_data = {
+ .clk_cbcrs = disp_cc_sm8550_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(disp_cc_sm8550_critical_cbcrs),
+};
+
static const struct qcom_cc_desc disp_cc_sm8550_desc = {
+ .driver_data = &disp_cc_sm8550_driver_data,
.config = &disp_cc_sm8550_regmap_config,
.clks = disp_cc_sm8550_clocks,
.num_clks = ARRAY_SIZE(disp_cc_sm8550_clocks),
@@ -1800,9 +1810,6 @@ static int disp_cc_sm8550_probe(struct platform_device *pdev)
/* Enable clock gating for MDP clocks */
regmap_update_bits(regmap, DISP_CC_MISC_CMD, 0x10, 0x10);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0xe054); /* DISP_CC_XO_CLK */
-
ret = qcom_cc_really_probe(&pdev->dev, &disp_cc_sm8550_desc, regmap);
if (ret)
goto err_put_rpm;
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 12/48] clk: qcom: dispcc-sm8750: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (10 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 11/48] clk: qcom: dispcc-sm8550: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 13/48] clk: qcom: dispcc-x1e80100: " Abel Vesa
` (36 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/dispcc-sm8750.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/drivers/clk/qcom/dispcc-sm8750.c b/drivers/clk/qcom/dispcc-sm8750.c
index 18e86b80e581..3205ce5c1ad9 100644
--- a/drivers/clk/qcom/dispcc-sm8750.c
+++ b/drivers/clk/qcom/dispcc-sm8750.c
@@ -1884,7 +1884,20 @@ static const struct regmap_config disp_cc_sm8750_regmap_config = {
.fast_io = true,
};
+static const u32 disp_cc_sm8750_critical_cbcrs[] = {
+ 0xe07c, /* DISP_CC_SLEEP_CLK */
+ 0xe05c, /* DISP_CC_XO_CLK */
+ 0xc00c, /* DISP_CC_MDSS_RSCC_AHB_CLK */
+ 0xc008, /* DISP_CC_MDSS_RSCC_VSYNC_CLK */
+};
+
+static const struct qcom_cc_driver_data disp_cc_sm8750_driver_data = {
+ .clk_cbcrs = disp_cc_sm8750_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(disp_cc_sm8750_critical_cbcrs),
+};
+
static const struct qcom_cc_desc disp_cc_sm8750_desc = {
+ .driver_data = &disp_cc_sm8750_driver_data,
.config = &disp_cc_sm8750_regmap_config,
.clks = disp_cc_sm8750_clocks,
.num_clks = ARRAY_SIZE(disp_cc_sm8750_clocks),
@@ -1926,12 +1939,6 @@ static int disp_cc_sm8750_probe(struct platform_device *pdev)
/* Enable clock gating for MDP clocks */
regmap_update_bits(regmap, DISP_CC_MISC_CMD, 0x10, 0x10);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0xe07c); /* DISP_CC_SLEEP_CLK */
- qcom_branch_set_clk_en(regmap, 0xe05c); /* DISP_CC_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0xc00c); /* DISP_CC_MDSS_RSCC_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0xc008); /* DISP_CC_MDSS_RSCC_VSYNC_CLK */
-
ret = qcom_cc_really_probe(&pdev->dev, &disp_cc_sm8750_desc, regmap);
if (ret)
goto err_put_rpm;
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 13/48] clk: qcom: dispcc-x1e80100: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (11 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 12/48] clk: qcom: dispcc-sm8750: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 14/48] clk: qcom: dispcc0-sa8775p: " Abel Vesa
` (35 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/dispcc-x1e80100.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/drivers/clk/qcom/dispcc-x1e80100.c b/drivers/clk/qcom/dispcc-x1e80100.c
index d3dc678a298d..aed06203a886 100644
--- a/drivers/clk/qcom/dispcc-x1e80100.c
+++ b/drivers/clk/qcom/dispcc-x1e80100.c
@@ -1637,7 +1637,18 @@ static const struct regmap_config disp_cc_x1e80100_regmap_config = {
.fast_io = true,
};
+static const u32 disp_cc_x1e80100_critical_cbcrs[] = {
+ 0xe074, /* DISP_CC_SLEEP_CLK */
+ 0xe054, /* DISP_CC_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data disp_cc_x1e80100_driver_data = {
+ .clk_cbcrs = disp_cc_x1e80100_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(disp_cc_x1e80100_critical_cbcrs),
+};
+
static const struct qcom_cc_desc disp_cc_x1e80100_desc = {
+ .driver_data = &disp_cc_x1e80100_driver_data,
.config = &disp_cc_x1e80100_regmap_config,
.clks = disp_cc_x1e80100_clocks,
.num_clks = ARRAY_SIZE(disp_cc_x1e80100_clocks),
@@ -1678,10 +1689,6 @@ static int disp_cc_x1e80100_probe(struct platform_device *pdev)
/* Enable clock gating for MDP clocks */
regmap_update_bits(regmap, DISP_CC_MISC_CMD, 0x10, 0x10);
- /* Keep clocks always enabled */
- qcom_branch_set_clk_en(regmap, 0xe074); /* DISP_CC_SLEEP_CLK */
- qcom_branch_set_clk_en(regmap, 0xe054); /* DISP_CC_XO_CLK */
-
ret = qcom_cc_really_probe(&pdev->dev, &disp_cc_x1e80100_desc, regmap);
if (ret)
goto err_put_rpm;
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 14/48] clk: qcom: dispcc0-sa8775p: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (12 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 13/48] clk: qcom: dispcc-x1e80100: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 15/48] clk: qcom: dispcc1-sa8775p: " Abel Vesa
` (34 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/dispcc0-sa8775p.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/drivers/clk/qcom/dispcc0-sa8775p.c b/drivers/clk/qcom/dispcc0-sa8775p.c
index 0e976442834a..a1861cc8343e 100644
--- a/drivers/clk/qcom/dispcc0-sa8775p.c
+++ b/drivers/clk/qcom/dispcc0-sa8775p.c
@@ -1414,7 +1414,18 @@ static const struct regmap_config disp_cc_0_sa8775p_regmap_config = {
.fast_io = true,
};
+static const u32 disp_cc_0_sa8775p_critical_cbcrs[] = {
+ 0xc070, /* MDSS_0_DISP_CC_SLEEP_CLK */
+ 0xc054, /* MDSS_0_DISP_CC_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data disp_cc_0_sa8775p_driver_data = {
+ .clk_cbcrs = disp_cc_0_sa8775p_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(disp_cc_0_sa8775p_critical_cbcrs),
+};
+
static const struct qcom_cc_desc disp_cc_0_sa8775p_desc = {
+ .driver_data = &disp_cc_0_sa8775p_driver_data,
.config = &disp_cc_0_sa8775p_regmap_config,
.clks = disp_cc_0_sa8775p_clocks,
.num_clks = ARRAY_SIZE(disp_cc_0_sa8775p_clocks),
@@ -1452,10 +1463,6 @@ static int disp_cc_0_sa8775p_probe(struct platform_device *pdev)
clk_lucid_evo_pll_configure(&mdss_0_disp_cc_pll0, regmap, &mdss_0_disp_cc_pll0_config);
clk_lucid_evo_pll_configure(&mdss_0_disp_cc_pll1, regmap, &mdss_0_disp_cc_pll1_config);
- /* Keep some clocks always enabled */
- qcom_branch_set_clk_en(regmap, 0xc070); /* MDSS_0_DISP_CC_SLEEP_CLK */
- qcom_branch_set_clk_en(regmap, 0xc054); /* MDSS_0_DISP_CC_XO_CLK */
-
ret = qcom_cc_really_probe(&pdev->dev, &disp_cc_0_sa8775p_desc, regmap);
pm_runtime_put(&pdev->dev);
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 15/48] clk: qcom: dispcc1-sa8775p: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (13 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 14/48] clk: qcom: dispcc0-sa8775p: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 16/48] clk: qcom: gcc-qcs615: Use common clock controller probe data Abel Vesa
` (33 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/dispcc1-sa8775p.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/drivers/clk/qcom/dispcc1-sa8775p.c b/drivers/clk/qcom/dispcc1-sa8775p.c
index 58008c1afc76..330d953b5e9e 100644
--- a/drivers/clk/qcom/dispcc1-sa8775p.c
+++ b/drivers/clk/qcom/dispcc1-sa8775p.c
@@ -1414,7 +1414,18 @@ static const struct regmap_config disp_cc_1_sa8775p_regmap_config = {
.fast_io = true,
};
+static const u32 disp_cc_1_sa8775p_critical_cbcrs[] = {
+ 0xc070, /* MDSS_1_DISP_CC_SLEEP_CLK */
+ 0xc054, /* MDSS_1_DISP_CC_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data disp_cc_1_sa8775p_driver_data = {
+ .clk_cbcrs = disp_cc_1_sa8775p_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(disp_cc_1_sa8775p_critical_cbcrs),
+};
+
static const struct qcom_cc_desc disp_cc_1_sa8775p_desc = {
+ .driver_data = &disp_cc_1_sa8775p_driver_data,
.config = &disp_cc_1_sa8775p_regmap_config,
.clks = disp_cc_1_sa8775p_clocks,
.num_clks = ARRAY_SIZE(disp_cc_1_sa8775p_clocks),
@@ -1452,10 +1463,6 @@ static int disp_cc_1_sa8775p_probe(struct platform_device *pdev)
clk_lucid_evo_pll_configure(&mdss_1_disp_cc_pll0, regmap, &mdss_1_disp_cc_pll0_config);
clk_lucid_evo_pll_configure(&mdss_1_disp_cc_pll1, regmap, &mdss_1_disp_cc_pll1_config);
- /* Keep some clocks always enabled */
- qcom_branch_set_clk_en(regmap, 0xc070); /* MDSS_1_DISP_CC_SLEEP_CLK */
- qcom_branch_set_clk_en(regmap, 0xc054); /* MDSS_1_DISP_CC_XO_CLK */
-
ret = qcom_cc_really_probe(&pdev->dev, &disp_cc_1_sa8775p_desc, regmap);
pm_runtime_put(&pdev->dev);
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 16/48] clk: qcom: gcc-qcs615: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (14 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 15/48] clk: qcom: dispcc1-sa8775p: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 17/48] clk: qcom: gcc-qcs8300: " Abel Vesa
` (32 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array,
describe the DFS RCGs through qcom_cc_driver_data and move the register
programming into the clk_regs_configure callback.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-qcs615.c | 57 +++++++++++++++++++++----------------------
1 file changed, 28 insertions(+), 29 deletions(-)
diff --git a/drivers/clk/qcom/gcc-qcs615.c b/drivers/clk/qcom/gcc-qcs615.c
index 8910a8badc27..e096af7d82bf 100644
--- a/drivers/clk/qcom/gcc-qcs615.c
+++ b/drivers/clk/qcom/gcc-qcs615.c
@@ -2958,7 +2958,34 @@ static const struct regmap_config gcc_qcs615_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_qcs615_critical_cbcrs[] = {
+ 0xb008, /* GCC_CAMERA_AHB_CLK */
+ 0xb044, /* GCC_CAMERA_XO_CLK */
+ 0xb00c, /* GCC_DISP_AHB_CLK */
+ 0xb048, /* GCC_DISP_XO_CLK */
+ 0x71004, /* GCC_GPU_CFG_AHB_CLK */
+ 0xb004, /* GCC_VIDEO_AHB_CLK */
+ 0xb040, /* GCC_VIDEO_XO_CLK */
+ 0x48004, /* GCC_CPUSS_GNOC_CLK */
+};
+
+static void gcc_qcs615_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* Disable the GPLL0 active input to MM blocks and GPU via MISC registers. */
+ regmap_update_bits(regmap, 0x0b084, BIT(0), BIT(0));
+ regmap_update_bits(regmap, 0x9b000, BIT(0), BIT(0));
+}
+
+static const struct qcom_cc_driver_data gcc_qcs615_driver_data = {
+ .clk_cbcrs = gcc_qcs615_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_qcs615_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+ .clk_regs_configure = gcc_qcs615_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_qcs615_desc = {
+ .driver_data = &gcc_qcs615_driver_data,
.config = &gcc_qcs615_regmap_config,
.clk_hws = gcc_qcs615_hws,
.num_clk_hws = ARRAY_SIZE(gcc_qcs615_hws),
@@ -2978,35 +3005,7 @@ MODULE_DEVICE_TABLE(of, gcc_qcs615_match_table);
static int gcc_qcs615_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_qcs615_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
- /*
- * Disable the GPLL0 active input to MM blocks and GPU
- * via MISC registers.
- */
- regmap_update_bits(regmap, 0x0b084, BIT(0), BIT(0));
- regmap_update_bits(regmap, 0x9b000, BIT(0), BIT(0));
-
- /* Keep some clocks always enabled */
- qcom_branch_set_clk_en(regmap, 0xb008); /* GCC_CAMERA_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0xb044); /* GCC_CAMERA_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0xb00c); /* GCC_DISP_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0xb048); /* GCC_DISP_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x71004); /* GCC_GPU_CFG_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0xb004); /* GCC_VIDEO_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0xb040); /* GCC_VIDEO_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x48004); /* GCC_CPUSS_GNOC_CLK */
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
- ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_qcs615_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_qcs615_desc);
}
static struct platform_driver gcc_qcs615_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 17/48] clk: qcom: gcc-qcs8300: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (15 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 16/48] clk: qcom: gcc-qcs615: Use common clock controller probe data Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 18/48] clk: qcom: gcc-sa8775p: " Abel Vesa
` (31 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array,
describe the DFS RCGs through qcom_cc_driver_data and move the register
programming into the clk_regs_configure callback.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-qcs8300.c | 51 +++++++++++++++++++++---------------------
1 file changed, 26 insertions(+), 25 deletions(-)
diff --git a/drivers/clk/qcom/gcc-qcs8300.c b/drivers/clk/qcom/gcc-qcs8300.c
index 57014c4f8c6d..b95ad566cde3 100644
--- a/drivers/clk/qcom/gcc-qcs8300.c
+++ b/drivers/clk/qcom/gcc-qcs8300.c
@@ -3673,7 +3673,32 @@ static const struct regmap_config gcc_qcs8300_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_qcs8300_critical_cbcrs[] = {
+ 0x32004, /* GCC_CAMERA_AHB_CLK */
+ 0x32020, /* GCC_CAMERA_XO_CLK */
+ 0x33004, /* GCC_DISP_AHB_CLK */
+ 0x33018, /* GCC_DISP_XO_CLK */
+ 0x7d004, /* GCC_GPU_CFG_AHB_CLK */
+ 0x34004, /* GCC_VIDEO_AHB_CLK */
+ 0x34024, /* GCC_VIDEO_XO_CLK */
+};
+
+static void gcc_qcs8300_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
+ qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
+}
+
+static const struct qcom_cc_driver_data gcc_qcs8300_driver_data = {
+ .clk_cbcrs = gcc_qcs8300_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_qcs8300_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+ .clk_regs_configure = gcc_qcs8300_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_qcs8300_desc = {
+ .driver_data = &gcc_qcs8300_driver_data,
.config = &gcc_qcs8300_regmap_config,
.clks = gcc_qcs8300_clocks,
.num_clks = ARRAY_SIZE(gcc_qcs8300_clocks),
@@ -3691,31 +3716,7 @@ MODULE_DEVICE_TABLE(of, gcc_qcs8300_match_table);
static int gcc_qcs8300_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_qcs8300_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
- ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
- /* Keep some clocks always enabled */
- qcom_branch_set_clk_en(regmap, 0x32004); /* GCC_CAMERA_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x32020); /* GCC_CAMERA_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x33004); /* GCC_DISP_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x33018); /* GCC_DISP_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x7d004); /* GCC_GPU_CFG_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x34004); /* GCC_VIDEO_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x34024); /* GCC_VIDEO_XO_CLK */
-
- /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
- qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_qcs8300_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_qcs8300_desc);
}
static struct platform_driver gcc_qcs8300_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 18/48] clk: qcom: gcc-sa8775p: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (16 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 17/48] clk: qcom: gcc-qcs8300: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 19/48] clk: qcom: gcc-sar2130p: " Abel Vesa
` (30 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array,
describe the DFS RCGs through qcom_cc_driver_data and move the register
programming into the clk_regs_configure callback.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sa8775p.c | 55 +++++++++++++++++++++---------------------
1 file changed, 28 insertions(+), 27 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sa8775p.c b/drivers/clk/qcom/gcc-sa8775p.c
index dca316decd0e..fa31710ef557 100644
--- a/drivers/clk/qcom/gcc-sa8775p.c
+++ b/drivers/clk/qcom/gcc-sa8775p.c
@@ -4644,7 +4644,34 @@ static const struct regmap_config gcc_sa8775p_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_sa8775p_critical_cbcrs[] = {
+ 0x32004, /* GCC_CAMERA_AHB_CLK */
+ 0x32020, /* GCC_CAMERA_XO_CLK */
+ 0xc7004, /* GCC_DISP1_AHB_CLK */
+ 0xc7018, /* GCC_DISP1_XO_CLK */
+ 0x33004, /* GCC_DISP_AHB_CLK */
+ 0x33018, /* GCC_DISP_XO_CLK */
+ 0x7d004, /* GCC_GPU_CFG_AHB_CLK */
+ 0x34004, /* GCC_VIDEO_AHB_CLK */
+ 0x34024, /* GCC_VIDEO_XO_CLK */
+};
+
+static void gcc_sa8775p_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
+ qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
+}
+
+static const struct qcom_cc_driver_data gcc_sa8775p_driver_data = {
+ .clk_cbcrs = gcc_sa8775p_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sa8775p_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+ .clk_regs_configure = gcc_sa8775p_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_sa8775p_desc = {
+ .driver_data = &gcc_sa8775p_driver_data,
.config = &gcc_sa8775p_regmap_config,
.clks = gcc_sa8775p_clocks,
.num_clks = ARRAY_SIZE(gcc_sa8775p_clocks),
@@ -4662,33 +4689,7 @@ MODULE_DEVICE_TABLE(of, gcc_sa8775p_match_table);
static int gcc_sa8775p_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_sa8775p_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
- ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x32004); /* GCC_CAMERA_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x32020); /* GCC_CAMERA_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0xc7004); /* GCC_DISP1_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0xc7018); /* GCC_DISP1_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x33004); /* GCC_DISP_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x33018); /* GCC_DISP_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x7d004); /* GCC_GPU_CFG_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x34004); /* GCC_VIDEO_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x34024); /* GCC_VIDEO_XO_CLK */
-
- /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
- qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sa8775p_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sa8775p_desc);
}
static struct platform_driver gcc_sa8775p_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 19/48] clk: qcom: gcc-sar2130p: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (17 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 18/48] clk: qcom: gcc-sa8775p: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 20/48] clk: qcom: gcc-sc7180: " Abel Vesa
` (29 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array,
describe the DFS RCGs through qcom_cc_driver_data and move the register
programming into the clk_regs_configure callback.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sar2130p.c | 45 +++++++++++++++++++++--------------------
1 file changed, 23 insertions(+), 22 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sar2130p.c b/drivers/clk/qcom/gcc-sar2130p.c
index 7456001cf25e..f40d10274c02 100644
--- a/drivers/clk/qcom/gcc-sar2130p.c
+++ b/drivers/clk/qcom/gcc-sar2130p.c
@@ -2300,7 +2300,29 @@ static const struct regmap_config gcc_sar2130p_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_sar2130p_critical_cbcrs[] = {
+ 0x37004, /* GCC_DISP_AHB_CLK */
+ 0x42004, /* GCC_VIDEO_AHB_CLK */
+ 0x42028, /* GCC_VIDEO_XO_CLK */
+ 0x9b004, /* GCC_GPU_CFG_AHB_CLK */
+};
+
+static void gcc_sar2130p_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* Clear GDSC_SLEEP_ENA_VOTE to stop votes being auto-removed in sleep. */
+ regmap_write(regmap, 0x62204, 0x0);
+}
+
+static const struct qcom_cc_driver_data gcc_sar2130p_driver_data = {
+ .clk_cbcrs = gcc_sar2130p_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sar2130p_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+ .clk_regs_configure = gcc_sar2130p_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_sar2130p_desc = {
+ .driver_data = &gcc_sar2130p_driver_data,
.config = &gcc_sar2130p_regmap_config,
.clks = gcc_sar2130p_clocks,
.num_clks = ARRAY_SIZE(gcc_sar2130p_clocks),
@@ -2318,28 +2340,7 @@ MODULE_DEVICE_TABLE(of, gcc_sar2130p_match_table);
static int gcc_sar2130p_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_sar2130p_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
- ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x37004); /* GCC_DISP_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x42004); /* GCC_VIDEO_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x42028); /* GCC_VIDEO_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x9b004); /* GCC_GPU_CFG_AHB_CLK */
-
- /* Clear GDSC_SLEEP_ENA_VOTE to stop votes being auto-removed in sleep. */
- regmap_write(regmap, 0x62204, 0x0);
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sar2130p_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sar2130p_desc);
}
static struct platform_driver gcc_sar2130p_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 20/48] clk: qcom: gcc-sc7180: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (18 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 19/48] clk: qcom: gcc-sar2130p: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 21/48] clk: qcom: gcc-sc7280: " Abel Vesa
` (28 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array,
describe the DFS RCGs through qcom_cc_driver_data and move the register
programming into the clk_regs_configure callback.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sc7180.c | 60 +++++++++++++++++++++----------------------
1 file changed, 29 insertions(+), 31 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sc7180.c b/drivers/clk/qcom/gcc-sc7180.c
index 4a49ad7a9e5b..6d9ee31044a5 100644
--- a/drivers/clk/qcom/gcc-sc7180.c
+++ b/drivers/clk/qcom/gcc-sc7180.c
@@ -2408,7 +2408,35 @@ static const struct regmap_config gcc_sc7180_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_sc7180_critical_cbcrs[] = {
+ 0x48004, /* GCC_CPUSS_GNOC_CLK */
+ 0x0b004, /* GCC_VIDEO_AHB_CLK */
+ 0x0b008, /* GCC_CAMERA_AHB_CLK */
+ 0x0b00c, /* GCC_DISP_AHB_CLK */
+ 0x0b02c, /* GCC_CAMERA_XO_CLK */
+ 0x0b028, /* GCC_VIDEO_XO_CLK */
+ 0x0b030, /* GCC_DISP_XO_CLK */
+ 0x71004, /* GCC_GPU_CFG_AHB_CLK */
+};
+
+static void gcc_sc7180_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* Disable the GPLL0 active input to MM blocks, NPU and GPU via MISC registers. */
+ regmap_update_bits(regmap, 0x09ffc, 0x3, 0x3);
+ regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
+ regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
+}
+
+static const struct qcom_cc_driver_data gcc_sc7180_driver_data = {
+ .clk_cbcrs = gcc_sc7180_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sc7180_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+ .clk_regs_configure = gcc_sc7180_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_sc7180_desc = {
+ .driver_data = &gcc_sc7180_driver_data,
.config = &gcc_sc7180_regmap_config,
.clk_hws = gcc_sc7180_hws,
.num_clk_hws = ARRAY_SIZE(gcc_sc7180_hws),
@@ -2428,37 +2456,7 @@ MODULE_DEVICE_TABLE(of, gcc_sc7180_match_table);
static int gcc_sc7180_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_sc7180_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- /*
- * Disable the GPLL0 active input to MM blocks, NPU
- * and GPU via MISC registers.
- */
- regmap_update_bits(regmap, 0x09ffc, 0x3, 0x3);
- regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
- regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x48004); /* GCC_CPUSS_GNOC_CLK */
- qcom_branch_set_clk_en(regmap, 0x0b004); /* GCC_VIDEO_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x0b008); /* GCC_CAMERA_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x0b00c); /* GCC_DISP_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x0b02c); /* GCC_CAMERA_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x0b028); /* GCC_VIDEO_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x0b030); /* GCC_DISP_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x71004); /* GCC_GPU_CFG_AHB_CLK */
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
- ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sc7180_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sc7180_desc);
}
static struct platform_driver gcc_sc7180_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 21/48] clk: qcom: gcc-sc7280: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (19 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 20/48] clk: qcom: gcc-sc7180: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 22/48] clk: qcom: gcc-sc8280xp: " Abel Vesa
` (27 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array,
describe the DFS RCGs through qcom_cc_driver_data and move the register
programming into the clk_regs_configure callback.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sc7280.c | 54 ++++++++++++++++++++++---------------------
1 file changed, 28 insertions(+), 26 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sc7280.c b/drivers/clk/qcom/gcc-sc7280.c
index e1fe64463de6..1c9f8d8b99d4 100644
--- a/drivers/clk/qcom/gcc-sc7280.c
+++ b/drivers/clk/qcom/gcc-sc7280.c
@@ -3438,7 +3438,34 @@ static const struct regmap_config gcc_sc7280_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_sc7280_critical_cbcrs[] = {
+ 0x26004, /* GCC_CAMERA_AHB_CLK */
+ 0x26028, /* GCC_CAMERA_XO_CLK */
+ 0x27004, /* GCC_DISP_AHB_CLK */
+ 0x2701c, /* GCC_DISP_XO_CLK */
+ 0x28004, /* GCC_VIDEO_AHB_CLK */
+ 0x28014, /* GCC_VIDEO_XO_CLK */
+ 0x71004, /* GCC_GPU_CFG_AHB_CLK */
+};
+
+static void gcc_sc7280_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ regmap_update_bits(regmap, 0x7100C, BIT(13), BIT(13));
+
+ /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
+ qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
+}
+
+static const struct qcom_cc_driver_data gcc_sc7280_driver_data = {
+ .clk_cbcrs = gcc_sc7280_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sc7280_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+ .clk_regs_configure = gcc_sc7280_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_sc7280_desc = {
+ .driver_data = &gcc_sc7280_driver_data,
.config = &gcc_sc7280_regmap_config,
.clks = gcc_sc7280_clocks,
.num_clks = ARRAY_SIZE(gcc_sc7280_clocks),
@@ -3456,32 +3483,7 @@ MODULE_DEVICE_TABLE(of, gcc_sc7280_match_table);
static int gcc_sc7280_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_sc7280_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x26004);/* GCC_CAMERA_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x26028);/* GCC_CAMERA_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x27004);/* GCC_DISP_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x2701c);/* GCC_DISP_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x28004);/* GCC_VIDEO_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x28014);/* GCC_VIDEO_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x71004);/* GCC_GPU_CFG_AHB_CLK */
- regmap_update_bits(regmap, 0x7100C, BIT(13), BIT(13));
-
- /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
- qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
- ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sc7280_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sc7280_desc);
}
static struct platform_driver gcc_sc7280_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 22/48] clk: qcom: gcc-sc8280xp: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (20 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 21/48] clk: qcom: gcc-sc7280: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 23/48] clk: qcom: gcc-sdx55: " Abel Vesa
` (26 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array
and describe the DFS RCGs through qcom_cc_driver_data.
Delegate always-on branch and DFS initialization to the common probe
path while retaining the device-specific setup in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sc8280xp.c | 35 ++++++++++++++++++++---------------
1 file changed, 20 insertions(+), 15 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sc8280xp.c b/drivers/clk/qcom/gcc-sc8280xp.c
index 81533e71e7ef..918c70648d57 100644
--- a/drivers/clk/qcom/gcc-sc8280xp.c
+++ b/drivers/clk/qcom/gcc-sc8280xp.c
@@ -7509,7 +7509,27 @@ static const struct regmap_config gcc_sc8280xp_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_sc8280xp_critical_cbcrs[] = {
+ 0x26004, /* GCC_CAMERA_AHB_CLK */
+ 0x26020, /* GCC_CAMERA_XO_CLK */
+ 0x27004, /* GCC_DISP_AHB_CLK */
+ 0x27028, /* GCC_DISP_XO_CLK */
+ 0x71004, /* GCC_GPU_CFG_AHB_CLK */
+ 0x28004, /* GCC_VIDEO_AHB_CLK */
+ 0x28028, /* GCC_VIDEO_XO_CLK */
+ 0xbb004, /* GCC_DISP1_AHB_CLK */
+ 0xbb028, /* GCC_DISP1_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data gcc_sc8280xp_driver_data = {
+ .clk_cbcrs = gcc_sc8280xp_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sc8280xp_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+};
+
static const struct qcom_cc_desc gcc_sc8280xp_desc = {
+ .driver_data = &gcc_sc8280xp_driver_data,
.config = &gcc_sc8280xp_regmap_config,
.clks = gcc_sc8280xp_clocks,
.num_clks = ARRAY_SIZE(gcc_sc8280xp_clocks),
@@ -7538,21 +7558,6 @@ static int gcc_sc8280xp_probe(struct platform_device *pdev)
goto err_put_rpm;
}
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x26004); /* GCC_CAMERA_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x26020); /* GCC_CAMERA_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x27004); /* GCC_DISP_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x27028); /* GCC_DISP_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x71004); /* GCC_GPU_CFG_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x28004); /* GCC_VIDEO_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x28028); /* GCC_VIDEO_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0xbb004); /* GCC_DISP1_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0xbb028); /* GCC_DISP1_XO_CLK */
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- goto err_put_rpm;
-
ret = qcom_cc_really_probe(&pdev->dev, &gcc_sc8280xp_desc, regmap);
if (ret)
goto err_put_rpm;
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 23/48] clk: qcom: gcc-sdx55: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (21 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 22/48] clk: qcom: gcc-sc8280xp: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 24/48] clk: qcom: gcc-sdx65: " Abel Vesa
` (25 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array
and move the register programming into the clk_regs_configure callback.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sdx55.c | 31 +++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sdx55.c b/drivers/clk/qcom/gcc-sdx55.c
index 13d6c9e8183b..8d8547c12b19 100644
--- a/drivers/clk/qcom/gcc-sdx55.c
+++ b/drivers/clk/qcom/gcc-sdx55.c
@@ -1587,7 +1587,25 @@ static const struct regmap_config gcc_sdx55_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_sdx55_critical_cbcrs[] = {
+ 0x6d008, /* GCC_SYS_NOC_CPUSS_AHB_CLK */
+};
+
+static void gcc_sdx55_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* Keep some clocks always-on */
+ regmap_update_bits(regmap, 0x6d008, BIT(21), BIT(21)); /* GCC_CPUSS_AHB_CLK */
+ regmap_update_bits(regmap, 0x6d008, BIT(22), BIT(22)); /* GCC_CPUSS_GNOC_CLK */
+}
+
+static const struct qcom_cc_driver_data gcc_sdx55_driver_data = {
+ .clk_cbcrs = gcc_sdx55_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sdx55_critical_cbcrs),
+ .clk_regs_configure = gcc_sdx55_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_sdx55_desc = {
+ .driver_data = &gcc_sdx55_driver_data,
.config = &gcc_sdx55_regmap_config,
.clks = gcc_sdx55_clocks,
.num_clks = ARRAY_SIZE(gcc_sdx55_clocks),
@@ -1605,18 +1623,7 @@ MODULE_DEVICE_TABLE(of, gcc_sdx55_match_table);
static int gcc_sdx55_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
-
- regmap = qcom_cc_map(pdev, &gcc_sdx55_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x6d008); /* GCC_SYS_NOC_CPUSS_AHB_CLK */
- regmap_update_bits(regmap, 0x6d008, BIT(21), BIT(21)); /* GCC_CPUSS_AHB_CLK */
- regmap_update_bits(regmap, 0x6d008, BIT(22), BIT(22)); /* GCC_CPUSS_GNOC_CLK */
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sdx55_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sdx55_desc);
}
static struct platform_driver gcc_sdx55_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 24/48] clk: qcom: gcc-sdx65: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (22 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 23/48] clk: qcom: gcc-sdx55: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 25/48] clk: qcom: gcc-sdx75: " Abel Vesa
` (24 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array
and move the register programming into the clk_regs_configure callback.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sdx65.c | 31 +++++++++++++++++++------------
1 file changed, 19 insertions(+), 12 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sdx65.c b/drivers/clk/qcom/gcc-sdx65.c
index 8cae11a0b2c0..b1ab265ba2c1 100644
--- a/drivers/clk/qcom/gcc-sdx65.c
+++ b/drivers/clk/qcom/gcc-sdx65.c
@@ -1551,7 +1551,25 @@ static const struct regmap_config gcc_sdx65_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_sdx65_critical_cbcrs[] = {
+ 0x6d008, /* GCC_SYS_NOC_CPUSS_AHB_CLK */
+};
+
+static void gcc_sdx65_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* Keep some clocks always-on */
+ regmap_update_bits(regmap, 0x6d008, BIT(21), BIT(21)); /* GCC_CPUSS_AHB_CLK */
+ regmap_update_bits(regmap, 0x6d008, BIT(22), BIT(22)); /* GCC_CPUSS_GNOC_CLK */
+}
+
+static const struct qcom_cc_driver_data gcc_sdx65_driver_data = {
+ .clk_cbcrs = gcc_sdx65_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sdx65_critical_cbcrs),
+ .clk_regs_configure = gcc_sdx65_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_sdx65_desc = {
+ .driver_data = &gcc_sdx65_driver_data,
.config = &gcc_sdx65_regmap_config,
.clks = gcc_sdx65_clocks,
.num_clks = ARRAY_SIZE(gcc_sdx65_clocks),
@@ -1569,18 +1587,7 @@ MODULE_DEVICE_TABLE(of, gcc_sdx65_match_table);
static int gcc_sdx65_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
-
- regmap = qcom_cc_map(pdev, &gcc_sdx65_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x6d008); /* GCC_SYS_NOC_CPUSS_AHB_CLK */
- regmap_update_bits(regmap, 0x6d008, BIT(21), BIT(21)); /* GCC_CPUSS_AHB_CLK */
- regmap_update_bits(regmap, 0x6d008, BIT(22), BIT(22)); /* GCC_CPUSS_GNOC_CLK */
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sdx65_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sdx65_desc);
}
static struct platform_driver gcc_sdx65_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 25/48] clk: qcom: gcc-sdx75: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (23 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 24/48] clk: qcom: gcc-sdx65: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 26/48] clk: qcom: gcc-sm4450: " Abel Vesa
` (23 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array
and describe the DFS RCGs through qcom_cc_driver_data.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sdx75.c | 31 ++++++++++++++-----------------
1 file changed, 14 insertions(+), 17 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sdx75.c b/drivers/clk/qcom/gcc-sdx75.c
index ce9f19655d6d..035647627f91 100644
--- a/drivers/clk/qcom/gcc-sdx75.c
+++ b/drivers/clk/qcom/gcc-sdx75.c
@@ -2905,7 +2905,20 @@ static const struct regmap_config gcc_sdx75_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_sdx75_critical_cbcrs[] = {
+ 0x3e004, /* GCC_AHB_PCIE_LINK_CLK */
+ 0x3e008, /* GCC_XO_PCIE_LINK_CLK */
+};
+
+static const struct qcom_cc_driver_data gcc_sdx75_driver_data = {
+ .clk_cbcrs = gcc_sdx75_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sdx75_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+};
+
static const struct qcom_cc_desc gcc_sdx75_desc = {
+ .driver_data = &gcc_sdx75_driver_data,
.config = &gcc_sdx75_regmap_config,
.clks = gcc_sdx75_clocks,
.num_clks = ARRAY_SIZE(gcc_sdx75_clocks),
@@ -2923,23 +2936,7 @@ MODULE_DEVICE_TABLE(of, gcc_sdx75_match_table);
static int gcc_sdx75_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_sdx75_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
- ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x3e004); /* GCC_AHB_PCIE_LINK_CLK */
- qcom_branch_set_clk_en(regmap, 0x3e008); /* GCC_XO_PCIE_LINK_CLK */
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sdx75_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sdx75_desc);
}
static struct platform_driver gcc_sdx75_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 26/48] clk: qcom: gcc-sm4450: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (24 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 25/48] clk: qcom: gcc-sdx75: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 27/48] clk: qcom: gcc-sm6375: " Abel Vesa
` (22 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches, DFS RCGs and GPLL3 through
qcom_cc_driver_data. Associate GPLL3 with its existing configuration so
the common PLL setup invokes the Lucid EVO configuration helper.
Move the UFS PHY ICE core FORCE_MEM_CORE_ON setting and the video branch
register update into the clk_regs_configure callback. This moves the UFS
setting after the always-on branch enables. Those branches serve the
camera, display, GPU and video blocks, not the UFS PHY ICE core clock.
The UFS setting is still applied before GDSC and CCF clock registration,
while GPLL3 configuration still precedes the branch enables.
Use qcom_cc_probe() for the resulting common initialization sequence
instead of open-coding it in gcc_sm4450_probe().
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sm4450.c | 64 ++++++++++++++++++++++++-------------------
1 file changed, 36 insertions(+), 28 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sm4450.c b/drivers/clk/qcom/gcc-sm4450.c
index 4fb4d43e8582..7a5274687890 100644
--- a/drivers/clk/qcom/gcc-sm4450.c
+++ b/drivers/clk/qcom/gcc-sm4450.c
@@ -140,6 +140,7 @@ static const struct alpha_pll_config gcc_gpll3_config = {
};
static struct clk_alpha_pll gcc_gpll3 = {
+ .config = &gcc_gpll3_config,
.offset = 0x3000,
.vco_table = lucid_evo_vco,
.num_vco = ARRAY_SIZE(lucid_evo_vco),
@@ -2815,7 +2816,41 @@ static const struct regmap_config gcc_sm4450_regmap_config = {
.fast_io = true,
};
+static struct clk_alpha_pll *gcc_sm4450_plls[] = {
+ &gcc_gpll3,
+};
+
+static const u32 gcc_sm4450_critical_cbcrs[] = {
+ 0x36004, /* GCC_CAMERA_AHB_CLK */
+ 0x36018, /* GCC_CAMERA_SLEEP_CLK */
+ 0x3601c, /* GCC_CAMERA_XO_CLK */
+ 0x37004, /* GCC_DISP_AHB_CLK */
+ 0x37014, /* GCC_DISP_XO_CLK */
+ 0x81004, /* GCC_GPU_CFG_AHB_CLK */
+ 0x42004, /* GCC_VIDEO_AHB_CLK */
+ 0x42018, /* GCC_VIDEO_XO_CLK */
+};
+
+static void gcc_sm4450_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* FORCE_MEM_CORE_ON for the UFS PHY ICE core clock */
+ qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
+
+ regmap_update_bits(regmap, 0x4201c, BIT(21), BIT(21));
+}
+
+static const struct qcom_cc_driver_data gcc_sm4450_driver_data = {
+ .alpha_plls = gcc_sm4450_plls,
+ .num_alpha_plls = ARRAY_SIZE(gcc_sm4450_plls),
+ .clk_cbcrs = gcc_sm4450_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sm4450_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+ .clk_regs_configure = gcc_sm4450_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_sm4450_desc = {
+ .driver_data = &gcc_sm4450_driver_data,
.config = &gcc_sm4450_regmap_config,
.clks = gcc_sm4450_clocks,
.num_clks = ARRAY_SIZE(gcc_sm4450_clocks),
@@ -2833,34 +2868,7 @@ MODULE_DEVICE_TABLE(of, gcc_sm4450_match_table);
static int gcc_sm4450_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_sm4450_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- clk_lucid_evo_pll_configure(&gcc_gpll3, regmap, &gcc_gpll3_config);
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
- ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
- qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x36004); /* GCC_CAMERA_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x36018); /* GCC_CAMERA_SLEEP_CLK */
- qcom_branch_set_clk_en(regmap, 0x3601c); /* GCC_CAMERA_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x37004); /* GCC_DISP_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x37014); /* GCC_DISP_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x81004); /* GCC_GPU_CFG_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x42004); /* GCC_VIDEO_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x42018); /* GCC_VIDEO_XO_CLK */
-
- regmap_update_bits(regmap, 0x4201c, BIT(21), BIT(21));
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sm4450_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sm4450_desc);
}
static struct platform_driver gcc_sm4450_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 27/48] clk: qcom: gcc-sm6375: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (25 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 26/48] clk: qcom: gcc-sm4450: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-25 16:43 ` Bjorn Andersson
2026-09-24 12:06 ` [PATCH v2 28/48] clk: qcom: gcc-sm7150: " Abel Vesa
` (21 subsequent siblings)
48 siblings, 1 reply; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array
and describe the DFS RCGs through qcom_cc_driver_data.
Move the configuration of GPLL10, GPLL11, GPLL8 and GPLL9 into the
clk_regs_configure callback. This preserves the existing ordering of
enabling the always-on branches before configuring these four PLLs.
Using the alpha_plls array instead would configure the PLLs before the
CBCR enables in the common probe path.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sm6375.c | 46 ++++++++++++++++++++++---------------------
1 file changed, 24 insertions(+), 22 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sm6375.c b/drivers/clk/qcom/gcc-sm6375.c
index 9c2acf8dc4b7..c67d4293c76b 100644
--- a/drivers/clk/qcom/gcc-sm6375.c
+++ b/drivers/clk/qcom/gcc-sm6375.c
@@ -3853,7 +3853,30 @@ static const struct regmap_config gcc_sm6375_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_sm6375_critical_cbcrs[] = {
+ 0x17028, /* GCC_CAMERA_XO_CLK */
+ 0x2b004, /* GCC_CPUSS_GNOC_CLK */
+ 0x1702c, /* GCC_DISP_XO_CLK */
+};
+
+static struct clk_alpha_pll *gcc_sm6375_plls[] = {
+ &gpll10,
+ &gpll11,
+ &gpll8,
+ &gpll9,
+};
+
+static const struct qcom_cc_driver_data gcc_sm6375_driver_data = {
+ .alpha_plls = gcc_sm6375_plls,
+ .num_alpha_plls = ARRAY_SIZE(gcc_sm6375_plls),
+ .clk_cbcrs = gcc_sm6375_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sm6375_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+};
+
static const struct qcom_cc_desc gcc_sm6375_desc = {
+ .driver_data = &gcc_sm6375_driver_data,
.config = &gcc_sm6375_regmap_config,
.clks = gcc_sm6375_clocks,
.num_clks = ARRAY_SIZE(gcc_sm6375_clocks),
@@ -3871,28 +3894,7 @@ MODULE_DEVICE_TABLE(of, gcc_sm6375_match_table);
static int gcc_sm6375_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_sm6375_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x17028); /* GCC_CAMERA_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x2b004); /* GCC_CPUSS_GNOC_CLK */
- qcom_branch_set_clk_en(regmap, 0x1702c); /* GCC_DISP_XO_CLK */
-
- clk_lucid_pll_configure(&gpll10, regmap, &gpll10_config);
- clk_lucid_pll_configure(&gpll11, regmap, &gpll11_config);
- clk_lucid_pll_configure(&gpll8, regmap, &gpll8_config);
- clk_zonda_pll_configure(&gpll9, regmap, &gpll9_config);
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sm6375_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sm6375_desc);
}
static struct platform_driver gcc_sm6375_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 28/48] clk: qcom: gcc-sm7150: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (26 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 27/48] clk: qcom: gcc-sm6375: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 29/48] clk: qcom: gcc-sm8250: " Abel Vesa
` (20 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array,
describe the DFS RCGs through qcom_cc_driver_data and move the register
programming into the clk_regs_configure callback.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sm7150.c | 60 +++++++++++++++++++++----------------------
1 file changed, 29 insertions(+), 31 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sm7150.c b/drivers/clk/qcom/gcc-sm7150.c
index 2ab3e92eb3c7..169aef61e749 100644
--- a/drivers/clk/qcom/gcc-sm7150.c
+++ b/drivers/clk/qcom/gcc-sm7150.c
@@ -2966,7 +2966,35 @@ static const struct regmap_config gcc_sm7150_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_sm7150_critical_cbcrs[] = {
+ 0x48004, /* GCC_CPUSS_GNOC_CLK */
+ 0x0b004, /* GCC_VIDEO_AHB_CLK */
+ 0x0b008, /* GCC_CAMERA_AHB_CLK */
+ 0x0b00c, /* GCC_DISP_AHB_CLK */
+ 0x0b02c, /* GCC_CAMERA_XO_CLK */
+ 0x0b028, /* GCC_VIDEO_XO_CLK */
+ 0x0b030, /* GCC_DISP_XO_CLK */
+ 0x71004, /* GCC_GPU_CFG_AHB_CLK */
+};
+
+static void gcc_sm7150_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* Disable the GPLL0 active input to MM blocks, NPU and GPU via MISC registers. */
+ regmap_update_bits(regmap, 0x09ffc, 0x3, 0x3);
+ regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
+ regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
+}
+
+static const struct qcom_cc_driver_data gcc_sm7150_driver_data = {
+ .clk_cbcrs = gcc_sm7150_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sm7150_critical_cbcrs),
+ .dfs_rcgs = gcc_sm7150_dfs_desc,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_sm7150_dfs_desc),
+ .clk_regs_configure = gcc_sm7150_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_sm7150_desc = {
+ .driver_data = &gcc_sm7150_driver_data,
.config = &gcc_sm7150_regmap_config,
.clk_hws = gcc_sm7150_hws,
.num_clk_hws = ARRAY_SIZE(gcc_sm7150_hws),
@@ -2986,37 +3014,7 @@ MODULE_DEVICE_TABLE(of, gcc_sm7150_match_table);
static int gcc_sm7150_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_sm7150_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- /*
- * Disable the GPLL0 active input to MM blocks, NPU
- * and GPU via MISC registers.
- */
- regmap_update_bits(regmap, 0x09ffc, 0x3, 0x3);
- regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
- regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x48004); /* GCC_CPUSS_GNOC_CLK */
- qcom_branch_set_clk_en(regmap, 0x0b004); /* GCC_VIDEO_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x0b008); /* GCC_CAMERA_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x0b00c); /* GCC_DISP_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x0b02c); /* GCC_CAMERA_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x0b028); /* GCC_VIDEO_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x0b030); /* GCC_DISP_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x71004); /* GCC_GPU_CFG_AHB_CLK */
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_sm7150_dfs_desc,
- ARRAY_SIZE(gcc_sm7150_dfs_desc));
- if (ret)
- return ret;
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sm7150_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sm7150_desc);
}
static struct platform_driver gcc_sm7150_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 29/48] clk: qcom: gcc-sm8250: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (27 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 28/48] clk: qcom: gcc-sm7150: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 30/48] clk: qcom: gcc-sm8350: " Abel Vesa
` (19 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array,
describe the DFS RCGs through qcom_cc_driver_data and move the register
programming into the clk_regs_configure callback.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sm8250.c | 57 ++++++++++++++++++++++---------------------
1 file changed, 29 insertions(+), 28 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sm8250.c b/drivers/clk/qcom/gcc-sm8250.c
index 93c1beacee01..7ed7876577d1 100644
--- a/drivers/clk/qcom/gcc-sm8250.c
+++ b/drivers/clk/qcom/gcc-sm8250.c
@@ -3603,6 +3603,15 @@ static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src),
};
+static const u32 gcc_sm8250_critical_cbcrs[] = {
+ 0x0b004, /* GCC_VIDEO_AHB_CLK */
+ 0x0b008, /* GCC_CAMERA_AHB_CLK */
+ 0x0b00c, /* GCC_DISP_AHB_CLK */
+ 0x4818c, /* GCC_CPUSS_DVM_BUS_CLK */
+ 0x71004, /* GCC_GPU_CFG_AHB_CLK */
+ 0x52000, /* GCC_SYS_NOC_CPUSS_AHB_CLK */
+};
+
static const struct regmap_config gcc_sm8250_regmap_config = {
.reg_bits = 32,
.reg_stride = 4,
@@ -3611,6 +3620,24 @@ static const struct regmap_config gcc_sm8250_regmap_config = {
.fast_io = true,
};
+static void gcc_sm8250_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /*
+ * Disable the GPLL0 active input to NPU and GPU
+ * via MISC registers.
+ */
+ regmap_set_bits(regmap, 0x4d110, 0x3);
+ regmap_set_bits(regmap, 0x71028, 0x3);
+}
+
+static const struct qcom_cc_driver_data gcc_sm8250_driver_data = {
+ .clk_cbcrs = gcc_sm8250_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sm8250_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+ .clk_regs_configure = gcc_sm8250_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_sm8250_desc = {
.config = &gcc_sm8250_regmap_config,
.clks = gcc_sm8250_clocks,
@@ -3619,6 +3646,7 @@ static const struct qcom_cc_desc gcc_sm8250_desc = {
.num_resets = ARRAY_SIZE(gcc_sm8250_resets),
.gdscs = gcc_sm8250_gdscs,
.num_gdscs = ARRAY_SIZE(gcc_sm8250_gdscs),
+ .driver_data = &gcc_sm8250_driver_data,
};
static const struct of_device_id gcc_sm8250_match_table[] = {
@@ -3629,34 +3657,7 @@ MODULE_DEVICE_TABLE(of, gcc_sm8250_match_table);
static int gcc_sm8250_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_sm8250_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- /*
- * Disable the GPLL0 active input to NPU and GPU
- * via MISC registers.
- */
- regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
- regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x0b004); /* GCC_VIDEO_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x0b008); /* GCC_CAMERA_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x0b00c); /* GCC_DISP_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x4818c); /* GCC_CPUSS_DVM_BUS_CLK */
- qcom_branch_set_clk_en(regmap, 0x71004); /* GCC_GPU_CFG_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x52000); /* GCC_SYS_NOC_CPUSS_AHB_CLK */
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
- ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sm8250_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sm8250_desc);
}
static struct platform_driver gcc_sm8250_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 30/48] clk: qcom: gcc-sm8350: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (28 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 29/48] clk: qcom: gcc-sm8250: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 31/48] clk: qcom: gcc-sm8450: " Abel Vesa
` (18 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array,
describe the DFS RCGs through qcom_cc_driver_data and move the register
programming into the clk_regs_configure callback.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sm8350.c | 52 +++++++++++++++++++++----------------------
1 file changed, 26 insertions(+), 26 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sm8350.c b/drivers/clk/qcom/gcc-sm8350.c
index cc6eb7ca9c03..10a944e679ae 100644
--- a/drivers/clk/qcom/gcc-sm8350.c
+++ b/drivers/clk/qcom/gcc-sm8350.c
@@ -3779,7 +3779,32 @@ static const struct regmap_config gcc_sm8350_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_sm8350_critical_cbcrs[] = {
+ 0x26004, /* GCC_CAMERA_AHB_CLK */
+ 0x26018, /* GCC_CAMERA_XO_CLK */
+ 0x27004, /* GCC_DISP_AHB_CLK */
+ 0x2701c, /* GCC_DISP_XO_CLK */
+ 0x71004, /* GCC_GPU_CFG_AHB_CLK */
+ 0x28004, /* GCC_VIDEO_AHB_CLK */
+ 0x28020, /* GCC_VIDEO_XO_CLK */
+};
+
+static void gcc_sm8350_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
+ regmap_update_bits(regmap, gcc_ufs_phy_ice_core_clk.halt_reg, BIT(14), BIT(14));
+}
+
+static const struct qcom_cc_driver_data gcc_sm8350_driver_data = {
+ .clk_cbcrs = gcc_sm8350_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sm8350_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+ .clk_regs_configure = gcc_sm8350_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_sm8350_desc = {
+ .driver_data = &gcc_sm8350_driver_data,
.config = &gcc_sm8350_regmap_config,
.clks = gcc_sm8350_clocks,
.num_clks = ARRAY_SIZE(gcc_sm8350_clocks),
@@ -3797,32 +3822,7 @@ MODULE_DEVICE_TABLE(of, gcc_sm8350_match_table);
static int gcc_sm8350_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_sm8350_desc);
- if (IS_ERR(regmap)) {
- dev_err(&pdev->dev, "Failed to map gcc registers\n");
- return PTR_ERR(regmap);
- }
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x26004); /* GCC_CAMERA_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x26018); /* GCC_CAMERA_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x27004); /* GCC_DISP_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x2701c); /* GCC_DISP_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x71004); /* GCC_GPU_CFG_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x28004); /* GCC_VIDEO_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x28020); /* GCC_VIDEO_XO_CLK */
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
- /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
- regmap_update_bits(regmap, gcc_ufs_phy_ice_core_clk.halt_reg, BIT(14), BIT(14));
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sm8350_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sm8350_desc);
}
static struct platform_driver gcc_sm8350_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 31/48] clk: qcom: gcc-sm8450: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (29 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 30/48] clk: qcom: gcc-sm8350: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 32/48] clk: qcom: gcc-sm8550: " Abel Vesa
` (17 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array
and describe the DFS RCGs through qcom_cc_driver_data.
Move the UFS PHY ICE core FORCE_MEM_CORE_ON setting into the
clk_regs_configure callback. This moves the UFS setting after the
always-on branch enables. Those branches serve the camera, display, GPU
and video blocks, not the UFS PHY ICE core clock. The UFS setting is
still applied before GDSC and CCF clock registration.
Keep the SM8475-specific PLL and RCG adjustments in the driver's probe
before calling qcom_cc_probe(), which now handles register mapping and
the common initialization sequence.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sm8450.c | 51 ++++++++++++++++++++++---------------------
1 file changed, 26 insertions(+), 25 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sm8450.c b/drivers/clk/qcom/gcc-sm8450.c
index d473a95bef92..739e567462da 100644
--- a/drivers/clk/qcom/gcc-sm8450.c
+++ b/drivers/clk/qcom/gcc-sm8450.c
@@ -3392,7 +3392,32 @@ static const struct regmap_config gcc_sm8450_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_sm8450_critical_cbcrs[] = {
+ 0x36004, /* GCC_CAMERA_AHB_CLK */
+ 0x36020, /* GCC_CAMERA_XO_CLK */
+ 0x37004, /* GCC_DISP_AHB_CLK */
+ 0x3701c, /* GCC_DISP_XO_CLK */
+ 0x81004, /* GCC_GPU_CFG_AHB_CLK */
+ 0x42004, /* GCC_VIDEO_AHB_CLK */
+ 0x42028, /* GCC_VIDEO_XO_CLK */
+};
+
+static void gcc_sm8450_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
+ regmap_update_bits(regmap, gcc_ufs_phy_ice_core_clk.halt_reg, BIT(14), BIT(14));
+}
+
+static const struct qcom_cc_driver_data gcc_sm8450_driver_data = {
+ .clk_cbcrs = gcc_sm8450_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sm8450_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+ .clk_regs_configure = gcc_sm8450_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_sm8450_desc = {
+ .driver_data = &gcc_sm8450_driver_data,
.config = &gcc_sm8450_regmap_config,
.clks = gcc_sm8450_clocks,
.num_clks = ARRAY_SIZE(gcc_sm8450_clocks),
@@ -3411,18 +3436,6 @@ MODULE_DEVICE_TABLE(of, gcc_sm8450_match_table);
static int gcc_sm8450_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_sm8450_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
- ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
if (of_device_is_compatible(pdev->dev.of_node, "qcom,sm8475-gcc")) {
/* Update GCC PLL0 */
gcc_gpll0.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE];
@@ -3456,19 +3469,7 @@ static int gcc_sm8450_probe(struct platform_device *pdev)
gcc_sm8450_desc.clks[SM8475_GCC_GPLL3] = &sm8475_gcc_gpll3.clkr;
}
- /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
- regmap_update_bits(regmap, gcc_ufs_phy_ice_core_clk.halt_reg, BIT(14), BIT(14));
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x36004); /* GCC_CAMERA_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x36020); /* GCC_CAMERA_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x37004); /* GCC_DISP_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x3701c); /* GCC_DISP_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x81004); /* GCC_GPU_CFG_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x42004); /* GCC_VIDEO_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x42028); /* GCC_VIDEO_XO_CLK */
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sm8450_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sm8450_desc);
}
static struct platform_driver gcc_sm8450_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 32/48] clk: qcom: gcc-sm8550: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (30 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 31/48] clk: qcom: gcc-sm8450: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 33/48] clk: qcom: gcc-sm8650: " Abel Vesa
` (16 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array,
describe the DFS RCGs through qcom_cc_driver_data and move the register
programming into the clk_regs_configure callback.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sm8550.c | 57 ++++++++++++++++++++++---------------------
1 file changed, 29 insertions(+), 28 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sm8550.c b/drivers/clk/qcom/gcc-sm8550.c
index d83a7bb5356b..2bcb37f27025 100644
--- a/drivers/clk/qcom/gcc-sm8550.c
+++ b/drivers/clk/qcom/gcc-sm8550.c
@@ -3319,7 +3319,35 @@ static const struct regmap_config gcc_sm8550_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_sm8550_critical_cbcrs[] = {
+ 0x26004, /* GCC_CAMERA_AHB_CLK */
+ 0x26028, /* GCC_CAMERA_XO_CLK */
+ 0x27004, /* GCC_DISP_AHB_CLK */
+ 0x27018, /* GCC_DISP_XO_CLK */
+ 0x71004, /* GCC_GPU_CFG_AHB_CLK */
+ 0x32004, /* GCC_VIDEO_AHB_CLK */
+ 0x32030, /* GCC_VIDEO_XO_CLK */
+};
+
+static void gcc_sm8550_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
+ regmap_update_bits(regmap, gcc_ufs_phy_ice_core_clk.halt_reg, BIT(14), BIT(14));
+
+ /* Clear GDSC_SLEEP_ENA_VOTE to stop votes being auto-removed in sleep. */
+ regmap_write(regmap, 0x52024, 0x0);
+}
+
+static const struct qcom_cc_driver_data gcc_sm8550_driver_data = {
+ .clk_cbcrs = gcc_sm8550_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sm8550_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+ .clk_regs_configure = gcc_sm8550_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_sm8550_desc = {
+ .driver_data = &gcc_sm8550_driver_data,
.config = &gcc_sm8550_regmap_config,
.clks = gcc_sm8550_clocks,
.num_clks = ARRAY_SIZE(gcc_sm8550_clocks),
@@ -3337,34 +3365,7 @@ MODULE_DEVICE_TABLE(of, gcc_sm8550_match_table);
static int gcc_sm8550_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_sm8550_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
- ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
- /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
- regmap_update_bits(regmap, gcc_ufs_phy_ice_core_clk.halt_reg, BIT(14), BIT(14));
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x26004); /* GCC_CAMERA_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x26028); /* GCC_CAMERA_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x27004); /* GCC_DISP_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x27018); /* GCC_DISP_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x71004); /* GCC_GPU_CFG_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x32004); /* GCC_VIDEO_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x32030); /* GCC_VIDEO_XO_CLK */
-
- /* Clear GDSC_SLEEP_ENA_VOTE to stop votes being auto-removed in sleep. */
- regmap_write(regmap, 0x52024, 0x0);
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sm8550_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sm8550_desc);
}
static struct platform_driver gcc_sm8550_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 33/48] clk: qcom: gcc-sm8650: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (31 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 32/48] clk: qcom: gcc-sm8550: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 34/48] clk: qcom: gcc-sm8750: " Abel Vesa
` (15 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array,
describe the DFS RCGs through qcom_cc_driver_data and move the register
programming into the clk_regs_configure callback.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sm8650.c | 59 ++++++++++++++++++++++---------------------
1 file changed, 30 insertions(+), 29 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sm8650.c b/drivers/clk/qcom/gcc-sm8650.c
index 9fa362f0c447..fb006076ea79 100644
--- a/drivers/clk/qcom/gcc-sm8650.c
+++ b/drivers/clk/qcom/gcc-sm8650.c
@@ -3777,7 +3777,36 @@ static const struct regmap_config gcc_sm8650_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_sm8650_critical_cbcrs[] = {
+ 0x26004, /* GCC_CAMERA_AHB_CLK */
+ 0x26028, /* GCC_CAMERA_XO_CLK */
+ 0x27004, /* GCC_DISP_AHB_CLK */
+ 0x27018, /* GCC_DISP_XO_CLK */
+ 0x71004, /* GCC_GPU_CFG_AHB_CLK */
+ 0x32004, /* GCC_VIDEO_AHB_CLK */
+ 0x32030, /* GCC_VIDEO_XO_CLK */
+};
+
+static void gcc_sm8650_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* FORCE_MEM_CORE_ON for ufs phy ice core and gcc ufs phy axi clocks */
+ qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
+ qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_axi_clk, true);
+
+ /* Clear GDSC_SLEEP_ENA_VOTE to stop votes being auto-removed in sleep. */
+ regmap_write(regmap, 0x52150, 0x0);
+}
+
+static const struct qcom_cc_driver_data gcc_sm8650_driver_data = {
+ .clk_cbcrs = gcc_sm8650_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sm8650_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+ .clk_regs_configure = gcc_sm8650_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_sm8650_desc = {
+ .driver_data = &gcc_sm8650_driver_data,
.config = &gcc_sm8650_regmap_config,
.clks = gcc_sm8650_clocks,
.num_clks = ARRAY_SIZE(gcc_sm8650_clocks),
@@ -3795,35 +3824,7 @@ MODULE_DEVICE_TABLE(of, gcc_sm8650_match_table);
static int gcc_sm8650_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_sm8650_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
- ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x26004); /* GCC_CAMERA_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x26028); /* GCC_CAMERA_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x27004); /* GCC_DISP_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x27018); /* GCC_DISP_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x71004); /* GCC_GPU_CFG_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x32004); /* GCC_VIDEO_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x32030); /* GCC_VIDEO_XO_CLK */
-
- /* FORCE_MEM_CORE_ON for ufs phy ice core and gcc ufs phy axi clocks */
- qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
- qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_axi_clk, true);
-
- /* Clear GDSC_SLEEP_ENA_VOTE to stop votes being auto-removed in sleep. */
- regmap_write(regmap, 0x52150, 0x0);
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sm8650_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sm8650_desc);
}
static struct platform_driver gcc_sm8650_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 34/48] clk: qcom: gcc-sm8750: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (32 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 33/48] clk: qcom: gcc-sm8650: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 35/48] clk: qcom: gcc-x1e80100: " Abel Vesa
` (14 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array,
describe the DFS RCGs through qcom_cc_driver_data and move the register
programming into the clk_regs_configure callback.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-sm8750.c | 76 +++++++++++++++++++------------------------
1 file changed, 33 insertions(+), 43 deletions(-)
diff --git a/drivers/clk/qcom/gcc-sm8750.c b/drivers/clk/qcom/gcc-sm8750.c
index c08130218efe..a3c7431ef4f7 100644
--- a/drivers/clk/qcom/gcc-sm8750.c
+++ b/drivers/clk/qcom/gcc-sm8750.c
@@ -3188,7 +3188,39 @@ static const struct regmap_config gcc_sm8750_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_sm8750_critical_cbcrs[] = {
+ 0xa0004, /* GCC_CAM_BIST_MCLK_AHB_CLK */
+ 0x26004, /* GCC_CAMERA_AHB_CLK */
+ 0x26034, /* GCC_CAMERA_XO_CLK */
+ 0x27004, /* GCC_DISP_AHB_CLK */
+ 0x9f004, /* GCC_EVA_AHB_CLK */
+ 0x9f01c, /* GCC_EVA_XO_CLK */
+ 0x71004, /* GCC_GPU_CFG_AHB_CLK */
+ 0x32004, /* GCC_VIDEO_AHB_CLK */
+ 0x32038, /* GCC_VIDEO_XO_CLK */
+};
+
+static void gcc_sm8750_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* Keep GCC_PCIE_RSCC_CFG_AHB_CLK and GCC_PCIE_RSCC_XO_CLK enabled. */
+ regmap_update_bits(regmap, 0x52010, BIT(20), BIT(20));
+ regmap_update_bits(regmap, 0x52010, BIT(21), BIT(21));
+
+ /* FORCE_MEM_CORE_ON for ufs phy ice core and gcc ufs phy axi clocks */
+ qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
+ qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_axi_clk, true);
+}
+
+static const struct qcom_cc_driver_data gcc_sm8750_driver_data = {
+ .clk_cbcrs = gcc_sm8750_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_sm8750_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+ .clk_regs_configure = gcc_sm8750_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_sm8750_desc = {
+ .driver_data = &gcc_sm8750_driver_data,
.config = &gcc_sm8750_regmap_config,
.clks = gcc_sm8750_clocks,
.num_clks = ARRAY_SIZE(gcc_sm8750_clocks),
@@ -3206,49 +3238,7 @@ MODULE_DEVICE_TABLE(of, gcc_sm8750_match_table);
static int gcc_sm8750_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_sm8750_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
- ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
- /*
- * Keep clocks always enabled:
- * gcc_cam_bist_mclk_ahb_clk
- * gcc_camera_ahb_clk
- * gcc_camera_xo_clk
- * gcc_disp_ahb_clk
- * gcc_eva_ahb_clk
- * gcc_eva_xo_clk
- * gcc_gpu_cfg_ahb_clk
- * gcc_video_ahb_clk
- * gcc_video_xo_clk
- * gcc_pcie_rscc_cfg_ahb_clk
- * gcc_pcie_rscc_xo_clk
- */
- qcom_branch_set_clk_en(regmap, 0xa0004);
- qcom_branch_set_clk_en(regmap, 0x26004);
- qcom_branch_set_clk_en(regmap, 0x26034);
- qcom_branch_set_clk_en(regmap, 0x27004);
- qcom_branch_set_clk_en(regmap, 0x9f004);
- qcom_branch_set_clk_en(regmap, 0x9f01c);
- qcom_branch_set_clk_en(regmap, 0x71004);
- qcom_branch_set_clk_en(regmap, 0x32004);
- qcom_branch_set_clk_en(regmap, 0x32038);
- regmap_update_bits(regmap, 0x52010, BIT(20), BIT(20));
- regmap_update_bits(regmap, 0x52010, BIT(21), BIT(21));
-
- /* FORCE_MEM_CORE_ON for ufs phy ice core and gcc ufs phy axi clocks */
- qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
- qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_axi_clk, true);
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_sm8750_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_sm8750_desc);
}
static struct platform_driver gcc_sm8750_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 35/48] clk: qcom: gcc-x1e80100: Use common clock controller probe data
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (33 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 34/48] clk: qcom: gcc-sm8750: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 36/48] clk: qcom: gpucc-sar2130p: Use common probe handling for always-on clocks Abel Vesa
` (13 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Move the always-on branch register offsets into a critical_cbcrs array,
describe the DFS RCGs through qcom_cc_driver_data and move the register
programming into the clk_regs_configure callback.
Use qcom_cc_probe() to perform the common initialization instead of
open-coding it in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gcc-x1e80100.c | 61 +++++++++++++++++++++--------------------
1 file changed, 31 insertions(+), 30 deletions(-)
diff --git a/drivers/clk/qcom/gcc-x1e80100.c b/drivers/clk/qcom/gcc-x1e80100.c
index 9402fd7fddb8..41a66b0ce529 100644
--- a/drivers/clk/qcom/gcc-x1e80100.c
+++ b/drivers/clk/qcom/gcc-x1e80100.c
@@ -7441,7 +7441,37 @@ static const struct regmap_config gcc_x1e80100_regmap_config = {
.fast_io = true,
};
+static const u32 gcc_x1e80100_critical_cbcrs[] = {
+ 0x26004, /* GCC_CAMERA_AHB_CLK */
+ 0x26028, /* GCC_CAMERA_XO_CLK */
+ 0x27004, /* GCC_DISP_AHB_CLK */
+ 0x27018, /* GCC_DISP_XO_CLK */
+ 0x32004, /* GCC_VIDEO_AHB_CLK */
+ 0x32030, /* GCC_VIDEO_XO_CLK */
+ 0x71004, /* GCC_GPU_CFG_AHB_CLK */
+ 0x7d01c, /* GCC_HLOS1_VOTE_AGGRE_NOC_MMU_USB_QTB_CLK */
+};
+
+static void gcc_x1e80100_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* Clear GDSC_SLEEP_ENA_VOTE to stop votes being auto-removed in sleep. */
+ regmap_write(regmap, 0x52224, 0x0);
+
+ /* FORCE_MEM_CORE_ON for ufs phy ice core and gcc ufs phy axi clocks */
+ qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
+ qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_axi_clk, true);
+}
+
+static const struct qcom_cc_driver_data gcc_x1e80100_driver_data = {
+ .clk_cbcrs = gcc_x1e80100_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gcc_x1e80100_critical_cbcrs),
+ .dfs_rcgs = gcc_dfs_clocks,
+ .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
+ .clk_regs_configure = gcc_x1e80100_regs_configure,
+};
+
static const struct qcom_cc_desc gcc_x1e80100_desc = {
+ .driver_data = &gcc_x1e80100_driver_data,
.config = &gcc_x1e80100_regmap_config,
.clks = gcc_x1e80100_clocks,
.num_clks = ARRAY_SIZE(gcc_x1e80100_clocks),
@@ -7459,36 +7489,7 @@ MODULE_DEVICE_TABLE(of, gcc_x1e80100_match_table);
static int gcc_x1e80100_probe(struct platform_device *pdev)
{
- struct regmap *regmap;
- int ret;
-
- regmap = qcom_cc_map(pdev, &gcc_x1e80100_desc);
- if (IS_ERR(regmap))
- return PTR_ERR(regmap);
-
- ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
- ARRAY_SIZE(gcc_dfs_clocks));
- if (ret)
- return ret;
-
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x26004); /* GCC_CAMERA_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x26028); /* GCC_CAMERA_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x27004); /* GCC_DISP_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x27018); /* GCC_DISP_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x32004); /* GCC_VIDEO_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x32030); /* GCC_VIDEO_XO_CLK */
- qcom_branch_set_clk_en(regmap, 0x71004); /* GCC_GPU_CFG_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x7d01c); /* GCC_HLOS1_VOTE_AGGRE_NOC_MMU_USB_QTB_CLK */
-
- /* Clear GDSC_SLEEP_ENA_VOTE to stop votes being auto-removed in sleep. */
- regmap_write(regmap, 0x52224, 0x0);
-
- /* FORCE_MEM_CORE_ON for ufs phy ice core and gcc ufs phy axi clocks */
- qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
- qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_axi_clk, true);
-
- return qcom_cc_really_probe(&pdev->dev, &gcc_x1e80100_desc, regmap);
+ return qcom_cc_probe(pdev, &gcc_x1e80100_desc);
}
static struct platform_driver gcc_x1e80100_driver = {
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 36/48] clk: qcom: gpucc-sar2130p: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (34 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 35/48] clk: qcom: gcc-x1e80100: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 37/48] clk: qcom: gpucc-sc7280: " Abel Vesa
` (12 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gpucc-sar2130p.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/clk/qcom/gpucc-sar2130p.c b/drivers/clk/qcom/gpucc-sar2130p.c
index dd72b2a48c42..fa261664c1bf 100644
--- a/drivers/clk/qcom/gpucc-sar2130p.c
+++ b/drivers/clk/qcom/gpucc-sar2130p.c
@@ -455,7 +455,17 @@ static const struct regmap_config gpu_cc_sar2130p_regmap_config = {
.fast_io = true,
};
+static const u32 gpu_cc_sar2130p_critical_cbcrs[] = {
+ 0x900c, /* GPU_CC_DEMET_CLK */
+};
+
+static const struct qcom_cc_driver_data gpu_cc_sar2130p_driver_data = {
+ .clk_cbcrs = gpu_cc_sar2130p_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gpu_cc_sar2130p_critical_cbcrs),
+};
+
static const struct qcom_cc_desc gpu_cc_sar2130p_desc = {
+ .driver_data = &gpu_cc_sar2130p_driver_data,
.config = &gpu_cc_sar2130p_regmap_config,
.clks = gpu_cc_sar2130p_clocks,
.num_clks = ARRAY_SIZE(gpu_cc_sar2130p_clocks),
@@ -483,9 +493,6 @@ static int gpu_cc_sar2130p_probe(struct platform_device *pdev)
clk_lucid_ole_pll_configure(&gpu_cc_pll0, regmap, &gpu_cc_pll0_config);
clk_lucid_ole_pll_configure(&gpu_cc_pll1, regmap, &gpu_cc_pll1_config);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x900c); /* GPU_CC_DEMET_CLK */
-
return qcom_cc_really_probe(dev, &gpu_cc_sar2130p_desc, regmap);
}
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 37/48] clk: qcom: gpucc-sc7280: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (35 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 36/48] clk: qcom: gpucc-sar2130p: Use common probe handling for always-on clocks Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 38/48] clk: qcom: gpucc-sc8280xp: " Abel Vesa
` (11 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Move the GMU branch register update into the clk_regs_configure callback
so it still follows the always-on branch enables.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gpucc-sc7280.c | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/drivers/clk/qcom/gpucc-sc7280.c b/drivers/clk/qcom/gpucc-sc7280.c
index bd699a624517..9b267276eac7 100644
--- a/drivers/clk/qcom/gpucc-sc7280.c
+++ b/drivers/clk/qcom/gpucc-sc7280.c
@@ -440,7 +440,24 @@ static const struct regmap_config gpu_cc_sc7280_regmap_config = {
.fast_io = true,
};
+static const u32 gpu_cc_sc7280_critical_cbcrs[] = {
+ 0x1170, /* GPU_CC_CB_CLK */
+ 0x1098, /* GPUCC_CX_GMU_CLK */
+};
+
+static void gpu_cc_sc7280_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ regmap_update_bits(regmap, 0x1098, BIT(13), BIT(13));
+}
+
+static const struct qcom_cc_driver_data gpu_cc_sc7280_driver_data = {
+ .clk_cbcrs = gpu_cc_sc7280_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gpu_cc_sc7280_critical_cbcrs),
+ .clk_regs_configure = gpu_cc_sc7280_regs_configure,
+};
+
static const struct qcom_cc_desc gpu_cc_sc7280_desc = {
+ .driver_data = &gpu_cc_sc7280_driver_data,
.config = &gpu_cc_sc7280_regmap_config,
.clks = gpu_cc_sc7280_clocks,
.num_clks = ARRAY_SIZE(gpu_cc_sc7280_clocks),
@@ -464,11 +481,6 @@ static int gpu_cc_sc7280_probe(struct platform_device *pdev)
clk_lucid_pll_configure(&gpu_cc_pll1, regmap, &gpu_cc_pll1_config);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x1170); /* GPU_CC_CB_CLK */
- qcom_branch_set_clk_en(regmap, 0x1098); /* GPUCC_CX_GMU_CLK */
- regmap_update_bits(regmap, 0x1098, BIT(13), BIT(13));
-
return qcom_cc_really_probe(&pdev->dev, &gpu_cc_sc7280_desc, regmap);
}
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 38/48] clk: qcom: gpucc-sc8280xp: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (36 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 37/48] clk: qcom: gpucc-sc7280: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 39/48] clk: qcom: gpucc-sm4450: " Abel Vesa
` (10 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gpucc-sc8280xp.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/drivers/clk/qcom/gpucc-sc8280xp.c b/drivers/clk/qcom/gpucc-sc8280xp.c
index 5dd90b854afb..2ccc083a4f98 100644
--- a/drivers/clk/qcom/gpucc-sc8280xp.c
+++ b/drivers/clk/qcom/gpucc-sc8280xp.c
@@ -415,7 +415,18 @@ static const struct regmap_config gpu_cc_sc8280xp_regmap_config = {
.fast_io = true,
};
+static const u32 gpu_cc_sc8280xp_critical_cbcrs[] = {
+ 0x1170, /* GPU_CC_CB_CLK */
+ 0x109c, /* GPU_CC_CXO_CLK */
+};
+
+static const struct qcom_cc_driver_data gpu_cc_sc8280xp_driver_data = {
+ .clk_cbcrs = gpu_cc_sc8280xp_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gpu_cc_sc8280xp_critical_cbcrs),
+};
+
static const struct qcom_cc_desc gpu_cc_sc8280xp_desc = {
+ .driver_data = &gpu_cc_sc8280xp_driver_data,
.config = &gpu_cc_sc8280xp_regmap_config,
.clks = gpu_cc_sc8280xp_clocks,
.num_clks = ARRAY_SIZE(gpu_cc_sc8280xp_clocks),
@@ -445,10 +456,6 @@ static int gpu_cc_sc8280xp_probe(struct platform_device *pdev)
clk_lucid_pll_configure(&gpu_cc_pll0, regmap, &gpu_cc_pll0_config);
clk_lucid_pll_configure(&gpu_cc_pll1, regmap, &gpu_cc_pll1_config);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x1170); /* GPU_CC_CB_CLK */
- qcom_branch_set_clk_en(regmap, 0x109c); /* GPU_CC_CXO_CLK */
-
ret = qcom_cc_really_probe(&pdev->dev, &gpu_cc_sc8280xp_desc, regmap);
pm_runtime_put(&pdev->dev);
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 39/48] clk: qcom: gpucc-sm4450: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (37 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 38/48] clk: qcom: gpucc-sc8280xp: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 40/48] clk: qcom: gpucc-sm8550: " Abel Vesa
` (9 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gpucc-sm4450.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/drivers/clk/qcom/gpucc-sm4450.c b/drivers/clk/qcom/gpucc-sm4450.c
index 808b1eaa59d1..bd0f3fc2b726 100644
--- a/drivers/clk/qcom/gpucc-sm4450.c
+++ b/drivers/clk/qcom/gpucc-sm4450.c
@@ -754,7 +754,19 @@ static const struct regmap_config gpu_cc_sm4450_regmap_config = {
.fast_io = true,
};
+static const u32 gpu_cc_sm4450_critical_cbcrs[] = {
+ 0x93a4, /* GPU_CC_CB_CLK */
+ 0x9004, /* GPU_CC_CXO_AON_CLK */
+ 0x900c, /* GPU_CC_DEMET_CLK */
+};
+
+static const struct qcom_cc_driver_data gpu_cc_sm4450_driver_data = {
+ .clk_cbcrs = gpu_cc_sm4450_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gpu_cc_sm4450_critical_cbcrs),
+};
+
static const struct qcom_cc_desc gpu_cc_sm4450_desc = {
+ .driver_data = &gpu_cc_sm4450_driver_data,
.config = &gpu_cc_sm4450_regmap_config,
.clks = gpu_cc_sm4450_clocks,
.num_clks = ARRAY_SIZE(gpu_cc_sm4450_clocks),
@@ -781,11 +793,6 @@ static int gpu_cc_sm4450_probe(struct platform_device *pdev)
clk_lucid_evo_pll_configure(&gpu_cc_pll0, regmap, &gpu_cc_pll0_config);
clk_lucid_evo_pll_configure(&gpu_cc_pll1, regmap, &gpu_cc_pll1_config);
- /* Keep some clocks always enabled */
- qcom_branch_set_clk_en(regmap, 0x93a4); /* GPU_CC_CB_CLK */
- qcom_branch_set_clk_en(regmap, 0x9004); /* GPU_CC_CXO_AON_CLK */
- qcom_branch_set_clk_en(regmap, 0x900c); /* GPU_CC_DEMET_CLK */
-
return qcom_cc_really_probe(&pdev->dev, &gpu_cc_sm4450_desc, regmap);
}
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 40/48] clk: qcom: gpucc-sm8550: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (38 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 39/48] clk: qcom: gpucc-sm4450: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 41/48] clk: qcom: gpucc-x1e80100: " Abel Vesa
` (8 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gpucc-sm8550.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/drivers/clk/qcom/gpucc-sm8550.c b/drivers/clk/qcom/gpucc-sm8550.c
index 53614e980b26..f8dd1727c080 100644
--- a/drivers/clk/qcom/gpucc-sm8550.c
+++ b/drivers/clk/qcom/gpucc-sm8550.c
@@ -547,7 +547,18 @@ static const struct regmap_config gpu_cc_sm8550_regmap_config = {
.fast_io = true,
};
+static const u32 gpu_cc_sm8550_critical_cbcrs[] = {
+ 0x9004, /* GPU_CC_CXO_AON_CLK */
+ 0x900c, /* GPU_CC_DEMET_CLK */
+};
+
+static const struct qcom_cc_driver_data gpu_cc_sm8550_driver_data = {
+ .clk_cbcrs = gpu_cc_sm8550_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gpu_cc_sm8550_critical_cbcrs),
+};
+
static const struct qcom_cc_desc gpu_cc_sm8550_desc = {
+ .driver_data = &gpu_cc_sm8550_driver_data,
.config = &gpu_cc_sm8550_regmap_config,
.clks = gpu_cc_sm8550_clocks,
.num_clks = ARRAY_SIZE(gpu_cc_sm8550_clocks),
@@ -574,10 +585,6 @@ static int gpu_cc_sm8550_probe(struct platform_device *pdev)
clk_lucid_ole_pll_configure(&gpu_cc_pll0, regmap, &gpu_cc_pll0_config);
clk_lucid_ole_pll_configure(&gpu_cc_pll1, regmap, &gpu_cc_pll1_config);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x9004); /* GPU_CC_CXO_AON_CLK */
- qcom_branch_set_clk_en(regmap, 0x900c); /* GPU_CC_DEMET_CLK */
-
return qcom_cc_really_probe(&pdev->dev, &gpu_cc_sm8550_desc, regmap);
}
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 41/48] clk: qcom: gpucc-x1e80100: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (39 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 40/48] clk: qcom: gpucc-sm8550: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 42/48] clk: qcom: gpucc-x1p42100: " Abel Vesa
` (7 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gpucc-x1e80100.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/clk/qcom/gpucc-x1e80100.c b/drivers/clk/qcom/gpucc-x1e80100.c
index f9161dbaedd7..10a0b11927e3 100644
--- a/drivers/clk/qcom/gpucc-x1e80100.c
+++ b/drivers/clk/qcom/gpucc-x1e80100.c
@@ -609,7 +609,17 @@ static const struct regmap_config gpu_cc_x1e80100_regmap_config = {
.fast_io = true,
};
+static const u32 gpu_cc_x1e80100_critical_cbcrs[] = {
+ 0x93a4, /* GPU_CC_CB_CLK */
+};
+
+static const struct qcom_cc_driver_data gpu_cc_x1e80100_driver_data = {
+ .clk_cbcrs = gpu_cc_x1e80100_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gpu_cc_x1e80100_critical_cbcrs),
+};
+
static const struct qcom_cc_desc gpu_cc_x1e80100_desc = {
+ .driver_data = &gpu_cc_x1e80100_driver_data,
.config = &gpu_cc_x1e80100_regmap_config,
.clks = gpu_cc_x1e80100_clocks,
.num_clks = ARRAY_SIZE(gpu_cc_x1e80100_clocks),
@@ -636,9 +646,6 @@ static int gpu_cc_x1e80100_probe(struct platform_device *pdev)
clk_zonda_pll_configure(&gpu_cc_pll0, regmap, &gpu_cc_pll0_config);
clk_lucid_evo_pll_configure(&gpu_cc_pll1, regmap, &gpu_cc_pll1_config);
- /* Keep clocks always enabled */
- qcom_branch_set_clk_en(regmap, 0x93a4); /* GPU_CC_CB_CLK */
-
return qcom_cc_really_probe(&pdev->dev, &gpu_cc_x1e80100_desc, regmap);
}
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 42/48] clk: qcom: gpucc-x1p42100: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (40 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 41/48] clk: qcom: gpucc-x1e80100: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 43/48] clk: qcom: lpasscorecc-sc7180: " Abel Vesa
` (6 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/gpucc-x1p42100.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/drivers/clk/qcom/gpucc-x1p42100.c b/drivers/clk/qcom/gpucc-x1p42100.c
index cfc34e0fd290..3f3fec257f2d 100644
--- a/drivers/clk/qcom/gpucc-x1p42100.c
+++ b/drivers/clk/qcom/gpucc-x1p42100.c
@@ -522,7 +522,19 @@ static const struct regmap_config gpu_cc_x1p42100_regmap_config = {
.fast_io = true,
};
+static const u32 gpu_cc_x1p42100_critical_cbcrs[] = {
+ 0x93a4, /* GPU_CC_CB_CLK */
+ 0x9004, /* GPU_CC_CXO_AON_CLK */
+ 0x900c, /* GPU_CC_DEMET_CLK */
+};
+
+static const struct qcom_cc_driver_data gpu_cc_x1p42100_driver_data = {
+ .clk_cbcrs = gpu_cc_x1p42100_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(gpu_cc_x1p42100_critical_cbcrs),
+};
+
static const struct qcom_cc_desc gpu_cc_x1p42100_desc = {
+ .driver_data = &gpu_cc_x1p42100_driver_data,
.config = &gpu_cc_x1p42100_regmap_config,
.clks = gpu_cc_x1p42100_clocks,
.num_clks = ARRAY_SIZE(gpu_cc_x1p42100_clocks),
@@ -560,11 +572,6 @@ static int gpu_cc_x1p42100_probe(struct platform_device *pdev)
clk_lucid_ole_pll_configure(&gpu_cc_pll0, regmap, &gpu_cc_pll0_config);
clk_lucid_ole_pll_configure(&gpu_cc_pll1, regmap, &gpu_cc_pll1_config);
- /* Keep some clocks always enabled */
- qcom_branch_set_clk_en(regmap, 0x93a4); /* GPU_CC_CB_CLK */
- qcom_branch_set_clk_en(regmap, 0x9004); /* GPU_CC_CXO_AON_CLK */
- qcom_branch_set_clk_en(regmap, 0x900c); /* GPU_CC_DEMET_CLK */
-
ret = qcom_cc_really_probe(&pdev->dev, &gpu_cc_x1p42100_desc, regmap);
pm_runtime_put(&pdev->dev);
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 43/48] clk: qcom: lpasscorecc-sc7180: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (41 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 42/48] clk: qcom: gpucc-x1p42100: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 44/48] clk: qcom: videocc-sa8775p: " Abel Vesa
` (5 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Move the PLL register setup into the clk_regs_configure callback so it
still follows the SYSNOC branch enable. Attach this data only to the
LPASS core clock controller descriptor.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/lpasscorecc-sc7180.c | 31 +++++++++++++++++++++----------
1 file changed, 21 insertions(+), 10 deletions(-)
diff --git a/drivers/clk/qcom/lpasscorecc-sc7180.c b/drivers/clk/qcom/lpasscorecc-sc7180.c
index 5174bd3dcdc5..af28da5f04b3 100644
--- a/drivers/clk/qcom/lpasscorecc-sc7180.c
+++ b/drivers/clk/qcom/lpasscorecc-sc7180.c
@@ -343,7 +343,28 @@ static const struct qcom_cc_desc lpass_core_hm_sc7180_desc = {
.num_gdscs = ARRAY_SIZE(lpass_core_hm_sc7180_gdscs),
};
+static const u32 lpass_core_cc_sc7180_critical_cbcrs[] = {
+ 0x24000, /* LPASS_AUDIO_CORE_SYSNOC_SWAY_CORE_CLK */
+};
+
+static void lpass_core_cc_sc7180_regs_configure(struct device *dev, struct regmap *regmap)
+{
+ /* PLL settings */
+ regmap_write(regmap, 0x1008, 0x20);
+ regmap_update_bits(regmap, 0x1014, BIT(0), BIT(0));
+
+ clk_fabia_pll_configure(&lpass_lpaaudio_dig_pll, regmap,
+ &lpass_lpaaudio_dig_pll_config);
+}
+
+static const struct qcom_cc_driver_data lpass_core_cc_sc7180_driver_data = {
+ .clk_cbcrs = lpass_core_cc_sc7180_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(lpass_core_cc_sc7180_critical_cbcrs),
+ .clk_regs_configure = lpass_core_cc_sc7180_regs_configure,
+};
+
static const struct qcom_cc_desc lpass_core_cc_sc7180_desc = {
+ .driver_data = &lpass_core_cc_sc7180_driver_data,
.config = &lpass_core_cc_sc7180_regmap_config,
.clks = lpass_core_cc_sc7180_clocks,
.num_clks = ARRAY_SIZE(lpass_core_cc_sc7180_clocks),
@@ -400,16 +421,6 @@ static int lpass_core_cc_sc7180_probe(struct platform_device *pdev)
goto exit;
}
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x24000); /* LPASS_AUDIO_CORE_SYSNOC_SWAY_CORE_CLK */
-
- /* PLL settings */
- regmap_write(regmap, 0x1008, 0x20);
- regmap_update_bits(regmap, 0x1014, BIT(0), BIT(0));
-
- clk_fabia_pll_configure(&lpass_lpaaudio_dig_pll, regmap,
- &lpass_lpaaudio_dig_pll_config);
-
ret = qcom_cc_really_probe(&pdev->dev, &lpass_core_cc_sc7180_desc, regmap);
exit:
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 44/48] clk: qcom: videocc-sa8775p: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (42 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 43/48] clk: qcom: lpasscorecc-sc7180: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 45/48] clk: qcom: videocc-sm6350: " Abel Vesa
` (4 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/videocc-sa8775p.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/drivers/clk/qcom/videocc-sa8775p.c b/drivers/clk/qcom/videocc-sa8775p.c
index 65a2d5bafea6..2ca78af8c20c 100644
--- a/drivers/clk/qcom/videocc-sa8775p.c
+++ b/drivers/clk/qcom/videocc-sa8775p.c
@@ -511,7 +511,19 @@ static const struct regmap_config video_cc_sa8775p_regmap_config = {
.fast_io = true,
};
+static const u32 video_cc_sa8775p_critical_cbcrs[] = {
+ 0x80ec, /* VIDEO_CC_AHB_CLK */
+ 0x8144, /* VIDEO_CC_SLEEP_CLK */
+ 0x8128, /* VIDEO_CC_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data video_cc_sa8775p_driver_data = {
+ .clk_cbcrs = video_cc_sa8775p_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(video_cc_sa8775p_critical_cbcrs),
+};
+
static const struct qcom_cc_desc video_cc_sa8775p_desc = {
+ .driver_data = &video_cc_sa8775p_driver_data,
.config = &video_cc_sa8775p_regmap_config,
.clks = video_cc_sa8775p_clocks,
.num_clks = ARRAY_SIZE(video_cc_sa8775p_clocks),
@@ -557,11 +569,6 @@ static int video_cc_sa8775p_probe(struct platform_device *pdev)
if (of_device_is_compatible(pdev->dev.of_node, "qcom,qcs8300-videocc"))
regmap_write(regmap, video_cc_mvs0c_div2_div_clk_src.reg, 2);
- /* Keep some clocks always enabled */
- qcom_branch_set_clk_en(regmap, 0x80ec); /* VIDEO_CC_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0x8144); /* VIDEO_CC_SLEEP_CLK */
- qcom_branch_set_clk_en(regmap, 0x8128); /* VIDEO_CC_XO_CLK */
-
ret = qcom_cc_really_probe(&pdev->dev, &video_cc_sa8775p_desc, regmap);
pm_runtime_put(&pdev->dev);
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 45/48] clk: qcom: videocc-sm6350: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (43 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 44/48] clk: qcom: videocc-sa8775p: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 46/48] clk: qcom: videocc-sm7150: " Abel Vesa
` (3 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/videocc-sm6350.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/clk/qcom/videocc-sm6350.c b/drivers/clk/qcom/videocc-sm6350.c
index 34bdc5aa865a..d3926f87497c 100644
--- a/drivers/clk/qcom/videocc-sm6350.c
+++ b/drivers/clk/qcom/videocc-sm6350.c
@@ -311,7 +311,17 @@ static const struct regmap_config video_cc_sm6350_regmap_config = {
.fast_io = true,
};
+static const u32 video_cc_sm6350_critical_cbcrs[] = {
+ 0x7018, /* VIDEO_CC_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data video_cc_sm6350_driver_data = {
+ .clk_cbcrs = video_cc_sm6350_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(video_cc_sm6350_critical_cbcrs),
+};
+
static const struct qcom_cc_desc video_cc_sm6350_desc = {
+ .driver_data = &video_cc_sm6350_driver_data,
.config = &video_cc_sm6350_regmap_config,
.clks = video_cc_sm6350_clocks,
.num_clks = ARRAY_SIZE(video_cc_sm6350_clocks),
@@ -335,9 +345,6 @@ static int video_cc_sm6350_probe(struct platform_device *pdev)
clk_fabia_pll_configure(&video_pll0, regmap, &video_pll0_config);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x7018); /* VIDEO_CC_XO_CLK */
-
return qcom_cc_really_probe(&pdev->dev, &video_cc_sm6350_desc, regmap);
}
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 46/48] clk: qcom: videocc-sm7150: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (44 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 45/48] clk: qcom: videocc-sm6350: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:06 ` [PATCH v2 47/48] clk: qcom: videocc-sm8250: " Abel Vesa
` (2 subsequent siblings)
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/videocc-sm7150.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/drivers/clk/qcom/videocc-sm7150.c b/drivers/clk/qcom/videocc-sm7150.c
index 8d2e00799f96..32bad5e09056 100644
--- a/drivers/clk/qcom/videocc-sm7150.c
+++ b/drivers/clk/qcom/videocc-sm7150.c
@@ -313,7 +313,17 @@ static const struct regmap_config videocc_sm7150_regmap_config = {
.fast_io = true,
};
+static const u32 videocc_sm7150_critical_cbcrs[] = {
+ 0x984, /* VIDEOCC_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data videocc_sm7150_driver_data = {
+ .clk_cbcrs = videocc_sm7150_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(videocc_sm7150_critical_cbcrs),
+};
+
static const struct qcom_cc_desc videocc_sm7150_desc = {
+ .driver_data = &videocc_sm7150_driver_data,
.config = &videocc_sm7150_regmap_config,
.clks = videocc_sm7150_clocks,
.num_clks = ARRAY_SIZE(videocc_sm7150_clocks),
@@ -337,9 +347,6 @@ static int videocc_sm7150_probe(struct platform_device *pdev)
clk_fabia_pll_configure(&videocc_pll0, regmap, &videocc_pll0_config);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0x984); /* VIDEOCC_XO_CLK */
-
return qcom_cc_really_probe(&pdev->dev, &videocc_sm7150_desc, regmap);
}
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 47/48] clk: qcom: videocc-sm8250: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (45 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 46/48] clk: qcom: videocc-sm7150: " Abel Vesa
@ 2026-09-24 12:06 ` Abel Vesa
2026-09-24 12:07 ` [PATCH v2 48/48] clk: qcom: videocc-sm8350: " Abel Vesa
2026-09-25 16:43 ` [PATCH v2 00/48] clk: qcom: Use common probe data " Bjorn Andersson
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:06 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/videocc-sm8250.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/drivers/clk/qcom/videocc-sm8250.c b/drivers/clk/qcom/videocc-sm8250.c
index df479a69cddd..d29d64138508 100644
--- a/drivers/clk/qcom/videocc-sm8250.c
+++ b/drivers/clk/qcom/videocc-sm8250.c
@@ -345,7 +345,18 @@ static const struct regmap_config video_cc_sm8250_regmap_config = {
.fast_io = true,
};
+static const u32 video_cc_sm8250_critical_cbcrs[] = {
+ 0xe58, /* VIDEO_CC_AHB_CLK */
+ 0xeec, /* VIDEO_CC_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data video_cc_sm8250_driver_data = {
+ .clk_cbcrs = video_cc_sm8250_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(video_cc_sm8250_critical_cbcrs),
+};
+
static const struct qcom_cc_desc video_cc_sm8250_desc = {
+ .driver_data = &video_cc_sm8250_driver_data,
.config = &video_cc_sm8250_regmap_config,
.clks = video_cc_sm8250_clocks,
.num_clks = ARRAY_SIZE(video_cc_sm8250_clocks),
@@ -383,10 +394,6 @@ static int video_cc_sm8250_probe(struct platform_device *pdev)
clk_lucid_pll_configure(&video_pll0, regmap, &video_pll0_config);
clk_lucid_pll_configure(&video_pll1, regmap, &video_pll1_config);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0xe58); /* VIDEO_CC_AHB_CLK */
- qcom_branch_set_clk_en(regmap, 0xeec); /* VIDEO_CC_XO_CLK */
-
ret = qcom_cc_really_probe(&pdev->dev, &video_cc_sm8250_desc, regmap);
pm_runtime_put(&pdev->dev);
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* [PATCH v2 48/48] clk: qcom: videocc-sm8350: Use common probe handling for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (46 preceding siblings ...)
2026-09-24 12:06 ` [PATCH v2 47/48] clk: qcom: videocc-sm8250: " Abel Vesa
@ 2026-09-24 12:07 ` Abel Vesa
2026-09-25 16:43 ` [PATCH v2 00/48] clk: qcom: Use common probe data " Bjorn Andersson
48 siblings, 0 replies; 51+ messages in thread
From: Abel Vesa @ 2026-09-24 12:07 UTC (permalink / raw)
To: Bjorn Andersson, Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet
Cc: linux-arm-msm, linux-clk, linux-kernel, Abel Vesa, Konrad Dybcio
Describe the always-on branches in a critical_cbcrs array and reference
it through qcom_cc_driver_data. Let qcom_cc_really_probe() enable these
branches instead of programming them directly in the driver's probe.
Keep separate CBCR arrays for SM8350 and SC8280XP to preserve their
different XO clock register offsets.
Assisted-by: LLM
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
---
drivers/clk/qcom/videocc-sm8350.c | 31 ++++++++++++++++++++++++-------
1 file changed, 24 insertions(+), 7 deletions(-)
diff --git a/drivers/clk/qcom/videocc-sm8350.c b/drivers/clk/qcom/videocc-sm8350.c
index 057a9474894a..8528aeb3a342 100644
--- a/drivers/clk/qcom/videocc-sm8350.c
+++ b/drivers/clk/qcom/videocc-sm8350.c
@@ -510,7 +510,28 @@ static const struct regmap_config video_cc_sm8350_regmap_config = {
.fast_io = true,
};
+static const u32 video_cc_sm8350_critical_cbcrs[] = {
+ 0xe58, /* VIDEO_CC_AHB_CLK */
+ 0xeec, /* VIDEO_CC_XO_CLK */
+};
+
+static const u32 video_cc_sc8280xp_critical_cbcrs[] = {
+ 0xe58, /* VIDEO_CC_AHB_CLK */
+ 0xf34, /* VIDEO_CC_XO_CLK */
+};
+
+static const struct qcom_cc_driver_data video_cc_sm8350_driver_data = {
+ .clk_cbcrs = video_cc_sm8350_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(video_cc_sm8350_critical_cbcrs),
+};
+
+static const struct qcom_cc_driver_data video_cc_sc8280xp_driver_data = {
+ .clk_cbcrs = video_cc_sc8280xp_critical_cbcrs,
+ .num_clk_cbcrs = ARRAY_SIZE(video_cc_sc8280xp_critical_cbcrs),
+};
+
static const struct qcom_cc_desc video_cc_sm8350_desc = {
+ .driver_data = &video_cc_sm8350_driver_data,
.config = &video_cc_sm8350_regmap_config,
.clks = video_cc_sm8350_clocks,
.num_clks = ARRAY_SIZE(video_cc_sm8350_clocks),
@@ -522,7 +543,7 @@ static const struct qcom_cc_desc video_cc_sm8350_desc = {
static int video_cc_sm8350_probe(struct platform_device *pdev)
{
- u32 video_cc_xo_clk_cbcr = 0xeec;
+ struct qcom_cc_desc desc = video_cc_sm8350_desc;
struct regmap *regmap;
int ret;
@@ -539,7 +560,7 @@ static int video_cc_sm8350_probe(struct platform_device *pdev)
video_cc_sleep_clk.halt_reg = 0xf58;
video_cc_sleep_clk.clkr.enable_reg = 0xf58;
video_cc_xo_clk_src.cmd_rcgr = 0xf14;
- video_cc_xo_clk_cbcr = 0xf34;
+ desc.driver_data = &video_cc_sc8280xp_driver_data;
video_pll0.vco_table = video_pll1.vco_table = lucid_5lpe_vco_8280xp;
/* No change, but assign it for completeness */
@@ -558,11 +579,7 @@ static int video_cc_sm8350_probe(struct platform_device *pdev)
clk_lucid_pll_configure(&video_pll0, regmap, &video_pll0_config);
clk_lucid_pll_configure(&video_pll1, regmap, &video_pll1_config);
- /* Keep some clocks always-on */
- qcom_branch_set_clk_en(regmap, 0xe58); /* VIDEO_CC_AHB_CLK */
- qcom_branch_set_clk_en(regmap, video_cc_xo_clk_cbcr); /* VIDEO_CC_XO_CLK */
-
- ret = qcom_cc_really_probe(&pdev->dev, &video_cc_sm8350_desc, regmap);
+ ret = qcom_cc_really_probe(&pdev->dev, &desc, regmap);
pm_runtime_put(&pdev->dev);
return ret;
--
2.54.0
^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: [PATCH v2 27/48] clk: qcom: gcc-sm6375: Use common clock controller probe data
2026-09-24 12:06 ` [PATCH v2 27/48] clk: qcom: gcc-sm6375: " Abel Vesa
@ 2026-09-25 16:43 ` Bjorn Andersson
0 siblings, 0 replies; 51+ messages in thread
From: Bjorn Andersson @ 2026-09-25 16:43 UTC (permalink / raw)
To: Abel Vesa
Cc: Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet,
linux-arm-msm, linux-clk, linux-kernel, Konrad Dybcio
On Thu, Sep 24, 2026 at 03:06:39PM +0300, Abel Vesa wrote:
> Move the always-on branch register offsets into a critical_cbcrs array
> and describe the DFS RCGs through qcom_cc_driver_data.
>
> Move the configuration of GPLL10, GPLL11, GPLL8 and GPLL9 into the
> clk_regs_configure callback. This preserves the existing ordering of
> enabling the always-on branches before configuring these four PLLs.
I don't see the clk_regs_configure being applied and the four
gpllNN_config definitions are dangling after this change.
(Please use "make W=1e")
I'm applying the rest of the series.
Regards,
Bjorn
> Using the alpha_plls array instead would configure the PLLs before the
> CBCR enables in the common probe path.
>
> Use qcom_cc_probe() to perform the common initialization instead of
> open-coding it in the driver's probe.
>
> Assisted-by: LLM
> Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
> Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
> ---
> drivers/clk/qcom/gcc-sm6375.c | 46 ++++++++++++++++++++++---------------------
> 1 file changed, 24 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/clk/qcom/gcc-sm6375.c b/drivers/clk/qcom/gcc-sm6375.c
> index 9c2acf8dc4b7..c67d4293c76b 100644
> --- a/drivers/clk/qcom/gcc-sm6375.c
> +++ b/drivers/clk/qcom/gcc-sm6375.c
> @@ -3853,7 +3853,30 @@ static const struct regmap_config gcc_sm6375_regmap_config = {
> .fast_io = true,
> };
>
> +static const u32 gcc_sm6375_critical_cbcrs[] = {
> + 0x17028, /* GCC_CAMERA_XO_CLK */
> + 0x2b004, /* GCC_CPUSS_GNOC_CLK */
> + 0x1702c, /* GCC_DISP_XO_CLK */
> +};
> +
> +static struct clk_alpha_pll *gcc_sm6375_plls[] = {
> + &gpll10,
> + &gpll11,
> + &gpll8,
> + &gpll9,
> +};
> +
> +static const struct qcom_cc_driver_data gcc_sm6375_driver_data = {
> + .alpha_plls = gcc_sm6375_plls,
> + .num_alpha_plls = ARRAY_SIZE(gcc_sm6375_plls),
> + .clk_cbcrs = gcc_sm6375_critical_cbcrs,
> + .num_clk_cbcrs = ARRAY_SIZE(gcc_sm6375_critical_cbcrs),
> + .dfs_rcgs = gcc_dfs_clocks,
> + .num_dfs_rcgs = ARRAY_SIZE(gcc_dfs_clocks),
> +};
> +
> static const struct qcom_cc_desc gcc_sm6375_desc = {
> + .driver_data = &gcc_sm6375_driver_data,
> .config = &gcc_sm6375_regmap_config,
> .clks = gcc_sm6375_clocks,
> .num_clks = ARRAY_SIZE(gcc_sm6375_clocks),
> @@ -3871,28 +3894,7 @@ MODULE_DEVICE_TABLE(of, gcc_sm6375_match_table);
>
> static int gcc_sm6375_probe(struct platform_device *pdev)
> {
> - struct regmap *regmap;
> - int ret;
> -
> - regmap = qcom_cc_map(pdev, &gcc_sm6375_desc);
> - if (IS_ERR(regmap))
> - return PTR_ERR(regmap);
> -
> - ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, ARRAY_SIZE(gcc_dfs_clocks));
> - if (ret)
> - return ret;
> -
> - /* Keep some clocks always-on */
> - qcom_branch_set_clk_en(regmap, 0x17028); /* GCC_CAMERA_XO_CLK */
> - qcom_branch_set_clk_en(regmap, 0x2b004); /* GCC_CPUSS_GNOC_CLK */
> - qcom_branch_set_clk_en(regmap, 0x1702c); /* GCC_DISP_XO_CLK */
> -
> - clk_lucid_pll_configure(&gpll10, regmap, &gpll10_config);
> - clk_lucid_pll_configure(&gpll11, regmap, &gpll11_config);
> - clk_lucid_pll_configure(&gpll8, regmap, &gpll8_config);
> - clk_zonda_pll_configure(&gpll9, regmap, &gpll9_config);
> -
> - return qcom_cc_really_probe(&pdev->dev, &gcc_sm6375_desc, regmap);
> + return qcom_cc_probe(pdev, &gcc_sm6375_desc);
> }
>
> static struct platform_driver gcc_sm6375_driver = {
>
> --
> 2.54.0
>
^ permalink raw reply [flat|nested] 51+ messages in thread
* Re: [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
` (47 preceding siblings ...)
2026-09-24 12:07 ` [PATCH v2 48/48] clk: qcom: videocc-sm8350: " Abel Vesa
@ 2026-09-25 16:43 ` Bjorn Andersson
48 siblings, 0 replies; 51+ messages in thread
From: Bjorn Andersson @ 2026-09-25 16:43 UTC (permalink / raw)
To: Abel Vesa, Stephen Boyd, Brian Masney, Jerome Brunet, Abel Vesa
Cc: linux-arm-msm, linux-clk, linux-kernel, Konrad Dybcio
On Thu, 24 Sep 2026 15:06:12 +0300, Abel Vesa wrote:
> Many Qualcomm clock controller drivers still enable always-on branches
> with individual qcom_branch_set_clk_en() calls in their probe functions.
> The common probe code already supports describing these register offsets
> through the clk_cbcrs and num_clk_cbcrs fields of qcom_cc_driver_data.
>
> Convert the remaining users of these direct calls to per-controller
> critical_cbcrs arrays. This centralizes branch enable handling in the
> common probe path and makes the always-on register lists easier to review
> alongside the other controller data.
>
> [...]
Applied, thanks!
[01/48] clk: qcom: camcc-sa8775p: Use common probe handling for always-on clocks
commit: 7eb9459539d52538037d8eec9615313d6aecbf47
[02/48] clk: qcom: camcc-sc8280xp: Use common probe handling for always-on clocks
commit: 7c930f77f887690218c4d17ec697d9db9dcc8a40
[03/48] clk: qcom: camcc-sm7150: Use common probe handling for always-on clocks
commit: e63e4765c85baa65a20a42bfe27acf3536e3968a
[04/48] clk: qcom: camcc-sm8150: Use common probe handling for always-on clocks
commit: befae2adef7273b64bade5df7f3309cb557dd490
[05/48] clk: qcom: dispcc-sc7280: Use common probe handling for always-on clocks
commit: d8d527f0c0d99cce7d6746e2ea5bec628a2aab4b
[06/48] clk: qcom: dispcc-sc8280xp: Use common probe handling for always-on clocks
commit: 7455a58f12d121e9a6f7077974bc1d693e171421
[07/48] clk: qcom: dispcc-sm4450: Use common probe handling for always-on clocks
commit: 3e421998bf409ea3d6981af7285b7464d5256c29
[08/48] clk: qcom: dispcc-sm6115: Use common probe handling for always-on clocks
commit: c493f533d5d35b85744c2d57794efabd6b6bddff
[09/48] clk: qcom: dispcc-sm7150: Use common probe handling for always-on clocks
commit: ee4ce0f4fea673cdea8211f759106d49079958ec
[10/48] clk: qcom: dispcc-sm8250: Use common probe handling for always-on clocks
commit: c0636033aa14a60c22d1d4a93346f0bb57644d8b
[11/48] clk: qcom: dispcc-sm8550: Use common probe handling for always-on clocks
commit: be2a9494c2b5f0fcd344b5e9e57b38f5fa0de851
[12/48] clk: qcom: dispcc-sm8750: Use common probe handling for always-on clocks
commit: d25deb9e17bbed30fc159cd7620ee0f234202340
[13/48] clk: qcom: dispcc-x1e80100: Use common probe handling for always-on clocks
commit: fdb5ddde3caf8d4e6a6a62f878f32434d036c064
[14/48] clk: qcom: dispcc0-sa8775p: Use common probe handling for always-on clocks
commit: 5f691b22bb6c754227566a20769c6851a675705d
[15/48] clk: qcom: dispcc1-sa8775p: Use common probe handling for always-on clocks
commit: 1f866f76101d042002986562971739413e5f94ab
[16/48] clk: qcom: gcc-qcs615: Use common clock controller probe data
commit: 551c084888fe6ca5f898712efbc6824062e0637d
[17/48] clk: qcom: gcc-qcs8300: Use common clock controller probe data
commit: 24261c7a5d64e2277e9b560e4375eed1b2432e14
[18/48] clk: qcom: gcc-sa8775p: Use common clock controller probe data
commit: 2b52742158c37b182c17dc935b15e10bc25f8901
[19/48] clk: qcom: gcc-sar2130p: Use common clock controller probe data
commit: c4d24953658a53cb6bb81df06b8fa915baf12ad7
[20/48] clk: qcom: gcc-sc7180: Use common clock controller probe data
commit: 88dab1941aa1ab252342170ec6c884e9fd0cea98
[21/48] clk: qcom: gcc-sc7280: Use common clock controller probe data
commit: 383653f147a48d6eaf7becc909b355267cb1c4a2
[22/48] clk: qcom: gcc-sc8280xp: Use common clock controller probe data
commit: 8094ef9696088129447224ca20b76304092c1c00
[23/48] clk: qcom: gcc-sdx55: Use common clock controller probe data
commit: b3c909ed2acdbb8bb2a427edb3f0f79d3c04c46e
[24/48] clk: qcom: gcc-sdx65: Use common clock controller probe data
commit: 393391a6d92f0e39f971f48a1fc9ab96fd71a9ad
[25/48] clk: qcom: gcc-sdx75: Use common clock controller probe data
commit: 0821b268a8eb387340c18948ed76c4b95be621a4
[26/48] clk: qcom: gcc-sm4450: Use common clock controller probe data
commit: fc759ed7b4453b3c8684dad4432dd10b5e7066e9
[27/48] clk: qcom: gcc-sm6375: Use common clock controller probe data
(no commit info)
[28/48] clk: qcom: gcc-sm7150: Use common clock controller probe data
commit: 53cda6d37c1aca4af24a23f28196e3d81828b5fc
[29/48] clk: qcom: gcc-sm8250: Use common clock controller probe data
commit: bcb212df8e3bd92751d92045f70290facaa24df1
[30/48] clk: qcom: gcc-sm8350: Use common clock controller probe data
commit: a60013ab5ee858b7595dbd3940d5ff417620b13f
[31/48] clk: qcom: gcc-sm8450: Use common clock controller probe data
commit: f388ea59e5baa8921bf2bcd054e347ebf54fd277
[32/48] clk: qcom: gcc-sm8550: Use common clock controller probe data
commit: 611dff26479c41c8696e08ea631ebfc3b8b8bf5e
[33/48] clk: qcom: gcc-sm8650: Use common clock controller probe data
commit: 342130d88ff1a56e10f3ebd5ac838d6ed9d6b2aa
[34/48] clk: qcom: gcc-sm8750: Use common clock controller probe data
commit: b6cd5183c3fd6a60c0ba018a665e437f4fd72f48
[35/48] clk: qcom: gcc-x1e80100: Use common clock controller probe data
commit: 06d1ee4027e6fded9a1306beb7635f62afcb0e7f
[36/48] clk: qcom: gpucc-sar2130p: Use common probe handling for always-on clocks
commit: ec0ca61b58d9240b85c0426a1a5a518b7dfc28fa
[37/48] clk: qcom: gpucc-sc7280: Use common probe handling for always-on clocks
commit: 1695caf1a4c2dd59bd732e8e29b024661f244a31
[38/48] clk: qcom: gpucc-sc8280xp: Use common probe handling for always-on clocks
commit: d158c3febddd902c7d30d5574cd03f925e96a75a
[39/48] clk: qcom: gpucc-sm4450: Use common probe handling for always-on clocks
commit: 99548f35b5fa60455d75530e010fbe7767cbafe4
[40/48] clk: qcom: gpucc-sm8550: Use common probe handling for always-on clocks
commit: 175a79271c0715036336537a49e1e7a0101adac0
[41/48] clk: qcom: gpucc-x1e80100: Use common probe handling for always-on clocks
commit: e4f6a7b4a00e26b3c13b406b58f0126c9d6be6ef
[42/48] clk: qcom: gpucc-x1p42100: Use common probe handling for always-on clocks
commit: d0c66a44fcc5f11783b2ec98b026a436a01ee19f
[43/48] clk: qcom: lpasscorecc-sc7180: Use common probe handling for always-on clocks
commit: 9ccfc0568ead5413470124d3d25343c06356616a
[44/48] clk: qcom: videocc-sa8775p: Use common probe handling for always-on clocks
commit: 0b439d08063fc0aa525c82528acdc45b28bc35a0
[45/48] clk: qcom: videocc-sm6350: Use common probe handling for always-on clocks
commit: 16dbb56fd63ce02ee2b190de273641788a6c668b
[46/48] clk: qcom: videocc-sm7150: Use common probe handling for always-on clocks
commit: b81602789b9de6f6145366f498f9411b423c1e7f
[47/48] clk: qcom: videocc-sm8250: Use common probe handling for always-on clocks
commit: ec0454e13dc7fa01476e8630035ec4eac4bba1e7
[48/48] clk: qcom: videocc-sm8350: Use common probe handling for always-on clocks
commit: 1fb6a543e7df78047afb07a58832fd4fa42151be
Best regards,
--
Bjorn Andersson <andersson@kernel.org>
^ permalink raw reply [flat|nested] 51+ messages in thread
end of thread, other threads:[~2026-09-25 16:43 UTC | newest]
Thread overview: 51+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-24 12:06 [PATCH v2 00/48] clk: qcom: Use common probe data for always-on clocks Abel Vesa
2026-09-24 12:06 ` [PATCH v2 01/48] clk: qcom: camcc-sa8775p: Use common probe handling " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 02/48] clk: qcom: camcc-sc8280xp: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 03/48] clk: qcom: camcc-sm7150: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 04/48] clk: qcom: camcc-sm8150: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 05/48] clk: qcom: dispcc-sc7280: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 06/48] clk: qcom: dispcc-sc8280xp: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 07/48] clk: qcom: dispcc-sm4450: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 08/48] clk: qcom: dispcc-sm6115: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 09/48] clk: qcom: dispcc-sm7150: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 10/48] clk: qcom: dispcc-sm8250: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 11/48] clk: qcom: dispcc-sm8550: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 12/48] clk: qcom: dispcc-sm8750: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 13/48] clk: qcom: dispcc-x1e80100: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 14/48] clk: qcom: dispcc0-sa8775p: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 15/48] clk: qcom: dispcc1-sa8775p: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 16/48] clk: qcom: gcc-qcs615: Use common clock controller probe data Abel Vesa
2026-09-24 12:06 ` [PATCH v2 17/48] clk: qcom: gcc-qcs8300: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 18/48] clk: qcom: gcc-sa8775p: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 19/48] clk: qcom: gcc-sar2130p: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 20/48] clk: qcom: gcc-sc7180: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 21/48] clk: qcom: gcc-sc7280: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 22/48] clk: qcom: gcc-sc8280xp: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 23/48] clk: qcom: gcc-sdx55: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 24/48] clk: qcom: gcc-sdx65: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 25/48] clk: qcom: gcc-sdx75: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 26/48] clk: qcom: gcc-sm4450: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 27/48] clk: qcom: gcc-sm6375: " Abel Vesa
2026-09-25 16:43 ` Bjorn Andersson
2026-09-24 12:06 ` [PATCH v2 28/48] clk: qcom: gcc-sm7150: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 29/48] clk: qcom: gcc-sm8250: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 30/48] clk: qcom: gcc-sm8350: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 31/48] clk: qcom: gcc-sm8450: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 32/48] clk: qcom: gcc-sm8550: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 33/48] clk: qcom: gcc-sm8650: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 34/48] clk: qcom: gcc-sm8750: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 35/48] clk: qcom: gcc-x1e80100: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 36/48] clk: qcom: gpucc-sar2130p: Use common probe handling for always-on clocks Abel Vesa
2026-09-24 12:06 ` [PATCH v2 37/48] clk: qcom: gpucc-sc7280: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 38/48] clk: qcom: gpucc-sc8280xp: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 39/48] clk: qcom: gpucc-sm4450: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 40/48] clk: qcom: gpucc-sm8550: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 41/48] clk: qcom: gpucc-x1e80100: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 42/48] clk: qcom: gpucc-x1p42100: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 43/48] clk: qcom: lpasscorecc-sc7180: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 44/48] clk: qcom: videocc-sa8775p: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 45/48] clk: qcom: videocc-sm6350: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 46/48] clk: qcom: videocc-sm7150: " Abel Vesa
2026-09-24 12:06 ` [PATCH v2 47/48] clk: qcom: videocc-sm8250: " Abel Vesa
2026-09-24 12:07 ` [PATCH v2 48/48] clk: qcom: videocc-sm8350: " Abel Vesa
2026-09-25 16:43 ` [PATCH v2 00/48] clk: qcom: Use common probe data " Bjorn Andersson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®