From nobody Thu Apr 2 20:20:43 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EBE1A3EBF1B; Thu, 12 Feb 2026 23:30:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939049; cv=none; b=LCv8PRijgrwRSQycXx4mtCz7DMaZ3bzMGveYGE85U2mNV+zxGH3BJXfTrBtJlGzR/oWu7xjXhEGVTBdZinbKB1QPFRetBVqOOE5S+Z0KAIa2cbieLSq0bZprS9PFax61I6ujWewqN8T2i7Frv3OGjMhQ/+BCfTpjQH8d83MP9Q4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939049; c=relaxed/simple; bh=t4k+6a1p9sqJs3w2/EEVw2L+bVuxvHFR+HV6VbEwPWk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mUlvlbfMjBqB/SWFU5KPsRBElA1/S/gxuqZ1JbTD04Fpl7NY7UC/4BtzjFyiT2vA9IM905nq+NxHzZ+asNqlfNkeNliGRzW6VOBFrGvyhPa7JEXc0fBvfGRggNJci9RLNM8gMom+JogXvvtINyYu0zQ5gcJbHtFCLb2RIEHpNO4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=VGh0HrJh; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="VGh0HrJh" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1770939048; x=1802475048; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=t4k+6a1p9sqJs3w2/EEVw2L+bVuxvHFR+HV6VbEwPWk=; b=VGh0HrJhSCTCmA8VAGc0Hdo6EU4yPnE9XIACotoHmZQXgHyIANP4MLWa TSSkXCAxjKX9bjPz7mjnDcHYcz71bGg1y/scIraqG3WZDlicPBYImjv8e oqJwK5unYOJ8l8j4khTQuX0Bhe3BZqusQEiFfas8OTu4FcmAsK5muB3tR YeOhk83wCS0WUisseHg6ecQPNN/T0ZKOWcseMwpU6mv4rX86MQkPntoFB RoA+AiRlOm3QdRvXnFiFo2BAFBkjm16mbQFxr0Zblzi0+L+MSAdtBqZai ct/zCDu5Vt7A4iZyg/i+xyZr9uzn2s/gJFR6ylBwHEzP50FIMZ4LoSpFT Q==; X-CSE-ConnectionGUID: ERToxcb8REGHhW6S71gnVA== X-CSE-MsgGUID: DDjm9H5vRJWRcJnxstr+xw== X-IronPort-AV: E=McAfee;i="6800,10657,11699"; a="72017401" X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="72017401" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:47 -0800 X-CSE-ConnectionGUID: vuvmA3x7Q2iCifKdBIPVbw== X-CSE-MsgGUID: +3WiGqlhTCKzdBHxxDMjlQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="211845376" Received: from skuppusw-desk2.jf.intel.com ([10.165.154.101]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:45 -0800 From: Kuppuswamy Sathyanarayanan To: "Rafael J . Wysocki" , Daniel Lezcano Cc: Zhang Rui , Lukasz Luba , Srinivas Pandruvada , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 01/12] powercap: intel_rapl: Add a symbol namespace for intel_rapl exports Date: Thu, 12 Feb 2026 15:30:33 -0800 Message-ID: <20260212233044.329790-2-sathyanarayanan.kuppuswamy@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> References: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Cleanup of the intel_rapl common driver requires introducing additional exported helper and lifecycle functions. Before adding new exports, create a dedicated symbol namespace for intel_rapl and update the relevant interface drivers to explicitly import it. This makes the intended usage of these symbols explicit, avoids polluting the global namespace, and prepares the codebase for the ongoing RAPL refactoring. No functional changes are intended. Signed-off-by: Kuppuswamy Sathyanarayanan Acked-by: Srinivas Pandruvada --- drivers/powercap/intel_rapl_common.c | 20 +++++++++---------- drivers/powercap/intel_rapl_msr.c | 1 + drivers/powercap/intel_rapl_tpmi.c | 1 + .../int340x_thermal/processor_thermal_rapl.c | 1 + 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/drivers/powercap/intel_rapl_common.c b/drivers/powercap/intel_= rapl_common.c index 3ff6da3bf4e6..3471cee7ac04 100644 --- a/drivers/powercap/intel_rapl_common.c +++ b/drivers/powercap/intel_rapl_common.c @@ -2089,7 +2089,7 @@ int rapl_package_add_pmu_locked(struct rapl_package *= rp) =20 return rapl_pmu_update(rp); } -EXPORT_SYMBOL_GPL(rapl_package_add_pmu_locked); +EXPORT_SYMBOL_NS_GPL(rapl_package_add_pmu_locked, "INTEL_RAPL"); =20 int rapl_package_add_pmu(struct rapl_package *rp) { @@ -2097,7 +2097,7 @@ int rapl_package_add_pmu(struct rapl_package *rp) =20 return rapl_package_add_pmu_locked(rp); } -EXPORT_SYMBOL_GPL(rapl_package_add_pmu); +EXPORT_SYMBOL_NS_GPL(rapl_package_add_pmu, "INTEL_RAPL"); =20 void rapl_package_remove_pmu_locked(struct rapl_package *rp) { @@ -2115,7 +2115,7 @@ void rapl_package_remove_pmu_locked(struct rapl_packa= ge *rp) perf_pmu_unregister(&rapl_pmu.pmu); memset(&rapl_pmu, 0, sizeof(struct rapl_pmu)); } -EXPORT_SYMBOL_GPL(rapl_package_remove_pmu_locked); +EXPORT_SYMBOL_NS_GPL(rapl_package_remove_pmu_locked, "INTEL_RAPL"); =20 void rapl_package_remove_pmu(struct rapl_package *rp) { @@ -2123,7 +2123,7 @@ void rapl_package_remove_pmu(struct rapl_package *rp) =20 rapl_package_remove_pmu_locked(rp); } -EXPORT_SYMBOL_GPL(rapl_package_remove_pmu); +EXPORT_SYMBOL_NS_GPL(rapl_package_remove_pmu, "INTEL_RAPL"); #endif =20 /* called from CPU hotplug notifier, hotplug lock held */ @@ -2156,14 +2156,14 @@ void rapl_remove_package_cpuslocked(struct rapl_pac= kage *rp) list_del(&rp->plist); kfree(rp); } -EXPORT_SYMBOL_GPL(rapl_remove_package_cpuslocked); +EXPORT_SYMBOL_NS_GPL(rapl_remove_package_cpuslocked, "INTEL_RAPL"); =20 void rapl_remove_package(struct rapl_package *rp) { guard(cpus_read_lock)(); rapl_remove_package_cpuslocked(rp); } -EXPORT_SYMBOL_GPL(rapl_remove_package); +EXPORT_SYMBOL_NS_GPL(rapl_remove_package, "INTEL_RAPL"); =20 /* * RAPL Package energy counter scope: @@ -2206,14 +2206,14 @@ struct rapl_package *rapl_find_package_domain_cpusl= ocked(int id, struct rapl_if_ =20 return NULL; } -EXPORT_SYMBOL_GPL(rapl_find_package_domain_cpuslocked); +EXPORT_SYMBOL_NS_GPL(rapl_find_package_domain_cpuslocked, "INTEL_RAPL"); =20 struct rapl_package *rapl_find_package_domain(int id, struct rapl_if_priv = *priv, bool id_is_cpu) { guard(cpus_read_lock)(); return rapl_find_package_domain_cpuslocked(id, priv, id_is_cpu); } -EXPORT_SYMBOL_GPL(rapl_find_package_domain); +EXPORT_SYMBOL_NS_GPL(rapl_find_package_domain, "INTEL_RAPL"); =20 /* called from CPU hotplug notifier, hotplug lock held */ struct rapl_package *rapl_add_package_cpuslocked(int id, struct rapl_if_pr= iv *priv, bool id_is_cpu) @@ -2267,14 +2267,14 @@ struct rapl_package *rapl_add_package_cpuslocked(in= t id, struct rapl_if_priv *pr kfree(rp); return ERR_PTR(ret); } -EXPORT_SYMBOL_GPL(rapl_add_package_cpuslocked); +EXPORT_SYMBOL_NS_GPL(rapl_add_package_cpuslocked, "INTEL_RAPL"); =20 struct rapl_package *rapl_add_package(int id, struct rapl_if_priv *priv, b= ool id_is_cpu) { guard(cpus_read_lock)(); return rapl_add_package_cpuslocked(id, priv, id_is_cpu); } -EXPORT_SYMBOL_GPL(rapl_add_package); +EXPORT_SYMBOL_NS_GPL(rapl_add_package, "INTEL_RAPL"); =20 static void power_limit_state_save(void) { diff --git a/drivers/powercap/intel_rapl_msr.c b/drivers/powercap/intel_rap= l_msr.c index 9a7e150b3536..6f23e601832d 100644 --- a/drivers/powercap/intel_rapl_msr.c +++ b/drivers/powercap/intel_rapl_msr.c @@ -264,3 +264,4 @@ module_platform_driver(intel_rapl_msr_driver); MODULE_DESCRIPTION("Driver for Intel RAPL (Running Average Power Limit) co= ntrol via MSR interface"); MODULE_AUTHOR("Zhang Rui "); MODULE_LICENSE("GPL v2"); +MODULE_IMPORT_NS("INTEL_RAPL"); diff --git a/drivers/powercap/intel_rapl_tpmi.c b/drivers/powercap/intel_ra= pl_tpmi.c index 0a0b85f4528b..3b52403c14f8 100644 --- a/drivers/powercap/intel_rapl_tpmi.c +++ b/drivers/powercap/intel_rapl_tpmi.c @@ -348,6 +348,7 @@ static struct auxiliary_driver intel_rapl_tpmi_driver = =3D { =20 module_auxiliary_driver(intel_rapl_tpmi_driver) =20 +MODULE_IMPORT_NS("INTEL_RAPL"); MODULE_IMPORT_NS("INTEL_TPMI"); =20 MODULE_DESCRIPTION("Intel RAPL TPMI Driver"); diff --git a/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c= b/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c index bf51a17c5be6..e56b18aeda71 100644 --- a/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c +++ b/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c @@ -111,4 +111,5 @@ void proc_thermal_rapl_remove(void) EXPORT_SYMBOL_GPL(proc_thermal_rapl_remove); =20 MODULE_LICENSE("GPL v2"); +MODULE_IMPORT_NS("INTEL_RAPL"); MODULE_DESCRIPTION("RAPL interface using MMIO"); --=20 2.43.0 From nobody Thu Apr 2 20:20:43 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 014492E266C; Thu, 12 Feb 2026 23:30:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939053; cv=none; b=B2e7ErNjBX87oud0q7+Atv4huYYHkxlxBGwnVRJU8rinY7R4eYPXEiVa8sdp98dY+JCyzO3pD8vVcKGYfaokta+zJbn0kcfXkkHaaeRJyfX//L4bZm+vPxIvpB9V9vUiEIyjw+BrSh3VDCqED25CRG6eHpGCuHhEtNdejtwjTkg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939053; c=relaxed/simple; bh=JXIWk0PGmnWQ3ytLCxfsjtlwLjr1q749B4naFtpBORs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kFDXdUCh4+TBMMqwquiQplHhM/bc3ew5cY8SRrxLpRhYxAu0wiyNvrRiqBbuKJOYBaf3t8qPDWBDy/pF4J5n4HaHCfnjD1UutZAmeK4LxAQDZGPfIlPqB4Zy32DdkdYBGG5Ipi2E5zIxm5xg0k5AVTRqUXSh/49IJCqshjKIlxI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=PqkdOSMV; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="PqkdOSMV" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1770939051; x=1802475051; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=JXIWk0PGmnWQ3ytLCxfsjtlwLjr1q749B4naFtpBORs=; b=PqkdOSMV0bnptdWOu6I/YNWOyYC0Y67jQuEA2kTrlo/e8mwMEMt37etA 2U/+zk31QIVEybPbnDiGgdBJ/WPpWqNGTrkY0GMPqyVDeD6gImldWLcWA CJsX7tosEb+4MmeUM6Bk7KEp1Ej/O7wPk8M2xbfFKnsDhtf5s+dzv4r+/ h+Ac7iD+u4XaTLTsdHEXLgmcZAOOQg4OY9SboF7jgHUjjp1QI46jxCLmE CSJXZ1v5RRIqhqFEnpL+eOm5OboHLThh/v2I1PTrpJ77sIBIWZOsX+Uk7 QpeO0Hv5WFBM6IFEPzDVCNT8Ytb4fwAtDZls0UwKehLw5VK0RGUCSv+eb g==; X-CSE-ConnectionGUID: DXgatB/pQrGZsrFdrPV6Sg== X-CSE-MsgGUID: HmJ570L3QTODUKzctvcobA== X-IronPort-AV: E=McAfee;i="6800,10657,11699"; a="72017417" X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="72017417" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:49 -0800 X-CSE-ConnectionGUID: Mo8xG+QkQzW2zwe1jrhKDg== X-CSE-MsgGUID: TDaZEuSnSX6CA9NU9rOoNg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="211845381" Received: from skuppusw-desk2.jf.intel.com ([10.165.154.101]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:45 -0800 From: Kuppuswamy Sathyanarayanan To: "Rafael J . Wysocki" , Daniel Lezcano Cc: Zhang Rui , Lukasz Luba , Srinivas Pandruvada , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 02/12] powercap: intel_rapl: Cleanup coding style Date: Thu, 12 Feb 2026 15:30:34 -0800 Message-ID: <20260212233044.329790-3-sathyanarayanan.kuppuswamy@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> References: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Improve code readability and consistency by: - Aligning macro definitions vertically - Reformatting primitive info arrays with consistent indentation - Aligning CPU ID table entries - Reorganizing macro definitions for better logical grouping - Using consistent hex formatting (0x00 instead of 0) - Capitalizing hex digits consistently (0xDF instead of 0xdf) - Removing unnecessary parentheses around numeric constants No functional changes. Signed-off-by: Kuppuswamy Sathyanarayanan Acked-by: Srinivas Pandruvada --- drivers/powercap/intel_rapl_common.c | 446 ++++++++++++++------------- 1 file changed, 227 insertions(+), 219 deletions(-) diff --git a/drivers/powercap/intel_rapl_common.c b/drivers/powercap/intel_= rapl_common.c index 3471cee7ac04..12f2d6de0541 100644 --- a/drivers/powercap/intel_rapl_common.c +++ b/drivers/powercap/intel_rapl_common.c @@ -31,70 +31,95 @@ #include =20 /* bitmasks for RAPL MSRs, used by primitive access functions */ -#define ENERGY_STATUS_MASK 0xffffffff +#define ENERGY_STATUS_MASK 0xffffffff =20 -#define POWER_LIMIT1_MASK 0x7FFF -#define POWER_LIMIT1_ENABLE BIT(15) -#define POWER_LIMIT1_CLAMP BIT(16) +#define POWER_LIMIT1_MASK 0x7FFF +#define POWER_LIMIT1_ENABLE BIT(15) +#define POWER_LIMIT1_CLAMP BIT(16) =20 -#define POWER_LIMIT2_MASK (0x7FFFULL<<32) -#define POWER_LIMIT2_ENABLE BIT_ULL(47) -#define POWER_LIMIT2_CLAMP BIT_ULL(48) -#define POWER_HIGH_LOCK BIT_ULL(63) -#define POWER_LOW_LOCK BIT(31) +#define POWER_LIMIT2_MASK (0x7FFFULL<<32) +#define POWER_LIMIT2_ENABLE BIT_ULL(47) +#define POWER_LIMIT2_CLAMP BIT_ULL(48) +#define POWER_HIGH_LOCK BIT_ULL(63) +#define POWER_LOW_LOCK BIT(31) =20 #define POWER_LIMIT4_MASK 0x1FFF =20 -#define TIME_WINDOW1_MASK (0x7FULL<<17) -#define TIME_WINDOW2_MASK (0x7FULL<<49) +#define TIME_WINDOW1_MASK (0x7FULL<<17) +#define TIME_WINDOW2_MASK (0x7FULL<<49) =20 -#define POWER_UNIT_OFFSET 0 -#define POWER_UNIT_MASK 0x0F +#define POWER_UNIT_OFFSET 0x00 +#define POWER_UNIT_MASK 0x0F =20 -#define ENERGY_UNIT_OFFSET 0x08 -#define ENERGY_UNIT_MASK 0x1F00 +#define ENERGY_UNIT_OFFSET 0x08 +#define ENERGY_UNIT_MASK 0x1F00 =20 -#define TIME_UNIT_OFFSET 0x10 -#define TIME_UNIT_MASK 0xF0000 +#define TIME_UNIT_OFFSET 0x10 +#define TIME_UNIT_MASK 0xF0000 =20 -#define POWER_INFO_MAX_MASK (0x7fffULL<<32) -#define POWER_INFO_MIN_MASK (0x7fffULL<<16) -#define POWER_INFO_MAX_TIME_WIN_MASK (0x3fULL<<48) -#define POWER_INFO_THERMAL_SPEC_MASK 0x7fff +#define POWER_INFO_MAX_MASK (0x7fffULL<<32) +#define POWER_INFO_MIN_MASK (0x7fffULL<<16) +#define POWER_INFO_MAX_TIME_WIN_MASK (0x3fULL<<48) +#define POWER_INFO_THERMAL_SPEC_MASK 0x7fff =20 -#define PERF_STATUS_THROTTLE_TIME_MASK 0xffffffff -#define PP_POLICY_MASK 0x1F +#define PERF_STATUS_THROTTLE_TIME_MASK 0xffffffff +#define PP_POLICY_MASK 0x1F =20 /* * SPR has different layout for Psys Domain PowerLimit registers. * There are 17 bits of PL1 and PL2 instead of 15 bits. * The Enable bits and TimeWindow bits are also shifted as a result. */ -#define PSYS_POWER_LIMIT1_MASK 0x1FFFF -#define PSYS_POWER_LIMIT1_ENABLE BIT(17) +#define PSYS_POWER_LIMIT1_MASK 0x1FFFF +#define PSYS_POWER_LIMIT1_ENABLE BIT(17) =20 -#define PSYS_POWER_LIMIT2_MASK (0x1FFFFULL<<32) -#define PSYS_POWER_LIMIT2_ENABLE BIT_ULL(49) +#define PSYS_POWER_LIMIT2_MASK (0x1FFFFULL<<32) +#define PSYS_POWER_LIMIT2_ENABLE BIT_ULL(49) =20 -#define PSYS_TIME_WINDOW1_MASK (0x7FULL<<19) -#define PSYS_TIME_WINDOW2_MASK (0x7FULL<<51) +#define PSYS_TIME_WINDOW1_MASK (0x7FULL<<19) +#define PSYS_TIME_WINDOW2_MASK (0x7FULL<<51) =20 /* bitmasks for RAPL TPMI, used by primitive access functions */ -#define TPMI_POWER_LIMIT_MASK 0x3FFFF -#define TPMI_POWER_LIMIT_ENABLE BIT_ULL(62) -#define TPMI_TIME_WINDOW_MASK (0x7FULL<<18) -#define TPMI_INFO_SPEC_MASK 0x3FFFF -#define TPMI_INFO_MIN_MASK (0x3FFFFULL << 18) -#define TPMI_INFO_MAX_MASK (0x3FFFFULL << 36) +#define TPMI_POWER_LIMIT_MASK 0x3FFFF +#define TPMI_POWER_LIMIT_ENABLE BIT_ULL(62) +#define TPMI_TIME_WINDOW_MASK (0x7FULL<<18) +#define TPMI_INFO_SPEC_MASK 0x3FFFF +#define TPMI_INFO_MIN_MASK (0x3FFFFULL << 18) +#define TPMI_INFO_MAX_MASK (0x3FFFFULL << 36) #define TPMI_INFO_MAX_TIME_WIN_MASK (0x7FULL << 54) =20 /* Non HW constants */ -#define RAPL_PRIMITIVE_DERIVED BIT(1) /* not from raw data */ -#define RAPL_PRIMITIVE_DUMMY BIT(2) +#define RAPL_PRIMITIVE_DERIVED BIT(1) /* not from raw data */ +#define RAPL_PRIMITIVE_DUMMY BIT(2) + +#define ENERGY_UNIT_SCALE 1000 /* scale from driver unit to powercap unit= */ + +/* per domain data, some are optional */ +#define NR_RAW_PRIMITIVES (NR_RAPL_PRIMITIVES - 2) + +#define DOMAIN_STATE_INACTIVE BIT(0) +#define DOMAIN_STATE_POWER_LIMIT_SET BIT(1) + +/* Sideband MBI registers */ +#define IOSF_CPU_POWER_BUDGET_CTL_BYT 0x02 +#define IOSF_CPU_POWER_BUDGET_CTL_TNG 0xDF + +#define PACKAGE_PLN_INT_SAVED BIT(0) +#define MAX_PRIM_NAME 32 + +/* TPMI Unit register has different layout */ +#define TPMI_POWER_UNIT_OFFSET POWER_UNIT_OFFSET +#define TPMI_POWER_UNIT_MASK POWER_UNIT_MASK +#define TPMI_ENERGY_UNIT_OFFSET 0x06 +#define TPMI_ENERGY_UNIT_MASK 0x7C0 +#define TPMI_TIME_UNIT_OFFSET 0x0C +#define TPMI_TIME_UNIT_MASK 0xF000 + +#define RAPL_EVENT_MASK GENMASK(7, 0) + +#define TIME_WINDOW_MAX_MSEC 40000 +#define TIME_WINDOW_MIN_MSEC 250 =20 -#define TIME_WINDOW_MAX_MSEC 40000 -#define TIME_WINDOW_MIN_MSEC 250 -#define ENERGY_UNIT_SCALE 1000 /* scale from driver unit to powercap un= it */ enum unit_type { ARBITRARY_UNIT, /* no translation */ POWER_UNIT, @@ -102,12 +127,6 @@ enum unit_type { TIME_UNIT, }; =20 -/* per domain data, some are optional */ -#define NR_RAW_PRIMITIVES (NR_RAPL_PRIMITIVES - 2) - -#define DOMAIN_STATE_INACTIVE BIT(0) -#define DOMAIN_STATE_POWER_LIMIT_SET BIT(1) - static const char *pl_names[NR_POWER_LIMITS] =3D { [POWER_LIMIT1] =3D "long_term", [POWER_LIMIT2] =3D "short_term", @@ -222,13 +241,6 @@ static struct rapl_defaults *get_defaults(struct rapl_= package *rp) return rp->priv->defaults; } =20 -/* Sideband MBI registers */ -#define IOSF_CPU_POWER_BUDGET_CTL_BYT (0x2) -#define IOSF_CPU_POWER_BUDGET_CTL_TNG (0xdf) - -#define PACKAGE_PLN_INT_SAVED BIT(0) -#define MAX_PRIM_NAME (32) - /* per domain data. used to describe individual knobs such that access fun= ction * can be consolidated into one instead of many inline functions. */ @@ -659,99 +671,104 @@ static u64 rapl_unit_xlate(struct rapl_domain *rd, e= num unit_type type, /* RAPL primitives for MSR and MMIO I/F */ static struct rapl_primitive_info rpi_msr[NR_RAPL_PRIMITIVES] =3D { /* name, mask, shift, msr index, unit divisor */ - [POWER_LIMIT1] =3D PRIMITIVE_INFO_INIT(POWER_LIMIT1, POWER_LIMIT1_MASK, 0, - RAPL_DOMAIN_REG_LIMIT, POWER_UNIT, 0), - [POWER_LIMIT2] =3D PRIMITIVE_INFO_INIT(POWER_LIMIT2, POWER_LIMIT2_MASK, 3= 2, - RAPL_DOMAIN_REG_LIMIT, POWER_UNIT, 0), - [POWER_LIMIT4] =3D PRIMITIVE_INFO_INIT(POWER_LIMIT4, POWER_LIMIT4_MASK, 0, - RAPL_DOMAIN_REG_PL4, POWER_UNIT, 0), - [ENERGY_COUNTER] =3D PRIMITIVE_INFO_INIT(ENERGY_COUNTER, ENERGY_STATUS_MA= SK, 0, - RAPL_DOMAIN_REG_STATUS, ENERGY_UNIT, 0), - [FW_LOCK] =3D PRIMITIVE_INFO_INIT(FW_LOCK, POWER_LOW_LOCK, 31, - RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), - [FW_HIGH_LOCK] =3D PRIMITIVE_INFO_INIT(FW_LOCK, POWER_HIGH_LOCK, 63, - RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), - [PL1_ENABLE] =3D PRIMITIVE_INFO_INIT(PL1_ENABLE, POWER_LIMIT1_ENABLE, 15, - RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), - [PL1_CLAMP] =3D PRIMITIVE_INFO_INIT(PL1_CLAMP, POWER_LIMIT1_CLAMP, 16, - RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), - [PL2_ENABLE] =3D PRIMITIVE_INFO_INIT(PL2_ENABLE, POWER_LIMIT2_ENABLE, 47, - RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), - [PL2_CLAMP] =3D PRIMITIVE_INFO_INIT(PL2_CLAMP, POWER_LIMIT2_CLAMP, 48, - RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), - [TIME_WINDOW1] =3D PRIMITIVE_INFO_INIT(TIME_WINDOW1, TIME_WINDOW1_MASK, 1= 7, - RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0), - [TIME_WINDOW2] =3D PRIMITIVE_INFO_INIT(TIME_WINDOW2, TIME_WINDOW2_MASK, 4= 9, - RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0), - [THERMAL_SPEC_POWER] =3D PRIMITIVE_INFO_INIT(THERMAL_SPEC_POWER, POWER_IN= FO_THERMAL_SPEC_MASK, - 0, RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0), - [MAX_POWER] =3D PRIMITIVE_INFO_INIT(MAX_POWER, POWER_INFO_MAX_MASK, 32, - RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0), - [MIN_POWER] =3D PRIMITIVE_INFO_INIT(MIN_POWER, POWER_INFO_MIN_MASK, 16, - RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0), - [MAX_TIME_WINDOW] =3D PRIMITIVE_INFO_INIT(MAX_TIME_WINDOW, POWER_INFO_MAX= _TIME_WIN_MASK, 48, - RAPL_DOMAIN_REG_INFO, TIME_UNIT, 0), - [THROTTLED_TIME] =3D PRIMITIVE_INFO_INIT(THROTTLED_TIME, PERF_STATUS_THRO= TTLE_TIME_MASK, 0, - RAPL_DOMAIN_REG_PERF, TIME_UNIT, 0), - [PRIORITY_LEVEL] =3D PRIMITIVE_INFO_INIT(PRIORITY_LEVEL, PP_POLICY_MASK, = 0, - RAPL_DOMAIN_REG_POLICY, ARBITRARY_UNIT, 0), - [PSYS_POWER_LIMIT1] =3D PRIMITIVE_INFO_INIT(PSYS_POWER_LIMIT1, PSYS_POWER= _LIMIT1_MASK, 0, - RAPL_DOMAIN_REG_LIMIT, POWER_UNIT, 0), - [PSYS_POWER_LIMIT2] =3D PRIMITIVE_INFO_INIT(PSYS_POWER_LIMIT2, PSYS_POWER= _LIMIT2_MASK, 32, - RAPL_DOMAIN_REG_LIMIT, POWER_UNIT, 0), - [PSYS_PL1_ENABLE] =3D PRIMITIVE_INFO_INIT(PSYS_PL1_ENABLE, PSYS_POWER_LIM= IT1_ENABLE, 17, - RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), - [PSYS_PL2_ENABLE] =3D PRIMITIVE_INFO_INIT(PSYS_PL2_ENABLE, PSYS_POWER_LIM= IT2_ENABLE, 49, - RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), - [PSYS_TIME_WINDOW1] =3D PRIMITIVE_INFO_INIT(PSYS_TIME_WINDOW1, PSYS_TIME_= WINDOW1_MASK, 19, - RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0), - [PSYS_TIME_WINDOW2] =3D PRIMITIVE_INFO_INIT(PSYS_TIME_WINDOW2, PSYS_TIME_= WINDOW2_MASK, 51, - RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0), + [POWER_LIMIT1] =3D PRIMITIVE_INFO_INIT(POWER_LIMIT1, POWER_LIMIT1_MASK, = 0, + RAPL_DOMAIN_REG_LIMIT, POWER_UNIT, 0), + [POWER_LIMIT2] =3D PRIMITIVE_INFO_INIT(POWER_LIMIT2, POWER_LIMIT2_MASK, = 32, + RAPL_DOMAIN_REG_LIMIT, POWER_UNIT, 0), + [POWER_LIMIT4] =3D PRIMITIVE_INFO_INIT(POWER_LIMIT4, POWER_LIMIT4_MASK, = 0, + RAPL_DOMAIN_REG_PL4, POWER_UNIT, 0), + [ENERGY_COUNTER] =3D PRIMITIVE_INFO_INIT(ENERGY_COUNTER, ENERGY_STATUS_MA= SK, 0, + RAPL_DOMAIN_REG_STATUS, ENERGY_UNIT, 0), + [FW_LOCK] =3D PRIMITIVE_INFO_INIT(FW_LOCK, POWER_LOW_LOCK, 31, + RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), + [FW_HIGH_LOCK] =3D PRIMITIVE_INFO_INIT(FW_LOCK, POWER_HIGH_LOCK, 63, + RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), + [PL1_ENABLE] =3D PRIMITIVE_INFO_INIT(PL1_ENABLE, POWER_LIMIT1_ENABLE, 15, + RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), + [PL1_CLAMP] =3D PRIMITIVE_INFO_INIT(PL1_CLAMP, POWER_LIMIT1_CLAMP, 16, + RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), + [PL2_ENABLE] =3D PRIMITIVE_INFO_INIT(PL2_ENABLE, POWER_LIMIT2_ENABLE, 47, + RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), + [PL2_CLAMP] =3D PRIMITIVE_INFO_INIT(PL2_CLAMP, POWER_LIMIT2_CLAMP, 48, + RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), + [TIME_WINDOW1] =3D PRIMITIVE_INFO_INIT(TIME_WINDOW1, TIME_WINDOW1_MASK, = 17, + RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0), + [TIME_WINDOW2] =3D PRIMITIVE_INFO_INIT(TIME_WINDOW2, TIME_WINDOW2_MASK, = 49, + RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0), + [THERMAL_SPEC_POWER] =3D PRIMITIVE_INFO_INIT(THERMAL_SPEC_POWER, + POWER_INFO_THERMAL_SPEC_MASK, 0, + RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0), + [MAX_POWER] =3D PRIMITIVE_INFO_INIT(MAX_POWER, POWER_INFO_MAX_MASK, 32, + RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0), + [MIN_POWER] =3D PRIMITIVE_INFO_INIT(MIN_POWER, POWER_INFO_MIN_MASK, 16, + RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0), + [MAX_TIME_WINDOW] =3D PRIMITIVE_INFO_INIT(MAX_TIME_WINDOW, + POWER_INFO_MAX_TIME_WIN_MASK, 48, + RAPL_DOMAIN_REG_INFO, TIME_UNIT, 0), + [THROTTLED_TIME] =3D PRIMITIVE_INFO_INIT(THROTTLED_TIME, + PERF_STATUS_THROTTLE_TIME_MASK, 0, + RAPL_DOMAIN_REG_PERF, TIME_UNIT, 0), + [PRIORITY_LEVEL] =3D PRIMITIVE_INFO_INIT(PRIORITY_LEVEL, PP_POLICY_MASK, = 0, + RAPL_DOMAIN_REG_POLICY, ARBITRARY_UNIT, 0), + [PSYS_POWER_LIMIT1] =3D PRIMITIVE_INFO_INIT(PSYS_POWER_LIMIT1, PSYS_POWER= _LIMIT1_MASK, 0, + RAPL_DOMAIN_REG_LIMIT, POWER_UNIT, 0), + [PSYS_POWER_LIMIT2] =3D PRIMITIVE_INFO_INIT(PSYS_POWER_LIMIT2, PSYS_POWER= _LIMIT2_MASK, + 32, RAPL_DOMAIN_REG_LIMIT, POWER_UNIT, 0), + [PSYS_PL1_ENABLE] =3D PRIMITIVE_INFO_INIT(PSYS_PL1_ENABLE, PSYS_POWER_LIM= IT1_ENABLE, + 17, RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, + 0), + [PSYS_PL2_ENABLE] =3D PRIMITIVE_INFO_INIT(PSYS_PL2_ENABLE, PSYS_POWER_LIM= IT2_ENABLE, + 49, RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, + 0), + [PSYS_TIME_WINDOW1] =3D PRIMITIVE_INFO_INIT(PSYS_TIME_WINDOW1, PSYS_TIME_= WINDOW1_MASK, + 19, RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0), + [PSYS_TIME_WINDOW2] =3D PRIMITIVE_INFO_INIT(PSYS_TIME_WINDOW2, PSYS_TIME_= WINDOW2_MASK, + 51, RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0), /* non-hardware */ - [AVERAGE_POWER] =3D PRIMITIVE_INFO_INIT(AVERAGE_POWER, 0, 0, 0, POWER_UNI= T, - RAPL_PRIMITIVE_DERIVED), + [AVERAGE_POWER] =3D PRIMITIVE_INFO_INIT(AVERAGE_POWER, 0, 0, 0, POWER_UN= IT, + RAPL_PRIMITIVE_DERIVED), }; =20 /* RAPL primitives for TPMI I/F */ static struct rapl_primitive_info rpi_tpmi[NR_RAPL_PRIMITIVES] =3D { /* name, mask, shift, msr index, unit divisor */ - [POWER_LIMIT1] =3D PRIMITIVE_INFO_INIT(POWER_LIMIT1, TPMI_POWER_LIMIT_MAS= K, 0, - RAPL_DOMAIN_REG_LIMIT, POWER_UNIT, 0), - [POWER_LIMIT2] =3D PRIMITIVE_INFO_INIT(POWER_LIMIT2, TPMI_POWER_LIMIT_MAS= K, 0, - RAPL_DOMAIN_REG_PL2, POWER_UNIT, 0), - [POWER_LIMIT4] =3D PRIMITIVE_INFO_INIT(POWER_LIMIT4, TPMI_POWER_LIMIT_MAS= K, 0, - RAPL_DOMAIN_REG_PL4, POWER_UNIT, 0), - [ENERGY_COUNTER] =3D PRIMITIVE_INFO_INIT(ENERGY_COUNTER, ENERGY_STATUS_MA= SK, 0, - RAPL_DOMAIN_REG_STATUS, ENERGY_UNIT, 0), - [PL1_LOCK] =3D PRIMITIVE_INFO_INIT(PL1_LOCK, POWER_HIGH_LOCK, 63, - RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), - [PL2_LOCK] =3D PRIMITIVE_INFO_INIT(PL2_LOCK, POWER_HIGH_LOCK, 63, - RAPL_DOMAIN_REG_PL2, ARBITRARY_UNIT, 0), - [PL4_LOCK] =3D PRIMITIVE_INFO_INIT(PL4_LOCK, POWER_HIGH_LOCK, 63, - RAPL_DOMAIN_REG_PL4, ARBITRARY_UNIT, 0), - [PL1_ENABLE] =3D PRIMITIVE_INFO_INIT(PL1_ENABLE, TPMI_POWER_LIMIT_ENABLE,= 62, - RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), - [PL2_ENABLE] =3D PRIMITIVE_INFO_INIT(PL2_ENABLE, TPMI_POWER_LIMIT_ENABLE,= 62, - RAPL_DOMAIN_REG_PL2, ARBITRARY_UNIT, 0), - [PL4_ENABLE] =3D PRIMITIVE_INFO_INIT(PL4_ENABLE, TPMI_POWER_LIMIT_ENABLE,= 62, - RAPL_DOMAIN_REG_PL4, ARBITRARY_UNIT, 0), - [TIME_WINDOW1] =3D PRIMITIVE_INFO_INIT(TIME_WINDOW1, TPMI_TIME_WINDOW_MAS= K, 18, - RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0), - [TIME_WINDOW2] =3D PRIMITIVE_INFO_INIT(TIME_WINDOW2, TPMI_TIME_WINDOW_MAS= K, 18, - RAPL_DOMAIN_REG_PL2, TIME_UNIT, 0), - [THERMAL_SPEC_POWER] =3D PRIMITIVE_INFO_INIT(THERMAL_SPEC_POWER, TPMI_INF= O_SPEC_MASK, 0, - RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0), - [MAX_POWER] =3D PRIMITIVE_INFO_INIT(MAX_POWER, TPMI_INFO_MAX_MASK, 36, - RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0), - [MIN_POWER] =3D PRIMITIVE_INFO_INIT(MIN_POWER, TPMI_INFO_MIN_MASK, 18, - RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0), - [MAX_TIME_WINDOW] =3D PRIMITIVE_INFO_INIT(MAX_TIME_WINDOW, TPMI_INFO_MAX_= TIME_WIN_MASK, 54, - RAPL_DOMAIN_REG_INFO, TIME_UNIT, 0), - [THROTTLED_TIME] =3D PRIMITIVE_INFO_INIT(THROTTLED_TIME, PERF_STATUS_THRO= TTLE_TIME_MASK, 0, - RAPL_DOMAIN_REG_PERF, TIME_UNIT, 0), + [POWER_LIMIT1] =3D PRIMITIVE_INFO_INIT(POWER_LIMIT1, TPMI_POWER_LIMIT_MA= SK, 0, + RAPL_DOMAIN_REG_LIMIT, POWER_UNIT, 0), + [POWER_LIMIT2] =3D PRIMITIVE_INFO_INIT(POWER_LIMIT2, TPMI_POWER_LIMIT_MA= SK, 0, + RAPL_DOMAIN_REG_PL2, POWER_UNIT, 0), + [POWER_LIMIT4] =3D PRIMITIVE_INFO_INIT(POWER_LIMIT4, TPMI_POWER_LIMIT_MA= SK, 0, + RAPL_DOMAIN_REG_PL4, POWER_UNIT, 0), + [ENERGY_COUNTER] =3D PRIMITIVE_INFO_INIT(ENERGY_COUNTER, ENERGY_STATUS_MA= SK, 0, + RAPL_DOMAIN_REG_STATUS, ENERGY_UNIT, 0), + [PL1_LOCK] =3D PRIMITIVE_INFO_INIT(PL1_LOCK, POWER_HIGH_LOCK, 63, + RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), + [PL2_LOCK] =3D PRIMITIVE_INFO_INIT(PL2_LOCK, POWER_HIGH_LOCK, 63, + RAPL_DOMAIN_REG_PL2, ARBITRARY_UNIT, 0), + [PL4_LOCK] =3D PRIMITIVE_INFO_INIT(PL4_LOCK, POWER_HIGH_LOCK, 63, + RAPL_DOMAIN_REG_PL4, ARBITRARY_UNIT, 0), + [PL1_ENABLE] =3D PRIMITIVE_INFO_INIT(PL1_ENABLE, TPMI_POWER_LIMIT_ENABLE= , 62, + RAPL_DOMAIN_REG_LIMIT, ARBITRARY_UNIT, 0), + [PL2_ENABLE] =3D PRIMITIVE_INFO_INIT(PL2_ENABLE, TPMI_POWER_LIMIT_ENABLE= , 62, + RAPL_DOMAIN_REG_PL2, ARBITRARY_UNIT, 0), + [PL4_ENABLE] =3D PRIMITIVE_INFO_INIT(PL4_ENABLE, TPMI_POWER_LIMIT_ENABLE= , 62, + RAPL_DOMAIN_REG_PL4, ARBITRARY_UNIT, 0), + [TIME_WINDOW1] =3D PRIMITIVE_INFO_INIT(TIME_WINDOW1, TPMI_TIME_WINDOW_MA= SK, 18, + RAPL_DOMAIN_REG_LIMIT, TIME_UNIT, 0), + [TIME_WINDOW2] =3D PRIMITIVE_INFO_INIT(TIME_WINDOW2, TPMI_TIME_WINDOW_MA= SK, 18, + RAPL_DOMAIN_REG_PL2, TIME_UNIT, 0), + [THERMAL_SPEC_POWER] =3D PRIMITIVE_INFO_INIT(THERMAL_SPEC_POWER, TPMI_INF= O_SPEC_MASK, 0, + RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0), + [MAX_POWER] =3D PRIMITIVE_INFO_INIT(MAX_POWER, TPMI_INFO_MAX_MASK, 36, + RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0), + [MIN_POWER] =3D PRIMITIVE_INFO_INIT(MIN_POWER, TPMI_INFO_MIN_MASK, 18, + RAPL_DOMAIN_REG_INFO, POWER_UNIT, 0), + [MAX_TIME_WINDOW] =3D PRIMITIVE_INFO_INIT(MAX_TIME_WINDOW, TPMI_INFO_MAX_= TIME_WIN_MASK, + 54, RAPL_DOMAIN_REG_INFO, TIME_UNIT, 0), + [THROTTLED_TIME] =3D PRIMITIVE_INFO_INIT(THROTTLED_TIME, PERF_STATUS_THRO= TTLE_TIME_MASK, + 0, RAPL_DOMAIN_REG_PERF, TIME_UNIT, 0), /* non-hardware */ - [AVERAGE_POWER] =3D PRIMITIVE_INFO_INIT(AVERAGE_POWER, 0, 0, 0, - POWER_UNIT, RAPL_PRIMITIVE_DERIVED), + [AVERAGE_POWER] =3D PRIMITIVE_INFO_INIT(AVERAGE_POWER, 0, 0, 0, POWER_UN= IT, + RAPL_PRIMITIVE_DERIVED), }; =20 static struct rapl_primitive_info *get_rpi(struct rapl_package *rp, int pr= im) @@ -1143,14 +1160,6 @@ static u64 rapl_compute_time_window_atom(struct rapl= _domain *rd, u64 value, return value; } =20 -/* TPMI Unit register has different layout */ -#define TPMI_POWER_UNIT_OFFSET POWER_UNIT_OFFSET -#define TPMI_POWER_UNIT_MASK POWER_UNIT_MASK -#define TPMI_ENERGY_UNIT_OFFSET 0x06 -#define TPMI_ENERGY_UNIT_MASK 0x7C0 -#define TPMI_TIME_UNIT_OFFSET 0x0C -#define TPMI_TIME_UNIT_MASK 0xF000 - static int rapl_check_unit_tpmi(struct rapl_domain *rd) { struct reg_action ra; @@ -1241,77 +1250,77 @@ static const struct rapl_defaults rapl_defaults_amd= =3D { }; =20 static const struct x86_cpu_id rapl_ids[] __initconst =3D { - X86_MATCH_VFM(INTEL_SANDYBRIDGE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_SANDYBRIDGE_X, &rapl_defaults_core), - - X86_MATCH_VFM(INTEL_IVYBRIDGE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_IVYBRIDGE_X, &rapl_defaults_core), - - X86_MATCH_VFM(INTEL_HASWELL, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_HASWELL_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_HASWELL_G, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_HASWELL_X, &rapl_defaults_hsw_server), - - X86_MATCH_VFM(INTEL_BROADWELL, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_BROADWELL_G, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_BROADWELL_D, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_BROADWELL_X, &rapl_defaults_hsw_server), - - X86_MATCH_VFM(INTEL_SKYLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_SKYLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_SKYLAKE_X, &rapl_defaults_hsw_server), - X86_MATCH_VFM(INTEL_KABYLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_KABYLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_CANNONLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ICELAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ICELAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ICELAKE_NNPI, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ICELAKE_X, &rapl_defaults_hsw_server), - X86_MATCH_VFM(INTEL_ICELAKE_D, &rapl_defaults_hsw_server), - X86_MATCH_VFM(INTEL_COMETLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_COMETLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_TIGERLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_TIGERLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ROCKETLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ALDERLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ALDERLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ATOM_GRACEMONT, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_RAPTORLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_RAPTORLAKE_P, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_RAPTORLAKE_S, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_BARTLETTLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_METEORLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_METEORLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_SAPPHIRERAPIDS_X, &rapl_defaults_spr_server), - X86_MATCH_VFM(INTEL_EMERALDRAPIDS_X, &rapl_defaults_spr_server), - X86_MATCH_VFM(INTEL_LUNARLAKE_M, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_PANTHERLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_WILDCATLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_NOVALAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_NOVALAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ARROWLAKE_H, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ARROWLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ARROWLAKE_U, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_LAKEFIELD, &rapl_defaults_core), - - X86_MATCH_VFM(INTEL_ATOM_SILVERMONT, &rapl_defaults_byt), - X86_MATCH_VFM(INTEL_ATOM_AIRMONT, &rapl_defaults_cht), - X86_MATCH_VFM(INTEL_ATOM_SILVERMONT_MID, &rapl_defaults_tng), - X86_MATCH_VFM(INTEL_ATOM_SILVERMONT_MID2,&rapl_defaults_ann), - X86_MATCH_VFM(INTEL_ATOM_GOLDMONT, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ATOM_GOLDMONT_PLUS, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ATOM_GOLDMONT_D, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ATOM_TREMONT, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ATOM_TREMONT_D, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ATOM_TREMONT_L, &rapl_defaults_core), - - X86_MATCH_VFM(INTEL_XEON_PHI_KNL, &rapl_defaults_hsw_server), - X86_MATCH_VFM(INTEL_XEON_PHI_KNM, &rapl_defaults_hsw_server), - - X86_MATCH_VENDOR_FAM(AMD, 0x17, &rapl_defaults_amd), - X86_MATCH_VENDOR_FAM(AMD, 0x19, &rapl_defaults_amd), - X86_MATCH_VENDOR_FAM(AMD, 0x1A, &rapl_defaults_amd), - X86_MATCH_VENDOR_FAM(HYGON, 0x18, &rapl_defaults_amd), + X86_MATCH_VFM(INTEL_SANDYBRIDGE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_SANDYBRIDGE_X, &rapl_defaults_core), + + X86_MATCH_VFM(INTEL_IVYBRIDGE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_IVYBRIDGE_X, &rapl_defaults_core), + + X86_MATCH_VFM(INTEL_HASWELL, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_HASWELL_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_HASWELL_G, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_HASWELL_X, &rapl_defaults_hsw_server), + + X86_MATCH_VFM(INTEL_BROADWELL, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_BROADWELL_G, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_BROADWELL_D, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_BROADWELL_X, &rapl_defaults_hsw_server), + + X86_MATCH_VFM(INTEL_SKYLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_SKYLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_SKYLAKE_X, &rapl_defaults_hsw_server), + X86_MATCH_VFM(INTEL_KABYLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_KABYLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_CANNONLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ICELAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ICELAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ICELAKE_NNPI, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ICELAKE_X, &rapl_defaults_hsw_server), + X86_MATCH_VFM(INTEL_ICELAKE_D, &rapl_defaults_hsw_server), + X86_MATCH_VFM(INTEL_COMETLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_COMETLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_TIGERLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_TIGERLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ROCKETLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ALDERLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ALDERLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ATOM_GRACEMONT, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_RAPTORLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_RAPTORLAKE_P, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_RAPTORLAKE_S, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_BARTLETTLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_METEORLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_METEORLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_SAPPHIRERAPIDS_X, &rapl_defaults_spr_server), + X86_MATCH_VFM(INTEL_EMERALDRAPIDS_X, &rapl_defaults_spr_server), + X86_MATCH_VFM(INTEL_LUNARLAKE_M, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_PANTHERLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_WILDCATLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_NOVALAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_NOVALAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ARROWLAKE_H, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ARROWLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ARROWLAKE_U, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_LAKEFIELD, &rapl_defaults_core), + + X86_MATCH_VFM(INTEL_ATOM_SILVERMONT, &rapl_defaults_byt), + X86_MATCH_VFM(INTEL_ATOM_AIRMONT, &rapl_defaults_cht), + X86_MATCH_VFM(INTEL_ATOM_SILVERMONT_MID, &rapl_defaults_tng), + X86_MATCH_VFM(INTEL_ATOM_SILVERMONT_MID2, &rapl_defaults_ann), + X86_MATCH_VFM(INTEL_ATOM_GOLDMONT, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ATOM_GOLDMONT_PLUS, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ATOM_GOLDMONT_D, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ATOM_TREMONT, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ATOM_TREMONT_D, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ATOM_TREMONT_L, &rapl_defaults_core), + + X86_MATCH_VFM(INTEL_XEON_PHI_KNL, &rapl_defaults_hsw_server), + X86_MATCH_VFM(INTEL_XEON_PHI_KNM, &rapl_defaults_hsw_server), + + X86_MATCH_VENDOR_FAM(AMD, 0x17, &rapl_defaults_amd), + X86_MATCH_VENDOR_FAM(AMD, 0x19, &rapl_defaults_amd), + X86_MATCH_VENDOR_FAM(AMD, 0x1A, &rapl_defaults_amd), + X86_MATCH_VENDOR_FAM(HYGON, 0x18, &rapl_defaults_amd), {} }; MODULE_DEVICE_TABLE(x86cpu, rapl_ids); @@ -1780,7 +1789,6 @@ enum perf_rapl_events { PERF_RAPL_PSYS, /* psys */ PERF_RAPL_MAX }; -#define RAPL_EVENT_MASK GENMASK(7, 0) =20 static const int event_to_domain[PERF_RAPL_MAX] =3D { [PERF_RAPL_PP0] =3D RAPL_DOMAIN_PP0, --=20 2.43.0 From nobody Thu Apr 2 20:20:43 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7600E22068F; Thu, 12 Feb 2026 23:30:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939050; cv=none; b=WmCGDDBF8pkwLVMS2XU1lT1Y1DOT9saQXOLYOxkcvHEaNi57ixBKMcCOnphrJuzk+bgXkHmNSfvT5D2amWWnriCp2CbuE/GZCGfkjXmlMyGsaLkcgjZf9LP6/6k6nhkp8GbhiMqNnPbZErRJgBzY9MIazAFawza2MBXI6Q07KxU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939050; c=relaxed/simple; bh=ehCMrUpJBBUjXmImpjoZQ1xX5uAU4KH4QUr0E5ZB5tk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V4sLH/HTYcXABDtatlcuNGg4BUTikzd+0te3I7bvUEn7khLjqBdyd6H0ZyRtWAuB8GDbwdIs4hvV0FKe7EsLc+mhnk+L08ciZguxWkGuBLvaKe9fzjKwg3kohDIwE0JObCIhPTFnKxMy21mBWyHHowQfIazvNwbr+xswACiwnrE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=BPuXaljA; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="BPuXaljA" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1770939049; x=1802475049; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ehCMrUpJBBUjXmImpjoZQ1xX5uAU4KH4QUr0E5ZB5tk=; b=BPuXaljAzJdGpPxHYQwqfl0L4gK/OGGhoXm89u5Ix1Df1t7VtU1SdEMA SJgxdHDo98yrAKm9UaTXzQ9iWgPxMDL03ZWCeXaKvuOjS6EiAo+1wSsi3 iJBdIynlOXKHy6UAehqniwamtQlLdbbuxkwzG44gHzkwklQLrlwnKbw73 OBkw9MUtL59X/hbNLKW/+ToPcLX3grhNA6kYAeac8k2ILN7NAbxYV/4qB 13JlIysL9nmfGc+U+Z6HKnLVmo/JQoEWxExE0tIJZfN3N5lRKBesuohh6 cmEhvBt0JgbeCe12o02KIgoXQHfH8QHfD5YaLZYJTjNLNY33eBF3w6v+1 g==; X-CSE-ConnectionGUID: GbDRql7aS72ztyw+wba11Q== X-CSE-MsgGUID: oUVTcrzlR1OxHzA62qUudw== X-IronPort-AV: E=McAfee;i="6800,10657,11699"; a="72017412" X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="72017412" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:49 -0800 X-CSE-ConnectionGUID: qA9oW6zZRi6onYkTKW1leQ== X-CSE-MsgGUID: kfsYh3nmR6qwXAo4vn1iRA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="211845383" Received: from skuppusw-desk2.jf.intel.com ([10.165.154.101]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:45 -0800 From: Kuppuswamy Sathyanarayanan To: "Rafael J . Wysocki" , Daniel Lezcano Cc: Zhang Rui , Lukasz Luba , Srinivas Pandruvada , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 03/12] powercap: intel_rapl: Remove unused TIME_WINDOW macros Date: Thu, 12 Feb 2026 15:30:35 -0800 Message-ID: <20260212233044.329790-4-sathyanarayanan.kuppuswamy@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> References: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Remove TIME_WINDOW_MIN_MSEC and TIME_WINDOW_MAX_MSEC as they are not used anywhere in the code. Signed-off-by: Kuppuswamy Sathyanarayanan Acked-by: Srinivas Pandruvada --- drivers/powercap/intel_rapl_common.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/powercap/intel_rapl_common.c b/drivers/powercap/intel_= rapl_common.c index 12f2d6de0541..d37150bab1e2 100644 --- a/drivers/powercap/intel_rapl_common.c +++ b/drivers/powercap/intel_rapl_common.c @@ -117,9 +117,6 @@ =20 #define RAPL_EVENT_MASK GENMASK(7, 0) =20 -#define TIME_WINDOW_MAX_MSEC 40000 -#define TIME_WINDOW_MIN_MSEC 250 - enum unit_type { ARBITRARY_UNIT, /* no translation */ POWER_UNIT, --=20 2.43.0 From nobody Thu Apr 2 20:20:43 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9AF802F363C; Thu, 12 Feb 2026 23:30:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939058; cv=none; b=YcjYHJ5UqCkIzAJ9RO5TKHe6wMhwHnz6PBxBGO0MwN9ssrA8wMT9YvMwEFzz9UcXC/IAwuQQe2rEBqd6RPzPv1V7oZpa/7A6YxWUSD5GzddP/lgyqvcifmxPeN5soc5alrfMET3CZ6l3IgiPipn1MuPAu6CEz5OhJBEjWZiOF9c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939058; c=relaxed/simple; bh=V1OhDtp8q+SX4bXSX+HrQit+y5xCbDSeaJoQGd7evXo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AiG1PqFBBcfgRVg/0bC0UxFgJC1RdH02vrL0bfgpqlUXknRS1HEbR8puhwFUs/LGIBIeHANpRUAxKeCeyZQsIyyfNJC7TvfkLjEvKDJmjCsl5tkVwH+8AoGSEhc+dTb5Mpx5vXLOvdrOADTmol71LCvoYH1XAs1+0PG5CSw1+ms= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=JuyE0O8J; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="JuyE0O8J" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1770939054; x=1802475054; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=V1OhDtp8q+SX4bXSX+HrQit+y5xCbDSeaJoQGd7evXo=; b=JuyE0O8JHcTmycD5a4ZHsDy78elFZmM22oTNMpVeSuZGJS9fGo3DBuwS zt7JfcBXjGc1VX1EvAtsgGSWquZvZoeHOgu5vttTm46pA9QqS/mM9gjDi WK0NUj5df1ncbzJykDl8cMZXlAOzUUQNsPfQ5xZc4e4YzAtMh4gyr//K+ ZpXv/Q8Nv1ea9Wx+UaVteigvCFTeCkefbPWBnn1efHbDOGPN6gUFrMZ16 CfMLsnxtxjLJX5SVfGl3NyPo6o7poqXLfSrzCY5VHMzkEpnrJTXiIIIPz B3tcIWKa1hMS0ZmRupZEbRRo5c2UoTxs593Mu1alXCAeiOZXMupuU7nYS A==; X-CSE-ConnectionGUID: w5gDiWNaR62CrHncF2NXZQ== X-CSE-MsgGUID: czjS8xTLQlifJTNjgUGHIg== X-IronPort-AV: E=McAfee;i="6800,10657,11699"; a="72017448" X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="72017448" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:49 -0800 X-CSE-ConnectionGUID: wkIHYJGeTPqALEKjxi9lPg== X-CSE-MsgGUID: sB3dqFSLTp6Tz28yPGaNOw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="211845387" Received: from skuppusw-desk2.jf.intel.com ([10.165.154.101]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:46 -0800 From: Kuppuswamy Sathyanarayanan To: "Rafael J . Wysocki" , Daniel Lezcano Cc: Zhang Rui , Lukasz Luba , Srinivas Pandruvada , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 04/12] powercap: intel_rapl: Simplify rapl_compute_time_window_atom() Date: Thu, 12 Feb 2026 15:30:36 -0800 Message-ID: <20260212233044.329790-5-sathyanarayanan.kuppuswamy@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> References: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Restructure to use early return for to_raw case, eliminating redundant assignments and clarifying conversion paths. No functional changes. Signed-off-by: Kuppuswamy Sathyanarayanan Acked-by: Srinivas Pandruvada --- drivers/powercap/intel_rapl_common.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/powercap/intel_rapl_common.c b/drivers/powercap/intel_= rapl_common.c index d37150bab1e2..74a74af8f0ec 100644 --- a/drivers/powercap/intel_rapl_common.c +++ b/drivers/powercap/intel_rapl_common.c @@ -1145,16 +1145,14 @@ static u64 rapl_compute_time_window_core(struct rap= l_domain *rd, u64 value, static u64 rapl_compute_time_window_atom(struct rapl_domain *rd, u64 value, bool to_raw) { + if (to_raw) + return div64_u64(value, rd->time_unit); + /* * Atom time unit encoding is straight forward val * time_unit, * where time_unit is default to 1 sec. Never 0. */ - if (!to_raw) - return (value) ? value * rd->time_unit : rd->time_unit; - - value =3D div64_u64(value, rd->time_unit); - - return value; + return (value) ? value * rd->time_unit : rd->time_unit; } =20 static int rapl_check_unit_tpmi(struct rapl_domain *rd) --=20 2.43.0 From nobody Thu Apr 2 20:20:43 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CF3072DE711; Thu, 12 Feb 2026 23:30:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939052; cv=none; b=M2A5MAF4t6U89Dj+7C0cfsycxn3xL9om8nIubNPMSfu0iLmaP5Chy/4tofEjxR37hJb0ylnuH9GhF56hwS9NwjcnJN4irRUnmz5LUWlkNm+mdcNiNkCR3aeiwToNxcBWvgAeCkgiK2xKj1an+02J5QCY0Ia0WxmdKMs9GFzAagw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939052; c=relaxed/simple; bh=wGXMr7yLC4zMexW2WOtbSa/ZTiZjiR+uyKVHb2Mt3tw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XXtPX29eWKdcPuKuXywlFEFoD1jyN8gxERnnhQFclZwsQU5eQInlESLHo+0YNAMG3lG58hJfWjtDWjIaG3ZxFZZZIlFyK9IPOYfD1t3NQYqeprqnnnjViELxQeq5fI1oGWkH8ZslEmnr+tapgPvNJ1f3HelcgbpvXAm2bwRH6VI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=JPvOGqoK; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="JPvOGqoK" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1770939051; x=1802475051; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=wGXMr7yLC4zMexW2WOtbSa/ZTiZjiR+uyKVHb2Mt3tw=; b=JPvOGqoKkBULUYDAU97vcV4e85ZK4btCaqidQiHL0181Lbk661hWOHNB Zj56DCbMYfCQCSqv5NTGp/uLlUQk2a8S5U26JvGziiAqxDTrOzI0loNf4 5C/D7GQruPZeEN+SN8tIgLKrLPzdsL9pEvUwJgXnZESZ5gB0ISAAYVj0i SP95e2gha+dB6WWjlEjgdBoJJPyhXROpkEF77q1v7dci5j/FUqA+ka5zs ITxqKz8VRJW3lKKnwkeT8mRECFzwkPDdGvxAHacEouW0LPikk0vfxEyC3 ZqQgMNkXsuR5bfkoSVoYPKZp+aGm/fIHngaLG8BTPu6IXWzwS7p/2XHLl Q==; X-CSE-ConnectionGUID: TaPy/3dlTaiSWCiuK99thw== X-CSE-MsgGUID: u07miE7QQFag8L7XOH5NKQ== X-IronPort-AV: E=McAfee;i="6800,10657,11699"; a="72017418" X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="72017418" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:49 -0800 X-CSE-ConnectionGUID: Y6Aj5VKpTYuQYfUt5hezEQ== X-CSE-MsgGUID: 7rFFAV4sRwWXBGzwa+wWWQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="211845390" Received: from skuppusw-desk2.jf.intel.com ([10.165.154.101]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:46 -0800 From: Kuppuswamy Sathyanarayanan To: "Rafael J . Wysocki" , Daniel Lezcano Cc: Zhang Rui , Lukasz Luba , Srinivas Pandruvada , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 05/12] powercap: intel_rapl: Use shifts for power-of-2 operations Date: Thu, 12 Feb 2026 15:30:37 -0800 Message-ID: <20260212233044.329790-6-sathyanarayanan.kuppuswamy@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> References: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace division by (1 << value) with shift operations for clarity and consistency. Add ULL suffix to avoid undefined behavior from shifting signed integers. No functional changes intended. Signed-off-by: Kuppuswamy Sathyanarayanan Acked-by: Srinivas Pandruvada --- drivers/powercap/intel_rapl_common.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/powercap/intel_rapl_common.c b/drivers/powercap/intel_= rapl_common.c index 74a74af8f0ec..819eab3988da 100644 --- a/drivers/powercap/intel_rapl_common.c +++ b/drivers/powercap/intel_rapl_common.c @@ -964,13 +964,13 @@ static int rapl_check_unit_core(struct rapl_domain *r= d) } =20 value =3D (ra.value & ENERGY_UNIT_MASK) >> ENERGY_UNIT_OFFSET; - rd->energy_unit =3D ENERGY_UNIT_SCALE * 1000000 / (1 << value); + rd->energy_unit =3D (ENERGY_UNIT_SCALE * 1000000) >> value; =20 value =3D (ra.value & POWER_UNIT_MASK) >> POWER_UNIT_OFFSET; - rd->power_unit =3D 1000000 / (1 << value); + rd->power_unit =3D 1000000 >> value; =20 value =3D (ra.value & TIME_UNIT_MASK) >> TIME_UNIT_OFFSET; - rd->time_unit =3D 1000000 / (1 << value); + rd->time_unit =3D 1000000 >> value; =20 pr_debug("Core CPU %s:%s energy=3D%dpJ, time=3D%dus, power=3D%duW\n", rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit); @@ -992,13 +992,13 @@ static int rapl_check_unit_atom(struct rapl_domain *r= d) } =20 value =3D (ra.value & ENERGY_UNIT_MASK) >> ENERGY_UNIT_OFFSET; - rd->energy_unit =3D ENERGY_UNIT_SCALE * 1 << value; + rd->energy_unit =3D ENERGY_UNIT_SCALE * (1ULL << value); =20 value =3D (ra.value & POWER_UNIT_MASK) >> POWER_UNIT_OFFSET; - rd->power_unit =3D (1 << value) * 1000; + rd->power_unit =3D (1ULL << value) * 1000; =20 value =3D (ra.value & TIME_UNIT_MASK) >> TIME_UNIT_OFFSET; - rd->time_unit =3D 1000000 / (1 << value); + rd->time_unit =3D 1000000 >> value; =20 pr_debug("Atom %s:%s energy=3D%dpJ, time=3D%dus, power=3D%duW\n", rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit); @@ -1121,7 +1121,7 @@ static u64 rapl_compute_time_window_core(struct rapl_= domain *rd, u64 value, if (!to_raw) { f =3D (value & 0x60) >> 5; y =3D value & 0x1f; - value =3D (1 << y) * (4 + f) * rd->time_unit / 4; + value =3D (1ULL << y) * (4 + f) * rd->time_unit / 4; } else { if (value < rd->time_unit) return 0; @@ -1169,13 +1169,13 @@ static int rapl_check_unit_tpmi(struct rapl_domain = *rd) } =20 value =3D (ra.value & TPMI_ENERGY_UNIT_MASK) >> TPMI_ENERGY_UNIT_OFFSET; - rd->energy_unit =3D ENERGY_UNIT_SCALE * 1000000 / (1 << value); + rd->energy_unit =3D (ENERGY_UNIT_SCALE * 1000000) >> value; =20 value =3D (ra.value & TPMI_POWER_UNIT_MASK) >> TPMI_POWER_UNIT_OFFSET; - rd->power_unit =3D 1000000 / (1 << value); + rd->power_unit =3D 1000000 >> value; =20 value =3D (ra.value & TPMI_TIME_UNIT_MASK) >> TPMI_TIME_UNIT_OFFSET; - rd->time_unit =3D 1000000 / (1 << value); + rd->time_unit =3D 1000000 >> value; =20 pr_debug("Core CPU %s:%s energy=3D%dpJ, time=3D%dus, power=3D%duW\n", rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit); --=20 2.43.0 From nobody Thu Apr 2 20:20:43 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4430C2F260E; Thu, 12 Feb 2026 23:30:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939060; cv=none; b=IYHsSgQu0hutPpAJrB71AGPZmLLih50TxgjjNI34mwDJvIbSvz7dmRnRoIF1FSXCGVDZ6vf8VPzIw9aDTgDV1TQnwCrPFWWFGpTUDkJAE5OGw13MGdNbYy47n2f4OY3Naz3pQFAUzK/LoQkhayhxENIzXLvA+tLbob4+JMiWkDY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939060; c=relaxed/simple; bh=ICHQ3RgooLOUl9W7kvF4fjTrAsEJ2DDM+UnC77xozl8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HByyopco6BVNxcgb8G/x4E79AAGBX1S+EkOd5Q6wyY8ewADhP9SY/xASbY80X2riVxD2Mx1KBnKpqFq/T7pj0Taped02422/NwAy9bb7rvjx20gwVWghn0EAAQ5/Bl0yUdaGdU6NgpcdQPb3BSySnl2ahWifn0Rrrys9z+Ep77o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=ZL1AqXX1; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="ZL1AqXX1" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1770939053; x=1802475053; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ICHQ3RgooLOUl9W7kvF4fjTrAsEJ2DDM+UnC77xozl8=; b=ZL1AqXX1SJys4USghd/o4bcxyuVkEvMKe/4jS2EuyXOHWfOJdb4q2Dou mpF83gC7eoFzD6n8kWBS7Ke61vBE1ptsX6BY6WhxfB5kMI/D7G1FHPElE nJ/1cYsSX9jYpSndHgldeVHL4qQ1Hj3ZPj34lwnFS/5crQzigi72zs07O EsSBuM9Kbf0XMboXkw29Z48lrnpX6fJhyv/u+fD/5qEF0zGWJJXdKHExb b7BP2uCMPMtsBWRb0FqFX0+url6Q1vNkhm0mScYmhjHpQB5faDo0eM8Ws 8/Viml45/e71q86pISEcyoPbMWfCTiwdSRlz6r5kIlOobyZtehR0rZEpe Q==; X-CSE-ConnectionGUID: rsfiPgTOTj2i5t3hmBM9iw== X-CSE-MsgGUID: Aeq/iZetThG4meX0kT+OYw== X-IronPort-AV: E=McAfee;i="6800,10657,11699"; a="72017440" X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="72017440" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:49 -0800 X-CSE-ConnectionGUID: wklTk432R96FTQMhZx1VdQ== X-CSE-MsgGUID: Yv8h9MOcQ0KBgnltG7HOig== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="211845402" Received: from skuppusw-desk2.jf.intel.com ([10.165.154.101]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:46 -0800 From: Kuppuswamy Sathyanarayanan To: "Rafael J . Wysocki" , Daniel Lezcano Cc: Zhang Rui , Lukasz Luba , Srinivas Pandruvada , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 06/12] powercap: intel_rapl: Use GENMASK() and BIT() macros Date: Thu, 12 Feb 2026 15:30:38 -0800 Message-ID: <20260212233044.329790-7-sathyanarayanan.kuppuswamy@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> References: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace hardcoded bitmasks and bit shift operations with standard GENMASK(), GENMASK_ULL(), BIT(), and BIT_ULL() macros for better readability and to follow kernel coding conventions. No functional changes. Signed-off-by: Kuppuswamy Sathyanarayanan Acked-by: Srinivas Pandruvada --- drivers/powercap/intel_rapl_common.c | 60 ++++++++++++++-------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/drivers/powercap/intel_rapl_common.c b/drivers/powercap/intel_= rapl_common.c index 819eab3988da..aa505e2ebc94 100644 --- a/drivers/powercap/intel_rapl_common.c +++ b/drivers/powercap/intel_rapl_common.c @@ -31,62 +31,62 @@ #include =20 /* bitmasks for RAPL MSRs, used by primitive access functions */ -#define ENERGY_STATUS_MASK 0xffffffff +#define ENERGY_STATUS_MASK GENMASK(31, 0) =20 -#define POWER_LIMIT1_MASK 0x7FFF +#define POWER_LIMIT1_MASK GENMASK(14, 0) #define POWER_LIMIT1_ENABLE BIT(15) #define POWER_LIMIT1_CLAMP BIT(16) =20 -#define POWER_LIMIT2_MASK (0x7FFFULL<<32) +#define POWER_LIMIT2_MASK GENMASK_ULL(46, 32) #define POWER_LIMIT2_ENABLE BIT_ULL(47) #define POWER_LIMIT2_CLAMP BIT_ULL(48) #define POWER_HIGH_LOCK BIT_ULL(63) #define POWER_LOW_LOCK BIT(31) =20 -#define POWER_LIMIT4_MASK 0x1FFF +#define POWER_LIMIT4_MASK GENMASK(12, 0) =20 -#define TIME_WINDOW1_MASK (0x7FULL<<17) -#define TIME_WINDOW2_MASK (0x7FULL<<49) +#define TIME_WINDOW1_MASK GENMASK_ULL(23, 17) +#define TIME_WINDOW2_MASK GENMASK_ULL(55, 49) =20 #define POWER_UNIT_OFFSET 0x00 -#define POWER_UNIT_MASK 0x0F +#define POWER_UNIT_MASK GENMASK(3, 0) =20 #define ENERGY_UNIT_OFFSET 0x08 -#define ENERGY_UNIT_MASK 0x1F00 +#define ENERGY_UNIT_MASK GENMASK(12, 8) =20 #define TIME_UNIT_OFFSET 0x10 -#define TIME_UNIT_MASK 0xF0000 +#define TIME_UNIT_MASK GENMASK(19, 16) =20 -#define POWER_INFO_MAX_MASK (0x7fffULL<<32) -#define POWER_INFO_MIN_MASK (0x7fffULL<<16) -#define POWER_INFO_MAX_TIME_WIN_MASK (0x3fULL<<48) -#define POWER_INFO_THERMAL_SPEC_MASK 0x7fff +#define POWER_INFO_MAX_MASK GENMASK_ULL(46, 32) +#define POWER_INFO_MIN_MASK GENMASK_ULL(30, 16) +#define POWER_INFO_MAX_TIME_WIN_MASK GENMASK_ULL(53, 48) +#define POWER_INFO_THERMAL_SPEC_MASK GENMASK(14, 0) =20 -#define PERF_STATUS_THROTTLE_TIME_MASK 0xffffffff -#define PP_POLICY_MASK 0x1F +#define PERF_STATUS_THROTTLE_TIME_MASK GENMASK(31, 0) +#define PP_POLICY_MASK GENMASK(4, 0) =20 /* * SPR has different layout for Psys Domain PowerLimit registers. * There are 17 bits of PL1 and PL2 instead of 15 bits. * The Enable bits and TimeWindow bits are also shifted as a result. */ -#define PSYS_POWER_LIMIT1_MASK 0x1FFFF +#define PSYS_POWER_LIMIT1_MASK GENMASK_ULL(16, 0) #define PSYS_POWER_LIMIT1_ENABLE BIT(17) =20 -#define PSYS_POWER_LIMIT2_MASK (0x1FFFFULL<<32) +#define PSYS_POWER_LIMIT2_MASK GENMASK_ULL(48, 32) #define PSYS_POWER_LIMIT2_ENABLE BIT_ULL(49) =20 -#define PSYS_TIME_WINDOW1_MASK (0x7FULL<<19) -#define PSYS_TIME_WINDOW2_MASK (0x7FULL<<51) +#define PSYS_TIME_WINDOW1_MASK GENMASK_ULL(25, 19) +#define PSYS_TIME_WINDOW2_MASK GENMASK_ULL(57, 51) =20 /* bitmasks for RAPL TPMI, used by primitive access functions */ -#define TPMI_POWER_LIMIT_MASK 0x3FFFF +#define TPMI_POWER_LIMIT_MASK GENMASK_ULL(17, 0) #define TPMI_POWER_LIMIT_ENABLE BIT_ULL(62) -#define TPMI_TIME_WINDOW_MASK (0x7FULL<<18) -#define TPMI_INFO_SPEC_MASK 0x3FFFF -#define TPMI_INFO_MIN_MASK (0x3FFFFULL << 18) -#define TPMI_INFO_MAX_MASK (0x3FFFFULL << 36) -#define TPMI_INFO_MAX_TIME_WIN_MASK (0x7FULL << 54) +#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) =20 /* Non HW constants */ #define RAPL_PRIMITIVE_DERIVED BIT(1) /* not from raw data */ @@ -111,9 +111,9 @@ #define TPMI_POWER_UNIT_OFFSET POWER_UNIT_OFFSET #define TPMI_POWER_UNIT_MASK POWER_UNIT_MASK #define TPMI_ENERGY_UNIT_OFFSET 0x06 -#define TPMI_ENERGY_UNIT_MASK 0x7C0 +#define TPMI_ENERGY_UNIT_MASK GENMASK_ULL(10, 6) #define TPMI_TIME_UNIT_OFFSET 0x0C -#define TPMI_TIME_UNIT_MASK 0xF000 +#define TPMI_TIME_UNIT_MASK GENMASK_ULL(15, 12) =20 #define RAPL_EVENT_MASK GENMASK(7, 0) =20 @@ -1102,8 +1102,8 @@ static void set_floor_freq_atom(struct rapl_domain *r= d, bool enable) &power_ctrl_orig_val); mdata =3D power_ctrl_orig_val; if (enable) { - mdata &=3D ~(0x7f << 8); - mdata |=3D 1 << 8; + mdata &=3D ~GENMASK(14, 8); + mdata |=3D BIT(8); } iosf_mbi_write(BT_MBI_UNIT_PMC, MBI_CR_WRITE, defaults->floor_freq_reg_addr, mdata); @@ -1136,7 +1136,7 @@ static u64 rapl_compute_time_window_core(struct rapl_= domain *rd, u64 value, if (y > 0x1f) return 0x7f; =20 - f =3D div64_u64(4 * (value - (1ULL << y)), 1ULL << y); + f =3D div64_u64(4 * (value - BIT_ULL(y)), BIT_ULL(y)); value =3D (y & 0x1f) | ((f & 0x3) << 5); } return value; --=20 2.43.0 From nobody Thu Apr 2 20:20:43 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9B472E0400; Thu, 12 Feb 2026 23:30:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939052; cv=none; b=HbMpr4FC7NSjvUZFheSoz0U/ghDie0Q/uiYgY37vQ85ZnchB+yrCoT+XCgbYD3cJCvjtMF5smb/ahcR3QBPAJjEUNPUt1I7PxrSkmiRv9enfaQF5bRO4T9c6lfJ1saakR4jo5Tlu5cHk2RLAk/hU9Ua/ew4Zek9f9mqaDjfFauc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939052; c=relaxed/simple; bh=0OYe9pnYnq/aknJZOeO1YkpKJ3ZHIZch7vkQWVXm8uk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WCLtyJse4Gbhns2qWcsVeZycsRWdf3c+Z7lWAc4Ce2QCpZspBIDFuXaDn9aX/sTJCt4sK3sYYxf5l3l5N9zgT1PbdCOz63QM3kijoDVQN+ou9eQHu2dYSfkqq7FOvcFnIB61DmL0w6tp8OxAT80XhcObZtKWaVqrY4mw4HCPoak= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=WGSn2Yd/; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="WGSn2Yd/" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1770939051; x=1802475051; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=0OYe9pnYnq/aknJZOeO1YkpKJ3ZHIZch7vkQWVXm8uk=; b=WGSn2Yd/nTr7Q1V9ay1IocA4RQaprV/UH9nq1c4LzA7eJYiaisxMsGoB 3WFyWpkPQQUwPFexrd9+DIS7Xz8dU3axp3XfPMEbHys8e29cpqMz9Nd5Y 7M7/LGS6pwiaA2FB7BnT1IQb+JsEYTQQ1RaY4FIWckCjf6FScMij5hCDD xDhmOF+S0IfamRVZrMptgJGh9dVG85nmwZlAlRfa65nO+f6P0W07GwRlk VTJ+cZBDnRrE30SS/3/lCtPBkA0DnWdaKbDn+rUNy6aLm5+qRFJ4IAjWj ky0TEojGeWacfR7peIi316iic0TDQYeo7NTrTHPuxYvMJ++CiaCm2uNAm g==; X-CSE-ConnectionGUID: JbZ+eNAQStelwWuGWcn4LQ== X-CSE-MsgGUID: u+j3ZvykTdyTL1KZbRct3A== X-IronPort-AV: E=McAfee;i="6800,10657,11699"; a="72017426" X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="72017426" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:49 -0800 X-CSE-ConnectionGUID: B3whxwFVRF6d5uwyiyoMnA== X-CSE-MsgGUID: f1bIqwlnQPiQDFF0e6OUbw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="211845404" Received: from skuppusw-desk2.jf.intel.com ([10.165.154.101]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:46 -0800 From: Kuppuswamy Sathyanarayanan To: "Rafael J . Wysocki" , Daniel Lezcano Cc: Zhang Rui , Lukasz Luba , Srinivas Pandruvada , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 07/12] powercap: intel_rapl: Use unit conversion macros from units.h Date: Thu, 12 Feb 2026 15:30:39 -0800 Message-ID: <20260212233044.329790-8-sathyanarayanan.kuppuswamy@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> References: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace hardcoded numeric constants with standard unit conversion macros from linux/units.h for better code clarity and self-documentation. Add MICROJOULE_PER_JOULE and NANOJOULE_PER_JOULE to units.h to support energy unit conversions, following the existing pattern for power units. No functional changes. Signed-off-by: Kuppuswamy Sathyanarayanan Acked-by: Srinivas Pandruvada --- drivers/powercap/intel_rapl_common.c | 19 ++++++++++--------- include/linux/units.h | 3 +++ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/drivers/powercap/intel_rapl_common.c b/drivers/powercap/intel_= rapl_common.c index aa505e2ebc94..38b21e3077de 100644 --- a/drivers/powercap/intel_rapl_common.c +++ b/drivers/powercap/intel_rapl_common.c @@ -24,6 +24,7 @@ #include #include #include +#include =20 #include #include @@ -964,13 +965,13 @@ static int rapl_check_unit_core(struct rapl_domain *r= d) } =20 value =3D (ra.value & ENERGY_UNIT_MASK) >> ENERGY_UNIT_OFFSET; - rd->energy_unit =3D (ENERGY_UNIT_SCALE * 1000000) >> value; + rd->energy_unit =3D (ENERGY_UNIT_SCALE * MICROJOULE_PER_JOULE) >> value; =20 value =3D (ra.value & POWER_UNIT_MASK) >> POWER_UNIT_OFFSET; - rd->power_unit =3D 1000000 >> value; + rd->power_unit =3D MICROWATT_PER_WATT >> value; =20 value =3D (ra.value & TIME_UNIT_MASK) >> TIME_UNIT_OFFSET; - rd->time_unit =3D 1000000 >> value; + rd->time_unit =3D USEC_PER_SEC >> value; =20 pr_debug("Core CPU %s:%s energy=3D%dpJ, time=3D%dus, power=3D%duW\n", rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit); @@ -995,10 +996,10 @@ static int rapl_check_unit_atom(struct rapl_domain *r= d) rd->energy_unit =3D ENERGY_UNIT_SCALE * (1ULL << value); =20 value =3D (ra.value & POWER_UNIT_MASK) >> POWER_UNIT_OFFSET; - rd->power_unit =3D (1ULL << value) * 1000; + rd->power_unit =3D (1ULL << value) * MILLIWATT_PER_WATT; =20 value =3D (ra.value & TIME_UNIT_MASK) >> TIME_UNIT_OFFSET; - rd->time_unit =3D 1000000 >> value; + rd->time_unit =3D USEC_PER_SEC >> value; =20 pr_debug("Atom %s:%s energy=3D%dpJ, time=3D%dus, power=3D%duW\n", rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit); @@ -1169,13 +1170,13 @@ static int rapl_check_unit_tpmi(struct rapl_domain = *rd) } =20 value =3D (ra.value & TPMI_ENERGY_UNIT_MASK) >> TPMI_ENERGY_UNIT_OFFSET; - rd->energy_unit =3D (ENERGY_UNIT_SCALE * 1000000) >> value; + rd->energy_unit =3D (ENERGY_UNIT_SCALE * MICROJOULE_PER_JOULE) >> value; =20 value =3D (ra.value & TPMI_POWER_UNIT_MASK) >> TPMI_POWER_UNIT_OFFSET; - rd->power_unit =3D 1000000 >> value; + rd->power_unit =3D MICROWATT_PER_WATT >> value; =20 value =3D (ra.value & TPMI_TIME_UNIT_MASK) >> TPMI_TIME_UNIT_OFFSET; - rd->time_unit =3D 1000000 >> value; + rd->time_unit =3D USEC_PER_SEC >> value; =20 pr_debug("Core CPU %s:%s energy=3D%dpJ, time=3D%dus, power=3D%duW\n", rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit); @@ -1208,7 +1209,7 @@ static const struct rapl_defaults rapl_defaults_spr_s= erver =3D { .check_unit =3D rapl_check_unit_core, .set_floor_freq =3D set_floor_freq_default, .compute_time_window =3D rapl_compute_time_window_core, - .psys_domain_energy_unit =3D 1000000000, + .psys_domain_energy_unit =3D NANOJOULE_PER_JOULE, .spr_psys_bits =3D true, }; =20 diff --git a/include/linux/units.h b/include/linux/units.h index 00e15de33eca..8c17d98cd67e 100644 --- a/include/linux/units.h +++ b/include/linux/units.h @@ -35,6 +35,9 @@ #define MICROWATT_PER_MILLIWATT 1000UL #define MICROWATT_PER_WATT 1000000UL =20 +#define MICROJOULE_PER_JOULE 1000000UL +#define NANOJOULE_PER_JOULE 1000000000UL + #define BYTES_PER_KBIT (KILO / BITS_PER_BYTE) #define BYTES_PER_MBIT (MEGA / BITS_PER_BYTE) #define BYTES_PER_GBIT (GIGA / BITS_PER_BYTE) --=20 2.43.0 From nobody Thu Apr 2 20:20:43 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDE912E0926; Thu, 12 Feb 2026 23:30:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939061; cv=none; b=tVX2hs/Q88wd7XjuCfpudDyE3pqwq81C9j1b8PxEuE5BKyTGYs/1UfpkVAonoP5pTJWp58ZoF2a9LWL2nSCXlPqftRkMlgIzk49QH7jmeC6AXvtdp//tcK9QnxBUJ37cKUibSIrfbZucKFvLZXY9qhC94O6TsJdzJUdOlSqnzA0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939061; c=relaxed/simple; bh=mLBCRNb+BbRb/txhGGWFmIA1mvzuD4rw96+2QGo4GLE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fgCO4DJlDgMTV4e8wH7MhfdS6wTSlZD6ugnC9cgHDyWmvz7eMpb0pr2z8O0qLrbFr0GCU4S3dP1vsqhLt3obKyR8qp7/yS6JV5817W1vXWTD2FcNTpp13muSVv3qCtqU7XlzmhookUDGwPw+NnM8zfjLLVpu08xlr+PzKqxSAS4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=cWDxdnet; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="cWDxdnet" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1770939059; x=1802475059; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=mLBCRNb+BbRb/txhGGWFmIA1mvzuD4rw96+2QGo4GLE=; b=cWDxdnetIJuNNyalkLQW6zFDOIx+reWsm6xwXqhxqx0FgP4BIpwDnine Ea94d/5iPQrRnLCh6iFIkMzjC+CBL7C9uClsIhMPfjXwUu78lc+JJrDM2 31JF0xXDeElkAR5T1f1G4MRN6WlnUm+SCDAFlmHLf9+bNinlHpQM5WR5Q WVDWivqpiXJwDID69z4gb+aSzwd0F6HF0SmUhEdo70WVzXrrDwb+d5BDE gmHzGm40V+JZkfpcEKojIWl+g46flqWJwDO+UDodJ6tWOBMpxBppNY0IF uhsdutFjxk7IyOYQYDJhwzJP2aYNb2rsZLfYkaK8z8CEQ7j6jIZ+xOwsb g==; X-CSE-ConnectionGUID: MPpm2eSgSuCAh/oOIj8vDw== X-CSE-MsgGUID: wQdVyU/UTQGfRWl6JuSXxA== X-IronPort-AV: E=McAfee;i="6800,10657,11699"; a="72017446" X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="72017446" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:49 -0800 X-CSE-ConnectionGUID: q3//cpbcRrCG7cspKowAJA== X-CSE-MsgGUID: wpPbL0JETjmv3TGt2qYlPg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="211845406" Received: from skuppusw-desk2.jf.intel.com ([10.165.154.101]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:46 -0800 From: Kuppuswamy Sathyanarayanan To: "Rafael J . Wysocki" , Daniel Lezcano Cc: Zhang Rui , Lukasz Luba , Srinivas Pandruvada , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 08/12] powercap: intel_rapl: Allow interface drivers to configure rapl_defaults Date: Thu, 12 Feb 2026 15:30:40 -0800 Message-ID: <20260212233044.329790-9-sathyanarayanan.kuppuswamy@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> References: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" RAPL default settings vary across different RAPL interfaces (MSR, TPMI, MMIO). Currently, these defaults are stored in the common RAPL driver, which requires interface-specific handling logic and makes the common layer unnecessarily complex. There is no strong reason for the common code to own these defaults, since they are inherently interface-specific. To prepare for moving default configuration into the individual interface drivers, 1. Move struct rapl_defaults into a shared header so that interface drivers can directly populate their own default settings. 2. Change the @defaults field in struct rapl_if_priv from void * to const struct rapl_defaults * to improve type safety and readability and update the common driver to use the typed defaults structure. 3. Update all internal getter functions and local pointers to use const struct rapl_defaults * to maintain const-correctness. 4. Rename and export the common helper functions (check_unit, set_floor_freq, compute_time_window) so interface drivers may reuse or override them as appropriate. No functional changes. This is a preparatory refactoring to allow interface drivers to supply their own RAPL default settings. Co-developed-by: Zhang Rui Signed-off-by: Zhang Rui Signed-off-by: Kuppuswamy Sathyanarayanan Acked-by: Srinivas Pandruvada --- drivers/powercap/intel_rapl_common.c | 64 ++++++++++++---------------- include/linux/intel_rapl.h | 17 +++++++- 2 files changed, 43 insertions(+), 38 deletions(-) diff --git a/drivers/powercap/intel_rapl_common.c b/drivers/powercap/intel_= rapl_common.c index 38b21e3077de..f3a9d3d538cd 100644 --- a/drivers/powercap/intel_rapl_common.c +++ b/drivers/powercap/intel_rapl_common.c @@ -221,20 +221,10 @@ static int get_pl_prim(struct rapl_domain *rd, int pl= , enum pl_prims prim) #define power_zone_to_rapl_domain(_zone) \ container_of(_zone, struct rapl_domain, power_zone) =20 -struct rapl_defaults { - u8 floor_freq_reg_addr; - int (*check_unit)(struct rapl_domain *rd); - void (*set_floor_freq)(struct rapl_domain *rd, bool mode); - u64 (*compute_time_window)(struct rapl_domain *rd, u64 val, - bool to_raw); - unsigned int dram_domain_energy_unit; - unsigned int psys_domain_energy_unit; - bool spr_psys_bits; -}; -static struct rapl_defaults *defaults_msr; +static const struct rapl_defaults *defaults_msr; static const struct rapl_defaults defaults_tpmi; =20 -static struct rapl_defaults *get_defaults(struct rapl_package *rp) +static const struct rapl_defaults *get_defaults(struct rapl_package *rp) { return rp->priv->defaults; } @@ -351,7 +341,7 @@ static int find_nr_power_limit(struct rapl_domain *rd) static int set_domain_enable(struct powercap_zone *power_zone, bool mode) { struct rapl_domain *rd =3D power_zone_to_rapl_domain(power_zone); - struct rapl_defaults *defaults =3D get_defaults(rd->rp); + const struct rapl_defaults *defaults =3D get_defaults(rd->rp); u64 val; int ret; =20 @@ -640,7 +630,7 @@ static u64 rapl_unit_xlate(struct rapl_domain *rd, enum= unit_type type, u64 value, int to_raw) { u64 units =3D 1; - struct rapl_defaults *defaults =3D get_defaults(rd->rp); + const struct rapl_defaults *defaults =3D get_defaults(rd->rp); u64 scale =3D 1; =20 switch (type) { @@ -785,11 +775,11 @@ static int rapl_config(struct rapl_package *rp) /* MMIO I/F shares the same register layout as MSR registers */ case RAPL_IF_MMIO: case RAPL_IF_MSR: - rp->priv->defaults =3D (void *)defaults_msr; + rp->priv->defaults =3D defaults_msr; rp->priv->rpi =3D (void *)rpi_msr; break; case RAPL_IF_TPMI: - rp->priv->defaults =3D (void *)&defaults_tpmi; + rp->priv->defaults =3D &defaults_tpmi; rp->priv->rpi =3D (void *)rpi_tpmi; break; default: @@ -806,7 +796,7 @@ static int rapl_config(struct rapl_package *rp) static enum rapl_primitives prim_fixups(struct rapl_domain *rd, enum rapl_primitives prim) { - struct rapl_defaults *defaults =3D get_defaults(rd->rp); + const struct rapl_defaults *defaults =3D get_defaults(rd->rp); =20 if (!defaults->spr_psys_bits) return prim; @@ -951,7 +941,7 @@ static int rapl_write_pl_data(struct rapl_domain *rd, i= nt pl, * power unit : microWatts : Represented in milliWatts by default * time unit : microseconds: Represented in seconds by default */ -static int rapl_check_unit_core(struct rapl_domain *rd) +int rapl_default_check_unit(struct rapl_domain *rd) { struct reg_action ra; u32 value; @@ -978,6 +968,7 @@ static int rapl_check_unit_core(struct rapl_domain *rd) =20 return 0; } +EXPORT_SYMBOL_NS_GPL(rapl_default_check_unit, "INTEL_RAPL"); =20 static int rapl_check_unit_atom(struct rapl_domain *rd) { @@ -1071,7 +1062,7 @@ static void package_power_limit_irq_restore(struct ra= pl_package *rp) wrmsr_safe(MSR_IA32_PACKAGE_THERM_INTERRUPT, l, h); } =20 -static void set_floor_freq_default(struct rapl_domain *rd, bool mode) +void rapl_default_set_floor_freq(struct rapl_domain *rd, bool mode) { int i; =20 @@ -1085,11 +1076,12 @@ static void set_floor_freq_default(struct rapl_doma= in *rd, bool mode) rapl_write_pl_data(rd, i, PL_CLAMP, mode); } } +EXPORT_SYMBOL_NS_GPL(rapl_default_set_floor_freq, "INTEL_RAPL"); =20 static void set_floor_freq_atom(struct rapl_domain *rd, bool enable) { static u32 power_ctrl_orig_val; - struct rapl_defaults *defaults =3D get_defaults(rd->rp); + const struct rapl_defaults *defaults =3D get_defaults(rd->rp); u32 mdata; =20 if (!defaults->floor_freq_reg_addr) { @@ -1110,8 +1102,7 @@ static void set_floor_freq_atom(struct rapl_domain *r= d, bool enable) defaults->floor_freq_reg_addr, mdata); } =20 -static u64 rapl_compute_time_window_core(struct rapl_domain *rd, u64 value, - bool to_raw) +u64 rapl_default_compute_time_window(struct rapl_domain *rd, u64 value, bo= ol to_raw) { u64 f, y; /* fraction and exp. used for time unit */ =20 @@ -1142,6 +1133,7 @@ static u64 rapl_compute_time_window_core(struct rapl_= domain *rd, u64 value, } return value; } +EXPORT_SYMBOL_NS_GPL(rapl_default_compute_time_window, "INTEL_RAPL"); =20 static u64 rapl_compute_time_window_atom(struct rapl_domain *rd, u64 value, bool to_raw) @@ -1187,28 +1179,28 @@ static int rapl_check_unit_tpmi(struct rapl_domain = *rd) static const struct rapl_defaults defaults_tpmi =3D { .check_unit =3D rapl_check_unit_tpmi, /* Reuse existing logic, ignore the PL_CLAMP failures and enable all Powe= r Limits */ - .set_floor_freq =3D set_floor_freq_default, - .compute_time_window =3D rapl_compute_time_window_core, + .set_floor_freq =3D rapl_default_set_floor_freq, + .compute_time_window =3D rapl_default_compute_time_window, }; =20 static const struct rapl_defaults rapl_defaults_core =3D { .floor_freq_reg_addr =3D 0, - .check_unit =3D rapl_check_unit_core, - .set_floor_freq =3D set_floor_freq_default, - .compute_time_window =3D rapl_compute_time_window_core, + .check_unit =3D rapl_default_check_unit, + .set_floor_freq =3D rapl_default_set_floor_freq, + .compute_time_window =3D rapl_default_compute_time_window, }; =20 static const struct rapl_defaults rapl_defaults_hsw_server =3D { - .check_unit =3D rapl_check_unit_core, - .set_floor_freq =3D set_floor_freq_default, - .compute_time_window =3D rapl_compute_time_window_core, + .check_unit =3D rapl_default_check_unit, + .set_floor_freq =3D rapl_default_set_floor_freq, + .compute_time_window =3D rapl_default_compute_time_window, .dram_domain_energy_unit =3D 15300, }; =20 static const struct rapl_defaults rapl_defaults_spr_server =3D { - .check_unit =3D rapl_check_unit_core, - .set_floor_freq =3D set_floor_freq_default, - .compute_time_window =3D rapl_compute_time_window_core, + .check_unit =3D rapl_default_check_unit, + .set_floor_freq =3D rapl_default_set_floor_freq, + .compute_time_window =3D rapl_default_compute_time_window, .psys_domain_energy_unit =3D NANOJOULE_PER_JOULE, .spr_psys_bits =3D true, }; @@ -1242,7 +1234,7 @@ static const struct rapl_defaults rapl_defaults_cht = =3D { }; =20 static const struct rapl_defaults rapl_defaults_amd =3D { - .check_unit =3D rapl_check_unit_core, + .check_unit =3D rapl_default_check_unit, }; =20 static const struct x86_cpu_id rapl_ids[] __initconst =3D { @@ -1448,7 +1440,7 @@ static int rapl_check_domain(int domain, struct rapl_= package *rp) */ static int rapl_get_domain_unit(struct rapl_domain *rd) { - struct rapl_defaults *defaults =3D get_defaults(rd->rp); + const struct rapl_defaults *defaults =3D get_defaults(rd->rp); int ret; =20 if (!rd->regs[RAPL_DOMAIN_REG_UNIT].val) { @@ -2347,7 +2339,7 @@ static int __init rapl_init(void) =20 id =3D x86_match_cpu(rapl_ids); if (id) { - defaults_msr =3D (struct rapl_defaults *)id->driver_data; + defaults_msr =3D (const struct rapl_defaults *)id->driver_data; =20 rapl_msr_platdev =3D platform_device_alloc("intel_rapl_msr", 0); if (!rapl_msr_platdev) diff --git a/include/linux/intel_rapl.h b/include/linux/intel_rapl.h index f479ef5b3341..19f619fb37ff 100644 --- a/include/linux/intel_rapl.h +++ b/include/linux/intel_rapl.h @@ -128,6 +128,16 @@ struct reg_action { int err; }; =20 +struct rapl_defaults { + u8 floor_freq_reg_addr; + int (*check_unit)(struct rapl_domain *rd); + void (*set_floor_freq)(struct rapl_domain *rd, bool mode); + u64 (*compute_time_window)(struct rapl_domain *rd, u64 val, bool to_raw); + unsigned int dram_domain_energy_unit; + unsigned int psys_domain_energy_unit; + bool spr_psys_bits; +}; + /** * struct rapl_if_priv: private data for different RAPL interfaces * @control_type: Each RAPL interface must have its own powercap @@ -142,7 +152,7 @@ struct reg_action { * registers. * @write_raw: Callback for writing RAPL interface specific * registers. - * @defaults: internal pointer to interface default settings + * @defaults: pointer to default settings * @rpi: internal pointer to interface primitive info */ struct rapl_if_priv { @@ -154,7 +164,7 @@ struct rapl_if_priv { int limits[RAPL_DOMAIN_MAX]; int (*read_raw)(int id, struct reg_action *ra, bool atomic); int (*write_raw)(int id, struct reg_action *ra); - void *defaults; + const struct rapl_defaults *defaults; void *rpi; }; =20 @@ -211,6 +221,9 @@ void rapl_remove_package_cpuslocked(struct rapl_package= *rp); struct rapl_package *rapl_find_package_domain(int id, struct rapl_if_priv = *priv, bool id_is_cpu); struct rapl_package *rapl_add_package(int id, struct rapl_if_priv *priv, b= ool id_is_cpu); void rapl_remove_package(struct rapl_package *rp); +int rapl_default_check_unit(struct rapl_domain *rd); +void rapl_default_set_floor_freq(struct rapl_domain *rd, bool mode); +u64 rapl_default_compute_time_window(struct rapl_domain *rd, u64 value, bo= ol to_raw); =20 #ifdef CONFIG_PERF_EVENTS int rapl_package_add_pmu(struct rapl_package *rp); --=20 2.43.0 From nobody Thu Apr 2 20:20:43 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9743A2F25F0; Thu, 12 Feb 2026 23:30:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939066; cv=none; b=AeVWQORVy6BbiCNlOAV0qXJDPNXa5DkqgJA1pt0FRVoI0XnCEk0fogogaM6ZnVP5BW0iY8+7vaJrpdxceQMcmb6Yt1CW2RJL+vFAyXl+24TAzAutJwXgLYFp0MVvF3PGO/CfcUK5IcQsHIvRBv04F/NFzQoqM+Qx8l2M1olghwY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939066; c=relaxed/simple; bh=/+i6Nk67HkJZJewCj3D1iKKpfyUtVvVUzzKEo527WdM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Os2vy4UGTkc2CYpYOjxR0BABUNlxToU41uboZZQTgxaZOqHmAxVTfPVuGaaoxtA81w5eaeJA+oc5ZoAI0eg87OQUv1yj7VEC3zjqI6RVP5kTbBEzIob131Ql0breJC4W2jqtqAViTANnIn6FZecBPRMuuiFyswWITqHMcE/JcRY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=M+OvA9kF; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="M+OvA9kF" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1770939060; x=1802475060; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=/+i6Nk67HkJZJewCj3D1iKKpfyUtVvVUzzKEo527WdM=; b=M+OvA9kFKpB+UAyKLeujTVb2weHBGiKrxCKMhfg0zYLEaFxqjkzFK7SC fRF8WQ89KgFGc7gtX2gZf9PotqbdWDu0NqF8lCRPJfWnPEGKeKDoJGYKN jFEUvGns0bmtyycwinhUdbx7b/Od0YHxIepXUkAXXcUPs2vRNLiMq9mYg m1eDJ9vrUemGtEtjB2N6RSWn723TjKFg9U2KG/wJYvazfM9GbEMDHXey9 qxRCAm03ahnWIUnDqjgYEm5mM9/xZCzDy9VUg3rBg8hZ+esneks2y3Azc 0vmw17T5vxbfRW/CnksZXmE3OMAekIEctQlvcafxJjvomgrhoEo1w5T5Q A==; X-CSE-ConnectionGUID: 5xH9YgRiT7CETD3C5VusQg== X-CSE-MsgGUID: TY6a2CedS72wSzMXncat/w== X-IronPort-AV: E=McAfee;i="6800,10657,11699"; a="72017450" X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="72017450" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:49 -0800 X-CSE-ConnectionGUID: N7op7ktMQBSK783c6Hc6VQ== X-CSE-MsgGUID: cbBB571ZSWKG9Y4pZN2okA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="211845408" Received: from skuppusw-desk2.jf.intel.com ([10.165.154.101]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:46 -0800 From: Kuppuswamy Sathyanarayanan To: "Rafael J . Wysocki" , Daniel Lezcano Cc: Zhang Rui , Lukasz Luba , Srinivas Pandruvada , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 09/12] powercap: intel_rapl: Move TPMI default settings into TPMI interface driver Date: Thu, 12 Feb 2026 15:30:41 -0800 Message-ID: <20260212233044.329790-10-sathyanarayanan.kuppuswamy@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> References: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" TPMI-specific RAPL defaults differ from those used by MSR and MMIO interfaces. Keeping them in RAPL common driver introduces unnecessary complexity. Move the TPMI defaults into the TPMI interface driver. This change includes the following updates: 1. Add a TPMI-local struct rapl_defaults instance and assign it to priv->defaults during TPMI probe. 2. Move rapl_check_unit_tpmi() and related unit-field definitions from the common driver into the TPMI driver. 3. In rapl_check_unit_tpmi(), replace the generic get_rid() usage with direct access to the TPMI package ID, since the function is now interface-specific. No functional changes are intended. Co-developed-by: Zhang Rui Signed-off-by: Zhang Rui Signed-off-by: Kuppuswamy Sathyanarayanan Acked-by: Srinivas Pandruvada --- drivers/powercap/intel_rapl_common.c | 45 -------------------------- drivers/powercap/intel_rapl_tpmi.c | 47 ++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 45 deletions(-) diff --git a/drivers/powercap/intel_rapl_common.c b/drivers/powercap/intel_= rapl_common.c index f3a9d3d538cd..bfe3dc011911 100644 --- a/drivers/powercap/intel_rapl_common.c +++ b/drivers/powercap/intel_rapl_common.c @@ -108,14 +108,6 @@ #define PACKAGE_PLN_INT_SAVED BIT(0) #define MAX_PRIM_NAME 32 =20 -/* TPMI Unit register has different layout */ -#define TPMI_POWER_UNIT_OFFSET POWER_UNIT_OFFSET -#define TPMI_POWER_UNIT_MASK POWER_UNIT_MASK -#define TPMI_ENERGY_UNIT_OFFSET 0x06 -#define TPMI_ENERGY_UNIT_MASK GENMASK_ULL(10, 6) -#define TPMI_TIME_UNIT_OFFSET 0x0C -#define TPMI_TIME_UNIT_MASK GENMASK_ULL(15, 12) - #define RAPL_EVENT_MASK GENMASK(7, 0) =20 enum unit_type { @@ -222,7 +214,6 @@ static int get_pl_prim(struct rapl_domain *rd, int pl, = enum pl_prims prim) container_of(_zone, struct rapl_domain, power_zone) =20 static const struct rapl_defaults *defaults_msr; -static const struct rapl_defaults defaults_tpmi; =20 static const struct rapl_defaults *get_defaults(struct rapl_package *rp) { @@ -779,7 +770,6 @@ static int rapl_config(struct rapl_package *rp) rp->priv->rpi =3D (void *)rpi_msr; break; case RAPL_IF_TPMI: - rp->priv->defaults =3D &defaults_tpmi; rp->priv->rpi =3D (void *)rpi_tpmi; break; default: @@ -1148,41 +1138,6 @@ static u64 rapl_compute_time_window_atom(struct rapl= _domain *rd, u64 value, return (value) ? value * rd->time_unit : rd->time_unit; } =20 -static int rapl_check_unit_tpmi(struct rapl_domain *rd) -{ - struct reg_action ra; - u32 value; - - ra.reg =3D rd->regs[RAPL_DOMAIN_REG_UNIT]; - ra.mask =3D ~0; - if (rd->rp->priv->read_raw(get_rid(rd->rp), &ra, false)) { - pr_err("Failed to read power unit REG 0x%llx on %s:%s, exit.\n", - ra.reg.val, rd->rp->name, rd->name); - return -ENODEV; - } - - value =3D (ra.value & TPMI_ENERGY_UNIT_MASK) >> TPMI_ENERGY_UNIT_OFFSET; - rd->energy_unit =3D (ENERGY_UNIT_SCALE * MICROJOULE_PER_JOULE) >> value; - - value =3D (ra.value & TPMI_POWER_UNIT_MASK) >> TPMI_POWER_UNIT_OFFSET; - rd->power_unit =3D MICROWATT_PER_WATT >> value; - - value =3D (ra.value & TPMI_TIME_UNIT_MASK) >> TPMI_TIME_UNIT_OFFSET; - rd->time_unit =3D USEC_PER_SEC >> value; - - pr_debug("Core CPU %s:%s energy=3D%dpJ, time=3D%dus, power=3D%duW\n", - rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit); - - return 0; -} - -static const struct rapl_defaults defaults_tpmi =3D { - .check_unit =3D rapl_check_unit_tpmi, - /* Reuse existing logic, ignore the PL_CLAMP failures and enable all Powe= r Limits */ - .set_floor_freq =3D rapl_default_set_floor_freq, - .compute_time_window =3D rapl_default_compute_time_window, -}; - static const struct rapl_defaults rapl_defaults_core =3D { .floor_freq_reg_addr =3D 0, .check_unit =3D rapl_default_check_unit, diff --git a/drivers/powercap/intel_rapl_tpmi.c b/drivers/powercap/intel_ra= pl_tpmi.c index 3b52403c14f8..fb61678ca701 100644 --- a/drivers/powercap/intel_rapl_tpmi.c +++ b/drivers/powercap/intel_rapl_tpmi.c @@ -9,12 +9,14 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt =20 #include +#include #include #include #include #include #include #include +#include =20 #define TPMI_RAPL_MAJOR_VERSION 0 #define TPMI_RAPL_MINOR_VERSION 1 @@ -250,6 +252,50 @@ static int parse_one_domain(struct tpmi_rapl_package *= trp, u32 offset) return 0; } =20 +/* TPMI Unit register has different layout */ +#define TPMI_ENERGY_UNIT_SCALE 1000 +#define TPMI_POWER_UNIT_OFFSET 0x00 +#define TPMI_POWER_UNIT_MASK GENMASK(3, 0) +#define TPMI_ENERGY_UNIT_OFFSET 0x06 +#define TPMI_ENERGY_UNIT_MASK GENMASK_ULL(10, 6) +#define TPMI_TIME_UNIT_OFFSET 0x0C +#define TPMI_TIME_UNIT_MASK GENMASK_ULL(15, 12) + +static int rapl_check_unit_tpmi(struct rapl_domain *rd) +{ + struct reg_action ra; + u32 value; + + ra.reg =3D rd->regs[RAPL_DOMAIN_REG_UNIT]; + ra.mask =3D ~0; + if (tpmi_rapl_read_raw(rd->rp->id, &ra, false)) { + pr_err("Failed to read power unit REG 0x%llx on %s:%s, exit.\n", + ra.reg.val, rd->rp->name, rd->name); + return -ENODEV; + } + + value =3D (ra.value & TPMI_ENERGY_UNIT_MASK) >> TPMI_ENERGY_UNIT_OFFSET; + rd->energy_unit =3D (TPMI_ENERGY_UNIT_SCALE * MICROJOULE_PER_JOULE) >> va= lue; + + value =3D (ra.value & TPMI_POWER_UNIT_MASK) >> TPMI_POWER_UNIT_OFFSET; + rd->power_unit =3D MICROWATT_PER_WATT >> value; + + value =3D (ra.value & TPMI_TIME_UNIT_MASK) >> TPMI_TIME_UNIT_OFFSET; + rd->time_unit =3D USEC_PER_SEC >> value; + + pr_debug("Core CPU %s:%s energy=3D%dpJ, time=3D%dus, power=3D%duW\n", + rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit); + + return 0; +} + +static const struct rapl_defaults defaults_tpmi =3D { + .check_unit =3D rapl_check_unit_tpmi, + /* Reuse existing logic, ignore the PL_CLAMP failures and enable all Powe= r Limits */ + .set_floor_freq =3D rapl_default_set_floor_freq, + .compute_time_window =3D rapl_default_compute_time_window, +}; + static int intel_rapl_tpmi_probe(struct auxiliary_device *auxdev, const struct auxiliary_device_id *id) { @@ -297,6 +343,7 @@ static int intel_rapl_tpmi_probe(struct auxiliary_devic= e *auxdev, trp->priv.read_raw =3D tpmi_rapl_read_raw; trp->priv.write_raw =3D tpmi_rapl_write_raw; trp->priv.control_type =3D tpmi_control_type; + trp->priv.defaults =3D &defaults_tpmi; =20 /* RAPL TPMI I/F is per physical package */ trp->rp =3D rapl_find_package_domain(info->package_id, &trp->priv, false); --=20 2.43.0 From nobody Thu Apr 2 20:20:43 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2E5B52EC569; Thu, 12 Feb 2026 23:30:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939053; cv=none; b=JuGi1ImpVv0TfqxoCbH0oPF2THl2/5JBzwsGVOa+qDy+MptwDKEu4o+6LTwCOkRcTTXsekZdBBXrmigr1/W1FGcKDQjbFq+JrY/e4PefiW3BDxGGuODS3xQG9jC93V26UCW2WFnq8mBlrLtmRe8rIKmnGdibsvc0ICXYjsgpkik= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939053; c=relaxed/simple; bh=o5mP3H1sKWr5Df5LK336P/ufsHt0m/j9IjCBKi5hpEU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DO9XrTChkzGya1FPHlORiERtZPLdLmaXXr6+Rvtri+YgoL1I2phBG94bnM2OMH5mn5pRRdWhxAfNK9AmvogKedbNmpvcmtBEneKd8KZLinhsscIielezSi/lWfKvz+qqWowXY2I74pGbtg+Q3w4KLN3MZvzz5SE7J7Jm03zDfvg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=cHqrrCOn; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="cHqrrCOn" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1770939052; x=1802475052; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=o5mP3H1sKWr5Df5LK336P/ufsHt0m/j9IjCBKi5hpEU=; b=cHqrrCOnYHAhgDKq3BkIiVXfwfF9BnK5ODcal0EVLv1X9g6NcXkuridy FxHwmTLvLEc9tlqqHe2hwQjHSCxb+dpRHum/xDnIa1ADaImSQjiK9C8ql Iozvfkuw+U2MIHPh2ytG5Vnvp7XGlJ9/HUPoThLja775hruIF60yXwIqj 8MOdDFUGsYS1lI9WNMduuXUxCMejQjfhP4lP6FW7j0Tl7cLly06WK3WPR NJoc8/tc9oibg1N7tGYRp61E/irK+4mNqJFX1bpDNAOiT5WIJJqmPAvHD 2c/sUsavmrkBcPbxLtcAA7guBPerOIvGin01nRj/cukE1+lFNYQv9WA7S g==; X-CSE-ConnectionGUID: M2x+zZvDR8qNq7iNy1iJnQ== X-CSE-MsgGUID: HqpsaDKfTYiK4Lzre6X8bQ== X-IronPort-AV: E=McAfee;i="6800,10657,11699"; a="72017431" X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="72017431" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:49 -0800 X-CSE-ConnectionGUID: bRIqQVXkTxW6ioPqrtyKZg== X-CSE-MsgGUID: je3qfL7dQj2EystYE1BxUw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="211845410" Received: from skuppusw-desk2.jf.intel.com ([10.165.154.101]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:46 -0800 From: Kuppuswamy Sathyanarayanan To: "Rafael J . Wysocki" , Daniel Lezcano Cc: Zhang Rui , Lukasz Luba , Srinivas Pandruvada , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 10/12] thermal: intel: int340x: processor: Move RAPL defaults to MMIO driver Date: Thu, 12 Feb 2026 15:30:42 -0800 Message-ID: <20260212233044.329790-11-sathyanarayanan.kuppuswamy@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> References: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Previously, the MMIO and MSR RAPL interfaces shared the same set of RAPL defaults provided by common code. However, unlike the MSR interface, the MMIO RAPL interface does not require CPU-specific variations in its default handling. Keeping the RAPL defaults in the RAPL common driver therefore provides no additional benefit. Move the MMIO defaults into the MMIO interface driver. This change includes the following updates: * Introduce a MMIO-local rapl_defaults instance with the appropriate default callbacks. * Assign the MMIO-specific rapl_defaults to priv->defaults during MMIO driver initialization. No functional changes are expected. Co-developed-by: Zhang Rui Signed-off-by: Zhang Rui Signed-off-by: Kuppuswamy Sathyanarayanan Acked-by: Srinivas Pandruvada --- .../intel/int340x_thermal/processor_thermal_rapl.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c= b/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c index e56b18aeda71..5dbeb0a43c8c 100644 --- a/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c +++ b/drivers/thermal/intel/int340x_thermal/processor_thermal_rapl.c @@ -19,6 +19,13 @@ static const struct rapl_mmio_regs rapl_mmio_default =3D= { .limits[RAPL_DOMAIN_DRAM] =3D BIT(POWER_LIMIT2), }; =20 +static const struct rapl_defaults rapl_defaults_mmio =3D { + .floor_freq_reg_addr =3D 0, + .check_unit =3D rapl_default_check_unit, + .set_floor_freq =3D rapl_default_set_floor_freq, + .compute_time_window =3D rapl_default_compute_time_window, +}; + static int rapl_mmio_read_raw(int cpu, struct reg_action *ra, bool atomic) { if (!ra->reg.mmio) @@ -67,6 +74,7 @@ int proc_thermal_rapl_add(struct pci_dev *pdev, struct pr= oc_thermal_device *proc =20 rapl_mmio_priv.read_raw =3D rapl_mmio_read_raw; rapl_mmio_priv.write_raw =3D rapl_mmio_write_raw; + rapl_mmio_priv.defaults =3D &rapl_defaults_mmio; =20 rapl_mmio_priv.control_type =3D powercap_register_control_type(NULL, "int= el-rapl-mmio", NULL); if (IS_ERR(rapl_mmio_priv.control_type)) { --=20 2.43.0 From nobody Thu Apr 2 20:20:43 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 39EEB2ECD14; Thu, 12 Feb 2026 23:30:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939053; cv=none; b=fEqsP5K6JH4b+Pgdz8/Mtq+szbtD0WHxP8NPr07TaU+LBg3KDRV930zNQ0TuRjRWUxkoMgGCJuPfZUP0yTcWA/Yviik0A+73Ngn8lO5C0Eo1sPEMIlcedzq9JYbeArnWglNMZ9bJnl9hzwb4z+CcAhX6MDYuDVNV6LNcHAuhryI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939053; c=relaxed/simple; bh=AyHjD9sCNB3eEbexkpwFnMFKYXeOS7r7FDV5qXYO3b4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SfpdIQNQnOH1JnOKVN5d7HeRq6D/tQs9gf7OPpxWUDuUGMJHteXsgwJ05JTcfpPkhiYxrloPRXAIX0a6YY4+w31Z+Cbd+FZ8t84tajkGxIld2nyrMKPmDYNG30HrS5W5VA44BhVfM+2MYgmiNC/jX4ujd8EEkanXAM4sHvdUv+c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=J/OejkTv; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="J/OejkTv" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1770939052; x=1802475052; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=AyHjD9sCNB3eEbexkpwFnMFKYXeOS7r7FDV5qXYO3b4=; b=J/OejkTvsiowkfWn4heeeZavc74PNrI9rtTFM8q73juwLl7z3sB+debL TjEq5kOp7H7Vh8rahVP6JD+ylHQcKb1BRBMXqkR+C8H4ro5js4e3a7KZg yY1J8TxDW0m4qIo3eynQ5ZSakr6QNFDQwrj8RnoHQUTcrgxMDnAy6NKi2 5u7+ynr9TY6IZRDQpuck/W5ga/zIDmo+PHJonUtaTRKZo234efSWNRA0A ErT/gcfcvlCC+66yVGg9MHblLuULhzHEe1cpceZSBjqGTlTNCduuf5PWg lYDa6djwN1g2gm4I18fRviHSN8tb+iCVvfjyp3A17upT+7AgF2bdyiNKd Q==; X-CSE-ConnectionGUID: +mZlfHoLQEKCcf4xRtKTXA== X-CSE-MsgGUID: dEok0FFhTFWaWM4MsWwmfQ== X-IronPort-AV: E=McAfee;i="6800,10657,11699"; a="72017435" X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="72017435" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:49 -0800 X-CSE-ConnectionGUID: OHYMowxTRdSxQ2J7ySLVXg== X-CSE-MsgGUID: aa80TwK+RD2BOiikxHaIUg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="211845412" Received: from skuppusw-desk2.jf.intel.com ([10.165.154.101]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:46 -0800 From: Kuppuswamy Sathyanarayanan To: "Rafael J . Wysocki" , Daniel Lezcano Cc: Zhang Rui , Lukasz Luba , Srinivas Pandruvada , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 11/12] powercap: intel_rapl: Register PM notifier only when RAPL package exists Date: Thu, 12 Feb 2026 15:30:43 -0800 Message-ID: <20260212233044.329790-12-sathyanarayanan.kuppuswamy@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> References: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The PM notifier callbacks are needed only when a valid RAPL package device is registered. Register and unregister the PM notifier callbacks when a RAPL package device is added or removed. This is a preparatory patch before moving MSR rapl_defaults into the MSR RAPL interface driver. Co-developed-by: Zhang Rui Signed-off-by: Zhang Rui Signed-off-by: Kuppuswamy Sathyanarayanan Acked-by: Srinivas Pandruvada --- drivers/powercap/intel_rapl_common.c | 130 +++++++++++++-------------- 1 file changed, 64 insertions(+), 66 deletions(-) diff --git a/drivers/powercap/intel_rapl_common.c b/drivers/powercap/intel_= rapl_common.c index bfe3dc011911..0d363451cb0d 100644 --- a/drivers/powercap/intel_rapl_common.c +++ b/drivers/powercap/intel_rapl_common.c @@ -2077,6 +2077,64 @@ void rapl_package_remove_pmu(struct rapl_package *rp) EXPORT_SYMBOL_NS_GPL(rapl_package_remove_pmu, "INTEL_RAPL"); #endif =20 +/* pm notifier for saving/restoring Power Limit settings */ +static void power_limit_state_save(void) +{ + struct rapl_package *rp; + struct rapl_domain *rd; + int ret; + + cpus_read_lock(); + list_for_each_entry(rp, &rapl_packages, plist) { + if (!rp->power_zone) + continue; + rd =3D power_zone_to_rapl_domain(rp->power_zone); + for (int i =3D POWER_LIMIT1; i < NR_POWER_LIMITS; i++) { + ret =3D rapl_read_pl_data(rd, i, PL_LIMIT, true, + &rd->rpl[i].last_power_limit); + if (ret) + rd->rpl[i].last_power_limit =3D 0; + } + } + cpus_read_unlock(); +} + +static void power_limit_state_restore(void) +{ + struct rapl_package *rp; + struct rapl_domain *rd; + + cpus_read_lock(); + list_for_each_entry(rp, &rapl_packages, plist) { + if (!rp->power_zone) + continue; + rd =3D power_zone_to_rapl_domain(rp->power_zone); + for (int i =3D POWER_LIMIT1; i < NR_POWER_LIMITS; i++) + if (rd->rpl[i].last_power_limit) + rapl_write_pl_data(rd, i, PL_LIMIT, + rd->rpl[i].last_power_limit); + } + cpus_read_unlock(); +} + +static int rapl_pm_callback(struct notifier_block *nb, + unsigned long mode, void *_unused) +{ + switch (mode) { + case PM_SUSPEND_PREPARE: + power_limit_state_save(); + break; + case PM_POST_SUSPEND: + power_limit_state_restore(); + break; + } + return NOTIFY_OK; +} + +static struct notifier_block rapl_pm_notifier =3D { + .notifier_call =3D rapl_pm_callback, +}; + /* called from CPU hotplug notifier, hotplug lock held */ void rapl_remove_package_cpuslocked(struct rapl_package *rp) { @@ -2106,6 +2164,9 @@ void rapl_remove_package_cpuslocked(struct rapl_packa= ge *rp) &rd_package->power_zone); list_del(&rp->plist); kfree(rp); + + if (list_empty(&rapl_packages)) + unregister_pm_notifier(&rapl_pm_notifier); } EXPORT_SYMBOL_NS_GPL(rapl_remove_package_cpuslocked, "INTEL_RAPL"); =20 @@ -2208,6 +2269,8 @@ struct rapl_package *rapl_add_package_cpuslocked(int = id, struct rapl_if_priv *pr } ret =3D rapl_package_register_powercap(rp); if (!ret) { + if (list_empty(&rapl_packages)) + register_pm_notifier(&rapl_pm_notifier); INIT_LIST_HEAD(&rp->plist); list_add(&rp->plist, &rapl_packages); return rp; @@ -2227,64 +2290,6 @@ struct rapl_package *rapl_add_package(int id, struct= rapl_if_priv *priv, bool id } EXPORT_SYMBOL_NS_GPL(rapl_add_package, "INTEL_RAPL"); =20 -static void power_limit_state_save(void) -{ - struct rapl_package *rp; - struct rapl_domain *rd; - int ret, i; - - cpus_read_lock(); - list_for_each_entry(rp, &rapl_packages, plist) { - if (!rp->power_zone) - continue; - rd =3D power_zone_to_rapl_domain(rp->power_zone); - for (i =3D POWER_LIMIT1; i < NR_POWER_LIMITS; i++) { - ret =3D rapl_read_pl_data(rd, i, PL_LIMIT, true, - &rd->rpl[i].last_power_limit); - if (ret) - rd->rpl[i].last_power_limit =3D 0; - } - } - cpus_read_unlock(); -} - -static void power_limit_state_restore(void) -{ - struct rapl_package *rp; - struct rapl_domain *rd; - int i; - - cpus_read_lock(); - list_for_each_entry(rp, &rapl_packages, plist) { - if (!rp->power_zone) - continue; - rd =3D power_zone_to_rapl_domain(rp->power_zone); - for (i =3D POWER_LIMIT1; i < NR_POWER_LIMITS; i++) - if (rd->rpl[i].last_power_limit) - rapl_write_pl_data(rd, i, PL_LIMIT, - rd->rpl[i].last_power_limit); - } - cpus_read_unlock(); -} - -static int rapl_pm_callback(struct notifier_block *nb, - unsigned long mode, void *_unused) -{ - switch (mode) { - case PM_SUSPEND_PREPARE: - power_limit_state_save(); - break; - case PM_POST_SUSPEND: - power_limit_state_restore(); - break; - } - return NOTIFY_OK; -} - -static struct notifier_block rapl_pm_notifier =3D { - .notifier_call =3D rapl_pm_callback, -}; - static struct platform_device *rapl_msr_platdev; =20 static int __init rapl_init(void) @@ -2307,19 +2312,12 @@ static int __init rapl_init(void) } } =20 - ret =3D register_pm_notifier(&rapl_pm_notifier); - if (ret && rapl_msr_platdev) { - platform_device_del(rapl_msr_platdev); - platform_device_put(rapl_msr_platdev); - } - - return ret; + return 0; } =20 static void __exit rapl_exit(void) { platform_device_unregister(rapl_msr_platdev); - unregister_pm_notifier(&rapl_pm_notifier); } =20 fs_initcall(rapl_init); --=20 2.43.0 From nobody Thu Apr 2 20:20:43 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C42912E6CD2; Thu, 12 Feb 2026 23:30:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.21 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939059; cv=none; b=DJMEBMvHJ8jpmRvZceF/0IvRXxj2OOCv8u7BL1zx4G11imhUl27F/hgO7qabfzMqo++gqUPYOIGOvEBiuM1RyjVjqKw2qpYlAyLhb25JARPqsep60xdLUT3EmYkKQFLEMiPE8e1ma1F0iS2xf6jS65tG0urK3mPsju4T5/jgFcQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770939059; c=relaxed/simple; bh=IPf/llxp/jgwA3ioH3/TuaAC/Uvnbuefh7w9jGfzorg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nH3+mJXztyH+4GyAYZP7JORHctENr2yIJMzvUxOOToxEmDPwjsRMgWHtwQLGGhflc82rvGQl35pTjR0RSjsC1RynMiOmOYeOeaFzQC+j1JsJAWYdvzFqSSgI2FnZQhU9CBi/Dpkc4KSYwv1HP9INZXz00/IleFNBw3affFqpDvk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=k6mljKBx; arc=none smtp.client-ip=198.175.65.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="k6mljKBx" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1770939054; x=1802475054; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=IPf/llxp/jgwA3ioH3/TuaAC/Uvnbuefh7w9jGfzorg=; b=k6mljKBxUx/MyRmi0MElVa6MMrvADW/4O+92w6FquV0Zaduy5sHT5O3z yT4HEBRPCXuKPiCG8ddYOW8wBCOCU5+Qls6TueHMLIrlIzIq9nwqpaZEO hRLuei1C97Zit4NViB8kLGq4yXqvM7QQWppVOQ/ExLPG4fFSLrtw8031g KN5JgLddmMDG0Gh+yiw4MZXg3aLTMuYi+PvLif9S+aCvBuPLR1SWgDoug nuM1XJa/e6FcAheJFkymWt1/ea0e47D57yLz2sLrvotJmoUz706pQ2ijD KKDlVHgOITSVMJOip9DiHMYUXyOrBLdx4UtTrD28FKwWAwXFlA+7nRKod A==; X-CSE-ConnectionGUID: 5wwCv50lReysBWbR0PHydQ== X-CSE-MsgGUID: 5bwKV0y/Q/6Sbbo/RxEvtA== X-IronPort-AV: E=McAfee;i="6800,10657,11699"; a="72017451" X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="72017451" Received: from orviesa006.jf.intel.com ([10.64.159.146]) by orvoesa113.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:49 -0800 X-CSE-ConnectionGUID: L6v8KBNSTBqrbd02vZTVcQ== X-CSE-MsgGUID: 6YTxY+HxQeyw7OgvVG10PQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,287,1763452800"; d="scan'208";a="211845414" Received: from skuppusw-desk2.jf.intel.com ([10.165.154.101]) by orviesa006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Feb 2026 15:30:46 -0800 From: Kuppuswamy Sathyanarayanan To: "Rafael J . Wysocki" , Daniel Lezcano Cc: Zhang Rui , Lukasz Luba , Srinivas Pandruvada , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 12/12] powercap: intel_rapl: Move MSR default settings into MSR interface driver Date: Thu, 12 Feb 2026 15:30:44 -0800 Message-ID: <20260212233044.329790-13-sathyanarayanan.kuppuswamy@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> References: <20260212233044.329790-1-sathyanarayanan.kuppuswamy@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" MSR-specific RAPL defaults differ from those used by the TPMI interface. The MMIO and MSR interfaces shared the same rapl_defaults pointer in the common driver, but MMIO does not require the CPU-specific variations needed by MSR. Keeping these in the common driver adds unnecessary complexity and MSR-specific initialization. Move MSR defaults and CPU matching into the MSR interface driver. Moves ----- * Move rapl_check_unit_atom(), set_floor_freq_atom(), and rapl_compute_time_window_atom() into intel_rapl_msr.c. * Move MSR unit-field GENMASK definitions and local constants. * Move all MSR-related rapl_defaults tables and the CPU-ID matching logic (rapl_ids[]) into the MSR driver. * Move iosf_mbi dependencies (floor-frequency control and related MBI register definitions) as they are MSR-platform specific. Modifications ------------- * Replace the common driver's platform-device manual alloc/add sequence with platform_device_register_data() in the MSR driver to pass matching rapl_defaults as platform_data. * Update MSR driver probe to assign pdev->dev.platform_data to priv->defaults. * Update Atom helper functions to use rp->lead_cpu directly for MSR reads/writes instead of the generic get_rid(). * Update Atom floor frequency logic to access defaults via the package private data pointer. * Convert MSR device creation from fs_initcall() to module_init(). This preserves existing enumeration behavior as the driver was already using module_init(). * Since rapl_ids need to exist after boot, remove __initconst specifier. No functional changes are expected. Co-developed-by: Zhang Rui Signed-off-by: Zhang Rui Signed-off-by: Kuppuswamy Sathyanarayanan Acked-by: Srinivas Pandruvada --- drivers/powercap/intel_rapl_common.c | 232 ------------------------- drivers/powercap/intel_rapl_msr.c | 250 ++++++++++++++++++++++++++- 2 files changed, 249 insertions(+), 233 deletions(-) diff --git a/drivers/powercap/intel_rapl_common.c b/drivers/powercap/intel_= rapl_common.c index 0d363451cb0d..94abe535a931 100644 --- a/drivers/powercap/intel_rapl_common.c +++ b/drivers/powercap/intel_rapl_common.c @@ -28,7 +28,6 @@ =20 #include #include -#include #include =20 /* bitmasks for RAPL MSRs, used by primitive access functions */ @@ -213,8 +212,6 @@ static int get_pl_prim(struct rapl_domain *rd, int pl, = enum pl_prims prim) #define power_zone_to_rapl_domain(_zone) \ container_of(_zone, struct rapl_domain, power_zone) =20 -static const struct rapl_defaults *defaults_msr; - static const struct rapl_defaults *get_defaults(struct rapl_package *rp) { return rp->priv->defaults; @@ -766,7 +763,6 @@ static int rapl_config(struct rapl_package *rp) /* MMIO I/F shares the same register layout as MSR registers */ case RAPL_IF_MMIO: case RAPL_IF_MSR: - rp->priv->defaults =3D defaults_msr; rp->priv->rpi =3D (void *)rpi_msr; break; case RAPL_IF_TPMI: @@ -960,34 +956,6 @@ int rapl_default_check_unit(struct rapl_domain *rd) } EXPORT_SYMBOL_NS_GPL(rapl_default_check_unit, "INTEL_RAPL"); =20 -static int rapl_check_unit_atom(struct rapl_domain *rd) -{ - struct reg_action ra; - u32 value; - - ra.reg =3D rd->regs[RAPL_DOMAIN_REG_UNIT]; - ra.mask =3D ~0; - if (rd->rp->priv->read_raw(get_rid(rd->rp), &ra, false)) { - pr_err("Failed to read power unit REG 0x%llx on %s:%s, exit.\n", - ra.reg.val, rd->rp->name, rd->name); - return -ENODEV; - } - - value =3D (ra.value & ENERGY_UNIT_MASK) >> ENERGY_UNIT_OFFSET; - rd->energy_unit =3D ENERGY_UNIT_SCALE * (1ULL << value); - - value =3D (ra.value & POWER_UNIT_MASK) >> POWER_UNIT_OFFSET; - rd->power_unit =3D (1ULL << value) * MILLIWATT_PER_WATT; - - value =3D (ra.value & TIME_UNIT_MASK) >> TIME_UNIT_OFFSET; - rd->time_unit =3D USEC_PER_SEC >> value; - - pr_debug("Atom %s:%s energy=3D%dpJ, time=3D%dus, power=3D%duW\n", - rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit); - - return 0; -} - static void power_limit_irq_save_cpu(void *info) { u32 l, h =3D 0; @@ -1068,30 +1036,6 @@ void rapl_default_set_floor_freq(struct rapl_domain = *rd, bool mode) } EXPORT_SYMBOL_NS_GPL(rapl_default_set_floor_freq, "INTEL_RAPL"); =20 -static void set_floor_freq_atom(struct rapl_domain *rd, bool enable) -{ - static u32 power_ctrl_orig_val; - const struct rapl_defaults *defaults =3D get_defaults(rd->rp); - u32 mdata; - - if (!defaults->floor_freq_reg_addr) { - pr_err("Invalid floor frequency config register\n"); - return; - } - - if (!power_ctrl_orig_val) - iosf_mbi_read(BT_MBI_UNIT_PMC, MBI_CR_READ, - defaults->floor_freq_reg_addr, - &power_ctrl_orig_val); - mdata =3D power_ctrl_orig_val; - if (enable) { - mdata &=3D ~GENMASK(14, 8); - mdata |=3D BIT(8); - } - iosf_mbi_write(BT_MBI_UNIT_PMC, MBI_CR_WRITE, - defaults->floor_freq_reg_addr, mdata); -} - u64 rapl_default_compute_time_window(struct rapl_domain *rd, u64 value, bo= ol to_raw) { u64 f, y; /* fraction and exp. used for time unit */ @@ -1125,149 +1069,6 @@ u64 rapl_default_compute_time_window(struct rapl_do= main *rd, u64 value, bool to_ } EXPORT_SYMBOL_NS_GPL(rapl_default_compute_time_window, "INTEL_RAPL"); =20 -static u64 rapl_compute_time_window_atom(struct rapl_domain *rd, u64 value, - bool to_raw) -{ - if (to_raw) - return div64_u64(value, rd->time_unit); - - /* - * Atom time unit encoding is straight forward val * time_unit, - * where time_unit is default to 1 sec. Never 0. - */ - return (value) ? value * rd->time_unit : rd->time_unit; -} - -static const struct rapl_defaults rapl_defaults_core =3D { - .floor_freq_reg_addr =3D 0, - .check_unit =3D rapl_default_check_unit, - .set_floor_freq =3D rapl_default_set_floor_freq, - .compute_time_window =3D rapl_default_compute_time_window, -}; - -static const struct rapl_defaults rapl_defaults_hsw_server =3D { - .check_unit =3D rapl_default_check_unit, - .set_floor_freq =3D rapl_default_set_floor_freq, - .compute_time_window =3D rapl_default_compute_time_window, - .dram_domain_energy_unit =3D 15300, -}; - -static const struct rapl_defaults rapl_defaults_spr_server =3D { - .check_unit =3D rapl_default_check_unit, - .set_floor_freq =3D rapl_default_set_floor_freq, - .compute_time_window =3D rapl_default_compute_time_window, - .psys_domain_energy_unit =3D NANOJOULE_PER_JOULE, - .spr_psys_bits =3D true, -}; - -static const struct rapl_defaults rapl_defaults_byt =3D { - .floor_freq_reg_addr =3D IOSF_CPU_POWER_BUDGET_CTL_BYT, - .check_unit =3D rapl_check_unit_atom, - .set_floor_freq =3D set_floor_freq_atom, - .compute_time_window =3D rapl_compute_time_window_atom, -}; - -static const struct rapl_defaults rapl_defaults_tng =3D { - .floor_freq_reg_addr =3D IOSF_CPU_POWER_BUDGET_CTL_TNG, - .check_unit =3D rapl_check_unit_atom, - .set_floor_freq =3D set_floor_freq_atom, - .compute_time_window =3D rapl_compute_time_window_atom, -}; - -static const struct rapl_defaults rapl_defaults_ann =3D { - .floor_freq_reg_addr =3D 0, - .check_unit =3D rapl_check_unit_atom, - .set_floor_freq =3D NULL, - .compute_time_window =3D rapl_compute_time_window_atom, -}; - -static const struct rapl_defaults rapl_defaults_cht =3D { - .floor_freq_reg_addr =3D 0, - .check_unit =3D rapl_check_unit_atom, - .set_floor_freq =3D NULL, - .compute_time_window =3D rapl_compute_time_window_atom, -}; - -static const struct rapl_defaults rapl_defaults_amd =3D { - .check_unit =3D rapl_default_check_unit, -}; - -static const struct x86_cpu_id rapl_ids[] __initconst =3D { - X86_MATCH_VFM(INTEL_SANDYBRIDGE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_SANDYBRIDGE_X, &rapl_defaults_core), - - X86_MATCH_VFM(INTEL_IVYBRIDGE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_IVYBRIDGE_X, &rapl_defaults_core), - - X86_MATCH_VFM(INTEL_HASWELL, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_HASWELL_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_HASWELL_G, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_HASWELL_X, &rapl_defaults_hsw_server), - - X86_MATCH_VFM(INTEL_BROADWELL, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_BROADWELL_G, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_BROADWELL_D, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_BROADWELL_X, &rapl_defaults_hsw_server), - - X86_MATCH_VFM(INTEL_SKYLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_SKYLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_SKYLAKE_X, &rapl_defaults_hsw_server), - X86_MATCH_VFM(INTEL_KABYLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_KABYLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_CANNONLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ICELAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ICELAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ICELAKE_NNPI, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ICELAKE_X, &rapl_defaults_hsw_server), - X86_MATCH_VFM(INTEL_ICELAKE_D, &rapl_defaults_hsw_server), - X86_MATCH_VFM(INTEL_COMETLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_COMETLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_TIGERLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_TIGERLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ROCKETLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ALDERLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ALDERLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ATOM_GRACEMONT, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_RAPTORLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_RAPTORLAKE_P, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_RAPTORLAKE_S, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_BARTLETTLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_METEORLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_METEORLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_SAPPHIRERAPIDS_X, &rapl_defaults_spr_server), - X86_MATCH_VFM(INTEL_EMERALDRAPIDS_X, &rapl_defaults_spr_server), - X86_MATCH_VFM(INTEL_LUNARLAKE_M, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_PANTHERLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_WILDCATLAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_NOVALAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_NOVALAKE_L, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ARROWLAKE_H, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ARROWLAKE, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ARROWLAKE_U, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_LAKEFIELD, &rapl_defaults_core), - - X86_MATCH_VFM(INTEL_ATOM_SILVERMONT, &rapl_defaults_byt), - X86_MATCH_VFM(INTEL_ATOM_AIRMONT, &rapl_defaults_cht), - X86_MATCH_VFM(INTEL_ATOM_SILVERMONT_MID, &rapl_defaults_tng), - X86_MATCH_VFM(INTEL_ATOM_SILVERMONT_MID2, &rapl_defaults_ann), - X86_MATCH_VFM(INTEL_ATOM_GOLDMONT, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ATOM_GOLDMONT_PLUS, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ATOM_GOLDMONT_D, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ATOM_TREMONT, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ATOM_TREMONT_D, &rapl_defaults_core), - X86_MATCH_VFM(INTEL_ATOM_TREMONT_L, &rapl_defaults_core), - - X86_MATCH_VFM(INTEL_XEON_PHI_KNL, &rapl_defaults_hsw_server), - X86_MATCH_VFM(INTEL_XEON_PHI_KNM, &rapl_defaults_hsw_server), - - X86_MATCH_VENDOR_FAM(AMD, 0x17, &rapl_defaults_amd), - X86_MATCH_VENDOR_FAM(AMD, 0x19, &rapl_defaults_amd), - X86_MATCH_VENDOR_FAM(AMD, 0x1A, &rapl_defaults_amd), - X86_MATCH_VENDOR_FAM(HYGON, 0x18, &rapl_defaults_amd), - {} -}; -MODULE_DEVICE_TABLE(x86cpu, rapl_ids); - /* Read once for all raw primitive data for domains */ static void rapl_update_domain_data(struct rapl_package *rp) { @@ -2290,39 +2091,6 @@ struct rapl_package *rapl_add_package(int id, struct= rapl_if_priv *priv, bool id } EXPORT_SYMBOL_NS_GPL(rapl_add_package, "INTEL_RAPL"); =20 -static struct platform_device *rapl_msr_platdev; - -static int __init rapl_init(void) -{ - const struct x86_cpu_id *id; - int ret; - - id =3D x86_match_cpu(rapl_ids); - if (id) { - defaults_msr =3D (const struct rapl_defaults *)id->driver_data; - - rapl_msr_platdev =3D platform_device_alloc("intel_rapl_msr", 0); - if (!rapl_msr_platdev) - return -ENOMEM; - - ret =3D platform_device_add(rapl_msr_platdev); - if (ret) { - platform_device_put(rapl_msr_platdev); - return ret; - } - } - - return 0; -} - -static void __exit rapl_exit(void) -{ - platform_device_unregister(rapl_msr_platdev); -} - -fs_initcall(rapl_init); -module_exit(rapl_exit); - MODULE_DESCRIPTION("Intel Runtime Average Power Limit (RAPL) common code"); MODULE_AUTHOR("Jacob Pan "); MODULE_LICENSE("GPL v2"); diff --git a/drivers/powercap/intel_rapl_msr.c b/drivers/powercap/intel_rap= l_msr.c index 6f23e601832d..d3cd62a0f053 100644 --- a/drivers/powercap/intel_rapl_msr.c +++ b/drivers/powercap/intel_rapl_msr.c @@ -21,15 +21,33 @@ #include #include #include +#include +#include =20 #include #include +#include #include =20 /* Local defines */ #define MSR_PLATFORM_POWER_LIMIT 0x0000065C #define MSR_VR_CURRENT_CONFIG 0x00000601 =20 +#define ENERGY_UNIT_SCALE 1000 /* scale from driver unit to powercap unit= */ + +#define POWER_UNIT_OFFSET 0x00 +#define POWER_UNIT_MASK GENMASK(3, 0) + +#define ENERGY_UNIT_OFFSET 0x08 +#define ENERGY_UNIT_MASK GENMASK(12, 8) + +#define TIME_UNIT_OFFSET 0x10 +#define TIME_UNIT_MASK GENMASK(19, 16) + +/* Sideband MBI registers */ +#define IOSF_CPU_POWER_BUDGET_CTL_BYT 0x02 +#define IOSF_CPU_POWER_BUDGET_CTL_TNG 0xDF + /* private data for RAPL MSR Interface */ static struct rapl_if_priv *rapl_msr_priv; =20 @@ -186,6 +204,201 @@ static const struct x86_cpu_id pmu_support_ids[] =3D { {} }; =20 +static int rapl_check_unit_atom(struct rapl_domain *rd) +{ + struct reg_action ra; + u32 value; + + ra.reg =3D rd->regs[RAPL_DOMAIN_REG_UNIT]; + ra.mask =3D ~0; + if (rapl_msr_read_raw(rd->rp->lead_cpu, &ra, false)) { + pr_err("Failed to read power unit REG 0x%llx on %s:%s, exit.\n", + ra.reg.val, rd->rp->name, rd->name); + return -ENODEV; + } + + value =3D (ra.value & ENERGY_UNIT_MASK) >> ENERGY_UNIT_OFFSET; + rd->energy_unit =3D ENERGY_UNIT_SCALE * (1ULL << value); + + value =3D (ra.value & POWER_UNIT_MASK) >> POWER_UNIT_OFFSET; + rd->power_unit =3D (1ULL << value) * MILLIWATT_PER_WATT; + + value =3D (ra.value & TIME_UNIT_MASK) >> TIME_UNIT_OFFSET; + rd->time_unit =3D USEC_PER_SEC >> value; + + pr_debug("Atom %s:%s energy=3D%dpJ, time=3D%dus, power=3D%duW\n", + rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit); + + return 0; +} + +static void set_floor_freq_atom(struct rapl_domain *rd, bool enable) +{ + static u32 power_ctrl_orig_val; + const struct rapl_defaults *defaults =3D rd->rp->priv->defaults; + u32 mdata; + + if (!defaults->floor_freq_reg_addr) { + pr_err("Invalid floor frequency config register\n"); + return; + } + + if (!power_ctrl_orig_val) + iosf_mbi_read(BT_MBI_UNIT_PMC, MBI_CR_READ, + defaults->floor_freq_reg_addr, + &power_ctrl_orig_val); + mdata =3D power_ctrl_orig_val; + if (enable) { + mdata &=3D ~GENMASK(14, 8); + mdata |=3D BIT(8); + } + iosf_mbi_write(BT_MBI_UNIT_PMC, MBI_CR_WRITE, + defaults->floor_freq_reg_addr, mdata); +} + +static u64 rapl_compute_time_window_atom(struct rapl_domain *rd, u64 value, + bool to_raw) +{ + if (to_raw) + return div64_u64(value, rd->time_unit); + + /* + * Atom time unit encoding is straight forward val * time_unit, + * where time_unit is default to 1 sec. Never 0. + */ + return value ? value * rd->time_unit : rd->time_unit; +} + +static const struct rapl_defaults rapl_defaults_core =3D { + .floor_freq_reg_addr =3D 0, + .check_unit =3D rapl_default_check_unit, + .set_floor_freq =3D rapl_default_set_floor_freq, + .compute_time_window =3D rapl_default_compute_time_window, +}; + +static const struct rapl_defaults rapl_defaults_hsw_server =3D { + .check_unit =3D rapl_default_check_unit, + .set_floor_freq =3D rapl_default_set_floor_freq, + .compute_time_window =3D rapl_default_compute_time_window, + .dram_domain_energy_unit =3D 15300, +}; + +static const struct rapl_defaults rapl_defaults_spr_server =3D { + .check_unit =3D rapl_default_check_unit, + .set_floor_freq =3D rapl_default_set_floor_freq, + .compute_time_window =3D rapl_default_compute_time_window, + .psys_domain_energy_unit =3D NANOJOULE_PER_JOULE, + .spr_psys_bits =3D true, +}; + +static const struct rapl_defaults rapl_defaults_byt =3D { + .floor_freq_reg_addr =3D IOSF_CPU_POWER_BUDGET_CTL_BYT, + .check_unit =3D rapl_check_unit_atom, + .set_floor_freq =3D set_floor_freq_atom, + .compute_time_window =3D rapl_compute_time_window_atom, +}; + +static const struct rapl_defaults rapl_defaults_tng =3D { + .floor_freq_reg_addr =3D IOSF_CPU_POWER_BUDGET_CTL_TNG, + .check_unit =3D rapl_check_unit_atom, + .set_floor_freq =3D set_floor_freq_atom, + .compute_time_window =3D rapl_compute_time_window_atom, +}; + +static const struct rapl_defaults rapl_defaults_ann =3D { + .floor_freq_reg_addr =3D 0, + .check_unit =3D rapl_check_unit_atom, + .set_floor_freq =3D NULL, + .compute_time_window =3D rapl_compute_time_window_atom, +}; + +static const struct rapl_defaults rapl_defaults_cht =3D { + .floor_freq_reg_addr =3D 0, + .check_unit =3D rapl_check_unit_atom, + .set_floor_freq =3D NULL, + .compute_time_window =3D rapl_compute_time_window_atom, +}; + +static const struct rapl_defaults rapl_defaults_amd =3D { + .check_unit =3D rapl_default_check_unit, +}; + +static const struct x86_cpu_id rapl_ids[] =3D { + X86_MATCH_VFM(INTEL_SANDYBRIDGE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_SANDYBRIDGE_X, &rapl_defaults_core), + + X86_MATCH_VFM(INTEL_IVYBRIDGE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_IVYBRIDGE_X, &rapl_defaults_core), + + X86_MATCH_VFM(INTEL_HASWELL, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_HASWELL_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_HASWELL_G, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_HASWELL_X, &rapl_defaults_hsw_server), + + X86_MATCH_VFM(INTEL_BROADWELL, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_BROADWELL_G, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_BROADWELL_D, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_BROADWELL_X, &rapl_defaults_hsw_server), + + X86_MATCH_VFM(INTEL_SKYLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_SKYLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_SKYLAKE_X, &rapl_defaults_hsw_server), + X86_MATCH_VFM(INTEL_KABYLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_KABYLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_CANNONLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ICELAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ICELAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ICELAKE_NNPI, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ICELAKE_X, &rapl_defaults_hsw_server), + X86_MATCH_VFM(INTEL_ICELAKE_D, &rapl_defaults_hsw_server), + X86_MATCH_VFM(INTEL_COMETLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_COMETLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_TIGERLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_TIGERLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ROCKETLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ALDERLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ALDERLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ATOM_GRACEMONT, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_RAPTORLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_RAPTORLAKE_P, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_RAPTORLAKE_S, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_BARTLETTLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_METEORLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_METEORLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_SAPPHIRERAPIDS_X, &rapl_defaults_spr_server), + X86_MATCH_VFM(INTEL_EMERALDRAPIDS_X, &rapl_defaults_spr_server), + X86_MATCH_VFM(INTEL_LUNARLAKE_M, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_PANTHERLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_WILDCATLAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_NOVALAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_NOVALAKE_L, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ARROWLAKE_H, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ARROWLAKE, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ARROWLAKE_U, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_LAKEFIELD, &rapl_defaults_core), + + X86_MATCH_VFM(INTEL_ATOM_SILVERMONT, &rapl_defaults_byt), + X86_MATCH_VFM(INTEL_ATOM_AIRMONT, &rapl_defaults_cht), + X86_MATCH_VFM(INTEL_ATOM_SILVERMONT_MID, &rapl_defaults_tng), + X86_MATCH_VFM(INTEL_ATOM_SILVERMONT_MID2, &rapl_defaults_ann), + X86_MATCH_VFM(INTEL_ATOM_GOLDMONT, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ATOM_GOLDMONT_PLUS, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ATOM_GOLDMONT_D, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ATOM_TREMONT, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ATOM_TREMONT_D, &rapl_defaults_core), + X86_MATCH_VFM(INTEL_ATOM_TREMONT_L, &rapl_defaults_core), + + X86_MATCH_VFM(INTEL_XEON_PHI_KNL, &rapl_defaults_hsw_server), + X86_MATCH_VFM(INTEL_XEON_PHI_KNM, &rapl_defaults_hsw_server), + + X86_MATCH_VENDOR_FAM(AMD, 0x17, &rapl_defaults_amd), + X86_MATCH_VENDOR_FAM(AMD, 0x19, &rapl_defaults_amd), + X86_MATCH_VENDOR_FAM(AMD, 0x1A, &rapl_defaults_amd), + X86_MATCH_VENDOR_FAM(HYGON, 0x18, &rapl_defaults_amd), + {} +}; +MODULE_DEVICE_TABLE(x86cpu, rapl_ids); + static int rapl_msr_probe(struct platform_device *pdev) { const struct x86_cpu_id *id =3D x86_match_cpu(pl4_support_ids); @@ -205,6 +418,7 @@ static int rapl_msr_probe(struct platform_device *pdev) } rapl_msr_priv->read_raw =3D rapl_msr_read_raw; rapl_msr_priv->write_raw =3D rapl_msr_write_raw; + rapl_msr_priv->defaults =3D (const struct rapl_defaults *)pdev->dev.platf= orm_data; =20 if (id) { rapl_msr_priv->limits[RAPL_DOMAIN_PACKAGE] |=3D BIT(POWER_LIMIT4); @@ -259,7 +473,41 @@ static struct platform_driver intel_rapl_msr_driver = =3D { }, }; =20 -module_platform_driver(intel_rapl_msr_driver); +static struct platform_device *rapl_msr_platdev; + +static int intel_rapl_msr_init(void) +{ + const struct rapl_defaults *def; + const struct x86_cpu_id *id; + int ret; + + ret =3D platform_driver_register(&intel_rapl_msr_driver); + if (ret) + return ret; + + /* Create the MSR RAPL platform device for supported platforms */ + id =3D x86_match_cpu(rapl_ids); + if (!id) + return 0; + + def =3D (const struct rapl_defaults *)id->driver_data; + + rapl_msr_platdev =3D platform_device_register_data(NULL, "intel_rapl_msr"= , 0, def, + sizeof(*def)); + if (IS_ERR(rapl_msr_platdev)) + pr_debug("intel_rapl_msr device register failed, ret:%ld\n", + PTR_ERR(rapl_msr_platdev)); + + return 0; +} +module_init(intel_rapl_msr_init); + +static void intel_rapl_msr_exit(void) +{ + platform_device_unregister(rapl_msr_platdev); + platform_driver_unregister(&intel_rapl_msr_driver); +} +module_exit(intel_rapl_msr_exit); =20 MODULE_DESCRIPTION("Driver for Intel RAPL (Running Average Power Limit) co= ntrol via MSR interface"); MODULE_AUTHOR("Zhang Rui "); --=20 2.43.0