aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ipq807x/patches-5.15/0127-cpufreq-qcom-nvmem-make-qcom_cpufreq_get_msm_id-retu.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/ipq807x/patches-5.15/0127-cpufreq-qcom-nvmem-make-qcom_cpufreq_get_msm_id-retu.patch')
-rw-r--r--target/linux/ipq807x/patches-5.15/0127-cpufreq-qcom-nvmem-make-qcom_cpufreq_get_msm_id-retu.patch106
1 files changed, 106 insertions, 0 deletions
diff --git a/target/linux/ipq807x/patches-5.15/0127-cpufreq-qcom-nvmem-make-qcom_cpufreq_get_msm_id-retu.patch b/target/linux/ipq807x/patches-5.15/0127-cpufreq-qcom-nvmem-make-qcom_cpufreq_get_msm_id-retu.patch
new file mode 100644
index 0000000000..768866b1b2
--- /dev/null
+++ b/target/linux/ipq807x/patches-5.15/0127-cpufreq-qcom-nvmem-make-qcom_cpufreq_get_msm_id-retu.patch
@@ -0,0 +1,106 @@
+From 85bf71b130ab0e939f53ec9cf1131d67d148bc9a Mon Sep 17 00:00:00 2001
+From: Robert Marko <robimarko@gmail.com>
+Date: Sat, 31 Dec 2022 12:45:31 +0100
+Subject: [PATCH] cpufreq: qcom-nvmem: make qcom_cpufreq_get_msm_id() return
+ the SoC ID
+
+Currently, qcom_cpufreq_get_msm_id() does not simply return the SoC ID
+after getting it via SMEM call but instead uses an enum to encode the
+matched SMEM ID to 2 variants of MSM8996 which are then used in
+qcom_cpufreq_kryo_name_version() to set the supported version.
+
+This prevents qcom_cpufreq_get_msm_id() from being universal and its doing
+more than its name suggests, so lets make it just return the SoC ID
+directly which allows matching directly on the SoC ID and removes the need
+for msm8996_version enum which simplifies the driver.
+It also allows reusing the qcom_cpufreq_get_msm_id() for new SoC-s.
+
+Signed-off-by: Robert Marko <robimarko@gmail.com>
+---
+ drivers/cpufreq/qcom-cpufreq-nvmem.c | 44 ++++++++--------------------
+ 1 file changed, 12 insertions(+), 32 deletions(-)
+
+--- a/drivers/cpufreq/qcom-cpufreq-nvmem.c
++++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c
+@@ -32,12 +32,6 @@
+
+ #include <dt-bindings/arm/qcom,ids.h>
+
+-enum _msm8996_version {
+- MSM8996_V3,
+- MSM8996_SG,
+- NUM_OF_MSM8996_VERSIONS,
+-};
+-
+ struct qcom_cpufreq_drv;
+
+ struct qcom_cpufreq_match_data {
+@@ -136,30 +130,16 @@ static void get_krait_bin_format_b(struc
+ dev_dbg(cpu_dev, "PVS version: %d\n", *pvs_ver);
+ }
+
+-static enum _msm8996_version qcom_cpufreq_get_msm_id(void)
++static int qcom_cpufreq_get_msm_id(void)
+ {
+ size_t len;
+ struct socinfo *info;
+- enum _msm8996_version version;
+
+ info = qcom_smem_get(QCOM_SMEM_HOST_ANY, SMEM_HW_SW_BUILD_ID, &len);
+ if (IS_ERR(info))
+- return NUM_OF_MSM8996_VERSIONS;
+-
+- switch (info->id) {
+- case QCOM_ID_MSM8996:
+- case QCOM_ID_APQ8096:
+- version = MSM8996_V3;
+- break;
+- case QCOM_ID_MSM8996SG:
+- case QCOM_ID_APQ8096SG:
+- version = MSM8996_SG;
+- break;
+- default:
+- version = NUM_OF_MSM8996_VERSIONS;
+- }
++ return PTR_ERR(info);
+
+- return version;
++ return info->id;
+ }
+
+ static int qcom_cpufreq_kryo_name_version(struct device *cpu_dev,
+@@ -168,25 +148,25 @@ static int qcom_cpufreq_kryo_name_versio
+ struct qcom_cpufreq_drv *drv)
+ {
+ size_t len;
++ int msm_id;
+ u8 *speedbin;
+- enum _msm8996_version msm8996_version;
+ *pvs_name = NULL;
+
+- msm8996_version = qcom_cpufreq_get_msm_id();
+- if (NUM_OF_MSM8996_VERSIONS == msm8996_version) {
+- dev_err(cpu_dev, "Not Snapdragon 820/821!");
+- return -ENODEV;
+- }
++ msm_id = qcom_cpufreq_get_msm_id();
++ if (msm_id < 0)
++ return msm_id;
+
+ speedbin = nvmem_cell_read(speedbin_nvmem, &len);
+ if (IS_ERR(speedbin))
+ return PTR_ERR(speedbin);
+
+- switch (msm8996_version) {
+- case MSM8996_V3:
++ switch (msm_id) {
++ case QCOM_ID_MSM8996:
++ case QCOM_ID_APQ8096:
+ drv->versions = 1 << (unsigned int)(*speedbin);
+ break;
+- case MSM8996_SG:
++ case QCOM_ID_MSM8996SG:
++ case QCOM_ID_APQ8096SG:
+ drv->versions = 1 << ((unsigned int)(*speedbin) + 4);
+ break;
+ default: