]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
cpufreq: apple-soc: Drop setting the PS2 field on M2+
authorHector Martin <marcan@marcan.st>
Wed, 18 Dec 2024 18:25:04 +0000 (02:25 +0800)
committerViresh Kumar <viresh.kumar@linaro.org>
Mon, 23 Dec 2024 10:56:45 +0000 (16:26 +0530)
Newer device do not use this. It is not known what this field does,
but change the behavior to be same as macOS to be safe.

Signed-off-by: Hector Martin <marcan@marcan.st>
Signed-off-by: Nick Chan <towinchenmi@gmail.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
drivers/cpufreq/apple-soc-cpufreq.c

index 4dcacab9b4bf25c7fb81095619301ee2054af74e..ad6c7b8f290cacb8bf25a90faba02c00a5981465 100644 (file)
@@ -25,7 +25,7 @@
 #define APPLE_DVFS_CMD                 0x20
 #define APPLE_DVFS_CMD_BUSY            BIT(31)
 #define APPLE_DVFS_CMD_SET             BIT(25)
-#define APPLE_DVFS_CMD_PS2             GENMASK(16, 12)
+#define APPLE_DVFS_CMD_PS2             GENMASK(15, 12)
 #define APPLE_DVFS_CMD_PS1             GENMASK(4, 0)
 
 /* Same timebase as CPU counter (24MHz) */
@@ -55,6 +55,7 @@
 #define APPLE_DVFS_TRANSITION_TIMEOUT 100
 
 struct apple_soc_cpufreq_info {
+       bool has_ps2;
        u64 max_pstate;
        u64 cur_pstate_mask;
        u64 cur_pstate_shift;
@@ -69,18 +70,21 @@ struct apple_cpu_priv {
 static struct cpufreq_driver apple_soc_cpufreq_driver;
 
 static const struct apple_soc_cpufreq_info soc_t8103_info = {
+       .has_ps2 = true,
        .max_pstate = 15,
        .cur_pstate_mask = APPLE_DVFS_STATUS_CUR_PS_T8103,
        .cur_pstate_shift = APPLE_DVFS_STATUS_CUR_PS_SHIFT_T8103,
 };
 
 static const struct apple_soc_cpufreq_info soc_t8112_info = {
+       .has_ps2 = false,
        .max_pstate = 31,
        .cur_pstate_mask = APPLE_DVFS_STATUS_CUR_PS_T8112,
        .cur_pstate_shift = APPLE_DVFS_STATUS_CUR_PS_SHIFT_T8112,
 };
 
 static const struct apple_soc_cpufreq_info soc_default_info = {
+       .has_ps2 = false,
        .max_pstate = 15,
        .cur_pstate_mask = 0, /* fallback */
 };
@@ -148,9 +152,12 @@ static int apple_soc_cpufreq_set_target(struct cpufreq_policy *policy,
                return -EIO;
        }
 
-       reg &= ~(APPLE_DVFS_CMD_PS1 | APPLE_DVFS_CMD_PS2);
+       reg &= ~APPLE_DVFS_CMD_PS1;
        reg |= FIELD_PREP(APPLE_DVFS_CMD_PS1, pstate);
-       reg |= FIELD_PREP(APPLE_DVFS_CMD_PS2, pstate);
+       if (priv->info->has_ps2) {
+               reg &= ~APPLE_DVFS_CMD_PS2;
+               reg |= FIELD_PREP(APPLE_DVFS_CMD_PS2, pstate);
+       }
        reg |= APPLE_DVFS_CMD_SET;
 
        writeq_relaxed(reg, priv->reg_base + APPLE_DVFS_CMD);