2021-07-31 16:49:37

by Iskren Chernev

[permalink] [raw]
Subject: [PATCH v3 0/2] Add rpmcc and rpmpd for SM4250/6115

This patch adds support for the RPM clocks and power domains on QCom SM4250 and
SM6115, codename bengal. The rpmcc code is converted from downstream code
(OnePlus repo [1]), and the rpmpd is converted from downstream DT extracted
from OnePlus Nord N100.

The downstream code has additional voter clocks, which let consumers vote and
the driver to select the highest desired clock rate for a given (real) parent
clock [2]. I might port that as well in the near future, let me know if there
is a more elegant solution.

[1]: https://github.com/OnePlusOSS/android_kernel_oneplus_sm4250
[2]: https://source.codeaurora.org/quic/server/kernel/commit/?h=v4.9.137&id=6a4951a8308c5729ae8e502787cb705477c94251

v1: https://lkml.org/lkml/2021/6/22/1171
v2: https://lkml.org/lkml/2021/6/27/169

Changes from v2:
- note that all except patch 3/5 of the v2 patches were merged in next, and
patch 3/5 was split in 2
- split smd-rpm compat string addition in it's own patch

Changes from v1:
- remove 4250 compatible, both platforms will share one dtsi
- reuse existing clocks as per a0384ecfe2aa ("clk: qcom: smd-rpm: De-duplicate identical entries")

Iskren Chernev (2):
clk: qcom: smd: Add support for SM6115 rpm clocks
soc: qcom: smd-rpm: Add SM6115 compatible

drivers/clk/qcom/clk-smd-rpm.c | 54 ++++++++++++++++++++++++++++++++
drivers/soc/qcom/smd-rpm.c | 1 +
include/linux/soc/qcom/smd-rpm.h | 1 +
3 files changed, 56 insertions(+)


base-commit: 8d4b477da1a807199ca60e0829357ce7aa6758d5
--
2.32.0



2021-07-31 16:49:37

by Iskren Chernev

[permalink] [raw]
Subject: [PATCH v3 1/2] clk: qcom: smd: Add support for SM6115 rpm clocks

Add rpm smd clocks, PMIC and bus clocks which are required on
SM4250/6115 for clients to vote on.

Signed-off-by: Iskren Chernev <[email protected]>
---
drivers/clk/qcom/clk-smd-rpm.c | 54 ++++++++++++++++++++++++++++++++
include/linux/soc/qcom/smd-rpm.h | 1 +
2 files changed, 55 insertions(+)

diff --git a/drivers/clk/qcom/clk-smd-rpm.c b/drivers/clk/qcom/clk-smd-rpm.c
index b2c142f3a649..074bda407edf 100644
--- a/drivers/clk/qcom/clk-smd-rpm.c
+++ b/drivers/clk/qcom/clk-smd-rpm.c
@@ -913,6 +913,59 @@ static const struct rpm_smd_clk_desc rpm_clk_sdm660 = {
.num_clks = ARRAY_SIZE(sdm660_clks),
};

