Skip to content

Commit b874996

Browse files
Kuppuswamy Sathyanarayananrafaeljw
authored andcommitted
powercap: intel_rapl: Move TPMI primitives to TPMI driver
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>
1 parent 04bcbed commit b874996

2 files changed

Lines changed: 53 additions & 51 deletions

File tree

drivers/powercap/intel_rapl_common.c

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -79,15 +79,6 @@
7979
#define PSYS_TIME_WINDOW1_MASK GENMASK_ULL(25, 19)
8080
#define PSYS_TIME_WINDOW2_MASK GENMASK_ULL(57, 51)
8181

82-
/* bitmasks for RAPL TPMI, used by primitive access functions */
83-
#define TPMI_POWER_LIMIT_MASK GENMASK_ULL(17, 0)
84-
#define TPMI_POWER_LIMIT_ENABLE BIT_ULL(62)
85-
#define TPMI_TIME_WINDOW_MASK GENMASK_ULL(24, 18)
86-
#define TPMI_INFO_SPEC_MASK GENMASK_ULL(17, 0)
87-
#define TPMI_INFO_MIN_MASK GENMASK_ULL(35, 18)
88-
#define TPMI_INFO_MAX_MASK GENMASK_ULL(53, 36)
89-
#define TPMI_INFO_MAX_TIME_WIN_MASK GENMASK_ULL(60, 54)
90-
9182
/* Non HW constants */
9283
#define RAPL_PRIMITIVE_DUMMY BIT(2)
9384

@@ -665,45 +656,6 @@ static struct rapl_primitive_info rpi_msr[NR_RAPL_PRIMITIVES] = {
665656
51, RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0),
666657
};
667658

668-
/* RAPL primitives for TPMI I/F */
669-
static struct rapl_primitive_info rpi_tpmi[NR_RAPL_PRIMITIVES] = {
670-
/* name, mask, shift, msr index, unit divisor */
671-
[POWER_LIMIT1] = PRIMITIVE_INFO_INIT(POWER_LIMIT1, TPMI_POWER_LIMIT_MASK, 0,
672-
RAPL_DOMAIN_REG_LIMIT, POWER_UNIT, 0),
673-
[POWER_LIMIT2] = PRIMITIVE_INFO_INIT(POWER_LIMIT2, TPMI_POWER_LIMIT_MASK, 0,
674-
RAPL_DOMAIN_REG_PL2, POWER_UNIT, 0),
675-
[POWER_LIMIT4] = PRIMITIVE_INFO_INIT(POWER_LIMIT4, TPMI_POWER_LIMIT_MASK, 0,
676-
RAPL_DOMAIN_REG_PL4, POWER_UNIT, 0),
677-
[ENERGY_COUNTER] = PRIMITIVE_INFO_INIT(ENERGY_COUNTER, ENERGY_STATUS_MASK, 0,
678-
RAPL_DOMAIN_REG_STATUS, ENERGY_UNIT, 0),
679-
[PL1_LOCK] = PRIMITIVE_INFO_INIT(PL1_LOCK, POWER_HIGH_LOCK, 63,
680-
RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0),
681-
[PL2_LOCK] = PRIMITIVE_INFO_INIT(PL2_LOCK, POWER_HIGH_LOCK, 63,
682-
RAPL_DOMAIN_REG_PL2, ARBITRARY_UNIT, 0),
683-
[PL4_LOCK] = PRIMITIVE_INFO_INIT(PL4_LOCK, POWER_HIGH_LOCK, 63,
684-
RAPL_DOMAIN_REG_PL4, ARBITRARY_UNIT, 0),
685-
[PL1_ENABLE] = PRIMITIVE_INFO_INIT(PL1_ENABLE, TPMI_POWER_LIMIT_ENABLE, 62,
686-
RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0),
687-
[PL2_ENABLE] = PRIMITIVE_INFO_INIT(PL2_ENABLE, TPMI_POWER_LIMIT_ENABLE, 62,
688-
RAPL_DOMAIN_REG_PL2, ARBITRARY_UNIT, 0),
689-
[PL4_ENABLE] = PRIMITIVE_INFO_INIT(PL4_ENABLE, TPMI_POWER_LIMIT_ENABLE, 62,
690-
RAPL_DOMAIN_REG_PL4, ARBITRARY_UNIT, 0),
691-
[TIME_WINDOW1] = PRIMITIVE_INFO_INIT(TIME_WINDOW1, TPMI_TIME_WINDOW_MASK, 18,
692-
RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0),
693-
[TIME_WINDOW2] = PRIMITIVE_INFO_INIT(TIME_WINDOW2, TPMI_TIME_WINDOW_MASK, 18,
694-
RAPL_DOMAIN_REG_PL2, TIME_UNIT, 0),
695-
[THERMAL_SPEC_POWER] = PRIMITIVE_INFO_INIT(THERMAL_SPEC_POWER, TPMI_INFO_SPEC_MASK, 0,
696-
RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0),
697-
[MAX_POWER] = PRIMITIVE_INFO_INIT(MAX_POWER, TPMI_INFO_MAX_MASK, 36,
698-
RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0),
699-
[MIN_POWER] = PRIMITIVE_INFO_INIT(MIN_POWER, TPMI_INFO_MIN_MASK, 18,
700-
RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0),
701-
[MAX_TIME_WINDOW] = PRIMITIVE_INFO_INIT(MAX_TIME_WINDOW, TPMI_INFO_MAX_TIME_WIN_MASK,
702-
54, RAPL_DOMAIN_REG_INFO, TIME_UNIT, 0),
703-
[THROTTLED_TIME] = PRIMITIVE_INFO_INIT(THROTTLED_TIME, PERF_STATUS_THROTTLE_TIME_MASK,
704-
0, RAPL_DOMAIN_REG_PERF, TIME_UNIT, 0),
705-
};
706-
707659
static struct rapl_primitive_info *get_rpi(struct rapl_package *rp, int prim)
708660
{
709661
struct rapl_primitive_info *rpi = rp->priv->rpi;
@@ -722,9 +674,6 @@ static int rapl_config(struct rapl_package *rp)
722674
case RAPL_IF_MSR:
723675
rp->priv->rpi = rpi_msr;
724676
break;
725-
case RAPL_IF_TPMI:
726-
rp->priv->rpi = rpi_tpmi;
727-
break;
728677
default:
729678
return -EINVAL;
730679
}

