mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-21 22:47:56 +00:00
d442790bbf
Currently, IPQ807x is using CPUFreq NVMEM for dealing with different SoC SKU-s having different frequency limits, and we are keeping the patches for it in ipq807x target. However, we managed to upstream a big cleanup of the driver in order to make it possible for other SMEM based targets to be added to CPUFreq NVMEM. IPQ806x will be using CPUFreq NVMEM and depends on these changes as well, so lets put them in generic backport to avoid code duplication. This replaces the older patches in ipq807x. Signed-off-by: Robert Marko <robimarko@gmail.com>
110 lines
2.9 KiB
Diff
110 lines
2.9 KiB
Diff
From e7992615acacc27baeec310197108143afc77337 Mon Sep 17 00:00:00 2001
|
|
From: Robert Marko <robimarko@gmail.com>
|
|
Date: Fri, 26 May 2023 22:48:02 +0200
|
|
Subject: [PATCH] cpufreq: qcom-nvmem: use helper to get SMEM SoC ID
|
|
|
|
Now that SMEM exports a helper to get the SMEM SoC ID lets utilize it.
|
|
Currently qcom_cpufreq_get_msm_id() is encoding the returned SMEM SoC ID
|
|
into an enum, however there is no reason to do so and we can just match
|
|
directly on the SMEM SoC ID as returned by qcom_smem_get_soc_id().
|
|
|
|
Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
|
|
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
|
|
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
|
|
Link: https://lore.kernel.org/r/20230526204802.3081168-5-robimarko@gmail.com
|
|
---
|
|
drivers/cpufreq/qcom-cpufreq-nvmem.c | 56 +++++-----------------------
|
|
1 file changed, 10 insertions(+), 46 deletions(-)
|
|
|
|
--- a/drivers/cpufreq/qcom-cpufreq-nvmem.c
|
|
+++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c
|
|
@@ -29,16 +29,8 @@
|
|
#include <linux/slab.h>
|
|
#include <linux/soc/qcom/smem.h>
|
|
|
|
-#define MSM_ID_SMEM 137
|
|
-
|
|
#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 {
|
|
@@ -135,60 +127,32 @@ 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)
|
|
-{
|
|
- size_t len;
|
|
- u32 *msm_id;
|
|
- enum _msm8996_version version;
|
|
-
|
|
- msm_id = qcom_smem_get(QCOM_SMEM_HOST_ANY, MSM_ID_SMEM, &len);
|
|
- if (IS_ERR(msm_id))
|
|
- return NUM_OF_MSM8996_VERSIONS;
|
|
-
|
|
- /* The first 4 bytes are format, next to them is the actual msm-id */
|
|
- msm_id++;
|
|
-
|
|
- switch ((enum _msm_id)*msm_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 version;
|
|
-}
|
|
-
|
|
static int qcom_cpufreq_kryo_name_version(struct device *cpu_dev,
|
|
struct nvmem_cell *speedbin_nvmem,
|
|
char **pvs_name,
|
|
struct qcom_cpufreq_drv *drv)
|
|
{
|
|
size_t len;
|
|
+ u32 msm_id;
|
|
u8 *speedbin;
|
|
- enum _msm8996_version msm8996_version;
|
|
+ int ret;
|
|
*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;
|
|
- }
|
|
+ ret = qcom_smem_get_soc_id(&msm_id);
|
|
+ if (ret)
|
|
+ return ret;
|
|
|
|
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:
|