]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
powercap: intel_rapl: Move TPMI primitives to TPMI driver
authorKuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Tue, 31 Mar 2026 21:19:47 +0000 (14:19 -0700)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 1 Apr 2026 14:03:05 +0000 (16:03 +0200)
TPMI-specific RAPL primitives differ from those used by MSR and MMIO
interfaces. Keeping them in the common RAPL driver requires
interface-specific handling logic and makes the common layer
unnecessarily complex.

Move the TPMI primitive definitions and associated bitmasks into the
TPMI interface driver. This change includes:

 1. Move TPMI-specific bitmask definitions from intel_rapl_common.c to
    intel_rapl_tpmi.c.
 2. Add TPMI-local struct rapl_primitive_info instance and assign it to
    priv->rpi during TPMI probe.
 3. Remove the RAPL TPMI related definitions from the common driver.

No functional changes are intended.

Co-developed-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Link: https://patch.msgid.link/20260331211950.3329932-5-sathyanarayanan.kuppuswamy@linux.intel.com
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/powercap/intel_rapl_common.c
drivers/powercap/intel_rapl_tpmi.c

index ffc9d0378257a26cb97216b3e1279c1852419385..06912cb805f78b8aadfd77aa6b537ec6f5c93617 100644 (file)
 #define PSYS_TIME_WINDOW1_MASK         GENMASK_ULL(25, 19)
 #define PSYS_TIME_WINDOW2_MASK         GENMASK_ULL(57, 51)
 
-/* bitmasks for RAPL TPMI, used by primitive access functions */
-#define TPMI_POWER_LIMIT_MASK          GENMASK_ULL(17, 0)
-#define TPMI_POWER_LIMIT_ENABLE                BIT_ULL(62)
-#define TPMI_TIME_WINDOW_MASK          GENMASK_ULL(24, 18)
-#define TPMI_INFO_SPEC_MASK            GENMASK_ULL(17, 0)
-#define TPMI_INFO_MIN_MASK             GENMASK_ULL(35, 18)
-#define TPMI_INFO_MAX_MASK             GENMASK_ULL(53, 36)
-#define TPMI_INFO_MAX_TIME_WIN_MASK    GENMASK_ULL(60, 54)
-
 /* Non HW constants */
 #define RAPL_PRIMITIVE_DUMMY           BIT(2)
 
@@ -665,45 +656,6 @@ static struct rapl_primitive_info rpi_msr[NR_RAPL_PRIMITIVES] = {
                                                      51, RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0),
 };
 
