Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Kuppuswamy Sathyanarayanan and committed by
Rafael J. Wysocki
b874996a 04bcbed4

+53 -51
-51
drivers/powercap/intel_rapl_common.c
··· 79 79 #define PSYS_TIME_WINDOW1_MASK GENMASK_ULL(25, 19) 80 80 #define PSYS_TIME_WINDOW2_MASK GENMASK_ULL(57, 51) 81 81 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 - 91 82 /* Non HW constants */ 92 83 #define RAPL_PRIMITIVE_DUMMY BIT(2) 93 84 ··· 656 665 51, RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0), 657 666 }; 658 667 659 - /* RAPL primitives for TPMI I/F */ 660 - static struct rapl_primitive_info rpi_tpmi[NR_RAPL_PRIMITIVES] = { 661 - /* name, mask, shift, msr index, unit divisor */ 662 - [POWER_LIMIT1] = PRIMITIVE_INFO_INIT(POWER_LIMIT1, TPMI_POWER_LIMIT_MASK, 0, 663 - RAPL_DOMAIN_REG_LIMIT, POWER_UNIT, 0), 664 - [POWER_LIMIT2] = PRIMITIVE_INFO_INIT(POWER_LIMIT2, TPMI_POWER_LIMIT_MASK, 0, 665 - RAPL_DOMAIN_REG_PL2, POWER_UNIT, 0), 666 - [POWER_LIMIT4] = PRIMITIVE_INFO_INIT(POWER_LIMIT4, TPMI_POWER_LIMIT_MASK, 0, 667 - RAPL_DOMAIN_REG_PL4, POWER_UNIT, 0), 668 - [ENERGY_COUNTER] = PRIMITIVE_INFO_INIT(ENERGY_COUNTER, ENERGY_STATUS_MASK, 0, 669 - RAPL_DOMAIN_REG_STATUS, ENERGY_UNIT, 0), 670 - [PL1_LOCK] = PRIMITIVE_INFO_INIT(PL1_LOCK, POWER_HIGH_LOCK, 63, 671 - RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), 672 - [PL2_LOCK] = PRIMITIVE_INFO_INIT(PL2_LOCK, POWER_HIGH_LOCK, 63, 673 - RAPL_DOMAIN_REG_PL2, ARBITRARY_UNIT, 0), 674 - [PL4_LOCK] = PRIMITIVE_INFO_INIT(PL4_LOCK, POWER_HIGH_LOCK, 63, 675 - RAPL_DOMAIN_REG_PL4, ARBITRARY_UNIT, 0), 676 - [PL1_ENABLE] = PRIMITIVE_INFO_INIT(PL1_ENABLE, TPMI_POWER_LIMIT_ENABLE, 62, 677 - RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), 678 - [PL2_ENABLE] = PRIMITIVE_INFO_INIT(PL2_ENABLE, TPMI_POWER_LIMIT_ENABLE, 62, 679 - RAPL_DOMAIN_REG_PL2, ARBITRARY_UNIT, 0), 680 - [PL4_ENABLE] = PRIMITIVE_INFO_INIT(PL4_ENABLE, TPMI_POWER_LIMIT_ENABLE, 62, 681 - RAPL_DOMAIN_REG_PL4, ARBITRARY_UNIT, 0), 682 - [TIME_WINDOW1] = PRIMITIVE_INFO_INIT(TIME_WINDOW1, TPMI_TIME_WINDOW_MASK, 18, 683 - RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0), 684 - [TIME_WINDOW2] = PRIMITIVE_INFO_INIT(TIME_WINDOW2, TPMI_TIME_WINDOW_MASK, 18, 685 - RAPL_DOMAIN_REG_PL2, TIME_UNIT, 0), 686 - [THERMAL_SPEC_POWER] = PRIMITIVE_INFO_INIT(THERMAL_SPEC_POWER, TPMI_INFO_SPEC_MASK, 0, 687 - RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0), 688 - [MAX_POWER] = PRIMITIVE_INFO_INIT(MAX_POWER, TPMI_INFO_MAX_MASK, 36, 689 - RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0), 690 - [MIN_POWER] = PRIMITIVE_INFO_INIT(MIN_POWER, TPMI_INFO_MIN_MASK, 18, 691 - RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0), 692 - [MAX_TIME_WINDOW] = PRIMITIVE_INFO_INIT(MAX_TIME_WINDOW, TPMI_INFO_MAX_TIME_WIN_MASK, 693 - 54, RAPL_DOMAIN_REG_INFO, TIME_UNIT, 0), 694 - [THROTTLED_TIME] = PRIMITIVE_INFO_INIT(THROTTLED_TIME, PERF_STATUS_THROTTLE_TIME_MASK, 695 - 0, RAPL_DOMAIN_REG_PERF, TIME_UNIT, 0), 696 - }; 697 - 698 668 static struct rapl_primitive_info *get_rpi(struct rapl_package *rp, int prim) 699 669 { 700 670 struct rapl_primitive_info *rpi = rp->priv->rpi; ··· 673 721 case RAPL_IF_MMIO: 674 722 case RAPL_IF_MSR: 675 723 rp->priv->rpi = rpi_msr; 676 - break; 677 - case RAPL_IF_TPMI: 678 - rp->priv->rpi = rpi_tpmi; 679 724 break; 680 725 default: 681 726 return -EINVAL;
+53
drivers/powercap/intel_rapl_tpmi.c
··· 62 62 63 63 static struct powercap_control_type *tpmi_control_type; 64 64 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 + 65 117 static int tpmi_rapl_read_raw(int id, struct reg_action *ra, bool atomic) 66 118 { 67 119 if (!ra->reg.mmio) ··· 396 344 trp->priv.write_raw = tpmi_rapl_write_raw; 397 345 trp->priv.control_type = tpmi_control_type; 398 346 trp->priv.defaults = &defaults_tpmi; 347 + trp->priv.rpi = rpi_tpmi; 399 348 400 349 /* RAPL TPMI I/F is per physical package */ 401 350 trp->rp = rapl_find_package_domain(info->package_id, &trp->priv, false);