From nobody Sat Jul 25 05:59:33 2026 Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011054.outbound.protection.outlook.com [40.93.194.54]) (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 64DD53C7DE1; Fri, 24 Jul 2026 22:00:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.194.54 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784930422; cv=fail; b=CU5e53T9UvBYSUla95GTxcwPsyTNLyivZOkpms6rKaZuqQM2FLB+HAzFhs8OjOC8UP31tN5mif7I+yfLJ0IReueOGi9csJEQbmZxHbuF+5QfjVhdYglTRXiyOV5kgrEevhWHMf/ev02ZHkw7923u0kurUbZveExzcFylPbSyECQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784930422; c=relaxed/simple; bh=d0ybNoDVIgaPlfalCibBMavJ0CX+g4tQGkvviMmzCdg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Rtn4dr8NE6GvcBLB4B6nx+ErhEDeurxoTXcp8Lf3UsRP2nlYJ0GyesEOwJ1rJ74UJ1B5jMsyD0uoIUpb+DYKMcZshvEKi0lIJglhB02hB3lX+QqpeEgPUqBLWI9kV4AXx64QUgy5Ipi3Ogm+MmFwe1dkr8Noq67emfiOBGdLZs4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=P+zSiEvR; arc=fail smtp.client-ip=40.93.194.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="P+zSiEvR" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cHI3Jg8MFU3o7Os6uVayx7xcvqoLArJT/GG/laiPGA2jnU5PG8shshB2gopkZMDYGBNWf2CCkdwuuC1AflcuaQxIqL305FjhHAfmral03VFw8YLRl9AChSoCIN6D9wFZCyoQHxShdDHH3ovw3bXXR2XTkqwoeFv1NhYj+Gew1rz5FK8dLRnoMT9tcng2qIdFXSxxTy9dYb6cFa+1XKCcq9Q4ihiPiF0riZZIci2ldKXgkjVRog6IjyTY0q7eKDApZIUeKym//EJr0/cntmEPdtVE9cErLR1n3BWLQs8R7AbO1+mAtmkXECMyJZTjvkT1GTc3Z42PG0VyiPDTdO8RiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gcQakqzXCozHk1wQwCVuCnd+7hOEbpKtzRROHOTDYWw=; b=oVY3GwamOO2oRIL/AiWBQFIsiU6NVEblYuxJYYEw47yU0os4E9aCBcDlMBgD2ht38HUcw4Fs88bcfi+JXtgT3cZQsuGXyTpNsmpD8p3FkemRTxeKXRPTGU5kXBhWySTuwxbtkg/EoVeMMUgNzGZ5k9opAaUw/AzdYoMF+D8rhY7sDXMx5baVAF5gE6eSGxbNToxXUMWwRC28BnBwx0FgDTo7TfSiKa9bp3urg1dQ+6G0qFbjVVyCjhZmugPHKkcTZjiMj3/v5SlU6P8XejY/XffxRLrjhIgXECoqnFdDhoMnYl7glG5wIKG53mlOdsIq9JXIsjQPeRygc1C36rCk9A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) smtp.rcpttodomain=kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gcQakqzXCozHk1wQwCVuCnd+7hOEbpKtzRROHOTDYWw=; b=P+zSiEvRow/uaioISucwct93dAmEAd9i5QJzmET4agDjLqthc0a/9m07LofpOFTJP8Vf/kVLjB/y5DWcXntCVhSMrAE/0npVc0RKGXW/gMT7xt2yj9YUjoW0spg7zM2oTsHGHeqj2nwO9P3ZVyCecz5ATuSaEjFJrvKoLDthsRjVtoVruS9aQ3LtVp71PGm0Dl1WidGYguWBdfixDXQNOws8wED/FhvCqtwYYTyPpBS/6QkPXeXykiyQ2euqPp4M4eoR5sxiilXjS0+dCSOv5IISprcrYZnc/7ZFK4VFTJgNSA3wLgZ1dpey0xbKfNHQz1pKV27HiqWW5Es4adyuYw== Received: from MN2PR15CA0046.namprd15.prod.outlook.com (2603:10b6:208:237::15) by CY5PR12MB6225.namprd12.prod.outlook.com (2603:10b6:930:23::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.12; Fri, 24 Jul 2026 22:00:13 +0000 Received: from BL02EPF0001A101.namprd05.prod.outlook.com (2603:10b6:208:237:cafe::97) by MN2PR15CA0046.outlook.office365.com (2603:10b6:208:237::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.11 via Frontend Transport; Fri, 24 Jul 2026 22:00:12 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by BL02EPF0001A101.mail.protection.outlook.com (10.167.241.132) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.270.5 via Frontend Transport; Fri, 24 Jul 2026 22:00:12 +0000 Received: from drhqmail202.nvidia.com (10.126.190.181) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Jul 2026 14:59:59 -0700 Received: from drhqmail201.nvidia.com (10.126.190.180) by drhqmail202.nvidia.com (10.126.190.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Jul 2026 14:59:58 -0700 Received: from sumitg-l4t.nvidia.com (10.127.8.14) by mail.nvidia.com (10.126.190.180) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Fri, 24 Jul 2026 14:59:52 -0700 From: Sumit Gupta To: , , , , , , , , , , , , , , , , , CC: , , , , , , , Subject: [PATCH v3 1/4] cpufreq: CPPC: Keep the policy across CPU hotplug Date: Sat, 25 Jul 2026 03:29:34 +0530 Message-ID: <20260724215937.3368276-2-sumitg@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260724215937.3368276-1-sumitg@nvidia.com> References: <20260724215937.3368276-1-sumitg@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A101:EE_|CY5PR12MB6225:EE_ X-MS-Office365-Filtering-Correlation-Id: 311b1acb-48ce-40d9-d3e0-08dee9ceefa0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|1800799024|23010399003|376014|7416014|82310400026|10067099003|56012099006|11063799006|6133799003|921020|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: ctvcSUMh9eepBv1x+f3uVNb9F7A+eDAKkX2GHpvv7WK/wawmdQDu43HanpNyQCF2o/3NBw4VYjP7pjeVf1hrRNHhUreN1PO+EX03wPNvu0+T+WPMHtODiHBv419WpktWDGrcXpaHJPZtUZpKnZbU6HNcLoDVWhsZl+/b0/58MOa2tkOQDBuqukxSB4gavvsoRLkLQdyCRaOCyYXBcbdpGn28EFfbWbKOGnVqCtbxZbEhdJMYbx9l2ZqiDBvCe6cjU/bj42m7Fe1vpQF7JsimDW+e49Fc6cox0PRhKiUkpFiS0vMeqKw1K5+eh/0BeKbraoqt58sToZZ5z+E/NT3ZHIgddpfVdhmSkIxaqNuZPB5dYB2roiqtuDLD6nE9xEHioUPM/Z/8cKB/2gwjlvozIah1VZLMmNwJlw0RKe5rnpvimeT8VYTjtYfJjTwEkvW73v5zB4DOdCi7+uPlG3ybAuJPGoSvQ8feluyXPA5VwR7HkFx52hjEVKEMwVeZNajF4OKdvnb3fOeu5uWuoFt+Gz+FqCbFb21MUx6ewgTLx7Z/CjbCjzRsoL4jOuEjges/ncjF+xXrY2bC/KPXFWOy1A1LuSQ0S6+J0BYemrCgBCL9K5sQLEZKvkat//tSZNuomywJjfnbK86MPyqtUoE90nc6mFamRMK20QBvydAWiOIaTUf9edIH0M4+jnV4FrouR2MADYy0YvXke8Uh/tCgHnkKSQw2UEeLKdy6qQHG+nd2T+uvPWrxCdmVIDOzlNRJ X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(36860700016)(1800799024)(23010399003)(376014)(7416014)(82310400026)(10067099003)(56012099006)(11063799006)(6133799003)(921020)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: BN5a8muNLwD4m7g5QcFlqRpeh7m7bkzIAGV/golAf2FlDhjvpvuVoXwnAn/G5ePjnK1b7WOAmrHOIUTa1vH19LR8BxdC0NcFAcyJV/j/OQtto0nDvCWEubEbaJKf2OFLFBsyptORfUgfxlTX/6FYRmXCDM9IssZo/Y0OkukhTf0xknGEuXHju3lrFt5B3kL2ZLWFfM8x40q5kt1q10kOOrNW7IWu48I74706Adxfp5tASdbZg9igjsg8zBIgStMeFFFIsuJtYr6nIEtiaqsm5RC5WaINEKnZsjrWA/1fqpqmmbgw13Q2Or4f7iog+U2x9AiE/ZYngDC+HALsBPoii+kC7KP1bcfxeJp056v2lheqn8GWkHGsJjG44O/ShopEr6g9RrJjVUCYRcvH4tqw3wOt3anFsQUyHBPkN+jj1u+uyu6p9yqevDRq6lMhA7wD X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2026 22:00:12.4195 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 311b1acb-48ce-40d9-d3e0-08dee9ceefa0 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A101.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6225 Content-Type: text/plain; charset="utf-8" Without online()/offline() callbacks, the cpufreq core fully tears down a policy during exit() when its last online CPU is offlined, and rebuilds it during init() when it comes back. Add lightweight online()/offline() callbacks so the core instead keeps the policy live and reuses the driver's cpu_data across CPU hotplug. This avoids re-reading the CPPC capabilities on every offline/online, making CPU hotplug faster. From online(), re-enable CPPC, as the platform may have disabled it while the CPU was offline. Since the policy is no longer rebuilt via init(), online() also reprograms the CPPC performance controls (desired/min/max). Signed-off-by: Sumit Gupta --- drivers/cpufreq/cppc_cpufreq.c | 44 ++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/drivers/cpufreq/cppc_cpufreq.c b/drivers/cpufreq/cppc_cpufreq.c index f6cea0c54dd9..6dc59f99d880 100644 --- a/drivers/cpufreq/cppc_cpufreq.c +++ b/drivers/cpufreq/cppc_cpufreq.c @@ -722,6 +722,48 @@ static int cppc_cpufreq_cpu_init(struct cpufreq_policy= *policy) return ret; } =20 +/* + * With offline() defined, the cpufreq core keeps the policy alive when + * a CPU is hotplugged out. + */ +static int cppc_cpufreq_cpu_offline(struct cpufreq_policy *policy) +{ + return 0; +} + +/* + * Re-enable CPPC when the policy's CPU comes back online, since the platf= orm + * may have disabled it while the CPU was offline. + */ +static int cppc_cpufreq_cpu_online(struct cpufreq_policy *policy) +{ + struct cppc_cpudata *cpu_data =3D policy->driver_data; + unsigned int cpu =3D policy->cpu; + int ret; + + ret =3D cppc_set_enable(cpu, true); + if (ret && ret !=3D -EOPNOTSUPP) + pr_warn("Failed to re-enable CPPC for CPU%d (%d)\n", cpu, ret); + + /* + * The platform may reset the controls while the CPU is offline, so + * recompute min/max, clamp desired_perf into range, and reprogram them. + */ + cppc_cpufreq_update_perf_limits(cpu_data, policy); + + cpu_data->perf_ctrls.desired_perf =3D + clamp_t(u32, cpu_data->perf_ctrls.desired_perf, + cpu_data->perf_ctrls.min_perf, + cpu_data->perf_ctrls.max_perf); + + ret =3D cppc_set_perf(cpu, &cpu_data->perf_ctrls); + if (ret) + pr_debug("Failed to reapply perf request on CPU%d (%d)\n", + cpu, ret); + + return 0; +} + static void cppc_cpufreq_cpu_exit(struct cpufreq_policy *policy) { struct cppc_cpudata *cpu_data =3D policy->driver_data; @@ -1034,6 +1076,8 @@ static struct cpufreq_driver cppc_cpufreq_driver =3D { .fast_switch =3D cppc_cpufreq_fast_switch, .init =3D cppc_cpufreq_cpu_init, .exit =3D cppc_cpufreq_cpu_exit, + .online =3D cppc_cpufreq_cpu_online, + .offline =3D cppc_cpufreq_cpu_offline, .set_boost =3D cppc_cpufreq_set_boost, .attr =3D cppc_cpufreq_attr, .name =3D "cppc_cpufreq", --=20 2.34.1 From nobody Sat Jul 25 05:59:33 2026 Received: from BN8PR05CU002.outbound.protection.outlook.com (mail-eastus2azon11011023.outbound.protection.outlook.com [52.101.57.23]) (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 5CB0134750F; Fri, 24 Jul 2026 22:00:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.57.23 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784930447; cv=fail; b=fA3GVApPn74yhZ0QNL7pgqYmHWxu9VcX3ET2nQrSYYjFZPZwxd3r/rpJFNjx4yFgZDQDnmK1R29+2FXgNWT8C/4LP4doG60T7YlPy81Ip15bNecd9tZhZWKFJ7Iuuo2/gVU1SClUeZdVQ0aEfj3Vdf+owTPlWJbzK8ZS1b53G9E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784930447; c=relaxed/simple; bh=S12NAMHmT/hGkfAjfB6jWGMqN75DSdnYQSBp1TsAmVA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=KbFltuhtnVD9TIs32m0IB13o3mgI2Rzl6uQoop4Rb8Cm6LxCA1ljnfEwU89+5zb0dOd4mPkbzFEpKmgELkuttoeww5IknGrlJEBQOqYKE02/KlG/LKSVdfCfoujL/GxHfjjr0Vq5YYl3+fzfllQAJ3LUZwTTP3IoXLRz+GHVTU8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=HSBAz3Ht; arc=fail smtp.client-ip=52.101.57.23 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="HSBAz3Ht" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QdvNmxIDFd0tEhfSZCjolIRmpOzmqwKnDHdUWO95vGmD5IC9tN5L5S2nnunF/5TgPlQYg48WgEBpRS/7V+x+Ac3FooNU/YKQfMrL6O+Ids+/vdDL5l+dDeKW0QHokqSzIcpVz8dsdECZArbe1/mRxEsCGFrv2q6XjYgrMik6zvZ+z/b8fQ6n8V57KtYCLcjQ2qaCWf7O4t4eCMZ1eCHM1VIeunRBqaEAo7LInopV6k9I039RHpLFCt58hGnqEklq8mDaA0UrXw0qXOKsBjM3vA0q8EQ5UihXumJSfwAuoN2ZntY4ppBT6Hkw1Z/YwezQddqDyJcN8Vcy4U07vTQiEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6FIlZFgFN0UwmQj6n+yCYVjvkJeTLXkyTrOpTGaA4/Y=; b=UKg5GED7yiN9Z4pQl4iA8dDetXJXqObLW6DuncKS7kK6faY1mPbWP4TqkgnyEGX6AYcjvFAKtEpN1mWeGxJxt+aTZcExhXWQAgEtyzzOM88H098cpJWW1UTas67D9YpcenRMEsgCoYYhFUmFSUY83AI6va4YbeV8jIaUE+LNU+v6t1DH9wLfkrTR4Bir65iO5N8vQla43bAei0y2jzDQxvII96ZUs0yHHqv48nhL0AxwL2seBZ5yF6Gh9BFgP2yIZXgB/iY2YS71Ud2Q76rQfBnJl3xh+g2qkuiognC0jr0S60BfXa9ygp2snYFyw9a829GNL2JzuXLTerEKNnLV8g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) smtp.rcpttodomain=kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6FIlZFgFN0UwmQj6n+yCYVjvkJeTLXkyTrOpTGaA4/Y=; b=HSBAz3Htb79b/Ne5iGT4tnKUYvVrH6zw1t2tlmhUsF+I6Ed7tz0Qz4x6ScCGiLOLUlLQu9pACUPzKG3HGiuOduQ/Pde72270WDNR4OJqT5KjWfC3bhQJLHOMgiEUhAxQqoB0tAuI4YKXrRVU/eAlz/P/iFys6qJh/2xx+6Fo3H870Ii+R3e2SH5lzl76c5RpdKSR/xQDR0wKKbancGMMP2cFEKaE2JvHokVL+qeq80X4T2RR2/QogWCIieedOevguMCkqHQZjh8aalxMT0aQ+hIeyh9y4GN11qH/ZmLoEjTaI/QFrCZTrAizRsoADvCnF3w4r3aHKz5ZXmSPEQneRA== Received: from BL0PR05CA0026.namprd05.prod.outlook.com (2603:10b6:208:91::36) by DM4PR12MB7623.namprd12.prod.outlook.com (2603:10b6:8:108::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Fri, 24 Jul 2026 22:00:37 +0000 Received: from BL02EPF0001A103.namprd05.prod.outlook.com (2603:10b6:208:91:cafe::3) by BL0PR05CA0026.outlook.office365.com (2603:10b6:208:91::36) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.270.6 via Frontend Transport; Fri, 24 Jul 2026 22:00:37 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by BL02EPF0001A103.mail.protection.outlook.com (10.167.241.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.270.5 via Frontend Transport; Fri, 24 Jul 2026 22:00:36 +0000 Received: from drhqmail203.nvidia.com (10.126.190.182) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Jul 2026 15:00:14 -0700 Received: from drhqmail201.nvidia.com (10.126.190.180) by drhqmail203.nvidia.com (10.126.190.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Jul 2026 15:00:14 -0700 Received: from sumitg-l4t.nvidia.com (10.127.8.14) by mail.nvidia.com (10.126.190.180) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Fri, 24 Jul 2026 15:00:08 -0700 From: Sumit Gupta To: , , , , , , , , , , , , , , , , , CC: , , , , , , , Subject: [PATCH v3 2/4] ACPI: CPPC: Make autonomous selection helpers take a u64 Date: Sat, 25 Jul 2026 03:29:35 +0530 Message-ID: <20260724215937.3368276-3-sumitg@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260724215937.3368276-1-sumitg@nvidia.com> References: <20260724215937.3368276-1-sumitg@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A103:EE_|DM4PR12MB7623:EE_ X-MS-Office365-Filtering-Correlation-Id: 3a1e0a9a-073d-44fa-4038-08dee9cefe43 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|23010399003|82310400026|36860700016|1800799024|921020|6133799003|11063799006|56012099006|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: YZkXN9gZM1NU3Km6uzGLPOvtWJTVvSnhVnk+N6dFh2Z7gUWuFHTsBc2iOAD7EGLHTnSZ4aUn/12IXh6rfQkd51zzHezpM+8MeiiMhN7y8T92SgRsU0tMsZ2Z32C8q9yd1me5zRkZKSVdJ6Cgfmk4W23B+TX0HlnjkcUFh+2ggIOAnkpcK2zsCYq7clfb4/EdiHoDbUKCLoRlqgslLvQRjBDsl/2y4gUVlzueokRjkYPK7NyDdk11QuK3T9OcIatD4BGdqbvj47ll0NUy5evVs7WwuuOt+2VK3YhXYPwmyPvkV3y/Ig9cxwfRf/zkYUIhz/4DKiKZCPf6M9UpEYA7LcJ8+PdtKhiPijm7Z/K8IsSiKzV0JO0CIiRR4G+UqzhfoODDblYfBynXR5BsQqUxEhnNxGBH8RuduqPt4caGRmyH2oBUKHVl3XUNtgH7gTyT9GtwhcMfcjRLng4u6vaJzuFRywrqYTnb3PyTKZfkwZK2TrFKBDFy1mgS9i1BHonaRuR2hHYMARPFwfnU0UbosAqTO47egeda8GKCD6eZWRHvEr+cFenngZNdPAUot9J5V/pA3baqjfzXWshIHL21KG0XqAS5+5CTGlWzr19Ru/H4kD009+SJzFFuWxWHBPxG5tXCXZ9EjSthWKWs+xk6JJPY96IG+55f5kv41e1FYcDIYVgUhHDTa+LxMlnn24IkF4ljEbrLgrPTW+gwJC3E2+pYz2eE8WZOYJRcWoDR8SJvvi9CnriGVxfIlVMHSc4r X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(7416014)(376014)(23010399003)(82310400026)(36860700016)(1800799024)(921020)(6133799003)(11063799006)(56012099006)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: EpXXMGLzsM9qoiz27IafZRnQRuOsuhnbi78nvwxMaXksori/FoDUQZrLZxWAIQoItNYmpDRfyecjqakI3GYdvvmEgIYx4CZx4Tpud4OoHs9r18AuKSKo5JtJ9GPIGX7Y7r0s2BKCJAWyzmzXUuRXwjxtSjYKuCRgx7zf82LATFw/oLGcE6pHUGPGRsrhCCIGXanOENKjRGhRWJYkUbgzQjSFtVWwQU4F9j8IkDGoY+tXuGXe8789xmaZhuXvOauFQVPRcp4+sVqYdZUcH2JgiQhutUk2+dJb4DbvD78ylD+QCZ03PqueRU9x7EGt1H4B1wYkQ13A+etdepc4BzyfH8RiqYwlImgqSii9OfDqjSxVrs7YZemrQvXAI0vEpLfCKcifTCcmkFf6ABeFJl9ewm9U1AWdBd47yVSnBtmPdp0ZAyk9dyFo84umokQR8jHW X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2026 22:00:36.9657 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3a1e0a9a-073d-44fa-4038-08dee9cefe43 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A103.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB7623 Content-Type: text/plain; charset="utf-8" cppc_get_auto_sel()/cppc_set_auto_sel() use a bool, unlike the other CPPC register get/set helpers which use a u64. The next patch in this series saves and restores the OSPM-set registers across CPU hotplug and driver unload through a common table of register get/set helpers that all take a u64. The bool autonomous selection helpers cannot be added to that table. Change cppc_get_auto_sel()/cppc_set_auto_sel() to take a u64 so the autonomous selection register fits alongside the others, and update their callers. Signed-off-by: Sumit Gupta --- drivers/acpi/cppc_acpi.c | 20 ++++---------------- drivers/cpufreq/amd-pstate.c | 2 +- drivers/cpufreq/cppc_cpufreq.c | 4 ++-- include/acpi/cppc_acpi.h | 8 ++++---- 4 files changed, 11 insertions(+), 23 deletions(-) diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c index 9f572f481241..ffadd2ca26b1 100644 --- a/drivers/acpi/cppc_acpi.c +++ b/drivers/acpi/cppc_acpi.c @@ -1757,23 +1757,11 @@ EXPORT_SYMBOL_GPL(cppc_set_auto_act_window); /** * cppc_get_auto_sel() - Read autonomous selection register. * @cpu: CPU from which to read register. - * @enable: Return address. + * @enable: Return address, set to 0 or 1. */ -int cppc_get_auto_sel(int cpu, bool *enable) +int cppc_get_auto_sel(int cpu, u64 *enable) { - u64 auto_sel; - int ret; - - if (enable =3D=3D NULL) - return -EINVAL; - - ret =3D cppc_get_reg_val(cpu, AUTO_SEL_ENABLE, &auto_sel); - if (ret) - return ret; - - *enable =3D (bool)auto_sel; - - return 0; + return cppc_get_reg_val(cpu, AUTO_SEL_ENABLE, enable); } EXPORT_SYMBOL_GPL(cppc_get_auto_sel); =20 @@ -1782,7 +1770,7 @@ EXPORT_SYMBOL_GPL(cppc_get_auto_sel); * @cpu : CPU to which to write register. * @enable : the desired value of autonomous selection resiter to be updat= ed. */ -int cppc_set_auto_sel(int cpu, bool enable) +int cppc_set_auto_sel(int cpu, u64 enable) { return cppc_set_reg_val(cpu, AUTO_SEL_ENABLE, enable); } diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c index f8d8288d644f..0f99bb86c3a3 100644 --- a/drivers/cpufreq/amd-pstate.c +++ b/drivers/cpufreq/amd-pstate.c @@ -507,7 +507,7 @@ static int shmem_init_perf(struct amd_cpudata *cpudata) struct cppc_perf_caps cppc_perf; union perf_cached perf =3D READ_ONCE(cpudata->perf); u64 numerator; - bool auto_sel; + u64 auto_sel; =20 int ret =3D cppc_get_perf_caps(cpudata->cpu, &cppc_perf); if (ret) diff --git a/drivers/cpufreq/cppc_cpufreq.c b/drivers/cpufreq/cppc_cpufreq.c index 6dc59f99d880..34cdba00e61a 100644 --- a/drivers/cpufreq/cppc_cpufreq.c +++ b/drivers/cpufreq/cppc_cpufreq.c @@ -893,7 +893,7 @@ static ssize_t show_freqdomain_cpus(struct cpufreq_poli= cy *policy, char *buf) =20 static ssize_t show_auto_select(struct cpufreq_policy *policy, char *buf) { - bool val; + u64 val; int ret; =20 ret =3D cppc_get_auto_sel(policy->cpu, &val); @@ -905,7 +905,7 @@ static ssize_t show_auto_select(struct cpufreq_policy *= policy, char *buf) if (ret) return ret; =20 - return sysfs_emit(buf, "%d\n", val); + return sysfs_emit(buf, "%llu\n", val); } =20 static ssize_t store_auto_select(struct cpufreq_policy *policy, diff --git a/include/acpi/cppc_acpi.h b/include/acpi/cppc_acpi.h index 8693890a7275..f4da73876287 100644 --- a/include/acpi/cppc_acpi.h +++ b/include/acpi/cppc_acpi.h @@ -182,8 +182,8 @@ extern int cppc_set_epp_perf(int cpu, struct cppc_perf_= ctrls *perf_ctrls, bool e extern int cppc_set_epp(int cpu, u64 epp_val); extern int cppc_get_auto_act_window(int cpu, u64 *auto_act_window); extern int cppc_set_auto_act_window(int cpu, u64 auto_act_window); -extern int cppc_get_auto_sel(int cpu, bool *enable); -extern int cppc_set_auto_sel(int cpu, bool enable); +extern int cppc_get_auto_sel(int cpu, u64 *enable); +extern int cppc_set_auto_sel(int cpu, u64 enable); extern int cppc_get_perf_limited(int cpu, u64 *perf_limited); extern int cppc_set_perf_limited(int cpu, u64 bits_to_clear); extern int amd_get_highest_perf(unsigned int cpu, u32 *highest_perf); @@ -274,11 +274,11 @@ static inline int cppc_set_auto_act_window(int cpu, u= 64 auto_act_window) { return -EOPNOTSUPP; } -static inline int cppc_get_auto_sel(int cpu, bool *enable) +static inline int cppc_get_auto_sel(int cpu, u64 *enable) { return -EOPNOTSUPP; } -static inline int cppc_set_auto_sel(int cpu, bool enable) +static inline int cppc_set_auto_sel(int cpu, u64 enable) { return -EOPNOTSUPP; } --=20 2.34.1 From nobody Sat Jul 25 05:59:33 2026 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010017.outbound.protection.outlook.com [52.101.201.17]) (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 BC366400966; Fri, 24 Jul 2026 22:00:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.17 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784930452; cv=fail; b=Hlc3uvQwVQKMTuI5tNddEFW5I4vdrT1EcuoupMgcK7vzYti7iUvj+/r+icLoaY2OhFerPNa/WElk8TbdvL2XQfvOLuvVj3AqZSexzJ0uaWs4hKFHvlgD4yQF+1umspK71L0N5w8a0aVRrneCucfsKnGKVDeLz35FRjDmsmhV4vM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784930452; c=relaxed/simple; bh=oar8FGZkWQcUqlHlOwFdHQpuPq8ZZre1PwA4KQao6uA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=G3u2hj9OZeSef0ZdJb01SieyMrr9u04eJrwM1ZB6Ep4/lF10WWiavXNDdZfSalmdZG5fGRs411sW2PtRDB0luWJdY8FEaQYFCs0C8amDLoRZn9O5cH/KEXNM49qFUAI5EJB6PSQiMyEPaGePIiq6p00o3lLsi0rpxf7tGUiGi8I= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=LaAWUNDx; arc=fail smtp.client-ip=52.101.201.17 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="LaAWUNDx" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=m/nuAR5csBs8mrLbYv1es7Ed44GlRSeqtO0tlYIc8NijsImVg/uPeLmVoLmmjKJawKqnKvY2tvAKEjgV8j5xXH7TzxQQI6h7mYBsuGCgjQrkpojo6phl9ZcrKnttcssx2MfVIjX0WawRixdZ4zB647cKYsS+RwEAZ4to8ytUT4GNQBfHond2dHcV8oZmB4Pqs//pNjqBeIy/1z82r28mIYzIBfrOp6FMYahWcVS1L+s9cM+3Yj6ZfTMRv9LNeRp/7XasRrqBZ45BV8r/bx8BeuhKPs8NRcqcLSOF4hqJdU0uO7wLxZcH1HwaYJNVbP3x995pbGrCdgGVCN2uJRKOUw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=g0Ym2kVJBdCK0c7/+gX4ff2K0ZzwWZhXP5Y+TR8wc34=; b=OYqMGOUiiIlj3TiZSPz4SbQpVUQOUSKtfWMafZM4pv3VrQ88n2GpdDgGcvskFh4S+inAgiVINWbc7P1IoEgBjJn5bs8XQtZorHiX/Cyd5T0U087l3jw4f9Tg/oUl1q6e/166xPCXorS+6v2AzIDOQ7QSsOA3jx60aq5kcQy6HNOQhOWBtBNWr6aOyo3D5abiez29n8rTnRDkQR03q+82YP9eyoe764uHq25nd9IldHftzThyzRHEzf77OpFeC3jPI1x0OAREnhLh8IXLLa8QPoTWTFVDO821KE+gcLDFHWT/4VhJadN1eLrUE5vrzAZFejrcwQzRv+/F8WqLpfdDzQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) smtp.rcpttodomain=kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=g0Ym2kVJBdCK0c7/+gX4ff2K0ZzwWZhXP5Y+TR8wc34=; b=LaAWUNDxUoNh35oYS97eafMgL/U71RjTg0jyOiIr0MIgW+6pNUEdDlDmpeWEW9iZ5CZ3umTbN0Z5RQqFl6KM0ehIKQ7we+Erugh+W8fC3Qnm2nxjCCYcY4om7Qs8km42+E8uH+5eUmEBfDivARvHDiGnbCoR2FTK/5esA5b6/rRKY2GSWq+lHR4gcgg9TWWJjKfF2D3isZI3EUq1DZkwIxwS71sP6SWjlYMRPQwgc7CPf4jj22LdVv1Tt7cmOPHGqDuudC1d9D2ih14WDZwWSBecbaTU3deo6C6VsSCbjrYwb5fHntCBe7AyveFyR9gkFi75xBnhNbnGrvaw9384Ng== Received: from DS7PR03CA0045.namprd03.prod.outlook.com (2603:10b6:5:3b5::20) by PH7PR12MB8780.namprd12.prod.outlook.com (2603:10b6:510:26b::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.12; Fri, 24 Jul 2026 22:00:41 +0000 Received: from DS1PEPF00017093.namprd03.prod.outlook.com (2603:10b6:5:3b5:cafe::6c) by DS7PR03CA0045.outlook.office365.com (2603:10b6:5:3b5::20) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.245.12 via Frontend Transport; Fri, 24 Jul 2026 22:00:41 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by DS1PEPF00017093.mail.protection.outlook.com (10.167.17.136) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.270.5 via Frontend Transport; Fri, 24 Jul 2026 22:00:40 +0000 Received: from drhqmail202.nvidia.com (10.126.190.181) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45; Fri, 24 Jul 2026 15:00:23 -0700 Received: from drhqmail201.nvidia.com (10.126.190.180) by drhqmail202.nvidia.com (10.126.190.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Jul 2026 15:00:23 -0700 Received: from sumitg-l4t.nvidia.com (10.127.8.14) by mail.nvidia.com (10.126.190.180) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Fri, 24 Jul 2026 15:00:17 -0700 From: Sumit Gupta To: , , , , , , , , , , , , , , , , , CC: , , , , , , , Subject: [PATCH v3 3/4] cpufreq: CPPC: Preserve OSPM-set registers across hotplug and unload Date: Sat, 25 Jul 2026 03:29:36 +0530 Message-ID: <20260724215937.3368276-4-sumitg@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260724215937.3368276-1-sumitg@nvidia.com> References: <20260724215937.3368276-1-sumitg@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS1PEPF00017093:EE_|PH7PR12MB8780:EE_ X-MS-Office365-Filtering-Correlation-Id: cdf87264-dc5d-45d7-67a4-08dee9cf0069 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|7416014|36860700016|23010399003|1800799024|921020|6133799003|18002099003|22082099003|56012099006|11063799006|10067099003; X-Microsoft-Antispam-Message-Info: aSWE/274obLoFkkSCl4L/WSBOKZ7344JG6mcGHHS0+BGrgsuOdweSqOD0PsC13JRfu9LIKlQuEBE4mc0mEt77B2ID334Ib5WcLy7t2uPzpJazpmyoWoAELnlBE6bb3T9fJDp8KdaJ1bgeMSxksrIebzhatoBcx1FI7bzDFQhFxUdlF2r2CSLdcSp8EW30fOGzRP4UVZ2Vq+TPhJ6eoKT/M7OMEsa3IiUfUHrQk+I5BUWPzFP6Ce2gzo4DMcWTs08+CkptoKD9HDr0zGamAytaAm/PSKEvbOK7fHqzf31oc2/CxCTdFCNVpROAbysQBqeWHouFg8kvPnXif/78+0m8qpuEl0nbd6ptOLUElpX9MYwSRUWIwBAtffyaOgKN1SzoLk03kEEj/MYlOJ/A8bVpYD9BVujpWQayGavY/wr43LL58tiDdY1aOy5KZvVpYS7UGQ1t4UY6Q0tNhO8XrI+Itx/AuQc1LsrXXxEJbfawbqLXvO+Yss34+59BVBBt2C/o8k39cHYMH+U4MpEzvZ27oMfrUEtYNpNvmeltFLRrDpQ+ynkenoU7Dzn2/EYIMY9Ps2OoZby/SF6CbxF1OIQbk09eOHVWrkjO3huJhrbclMVCGxSJMoKhaypmobvFP2ZtXb79nOUQFTBJZ+yUwto/YFL+hDVNX+R5/E/uCq/f5eNjmkUgNdUREW5/WonW69pR/S9KzY6UPTMXjYOvCNiTavubgSSnNGo6CuoNsEyemJMEgEzHkmvKLP/uzZjwh7g X-Forefront-Antispam-Report: CIP:216.228.118.232;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge1.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(82310400026)(7416014)(36860700016)(23010399003)(1800799024)(921020)(6133799003)(18002099003)(22082099003)(56012099006)(11063799006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NFfSdNZQbjm1KdeA15pxzR8tf4sBYDfYiqHv6nTwwoXvTx6OzTab5kkBXIxTAnr+FGHJUBb8pA3dpuiEPo8wKermc3qje7NMuZSF9Umz6Y4ZN4gqfrv2cKwN23YfjrVjBEMqJ8nHzeLzNWkvuYPWZnwCb8SPSM6ez/r67tRovUymHb+0jeTksZU1S+fFsVoXHq1c2bI3vPdLRwCpLlv9IOK2HMrGFAuUNIXWGEvWxAG1mECPDoXTqOxDVEeowwjorZzuN+UkLbE7kFibNiJyNVWVOM50sP4DVO/5HDKhenUyqiCZ2PwB8lh1BccWRBWKLLWBDdXGCbxAkOk174WVt//kzx15IvfMoRzC/KJ5+2TSfYdtkGhXu9tfw3S1qXnfNqawLxw+z0ZcU2iglWFAk0qp4R63sznFwmP7zmvzG5S2xtCJpN8iBTBBwHr/4JqC X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2026 22:00:40.5803 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: cdf87264-dc5d-45d7-67a4-08dee9cf0069 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.232];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DS1PEPF00017093.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8780 Content-Type: text/plain; charset="utf-8" Values written to OSPM-set CPPC registers (via sysfs or the autonomous boot parameter) can be lost in two ways: - Across CPU hotplug: the platform may reset a CPU's registers while it is offline. - On driver unload: the value the driver wrote is left in the register instead of returning to its pre-driver state. Add a small table-driven mechanism that handles both: - On init(), capture each register's firmware value before the driver programs anything. - On offline(), read back each register's current value (whatever was last set via sysfs or the boot parameter) so it can be reapplied, then restore the firmware value. - On online(), reapply the value captured at offline() after the performance request is re-established. Keep Autonomous Selection (auto_sel) last in the table so that, on online(), its saved value is reapplied after the other registers that shape its behaviour. Cover the Autonomous Selection (auto_sel), Energy Performance Preference (EPP) and Autonomous Activity Window (auto_act_window) registers. Suggested-by: Pierre Gondois Link: https://lore.kernel.org/all/86780f97-29ee-4a72-b311-38c89434b707@arm.= com/ Signed-off-by: Sumit Gupta --- drivers/cpufreq/cppc_cpufreq.c | 157 +++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) diff --git a/drivers/cpufreq/cppc_cpufreq.c b/drivers/cpufreq/cppc_cpufreq.c index 34cdba00e61a..8a13ec49eb9d 100644 --- a/drivers/cpufreq/cppc_cpufreq.c +++ b/drivers/cpufreq/cppc_cpufreq.c @@ -28,6 +28,150 @@ =20 static struct cpufreq_driver cppc_cpufreq_driver; =20 +/* + * OSPM-set CPPC registers tracked for save/restore. A value set via sysfs= or + * the autonomous boot parameter is reapplied from online() across CPU + * hotplug, and the firmware value is restored from offline(). + * + * Autonomous Selection (auto_sel) is kept last so its saved value is + * reapplied after the other registers that shape its behaviour. + */ +enum cppc_saved_reg_id { + CPPC_SAVED_EPP, + CPPC_SAVED_AUTO_ACT_WINDOW, + CPPC_SAVED_AUTO_SEL, + CPPC_NR_SAVED_REGS, +}; + +struct cppc_saved_reg { + int (*get)(int cpu, u64 *val); + int (*set)(int cpu, u64 val); +}; + +static const struct cppc_saved_reg cppc_saved_regs[CPPC_NR_SAVED_REGS] =3D= { + [CPPC_SAVED_EPP] =3D { + cppc_get_epp_perf, cppc_set_epp, + }, + [CPPC_SAVED_AUTO_ACT_WINDOW] =3D { + cppc_get_auto_act_window, cppc_set_auto_act_window, + }, + [CPPC_SAVED_AUTO_SEL] =3D { + cppc_get_auto_sel, cppc_set_auto_sel, + }, +}; + +/* + * Per-policy saved state for each register in cppc_saved_regs[]: + * firmware_val - value before the driver touched it, captured at init() + * and restored while the policy is offline. U64_MAX if = it + * could not be read + * requested_val - value in effect when the policy last went offline, + * reapplied at online(). U64_MAX if none + */ +struct cppc_saved_state { + u64 firmware_val; + u64 requested_val; +}; + +static DEFINE_PER_CPU(struct cppc_saved_state[CPPC_NR_SAVED_REGS], cppc_sa= ved_state); + +/* + * Return this policy's saved state. Each policy keeps a single copy, stor= ed in + * the per-CPU variable of the first CPU it manages. related_cpus (the pol= icy's + * full set of CPUs) never changes while it exists, so this CPU (unlike + * policy->cpu) stays the same across CPU hotplug, and every callback reac= hes + * the same copy. + */ +static struct cppc_saved_state *cppc_cpufreq_policy_saved_state(struct cpu= freq_policy *policy) +{ + const struct cpumask *policy_cpus =3D policy->related_cpus; + + /* + * related_cpus is empty until the core fills it in after init(). Until + * then, fall back to policy->cpus, which has the same first CPU. + */ + if (cpumask_empty(policy_cpus)) + policy_cpus =3D policy->cpus; + + return per_cpu(cppc_saved_state, cpumask_first(policy_cpus)); +} + +/* + * Capture each register's firmware value before the driver programs anyth= ing. + */ +static void cppc_cpufreq_save_firmware_regs(struct cpufreq_policy *policy) +{ + struct cppc_saved_state *st =3D cppc_cpufreq_policy_saved_state(policy); + unsigned int cpu =3D policy->cpu; + u64 val; + int i; + + for (i =3D 0; i < CPPC_NR_SAVED_REGS; i++) { + if (cppc_saved_regs[i].get(cpu, &val)) + val =3D U64_MAX; + st[i].firmware_val =3D val; + st[i].requested_val =3D U64_MAX; + } +} + +/* + * Save each register's current value so it can later be reapplied. + */ +static void cppc_cpufreq_save_requested_regs(struct cpufreq_policy *policy) +{ + struct cppc_saved_state *st =3D cppc_cpufreq_policy_saved_state(policy); + unsigned int cpu =3D policy->cpu; + u64 val; + int i; + + for (i =3D 0; i < CPPC_NR_SAVED_REGS; i++) { + if (cppc_saved_regs[i].get(cpu, &val)) + val =3D U64_MAX; + st[i].requested_val =3D val; + } +} + +/* + * Restore each register's firmware value, leaving the platform in its + * pre-driver state. + */ +static void cppc_cpufreq_restore_firmware_regs(struct cpufreq_policy *poli= cy) +{ + struct cppc_saved_state *st =3D cppc_cpufreq_policy_saved_state(policy); + unsigned int cpu =3D policy->cpu; + int i, ret; + + for (i =3D 0; i < CPPC_NR_SAVED_REGS; i++) { + if (st[i].firmware_val =3D=3D U64_MAX) + continue; + + ret =3D cppc_saved_regs[i].set(cpu, st[i].firmware_val); + if (ret && ret !=3D -EOPNOTSUPP) + pr_debug("Failed to restore firmware reg %d on CPU%u (%d)\n", + i, cpu, ret); + } +} + +/* + * Reapply each register's requested value that offline() saved. + */ +static void cppc_cpufreq_reapply_requested_regs(struct cpufreq_policy *pol= icy) +{ + struct cppc_saved_state *st =3D cppc_cpufreq_policy_saved_state(policy); + unsigned int cpu =3D policy->cpu; + int i, ret; + + for (i =3D 0; i < CPPC_NR_SAVED_REGS; i++) { + if (st[i].requested_val =3D=3D U64_MAX) + continue; + + ret =3D cppc_saved_regs[i].set(cpu, st[i].requested_val); + if (ret && ret !=3D -EOPNOTSUPP) + pr_debug("Failed to reapply saved reg %d on CPU%u (%d)\n", + i, cpu, ret); + } +} + #ifdef CONFIG_ACPI_CPPC_CPUFREQ_FIE static enum { FIE_UNSET =3D -1, @@ -707,6 +851,8 @@ static int cppc_cpufreq_cpu_init(struct cpufreq_policy = *policy) policy->cur =3D cppc_perf_to_khz(caps, caps->highest_perf); cpu_data->perf_ctrls.desired_perf =3D caps->highest_perf; =20 + cppc_cpufreq_save_firmware_regs(policy); + ret =3D cppc_set_perf(cpu, &cpu_data->perf_ctrls); if (ret) { pr_debug("Err setting perf value:%d on CPU:%d. ret:%d\n", @@ -725,15 +871,24 @@ static int cppc_cpufreq_cpu_init(struct cpufreq_polic= y *policy) /* * With offline() defined, the cpufreq core keeps the policy alive when * a CPU is hotplugged out. + * + * Save each register's current value so online() can reapply it, then + * restore the firmware value, leaving the platform in its pre-driver stat= e. */ static int cppc_cpufreq_cpu_offline(struct cpufreq_policy *policy) { + cppc_cpufreq_save_requested_regs(policy); + cppc_cpufreq_restore_firmware_regs(policy); + return 0; } =20 /* * Re-enable CPPC when the policy's CPU comes back online, since the platf= orm * may have disabled it while the CPU was offline. + * + * offline() reset the registers to their firmware values, so reapply the + * OSPM-set values it saved. */ static int cppc_cpufreq_cpu_online(struct cpufreq_policy *policy) { @@ -761,6 +916,8 @@ static int cppc_cpufreq_cpu_online(struct cpufreq_polic= y *policy) pr_debug("Failed to reapply perf request on CPU%d (%d)\n", cpu, ret); =20 + cppc_cpufreq_reapply_requested_regs(policy); + return 0; } =20 --=20 2.34.1 From nobody Sat Jul 25 05:59:33 2026 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012062.outbound.protection.outlook.com [52.101.48.62]) (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 B3C663FB072; Fri, 24 Jul 2026 22:00:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.48.62 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784930459; cv=fail; b=r7ydXrx5MRVqI2nsVNgupus3u90ZHmMlJy/NdhlU5NeZYUh3PfsfBkZOUkL3TB/qnENznN85hisoGPl5pFWn/IUN1BQbY+OR4xTX8IfjbtBgatB4+6TfgkoaiyoWdgpM6eEFCRg+Zm9aAtYRYaEXj0aTOsVv+DIpi7tNNRmoUXI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784930459; c=relaxed/simple; bh=XHo9DvyenCxP4dZGulq4Exu3RpA2DCPJyP/3R6dsy64=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=sdAjkNWEZVyBfK4XLGTZQTt0KIB2MT85uFXMDpPFki3RT9OI8OFEkBFfeOs5ubZ7I8Sp3eOMwB3BRgjX6Ux1/WSiKmrdvl8XNR4QH8y7/AmhCXqyd/XRs3Bon4PlHLlKcz4nKLT5b8Mew5qKB/gptyTsTP29khk1E2t3XQfIAxk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=nhAqKcD1; arc=fail smtp.client-ip=52.101.48.62 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="nhAqKcD1" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YT4IJtyDecMPUmxAd0iQY42CXmrH6BiU+13Nz7ARJXQ4xeDBcslJvEBOjR3KfJ/a9Ifd7znq2/W+zNLGPrWUYcRQTYcUk8OR7JEnCDo7AFbzF+y3ieRg7aHnndxpBlWfskTD5BA0/eAYD3Qt+9RmcbyPla30wQTXAgI+XsSl9gZTB4ie6jSDwBSrJmqw3N1NuKufKcvbNMoXG08JLUtzGGNk7u1OQuzVJT0CwR9OYGoFwXD99vZDW7dxflcLWLhJZmaPN70K3+OYPac8LWh5yZXIYB36pLGkCQvmncQgNpJ72ltCOXE94oNcdAyP98KxCKylEfDzWnav3iwszYOi4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Onfhws+kP+oPoRuaNRSBYM9J3EFVYGx6hqaWvGSXOzc=; b=EtkK812oM4C6B2txMlA0Q5Gr7R4KtdnAJIu3Z66Qoa4wvuSIjglhTilrO2TH1tiCNywUAEgjMyKWPGoSrOzEg1LpHBYUXOOuISMra3ESXOc5Iz2hZPiVgQhBq9DbNPRXaAPXzap9jCx7Mn8GDIl0gaGoI5lv98dKs6kRMPCez1jKqJXV/9pJUjSoisVSOtLrJE4qSIYMJS8ByD4EYwShWRrZ1e7pRUqkAE9z5zkHGe/rwItAclvjsAivSoQq11YKH2WpCqEJIZDpW36Nb2+3fz7fgLa00vfTV+fLLaY2hYoVjInk3skJ0NZdNZOL7DdQRhCf1tOdSENoULSlYCLVug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) smtp.rcpttodomain=kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Onfhws+kP+oPoRuaNRSBYM9J3EFVYGx6hqaWvGSXOzc=; b=nhAqKcD1ZBIdrHPGcKyQXC6ihpoZKig93dQwa4vfeiyIqFjUIKRsg0GuxxuCeRgyXkBomTIZN5TnEXJd8jmh1sj3PJgcvecK1+1Z1J14PCnZCog0iod4sB+Xzz6qDsEo9Uua0Hsz/5mWS0Ztv09pfGp7d0Lw0kjsp1wnUUKzG3ZK0iI8OuDlWdgcICskQR7eSiyiMW1jyIEIyO3Kn9nypnU2KH3rKVhEJpQ9yacZZ0WfXd/MjS8FJ+qJ1hb49hPwUNjUVOJlsbuL2XCmOgnMuEsfqAAewiW0p7oOgQVsv2zru9z+J4uvEvHNO1vbgB8gq3CcLQtbhCLhqThX8D5d2A== Received: from BL0PR05CA0018.namprd05.prod.outlook.com (2603:10b6:208:91::28) by CY8PR12MB7244.namprd12.prod.outlook.com (2603:10b6:930:57::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Fri, 24 Jul 2026 22:00:53 +0000 Received: from BL02EPF0001A103.namprd05.prod.outlook.com (2603:10b6:208:91:cafe::55) by BL0PR05CA0018.outlook.office365.com (2603:10b6:208:91::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.270.6 via Frontend Transport; Fri, 24 Jul 2026 22:00:51 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by BL02EPF0001A103.mail.protection.outlook.com (10.167.241.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.270.5 via Frontend Transport; Fri, 24 Jul 2026 22:00:51 +0000 Received: from drhqmail202.nvidia.com (10.126.190.181) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Jul 2026 15:00:33 -0700 Received: from drhqmail201.nvidia.com (10.126.190.180) by drhqmail202.nvidia.com (10.126.190.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Jul 2026 15:00:32 -0700 Received: from sumitg-l4t.nvidia.com (10.127.8.14) by mail.nvidia.com (10.126.190.180) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Fri, 24 Jul 2026 15:00:26 -0700 From: Sumit Gupta To: , , , , , , , , , , , , , , , , , CC: , , , , , , , Subject: [PATCH v3 4/4] cpufreq: CPPC: Preserve OSPM-set registers across suspend/resume Date: Sat, 25 Jul 2026 03:29:37 +0530 Message-ID: <20260724215937.3368276-5-sumitg@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260724215937.3368276-1-sumitg@nvidia.com> References: <20260724215937.3368276-1-sumitg@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0001A103:EE_|CY8PR12MB7244:EE_ X-MS-Office365-Filtering-Correlation-Id: 999dade9-78ee-4bcd-bed6-08dee9cf0705 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|36860700016|7416014|1800799024|82310400026|921020|56012099006|11063799006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: eXFS67vee6h+uxkEJ2sZUxUarYnszddYbbnaaXXwUL+7tWtpRA941E8f4YS2wJViFOnzwSgGPwd133oxCP+Zm3GeV4jHe3nmP9Mhht5nHERjWnnBUSHAMiJM9KoY7Z5Lc4CnWx/hV7gmO0XZSThxZXc7grLaP5H3UkBT5/UpC+1siYW3roVcpnN+pZhr9ntTLqhofKeMaNK/5mxDWg6ZPXBd5wXAxbJ0R7sOyRQa0vQ9qtimc7jxoVCQaUY/w2v/pQcXDzwVJjKxDRiLnfWDAxMgweA/00rDmjLFdc+uB1PGrsT0nEthNlKmnP+tmiszIFWAROgUIHoc3tk1PTpXhkyu7ZcNoIq6dMz/io/EJnI3Uye/wF+iPnPN+pWCxdZG4suIJ+EYH0mZ1Hc9xW6PRrgXCKsOCSj/SiYboFAIC3eHHz46k5CrGIq6Im6iweTnK+dh2xFVSZkWJr3+eZtToNyPX4+uSTJBFM17Ot8UyuNMUFe95kn0BTyuqlXwRG7VuX+EXfWEjqS8xjkQAAqUdjFdlVEchWXlPlDFOeGKUj71BcgukACg+ckYY/7RkRPSJ67VcG6rw/Ct2fn3rRmkREePPLSr6o5olcCm7d3SwjAnHzDUBZ0u/K2y1fXMNGxAcvqnt8SNoy12GKQv4yfHl1VrkU9EwMs08obDIPVIh7lEnZrRn3MxwsV/pM6NRkzZGMScZAerQqj0IO1q9ZAL+B5FhzOQ/xStpi5s5LEhOUH1+gDu6sglLSYPR8zfXIv5 X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(23010399003)(376014)(36860700016)(7416014)(1800799024)(82310400026)(921020)(56012099006)(11063799006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: H/eVhE5SChR+vRe+8iN1IKggFAyKDeggoZ9Ma+DJn6J0Y3tHBQ4i+IYiljbOfHvNHE2EN1rWTH6s+tviNSp83YeZ0NOFQPuvXcJcCAifBSm4yf6h4RKG0/0ddz7oNutdc4+AKwzw/6ut+xx0DnomP/Z2VaiMqXMwfxUpAurVkpYGHw8P3deigXI2XfkfCQAOK9v37tOiO4A4LPua+dxQMcakAUsnAB1Za6v3eSKiDQfTjWnnrYhb/p/3DGifUHwJ19hV7YUbM2oODCHYdtlnUlGAGh8IPzYtUsFvCMb8TKPhZo+BsjBf1An5Jk9VFLWr3R89dVRfvzX4HVWY14i4JmdyWnExqL7k5uMMglwlk/6azBowehPgY97FfKlJFgquoaR6itbilQJEAvjnFxFd2HnYscrxeMTHOuOZQsPgGHA4aQvLfJKby917BSUTZMmQ X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2026 22:00:51.6395 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 999dade9-78ee-4bcd-bed6-08dee9cf0705 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0001A103.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB7244 Content-Type: text/plain; charset="utf-8" The previous patch preserves the OSPM-set registers across CPU hotplug, but system suspend/resume is a separate path. On platforms that reset those registers or the performance controls across suspend, the values are lost. Reuse the same save/restore mechanism for suspend/resume: - suspend() only saves the current OSPM-set values. It does not revert them to firmware, since a later offline() already does that when system suspend offlines the secondary CPUs. - resume() needs the same steps as online(), so .resume points at online() directly. Suggested-by: Christian Loehle Signed-off-by: Sumit Gupta --- drivers/cpufreq/cppc_cpufreq.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/cpufreq/cppc_cpufreq.c b/drivers/cpufreq/cppc_cpufreq.c index 8a13ec49eb9d..be2d873ccd84 100644 --- a/drivers/cpufreq/cppc_cpufreq.c +++ b/drivers/cpufreq/cppc_cpufreq.c @@ -921,6 +921,22 @@ static int cppc_cpufreq_cpu_online(struct cpufreq_poli= cy *policy) return 0; } =20 +/* + * suspend() only saves the OSPM-set values. It does not revert them to the + * firmware values. + * + * This is because system suspend may later offline the secondary CPUs. + * That runs offline(), which saves the values and then reverts to firmwar= e. + * If suspend() had already reverted, offline() would save the firmware va= lue + * instead of the user's request, and the request would be lost. + */ +static int cppc_cpufreq_cpu_suspend(struct cpufreq_policy *policy) +{ + cppc_cpufreq_save_requested_regs(policy); + + return 0; +} + static void cppc_cpufreq_cpu_exit(struct cpufreq_policy *policy) { struct cppc_cpudata *cpu_data =3D policy->driver_data; @@ -1235,6 +1251,8 @@ static struct cpufreq_driver cppc_cpufreq_driver =3D { .exit =3D cppc_cpufreq_cpu_exit, .online =3D cppc_cpufreq_cpu_online, .offline =3D cppc_cpufreq_cpu_offline, + .suspend =3D cppc_cpufreq_cpu_suspend, + .resume =3D cppc_cpufreq_cpu_online, .set_boost =3D cppc_cpufreq_set_boost, .attr =3D cppc_cpufreq_attr, .name =3D "cppc_cpufreq", --=20 2.34.1