-/* RAPL primitives for TPMI I/F */
-static struct rapl_primitive_info rpi_tpmi[NR_RAPL_PRIMITIVES] = {
-       /* name, mask, shift, msr index, unit divisor */
-       [POWER_LIMIT1]          = PRIMITIVE_INFO_INIT(POWER_LIMIT1, TPMI_POWER_LIMIT_MASK, 0,
-                                                     RAPL_DOMAIN_REG_LIMIT, POWER_UNIT, 0),
-       [POWER_LIMIT2]          = PRIMITIVE_INFO_INIT(POWER_LIMIT2, TPMI_POWER_LIMIT_MASK, 0,
-                                                     RAPL_DOMAIN_REG_PL2, POWER_UNIT, 0),
-       [POWER_LIMIT4]          = PRIMITIVE_INFO_INIT(POWER_LIMIT4, TPMI_POWER_LIMIT_MASK, 0,
-                                                     RAPL_DOMAIN_REG_PL4, POWER_UNIT, 0),
-       [ENERGY_COUNTER]        = PRIMITIVE_INFO_INIT(ENERGY_COUNTER, ENERGY_STATUS_MASK, 0,
-                                                     RAPL_DOMAIN_REG_STATUS, ENERGY_UNIT, 0),
-       [PL1_LOCK]              = PRIMITIVE_INFO_INIT(PL1_LOCK, POWER_HIGH_LOCK, 63,
-                                                     RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0),
-       [PL2_LOCK]              = PRIMITIVE_INFO_INIT(PL2_LOCK, POWER_HIGH_LOCK, 63,
-                                                     RAPL_DOMAIN_REG_PL2, ARBITRARY_UNIT, 0),
-       [PL4_LOCK]              = PRIMITIVE_INFO_INIT(PL4_LOCK, POWER_HIGH_LOCK, 63,
-                                                     RAPL_DOMAIN_REG_PL4, ARBITRARY_UNIT, 0),
-       [PL1_ENABLE]            = PRIMITIVE_INFO_INIT(PL1_ENABLE, TPMI_POWER_LIMIT_ENABLE, 62,
-                                                     RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0),
-       [PL2_ENABLE]            = PRIMITIVE_INFO_INIT(PL2_ENABLE, TPMI_POWER_LIMIT_ENABLE, 62,
-                                                     RAPL_DOMAIN_REG_PL2, ARBITRARY_UNIT, 0),
-       [PL4_ENABLE]            = PRIMITIVE_INFO_INIT(PL4_ENABLE, TPMI_POWER_LIMIT_ENABLE, 62,
-                                                     RAPL_DOMAIN_REG_PL4, ARBITRARY_UNIT, 0),
-       [TIME_WINDOW1]          = PRIMITIVE_INFO_INIT(TIME_WINDOW1, TPMI_TIME_WINDOW_MASK, 18,
-                                                     RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0),
-       [TIME_WINDOW2]          = PRIMITIVE_INFO_INIT(TIME_WINDOW2, TPMI_TIME_WINDOW_MASK, 18,
-                                                     RAPL_DOMAIN_REG_PL2, TIME_UNIT, 0),
-       [THERMAL_SPEC_POWER]    = PRIMITIVE_INFO_INIT(THERMAL_SPEC_POWER, TPMI_INFO_SPEC_MASK, 0,
-                                                     RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0),
-       [MAX_POWER]             = PRIMITIVE_INFO_INIT(MAX_POWER, TPMI_INFO_MAX_MASK, 36,
-                                                     RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0),
-       [MIN_POWER]             = PRIMITIVE_INFO_INIT(MIN_POWER, TPMI_INFO_MIN_MASK, 18,
-                                                     RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0),
-       [MAX_TIME_WINDOW]       = PRIMITIVE_INFO_INIT(MAX_TIME_WINDOW, TPMI_INFO_MAX_TIME_WIN_MASK,
-                                                     54, RAPL_DOMAIN_REG_INFO, TIME_UNIT, 0),
-       [THROTTLED_TIME]        = PRIMITIVE_INFO_INIT(THROTTLED_TIME, PERF_STATUS_THROTTLE_TIME_MASK,
-                                                     0, RAPL_DOMAIN_REG_PERF, TIME_UNIT, 0),
-};
-
 static struct rapl_primitive_info *get_rpi(struct rapl_package *rp, int prim)
 {
        struct rapl_primitive_info *rpi = rp->priv->rpi;
@@ -722,9 +674,6 @@ static int rapl_config(struct rapl_package *rp)
        case RAPL_IF_MSR:
                rp->priv->rpi = rpi_msr;
                break;
-       case RAPL_IF_TPMI:
-               rp->priv->rpi = rpi_tpmi;
-               break;
        default:
                return -EINVAL;
        }
index c06d687366fcf8036b56204eb3106f6d834a810c..7f41491d9cd1155515d317acdbb898d6d0ff6330 100644 (file)
@@ -62,6 +62,58 @@ static DEFINE_MUTEX(tpmi_rapl_lock);
 
 static struct powercap_control_type *tpmi_control_type;
 