drivers/powercap/intel_rapl_tpmi.c

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,58 @@ static DEFINE_MUTEX(tpmi_rapl_lock);
6262

6363
static struct powercap_control_type *tpmi_control_type;
6464

65+
/* bitmasks for RAPL TPMI, used by primitive access functions */
66+
#define TPMI_POWER_LIMIT_MASK GENMASK_ULL(17, 0)
67+
#define TPMI_POWER_LIMIT_ENABLE BIT_ULL(62)
68+
#define TPMI_POWER_HIGH_LOCK BIT_ULL(63)
69+
#define TPMI_TIME_WINDOW_MASK GENMASK_ULL(24, 18)
70+
#define TPMI_INFO_SPEC_MASK GENMASK_ULL(17, 0)
71+
#define TPMI_INFO_MIN_MASK GENMASK_ULL(35, 18)
72+
#define TPMI_INFO_MAX_MASK GENMASK_ULL(53, 36)
73+
#define TPMI_INFO_MAX_TIME_WIN_MASK GENMASK_ULL(60, 54)
74+
#define TPMI_ENERGY_STATUS_MASK GENMASK(31, 0)
75+
#define TPMI_PERF_STATUS_THROTTLE_TIME_MASK GENMASK(31, 0)
76+
77+
/* RAPL primitives for TPMI I/F */
78+
static struct rapl_primitive_info rpi_tpmi[NR_RAPL_PRIMITIVES] = {
79+
/* name, mask, shift, msr index, unit divisor */
80+
[POWER_LIMIT1] = PRIMITIVE_INFO_INIT(POWER_LIMIT1, TPMI_POWER_LIMIT_MASK, 0,
81+
RAPL_DOMAIN_REG_LIMIT, POWER_UNIT, 0),
82+
[POWER_LIMIT2] = PRIMITIVE_INFO_INIT(POWER_LIMIT2, TPMI_POWER_LIMIT_MASK, 0,
83+
RAPL_DOMAIN_REG_PL2, POWER_UNIT, 0),
84+
[POWER_LIMIT4] = PRIMITIVE_INFO_INIT(POWER_LIMIT4, TPMI_POWER_LIMIT_MASK, 0,
85+
RAPL_DOMAIN_REG_PL4, POWER_UNIT, 0),
86+
[ENERGY_COUNTER] = PRIMITIVE_INFO_INIT(ENERGY_COUNTER, TPMI_ENERGY_STATUS_MASK, 0,
87+
RAPL_DOMAIN_REG_STATUS, ENERGY_UNIT, 0),
88+
[PL1_LOCK] = PRIMITIVE_INFO_INIT(PL1_LOCK, TPMI_POWER_HIGH_LOCK, 63,
89+
RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0),
90+
[PL2_LOCK] = PRIMITIVE_INFO_INIT(PL2_LOCK, TPMI_POWER_HIGH_LOCK, 63,
91+
RAPL_DOMAIN_REG_PL2, ARBITRARY_UNIT, 0),
92+
[PL4_LOCK] = PRIMITIVE_INFO_INIT(PL4_LOCK, TPMI_POWER_HIGH_LOCK, 63,
93+
RAPL_DOMAIN_REG_PL4, ARBITRARY_UNIT, 0),
94+
[PL1_ENABLE] = PRIMITIVE_INFO_INIT(PL1_ENABLE, TPMI_POWER_LIMIT_ENABLE, 62,
95+
RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0),
96+
[PL2_ENABLE] = PRIMITIVE_INFO_INIT(PL2_ENABLE, TPMI_POWER_LIMIT_ENABLE, 62,
97+
RAPL_DOMAIN_REG_PL2, ARBITRARY_UNIT, 0),
98+
[PL4_ENABLE] = PRIMITIVE_INFO_INIT(PL4_ENABLE, TPMI_POWER_LIMIT_ENABLE, 62,
99+
RAPL_DOMAIN_REG_PL4, ARBITRARY_UNIT, 0),
100+
[TIME_WINDOW1] = PRIMITIVE_INFO_INIT(TIME_WINDOW1, TPMI_TIME_WINDOW_MASK, 18,
101+
RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0),
102+
[TIME_WINDOW2] = PRIMITIVE_INFO_INIT(TIME_WINDOW2, TPMI_TIME_WINDOW_MASK, 18,
103+
RAPL_DOMAIN_REG_PL2, TIME_UNIT, 0),
104+
[THERMAL_SPEC_POWER] = PRIMITIVE_INFO_INIT(THERMAL_SPEC_POWER, TPMI_INFO_SPEC_MASK, 0,
105+
RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0),
106+
[MAX_POWER] = PRIMITIVE_INFO_INIT(MAX_POWER, TPMI_INFO_MAX_MASK, 36,
107+
RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0),
108+
[MIN_POWER] = PRIMITIVE_INFO_INIT(MIN_POWER, TPMI_INFO_MIN_MASK, 18,
109+
RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0),
110+
[MAX_TIME_WINDOW] = PRIMITIVE_INFO_INIT(MAX_TIME_WINDOW, TPMI_INFO_MAX_TIME_WIN_MASK,
111+
54, RAPL_DOMAIN_REG_INFO, TIME_UNIT, 0),
112+
[THROTTLED_TIME] = PRIMITIVE_INFO_INIT(THROTTLED_TIME,
113+
TPMI_PERF_STATUS_THROTTLE_TIME_MASK,
114+
0, RAPL_DOMAIN_REG_PERF, TIME_UNIT, 0),
115+
};
116+
65117
static int tpmi_rapl_read_raw(int id, struct reg_action *ra, bool atomic)
66118
{
67119
if (!ra->reg.mmio)
@@ -344,6 +396,7 @@ static int intel_rapl_tpmi_probe(struct auxiliary_device *auxdev,
344396
trp->priv.write_raw = tpmi_rapl_write_raw;
345397
trp->priv.control_type = tpmi_control_type;
346398
trp->priv.defaults = &defaults_tpmi;
399+
trp->priv.rpi = rpi_tpmi;
347400

348401
/* RAPL TPMI I/F is per physical package */
349402
trp->rp = rapl_find_package_domain(info->package_id, &trp->priv, false);

0 commit comments

Comments
 (0)