+/* sm6115 */
+DEFINE_CLK_SMD_RPM(sm6115, cnoc_clk, cnoc_a_clk, QCOM_SMD_RPM_BUS_CLK, 1);
+DEFINE_CLK_SMD_RPM(sm6115, snoc_clk, snoc_a_clk, QCOM_SMD_RPM_BUS_CLK, 2);
+DEFINE_CLK_SMD_RPM_BRANCH(sm6115, qdss_clk, qdss_a_clk,
+ QCOM_SMD_RPM_MISC_CLK, 1, 19200000);
+DEFINE_CLK_SMD_RPM(sm6115, qup_clk, qup_a_clk, QCOM_SMD_RPM_QUP_CLK, 0);
+DEFINE_CLK_SMD_RPM(sm6115, mmnrt_clk, mmnrt_a_clk, QCOM_SMD_RPM_MMAXI_CLK, 0);
+DEFINE_CLK_SMD_RPM(sm6115, mmrt_clk, mmrt_a_clk, QCOM_SMD_RPM_MMAXI_CLK, 1);
+DEFINE_CLK_SMD_RPM(sm6115, snoc_periph_clk, snoc_periph_a_clk,
+ QCOM_SMD_RPM_BUS_CLK, 0);
+DEFINE_CLK_SMD_RPM(sm6115, snoc_lpass_clk, snoc_lpass_a_clk,
+ QCOM_SMD_RPM_BUS_CLK, 5);
+
+static struct clk_smd_rpm *sm6115_clks[] = {
+ [RPM_SMD_XO_CLK_SRC] = &sdm660_bi_tcxo,
+ [RPM_SMD_XO_A_CLK_SRC] = &sdm660_bi_tcxo_a,
+ [RPM_SMD_SNOC_CLK] = &sm6115_snoc_clk,
+ [RPM_SMD_SNOC_A_CLK] = &sm6115_snoc_a_clk,
+ [RPM_SMD_BIMC_CLK] = &msm8916_bimc_clk,
+ [RPM_SMD_BIMC_A_CLK] = &msm8916_bimc_a_clk,
+ [RPM_SMD_QDSS_CLK] = &sm6115_qdss_clk,
+ [RPM_SMD_QDSS_A_CLK] = &sm6115_qdss_a_clk,
+ [RPM_SMD_RF_CLK1] = &msm8916_rf_clk1,
+ [RPM_SMD_RF_CLK1_A] = &msm8916_rf_clk1_a,
+ [RPM_SMD_RF_CLK2] = &msm8916_rf_clk2,
+ [RPM_SMD_RF_CLK2_A] = &msm8916_rf_clk2_a,
+ [RPM_SMD_CNOC_CLK] = &sm6115_cnoc_clk,
+ [RPM_SMD_CNOC_A_CLK] = &sm6115_cnoc_a_clk,
+ [RPM_SMD_IPA_CLK] = &msm8976_ipa_clk,
+ [RPM_SMD_IPA_A_CLK] = &msm8976_ipa_a_clk,
+ [RPM_SMD_QUP_CLK] = &sm6115_qup_clk,
+ [RPM_SMD_QUP_A_CLK] = &sm6115_qup_a_clk,
+ [RPM_SMD_MMRT_CLK] = &sm6115_mmrt_clk,
+ [RPM_SMD_MMRT_A_CLK] = &sm6115_mmrt_a_clk,
+ [RPM_SMD_MMNRT_CLK] = &sm6115_mmnrt_clk,
+ [RPM_SMD_MMNRT_A_CLK] = &sm6115_mmnrt_a_clk,
+ [RPM_SMD_SNOC_PERIPH_CLK] = &sm6115_snoc_periph_clk,
+ [RPM_SMD_SNOC_PERIPH_A_CLK] = &sm6115_snoc_periph_a_clk,
+ [RPM_SMD_SNOC_LPASS_CLK] = &sm6115_snoc_lpass_clk,
+ [RPM_SMD_SNOC_LPASS_A_CLK] = &sm6115_snoc_lpass_a_clk,
+ [RPM_SMD_CE1_CLK] = &msm8992_ce1_clk,
+ [RPM_SMD_CE1_A_CLK] = &msm8992_ce1_a_clk,
+ [RPM_SMD_RF_CLK1_PIN] = &msm8916_rf_clk1_pin,
+ [RPM_SMD_RF_CLK1_A_PIN] = &msm8916_rf_clk1_a_pin,
+ [RPM_SMD_RF_CLK2_PIN] = &msm8916_rf_clk2_pin,
+ [RPM_SMD_RF_CLK2_A_PIN] = &msm8916_rf_clk2_a_pin,
+};
+
+static const struct rpm_smd_clk_desc rpm_clk_sm6115 = {
+ .clks = sm6115_clks,
+ .num_clks = ARRAY_SIZE(sm6115_clks),
+};
+
static const struct of_device_id rpm_smd_clk_match_table[] = {
{ .compatible = "qcom,rpmcc-msm8226", .data = &rpm_clk_msm8974 },
{ .compatible = "qcom,rpmcc-msm8916", .data = &rpm_clk_msm8916 },
@@ -925,6 +978,7 @@ static const struct of_device_id rpm_smd_clk_match_table[] = {
{ .compatible = "qcom,rpmcc-msm8998", .data = &rpm_clk_msm8998 },
{ .compatible = "qcom,rpmcc-qcs404", .data = &rpm_clk_qcs404 },
{ .compatible = "qcom,rpmcc-sdm660", .data = &rpm_clk_sdm660 },
+ { .compatible = "qcom,rpmcc-sm6115", .data = &rpm_clk_sm6115 },
{ }
};
MODULE_DEVICE_TABLE(of, rpm_smd_clk_match_table);
diff --git a/include/linux/soc/qcom/smd-rpm.h b/include/linux/soc/qcom/smd-rpm.h
index f2645ec52520..d350685039ad 100644
--- a/include/linux/soc/qcom/smd-rpm.h
+++ b/include/linux/soc/qcom/smd-rpm.h
@@ -37,6 +37,7 @@ struct qcom_smd_rpm;
#define QCOM_SMD_RPM_IPA_CLK 0x617069
#define QCOM_SMD_RPM_CE_CLK 0x6563
#define QCOM_SMD_RPM_AGGR_CLK 0x72676761
+#define QCOM_SMD_RPM_QUP_CLK 0x00707571

int qcom_rpm_smd_write(struct qcom_smd_rpm *rpm,
int state,
--
2.32.0


2021-07-31 16:49:40

by Iskren Chernev

[permalink] [raw]
Subject: [PATCH v3 2/2] soc: qcom: smd-rpm: Add SM6115 compatible

Add a compatible for SM6115

Signed-off-by: Iskren Chernev <[email protected]>
---
drivers/soc/qcom/smd-rpm.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/soc/qcom/smd-rpm.c b/drivers/soc/qcom/smd-rpm.c
index bc0be1d4be5f..dfdd4f20f5fd 100644
--- a/drivers/soc/qcom/smd-rpm.c
+++ b/drivers/soc/qcom/smd-rpm.c
@@ -242,6 +242,7 @@ static const struct of_device_id qcom_smd_rpm_of_match[] = {
{ .compatible = "qcom,rpm-msm8996" },
{ .compatible = "qcom,rpm-msm8998" },
{ .compatible = "qcom,rpm-sdm660" },
+ { .compatible = "qcom,rpm-sm6115" },
{ .compatible = "qcom,rpm-sm6125" },
{ .compatible = "qcom,rpm-qcs404" },
{}
--
2.32.0


2021-08-06 03:05:31

by Stephen Boyd

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] clk: qcom: smd: Add support for SM6115 rpm clocks

Quoting Iskren Chernev (2021-07-31 09:48:26)
> Add rpm smd clocks, PMIC and bus clocks which are required on
> SM4250/6115 for clients to vote on.
>
> Signed-off-by: Iskren Chernev <[email protected]>
> ---

Applied to clk-next with lots of effort

2021-08-06 23:55:24

by Iskren Chernev

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] clk: qcom: smd: Add support for SM6115 rpm clocks



On 8/6/21 4:42 AM, Stephen Boyd wrote:
> Quoting Iskren Chernev (2021-07-31 09:48:26)
>> Add rpm smd clocks, PMIC and bus clocks which are required on
>> SM4250/6115 for clients to vote on.
>>
>> Signed-off-by: Iskren Chernev <[email protected]>
>> ---
>
> Applied to clk-next with lots of effort
>

Thank you! Now I see - the clock defs align perfectly with 6125, you can thank
Konrad for suggesting to reuse the defs, therefore making any 2 patches
conflict due to clock reuse.

Regards,
Iskren