+/* bitmasks for RAPL TPMI, used by primitive access functions */
+#define TPMI_POWER_LIMIT_MASK                  GENMASK_ULL(17, 0)
+#define TPMI_POWER_LIMIT_ENABLE                        BIT_ULL(62)
+#define TPMI_POWER_HIGH_LOCK                   BIT_ULL(63)
+#define TPMI_TIME_WINDOW_MASK                  GENMASK_ULL(24, 18)
+#define TPMI_INFO_SPEC_MASK                    GENMASK_ULL(17, 0)
+#define TPMI_INFO_MIN_MASK                     GENMASK_ULL(35, 18)
+#define TPMI_INFO_MAX_MASK                     GENMASK_ULL(53, 36)
+#define TPMI_INFO_MAX_TIME_WIN_MASK            GENMASK_ULL(60, 54)
+#define TPMI_ENERGY_STATUS_MASK                        GENMASK(31, 0)
+#define TPMI_PERF_STATUS_THROTTLE_TIME_MASK    GENMASK(31, 0)
+
+/* RAPL primitives for TPMI I/F */
+static struct rapl_primitive_info rpi_tpmi[NR_RAPL_PRIMITIVES] = {
+       /* name, mask, shift, msr index, unit divisor */
+       [POWER_LIMIT1]          = PRIMITIVE_INFO_INIT(POWER_LIMIT1, TPMI_POWER_LIMIT_MASK, 0,
+                                                     RAPL_DOMAIN_REG_LIMIT, POWER_UNIT, 0),
+       [POWER_LIMIT2]          = PRIMITIVE_INFO_INIT(POWER_LIMIT2, TPMI_POWER_LIMIT_MASK, 0,
+                                                     RAPL_DOMAIN_REG_PL2, POWER_UNIT, 0),
+       [POWER_LIMIT4]          = PRIMITIVE_INFO_INIT(POWER_LIMIT4, TPMI_POWER_LIMIT_MASK, 0,
+                                                     RAPL_DOMAIN_REG_PL4, POWER_UNIT, 0),
+       [ENERGY_COUNTER]        = PRIMITIVE_INFO_INIT(ENERGY_COUNTER, TPMI_ENERGY_STATUS_MASK, 0,
+                                                     RAPL_DOMAIN_REG_STATUS, ENERGY_UNIT, 0),
+       [PL1_LOCK]              = PRIMITIVE_INFO_INIT(PL1_LOCK, TPMI_POWER_HIGH_LOCK, 63,
+                                                     RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0),
+       [PL2_LOCK]              = PRIMITIVE_INFO_INIT(PL2_LOCK, TPMI_POWER_HIGH_LOCK, 63,
+                                                     RAPL_DOMAIN_REG_PL2, ARBITRARY_UNIT, 0),
+       [PL4_LOCK]              = PRIMITIVE_INFO_INIT(PL4_LOCK, TPMI_POWER_HIGH_LOCK, 63,
+                                                     RAPL_DOMAIN_REG_PL4, ARBITRARY_UNIT, 0),
+       [PL1_ENABLE]            = PRIMITIVE_INFO_INIT(PL1_ENABLE, TPMI_POWER_LIMIT_ENABLE, 62,
+                                                     RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0),
+       [PL2_ENABLE]            = PRIMITIVE_INFO_INIT(PL2_ENABLE, TPMI_POWER_LIMIT_ENABLE, 62,
+                                                     RAPL_DOMAIN_REG_PL2, ARBITRARY_UNIT, 0),
+       [PL4_ENABLE]            = PRIMITIVE_INFO_INIT(PL4_ENABLE, TPMI_POWER_LIMIT_ENABLE, 62,
+                                                     RAPL_DOMAIN_REG_PL4, ARBITRARY_UNIT, 0),
+       [TIME_WINDOW1]          = PRIMITIVE_INFO_INIT(TIME_WINDOW1, TPMI_TIME_WINDOW_MASK, 18,
+                                                     RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0),
+       [TIME_WINDOW2]          = PRIMITIVE_INFO_INIT(TIME_WINDOW2, TPMI_TIME_WINDOW_MASK, 18,
+                                                     RAPL_DOMAIN_REG_PL2, TIME_UNIT, 0),
+       [THERMAL_SPEC_POWER]    = PRIMITIVE_INFO_INIT(THERMAL_SPEC_POWER, TPMI_INFO_SPEC_MASK, 0,
+                                                     RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0),
+       [MAX_POWER]             = PRIMITIVE_INFO_INIT(MAX_POWER, TPMI_INFO_MAX_MASK, 36,
+                                                     RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0),
+       [MIN_POWER]             = PRIMITIVE_INFO_INIT(MIN_POWER, TPMI_INFO_MIN_MASK, 18,
+                                                     RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0),
+       [MAX_TIME_WINDOW]       = PRIMITIVE_INFO_INIT(MAX_TIME_WINDOW, TPMI_INFO_MAX_TIME_WIN_MASK,
+                                                     54, RAPL_DOMAIN_REG_INFO, TIME_UNIT, 0),
+       [THROTTLED_TIME]        = PRIMITIVE_INFO_INIT(THROTTLED_TIME,
+                                                     TPMI_PERF_STATUS_THROTTLE_TIME_MASK,
+                                                     0, RAPL_DOMAIN_REG_PERF, TIME_UNIT, 0),
+};
+
 static int tpmi_rapl_read_raw(int id, struct reg_action *ra, bool atomic)
 {
        if (!ra->reg.mmio)
@@ -344,6 +396,7 @@ static int intel_rapl_tpmi_probe(struct auxiliary_device *auxdev,
        trp->priv.write_raw = tpmi_rapl_write_raw;
        trp->priv.control_type = tpmi_control_type;
        trp->priv.defaults = &defaults_tpmi;
+       trp->priv.rpi = rpi_tpmi;
 
        /* RAPL TPMI I/F is per physical package */
        trp->rp = rapl_find_package_domain(info->package_id, &trp->priv, false);