From patchwork Tue Mar 25 06:04:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Suma Hegde X-Patchwork-Id: 14028098 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2042.outbound.protection.outlook.com [40.107.237.42]) (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 1E8FF2517BF for ; Tue, 25 Mar 2025 06:05:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.237.42 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742882726; cv=fail; b=mv3hJWxWJrJ8sfpkbELkILFTdTs5EYZpPj/PGpg8msdgPmTz2YG1ImHQAHkAXHaVGhb52ucsvBGJvQhpWuIWmHiHhMVW5iEG9DoxnqKyGc/sKgVx2frQ+k4Nmjj3kgEbx62br/Vwh1YkvpzgvQe+P0erNFAOK2Btg2SUBz97uAE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742882726; c=relaxed/simple; bh=RuvYitWhPz4jqfh3yO2JdOLjpcrLI8Enc8LR1uqqqus=; h=From:To:CC:Subject:Date:Message-ID:MIME-Version:Content-Type; b=Xo6iMTrPTnevUq3SDfgqmaNgZ3XKYnK1LHfc4GTSi6H/NYyvkhQtFks5r+TlNLebkRzCApRS3Q4YB2hTF54pGrHVzoRvEeY+6d/r9T8Fzb8DDDWhaA17+VkB2MpYJDHQ0WQ+95IDCuO8RmyMFus4jcfRKfWzJahpg8xcb/rLUo0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=H0crze2U; arc=fail smtp.client-ip=40.107.237.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="H0crze2U" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iF55eU0TUMVKIIdC9UtWrJ0CanzVIRBj8x0G7lCgVecHfMjFYzxxqUJ6EGlsSESLLQR4moa5YSFVuJvMbUYzIiKak0C5RcyDbyZ6sIF1X8+PmtKzD9nRhqPZJ65osenFvHbhM3j0/09Al9JaTNBMkv5xU1NbTMEUFEIrDsuVm/SbunAsxCsZlKlr9S1v/mJ1OEX1xWhYCXfp25mN7pZSRrO1s7AFtdBaXdSaFH82AZtYBo/gRC2zqjCtpFqZQJ/s+AyFhExszq5unBxOkxEkL/bqJZtACQYQwzqrD8yr29uW4PHsKlOkT3nR40vXF8CfJTVIA/uG6mhhGDz0giqnfA== 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=mDBix0so8wM4XbhGhP8FoEidx+3Vj0vAMQyV1zzt6b0=; b=afe9Rw5o8TH9GdCPLR07mrihtIf6kTp2y6KsXlhe0gARtBHNjNustf0uOvc3CPwsNWZx/EvzdIztgCvsED7WeIraTyesybNATX4nOGVbr0CvMoF1isjfgd99QZvpoMc1Quu/MFgdKJjfWFvCqik5JJePH9cSuVnr2Vt/rknXSO1y2ZxVNQZu8+Lc5Iun49aOz1wy6pcLeto1z4FnKxJR5Xap+ANyxpdnWXVu4uCm3nUg4oAQgGbNgJmouLiR2ItolHbbQ75yxESJglubQS7YpdDJWBwaVsfcbcXNRcsUGkt+rUZ5BAQCjILWLUSTfUrXoAc0JA19viyzTX8S670lJg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mDBix0so8wM4XbhGhP8FoEidx+3Vj0vAMQyV1zzt6b0=; b=H0crze2UFHO6QD15Z2ut4/LwIaPJVq7oAr1lSZfV9zjCFo8QFq0un1OsCoEzosDzwIQW3FmLVF5xColl3MbrfDN1xsPnbBvUUeUblrKa6Ex7Q6GydbXwlFdyMExpzNRgp0RBS8eaNPjqZgTM+KybxkkRqcAEaqzZc7JajPA+Is0= Received: from BN0PR02CA0029.namprd02.prod.outlook.com (2603:10b6:408:e4::34) by SA1PR12MB6775.namprd12.prod.outlook.com (2603:10b6:806:25a::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.42; Tue, 25 Mar 2025 06:05:21 +0000 Received: from BL6PEPF00022572.namprd02.prod.outlook.com (2603:10b6:408:e4:cafe::40) by BN0PR02CA0029.outlook.office365.com (2603:10b6:408:e4::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8534.42 via Frontend Transport; Tue, 25 Mar 2025 06:05:21 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BL6PEPF00022572.mail.protection.outlook.com (10.167.249.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8534.20 via Frontend Transport; Tue, 25 Mar 2025 06:05:21 +0000 Received: from amd.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 25 Mar 2025 01:05:18 -0500 From: Suma Hegde To: CC: , , Suma Hegde , Naveen Krishna Chatradhi Subject: [v2 1/3] platform/x86/amd/hsmp: Use one DRIVER_VERSION Date: Tue, 25 Mar 2025 06:04:55 +0000 Message-ID: <20250325060457.3643613-1-suma.hegde@amd.com> X-Mailer: git-send-email 2.25.1 Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF00022572:EE_|SA1PR12MB6775:EE_ X-MS-Office365-Filtering-Correlation-Id: 2f8b0cd3-b679-4c78-c71f-08dd6b63067d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: 5NTZ6syLR7UNrr02lupytXBlcoMB7elHs+ucwtXpaFZwUBCwYiBoK3aCdffU7na9hpId46JE0yQ9X+ejwNwN+TPV/xn37Mu4CEMJtKodq+1aF4EDTWHHFJK1uSxApfhWqc+Nie+nVnqH7/bjRJPgyJirUs9p5CACGSBSCUlkwMjmBHRvx5xQnVUn1V/JtOzToCYc4/xxy8kYSAaxyXrLZNDodGLgZojgHVcaWXXqKKjr/d6wnESCN6ThhDmoYkYoilRU61I30g0cfKQsGp/ZykfPhdAjk4a6YwyW320sLsHjk51rtmIT+EeSomcOyLGm3HwqRnSBIRqj4lJKshrK0ikoUne3lNLVglXI18r/8XwAfLqCtiG3YS88pyykCNjAumAEzT8tlZfr5D7VUi78yB5ev/FxojBWeJDs844OWkBabnxrtIfyIdkhAEv2nDpzQg6mqd3cSXMfaHrNwppPap3pjw9zqK93BgJdl930MPxstxNmTvcof7YcTOsTDRdEyaKcqDMKAZBEPGxQ8YgdC/hLgg8S+duxDJdDUxhDPF7yPYsoNhmSh1YI78DKmvmTKB4ccau9GeQFGKDXjjdO3PmdZ1wKQ6XiBhNdYOfp0FMLzzKkRqYhMCfSvxtI6qGc48jJcKs32e6OPNSi++8AW3YTFVs+hk/Gm/LiJMnjwervo4SvaNBnlHXDANLYh9/tRPj2ID5V6mdIRjKzU3jI6iCJCTQ9DCyPpwnY1XuyBopB5kz5mYGjHE5gbabreX8jObs60LWlpYDpSFAA71N0xbZ+byvSMHftkwmsnZot3oBDZXLyAC7oQiYzQvnrNHu7v3iQa4Ky76TtHxD47t3/fDZLkjNiMoP9gCz6iyW1zdTa1J6MN+VmB1PK0hC8HgHxU8LySC30KvcYYgy3OgymzsxazV/YBca5E1YwR+dDKCROT9yX+OWBLnAnFYYSAV/8XapXdHT/JKxmxcPAkVLzM9S74AWRfRkUGBV39rtYuyOpwrNTfJe16T5kTUU8FXcs2aa9wAGWWCD/5jlIhnB5hmwSTzf6c8Y+kYZyLPOkXM5PePas1DbCcEzLnP2DWh8nhdjZLFp6aDM4PBaOfzkkWOh9ZQyZRFcIPNXAUiTvoS2gAmp4P5eiFUQiH9cu9I2NlzieZd6+NWN6wxTbU/4FoJXlN0eaczqhqEYCSHRC3s5BwasY4E1X8SUdVZU2ktfcA+S9Vmr2GmYODj2bln6L6litEfYVpaoRUrqdiZLe1OBVE38YXAiWB1uoB5Dmm2syDWPuOQQMV6qqzWOClOYBaMZ2sQmDmO/H8WGVqjNPkHZFAYYVViSlKjvfHKVIEw0Ti/o4nVf78S2jZVhZBy4GDjH1liqpsb2CUTK2BKBqxD8dJSFe0XyiWuf0yqdau4B+eVFW3awfs1axWVo7ZoXApSv0rjenS7J3x8XZBHg83YqErgxTUYaHCwddeOlLwAMIhvJyKppqd14Uoibwkq0v5PWKwS9rO9d0hSNTjMiEyFI= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(82310400026)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Mar 2025 06:05:21.0850 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2f8b0cd3-b679-4c78-c71f-08dd6b63067d X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF00022572.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB6775 Use one DRIVER_VERSION for plat, hsmp and acpi modules. This simplifies userspace applications to support features based on available driver version. Signed-off-by: Suma Hegde Reviewed-by: Naveen Krishna Chatradhi --- Changes since v1: None (Rebased on review-ilpo-next) drivers/platform/x86/amd/hsmp/acpi.c | 1 - drivers/platform/x86/amd/hsmp/hsmp.c | 2 -- drivers/platform/x86/amd/hsmp/hsmp.h | 2 ++ drivers/platform/x86/amd/hsmp/plat.c | 1 - 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/platform/x86/amd/hsmp/acpi.c b/drivers/platform/x86/amd/hsmp/acpi.c index 444b43be35a2..0c54c91b5f1a 100644 --- a/drivers/platform/x86/amd/hsmp/acpi.c +++ b/drivers/platform/x86/amd/hsmp/acpi.c @@ -27,7 +27,6 @@ #include "hsmp.h" #define DRIVER_NAME "amd_hsmp" -#define DRIVER_VERSION "2.3" #define ACPI_HSMP_DEVICE_HID "AMDI0097" /* These are the strings specified in ACPI table */ diff --git a/drivers/platform/x86/amd/hsmp/hsmp.c b/drivers/platform/x86/amd/hsmp/hsmp.c index 03164e30b3a5..8c05e1415820 100644 --- a/drivers/platform/x86/amd/hsmp/hsmp.c +++ b/drivers/platform/x86/amd/hsmp/hsmp.c @@ -33,8 +33,6 @@ #define HSMP_WR true #define HSMP_RD false -#define DRIVER_VERSION "2.4" - /* * When same message numbers are used for both GET and SET operation, * bit:31 indicates whether its SET or GET operation. diff --git a/drivers/platform/x86/amd/hsmp/hsmp.h b/drivers/platform/x86/amd/hsmp/hsmp.h index e852f0a947e4..3dee0bb684c7 100644 --- a/drivers/platform/x86/amd/hsmp/hsmp.h +++ b/drivers/platform/x86/amd/hsmp/hsmp.h @@ -26,6 +26,8 @@ #define HSMP_CDEV_NAME "hsmp_cdev" #define HSMP_DEVNODE_NAME "hsmp" +#define DRIVER_VERSION "2.4" + struct hsmp_mbaddr_info { u32 base_addr; u32 msg_id_off; diff --git a/drivers/platform/x86/amd/hsmp/plat.c b/drivers/platform/x86/amd/hsmp/plat.c index 02ca85762b68..63034408985c 100644 --- a/drivers/platform/x86/amd/hsmp/plat.c +++ b/drivers/platform/x86/amd/hsmp/plat.c @@ -21,7 +21,6 @@ #include "hsmp.h" #define DRIVER_NAME "amd_hsmp" -#define DRIVER_VERSION "2.3" /* * To access specific HSMP mailbox register, s/w writes the SMN address of HSMP mailbox From patchwork Tue Mar 25 06:04:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Suma Hegde X-Patchwork-Id: 14028099 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2058.outbound.protection.outlook.com [40.107.95.58]) (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 79679251790 for ; Tue, 25 Mar 2025 06:05:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.95.58 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742882730; cv=fail; b=ahTDZhm4aPLHDEI3V07oOzFq9292SlEauLQoWKJeqCtBcTDQ9fuMlZn2ZnyO5ykLrkAn7S+x35B25uAJZdCZmlbcDMOEPFYsK7OBYHBOxMA+AZ2V+KKhkUbH10JKnyJ/LI6VFRVoYAjemCoBvvilgpnKEa1hAnfZp9/On6awszo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742882730; c=relaxed/simple; bh=bg4ukpYN9X8Tvrw1P0319FzvNQ4WHMyZOXjA5Oo8wNk=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=N5LR87ROHHxjzQAFnCVyBktpa1bAfAVm0j1ipfzQFNK7Rqhsvl4MwD5XYxnCiW5HFuGbPLsqU4QIDDpySUpi9KcRHZg6ThOXXxv6xb7o5FsY4KcBMUT2MmjOQ1KVEbs1m97cQWaxBOGq4RUbele+O5pRHFzCWogu4oqff2gqOWA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=37fO0DL1; arc=fail smtp.client-ip=40.107.95.58 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="37fO0DL1" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oKgVoiCrUalhCGi+KXHR0ex3RAO7TvHdtfSV3Sq7dif2AG2ZJLTDNBDZBOrRLJKdfvtLZU/RvuBCdrfcLujhetc99a2xBq1MBeMrlzhwmanwaVN4xSyWjBB0JFu/pCVgYCYNoelgdwWoeYbkGRLvAB+xGdB5rZi+RZ8qB0dqJeITkkB/GDuudtqXJ2RprSg9NO/qnWzMDHqBMICrjZ9bmAUY6kaqrkjw0AjRNVQkr5R4MgfVDrVNLmXu87W3NqN90Zy+FebfLQKoTe9sdzi7iia3a5KNbmEG+z7GPk+sa7u/3/etAcC5rqUmqYsp1UdCo5EjQMu6TFmUYFXLrkeUjA== 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=kjadRKaRQyZgs6wON2dAEAyHwfuavjCTuMWZKzsRXTI=; b=fhq9Mee065DIg2YhyblC5hCWey1FHycSSzaZkpx6qwMXPn3hb34tHKNhZdJYSBDwfopIKadbqptf0lMAYkGcCm0gj8eLQzIT5wshUZY/YoDrMtlByLHfUCTYSNAmRtAn1Wip1MOU7ixaKZHFEHGVL0IUk5mwEmnCv/gftavtcWpZDQJyRxu7U8jubc5f4lmyagqVKgSjvPIKY424akd/nmXhGlhQ15ka0fUs7XEkuwY+mc7Bu3vzr5st7rp2elC7A/WyLkj+AUYNnDhFYDkxDecEEXqoE7qzFWWYa92yOiV63XHpi/29jNtzvklulfdB3ic0KS4+WK0q/WRWuZ5fxw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kjadRKaRQyZgs6wON2dAEAyHwfuavjCTuMWZKzsRXTI=; b=37fO0DL1ByLrTo3m0Vj/O2BqRSJY8h5PRHd66bQZgsURH4wzy/E2NObs7rlZGlPnXmpAl3DbRRqvuYBmAHmwIJEpLAKmqPKiJBFaamv8n2ADxy041+say/WTprlYg9wYv+DgW5SEUJTeeytSVxjpqFUHUPKHnlsmginBH/Oe+lA= Received: from MN2PR17CA0012.namprd17.prod.outlook.com (2603:10b6:208:15e::25) by DS0PR12MB7948.namprd12.prod.outlook.com (2603:10b6:8:152::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.42; Tue, 25 Mar 2025 06:05:24 +0000 Received: from BL6PEPF00022571.namprd02.prod.outlook.com (2603:10b6:208:15e:cafe::88) by MN2PR17CA0012.outlook.office365.com (2603:10b6:208:15e::25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8511.26 via Frontend Transport; Tue, 25 Mar 2025 06:05:23 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BL6PEPF00022571.mail.protection.outlook.com (10.167.249.39) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8534.20 via Frontend Transport; Tue, 25 Mar 2025 06:05:23 +0000 Received: from amd.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 25 Mar 2025 01:05:20 -0500 From: Suma Hegde To: CC: , , Suma Hegde , Naveen Krishna Chatradhi Subject: [v2 2/3] platform/x86/amd/hsmp: Report power using hwmon sensors Date: Tue, 25 Mar 2025 06:04:56 +0000 Message-ID: <20250325060457.3643613-2-suma.hegde@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250325060457.3643613-1-suma.hegde@amd.com> References: <20250325060457.3643613-1-suma.hegde@amd.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF00022571:EE_|DS0PR12MB7948:EE_ X-MS-Office365-Filtering-Correlation-Id: 5ae0d79b-6e14-4215-efad-08dd6b63081e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: YuqsQGIrnvQ7JZGqrOrt+28n9ziqt47tRdTl32kT3jwY941GOJlORJiwjytmwM7z+yQ9ItXuXlIfNcIegZS6l1KxNGzoHK4v2/B5UU8xSG2MwfMB4rL1WUyHsqUU4voxRyMyIqcCOO8qJC5cBBEd++YAktIZBycmbq94kOkzBbCkkvxVv67gpq7XRDW44Xf0x9qmDhlB+XR4S01mrTznt5QlPW9rVH4px565nWh0Wr4fGEWt6niWgWNnFIiZ2yI1jR87Z+1V5PQPdW9Mo4Mc5gYJifitA1LzBXrnwHoiF+rQnZAv9E1e3GUL9VkvJ825QmkrO5gLYvhvyAifdqo2KkrU2+InSyJpRpEtV5Z/n57bgJ0x1v8z4rZqkXCAnUtKsNf27LBQycKZ9cpRDefvE2EXApLFMu6Ei792YcEKipUtHHKTRl4auQBljcJqiU+w1BCpXiNhHbbbjRYHOKIndORo+o0EGzj1zbDp2a4DM+Q8nP1X1pkvYLdQ1GCwZiraA1u33IR53iswhdvl7kzGDCl3EFszOQtpaPahG1pzLdtLqVVlSEjN5uHfev9381TF5PU6oCeGmQgor0zSfllfe/VHoyYyu+HEVaktJinyOtW45Ti5kY/dbF6ja4xbtXd+OfnVHlO2nEo/TE4cu0TN4JAJEnkOWkX0Luusp0jJkiRlrIhSh2doNRUSzlfbf1fRE7EIMEAKITXYJ8wJUPVguJJGNB6MHiTzWS61GeHHD9YvdxYUQcTxcNevL0arqmB0wOf7QXrUI/p9KwadUYiKLwcE+xnFOle8KL0Fuuu0mN2hNrVTIzZeJrHvXLQ74uN5Pc2mL4HdthtfXq5OhKn6QAvoZ3Bq8E6+OMQraJToO2Al6lYE8/6dIngbxpqPWn1OXh4uz+5lza2wOJPqb6JK+3Ij0LTrBH6Swl7Jh48OWADmipbwzIzukA4gKeNhH3qEGlik+nm2TJsdzee2cActmUvrY2AHBdbstwBdnID+2sq/4ImC+GqoNrrle6tOwNpLSiOIy93YSVWoV1/essY/0sBvncsOYbaV8uwgJKi6a9VuBINxiWh1M4UxHgV1YVeMEUySO4sTbJ4lct15nXIPp5cgijXjdQ1erTQMkXtpWpr3Wb9o4g6bM5Ir22Jow92hRY1VCH5X6MbOInc5KOnkswMTPYeoBegB4vjZ1ypl3B6ra5W3oSlBGghNSWe3g2Lyfc9Zg3UHfmt+86fARQ0WsRQfwdXltKZRqGDKMSEE68ida6FUsiTnIBXF9XeAwmTtMRLaKSFz9X9K1ECy7Ok1wXw6afSaHKQcnsFT/WgScjNAhH99QG4D1DczTCw2cirtMUILhICHbAn8aIQi9saynjcH2a9HQzGcqk6UJaYtcZXrSNbQSdFtVsP7zMbsIBHVhlgLmhoEdJ+WUVLbjCIQb46suWB6BsguzrRRL5lLzEyWs/lKRbQOzGbid/eQq9sPthw0kl7ybM+3H4nXAQHdL/J+PJf+Taa4NxlrW6LcAm0= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Mar 2025 06:05:23.8189 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5ae0d79b-6e14-4215-efad-08dd6b63081e X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF00022571.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB7948 Expose power reading and power limits via hwmon power sensors. Signed-off-by: Suma Hegde Reviewed-by: Naveen Krishna Chatradhi --- Changes since v1: 1. Move hsmp_create_sensor() call to init_acpi() in acpi.c and init_platform_device() in plat.c 2. Pass u16 as parameter instead of void * in hsmp_create_sensor() 3. Change dev_err() print after hsmp_create_sensor() 4. Add CONFIG_HWMON dependency in Makefile 5. Add #if IS_REACHABLE(CONFIG_HWMON) condition check in hsmp.h 6. Remove hsmp_hwmon struct in hsmp.h and add hwmon_channel_info and hwmon_chip_info to hwmon.c file as static variables 7. Change argument to devm_hwmon_device_register_with_info() 8. Remove hsmp_create_power_sensor() and define power info statically. Instead of multiple channel, use single channel with different attributes. 9. Replace switch with if in hsmp_hwmon_is_visble() 10. Remove referencing channel related code in hsmp_hwmon_read() and add code for attribute checking. 11. Replace switch with if in hsmp_hwmon_read() 12. Remove hsmp_hwmon_read_label(). 13. Update hsmp_hwmon_write() to remove switch and code related to channel 14. Remove int-ll64.h header 15. Update the documentation Documentation/arch/x86/amd_hsmp.rst | 10 ++ drivers/platform/x86/amd/hsmp/Makefile | 1 + drivers/platform/x86/amd/hsmp/acpi.c | 4 + drivers/platform/x86/amd/hsmp/hsmp.h | 11 ++- drivers/platform/x86/amd/hsmp/hwmon.c | 124 +++++++++++++++++++++++++ drivers/platform/x86/amd/hsmp/plat.c | 5 + 6 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 drivers/platform/x86/amd/hsmp/hwmon.c diff --git a/Documentation/arch/x86/amd_hsmp.rst b/Documentation/arch/x86/amd_hsmp.rst index 2fd917638e42..1d7b159a35d5 100644 --- a/Documentation/arch/x86/amd_hsmp.rst +++ b/Documentation/arch/x86/amd_hsmp.rst @@ -117,6 +117,16 @@ for socket with ID00 is given below:: } +HSMP HWMON interface +================== +HSMP power sensors are registered with hwmon interface. + +One hwmon directory is created for each socket and following files with 0444 permission are created +inside the hwmon directory. +- power1_input +- power1_cap_max +- power1_cap + An example ========== diff --git a/drivers/platform/x86/amd/hsmp/Makefile b/drivers/platform/x86/amd/hsmp/Makefile index 0759bbcd13f6..ce8342e71f50 100644 --- a/drivers/platform/x86/amd/hsmp/Makefile +++ b/drivers/platform/x86/amd/hsmp/Makefile @@ -6,6 +6,7 @@ obj-$(CONFIG_AMD_HSMP) += hsmp_common.o hsmp_common-y := hsmp.o +hsmp_common-$(CONFIG_HWMON) += hwmon.o obj-$(CONFIG_AMD_HSMP_PLAT) += amd_hsmp.o amd_hsmp-y := plat.o obj-$(CONFIG_AMD_HSMP_ACPI) += hsmp_acpi.o diff --git a/drivers/platform/x86/amd/hsmp/acpi.c b/drivers/platform/x86/amd/hsmp/acpi.c index 0c54c91b5f1a..abbb680b9c71 100644 --- a/drivers/platform/x86/amd/hsmp/acpi.c +++ b/drivers/platform/x86/amd/hsmp/acpi.c @@ -281,6 +281,10 @@ static int init_acpi(struct device *dev) dev_err(dev, "Failed to init metric table\n"); } + ret = hsmp_create_sensor(dev, sock_ind); + if (ret) + dev_err(dev, "Failed to register HSMP sensors with hwmon\n"); + return ret; } diff --git a/drivers/platform/x86/amd/hsmp/hsmp.h b/drivers/platform/x86/amd/hsmp/hsmp.h index 3dee0bb684c7..0063904904ed 100644 --- a/drivers/platform/x86/amd/hsmp/hsmp.h +++ b/drivers/platform/x86/amd/hsmp/hsmp.h @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -26,7 +27,7 @@ #define HSMP_CDEV_NAME "hsmp_cdev" #define HSMP_DEVNODE_NAME "hsmp" -#define DRIVER_VERSION "2.4" +#define DRIVER_VERSION "2.5" struct hsmp_mbaddr_info { u32 base_addr; @@ -65,4 +66,12 @@ int hsmp_misc_register(struct device *dev); int hsmp_get_tbl_dram_base(u16 sock_ind); ssize_t hsmp_metric_tbl_read(struct hsmp_socket *sock, char *buf, size_t size); struct hsmp_plat_device *get_hsmp_pdev(void); +#if IS_REACHABLE(CONFIG_HWMON) +int hsmp_create_sensor(struct device *dev, u16 sock_ind); +#else +int hsmp_create_sensor(struct device *dev, u16 sock_ind); +{ + return 0; +} +#endif #endif /* HSMP_H */ diff --git a/drivers/platform/x86/amd/hsmp/hwmon.c b/drivers/platform/x86/amd/hsmp/hwmon.c new file mode 100644 index 000000000000..98b1d66f491d --- /dev/null +++ b/drivers/platform/x86/amd/hsmp/hwmon.c @@ -0,0 +1,124 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * AMD HSMP hwmon support + * Copyright (c) 2025, AMD. + * All Rights Reserved. + * + * This file provides hwmon implementation for HSMP interface. + */ + +#include + +#include +#include + +#include "hsmp.h" + +#define HSMP_HWMON_NAME "amd_hsmp_hwmon" + +static int hsmp_hwmon_write(struct device *dev, enum hwmon_sensor_types type, + u32 attr, int channel, long val) +{ + u16 sock_ind = (uintptr_t)dev_get_drvdata(dev); + + struct hsmp_message msg = { 0 }; + + if (type != hwmon_power) + return -EOPNOTSUPP; + + if (attr != hwmon_power_cap) + return -EOPNOTSUPP; + + msg.num_args = 1; + msg.args[0] = val; + msg.msg_id = HSMP_SET_SOCKET_POWER_LIMIT; + msg.sock_ind = sock_ind; + return hsmp_send_message(&msg); +} + +static int hsmp_hwmon_read(struct device *dev, + enum hwmon_sensor_types type, + u32 attr, int channel, long *val) +{ + u16 sock_ind = (uintptr_t)dev_get_drvdata(dev); + struct hsmp_message msg = { 0 }; + int ret; + + if (type != hwmon_power) + return -EOPNOTSUPP; + + msg.sock_ind = sock_ind; + msg.response_sz = 1; + + switch (attr) { + case hwmon_power_input: + msg.msg_id = HSMP_GET_SOCKET_POWER; + break; + case hwmon_power_cap: + msg.msg_id = HSMP_GET_SOCKET_POWER_LIMIT; + break; + case hwmon_power_cap_max: + msg.msg_id = HSMP_GET_SOCKET_POWER_LIMIT_MAX; + break; + default: + return -EOPNOTSUPP; + } + + ret = hsmp_send_message(&msg); + if (!ret) + *val = msg.args[0]; + + return ret; +} + +static umode_t hsmp_hwmon_is_visble(const void *data, + enum hwmon_sensor_types type, + u32 attr, int channel) +{ + if (type != hwmon_power) + return 0; + + switch (attr) { + case hwmon_power_input: + return 0444; + case hwmon_power_cap: + return 0644; + case hwmon_power_cap_max: + return 0444; + default: + return 0; + } + + return 0; +} + +static const struct hwmon_ops hsmp_hwmon_ops = { + .read = hsmp_hwmon_read, + .is_visible = hsmp_hwmon_is_visble, + .write = hsmp_hwmon_write, +}; + +static const struct hwmon_channel_info * const hsmp_info[] = { + HWMON_CHANNEL_INFO(power, HWMON_P_INPUT | HWMON_P_CAP | HWMON_P_CAP_MAX), + NULL +}; + +static const struct hwmon_chip_info hsmp_chip_info = { + .ops = &hsmp_hwmon_ops, + .info = hsmp_info +}; + +int hsmp_create_sensor(struct device *dev, u16 sock_ind) +{ + struct device *hwmon_dev; + + hwmon_dev = devm_hwmon_device_register_with_info(dev, HSMP_HWMON_NAME, + (void *)(uintptr_t)(sock_ind), + &hsmp_chip_info, + NULL); + if (IS_ERR(hwmon_dev)) + return PTR_ERR(hwmon_dev); + + return 0; +} +EXPORT_SYMBOL_NS(hsmp_create_sensor, "AMD_HSMP"); diff --git a/drivers/platform/x86/amd/hsmp/plat.c b/drivers/platform/x86/amd/hsmp/plat.c index 63034408985c..63a5d31341e1 100644 --- a/drivers/platform/x86/amd/hsmp/plat.c +++ b/drivers/platform/x86/amd/hsmp/plat.c @@ -200,6 +200,11 @@ static int init_platform_device(struct device *dev) if (ret) dev_err(dev, "Failed to init metric table\n"); } + + /* Register with hwmon interface for reporting power */ + ret = hsmp_create_sensor(dev, i); + if (ret) + dev_err(dev, "Failed to register HSMP sensors with hwmon\n"); } return 0; From patchwork Tue Mar 25 06:04:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Suma Hegde X-Patchwork-Id: 14028100 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam04on2043.outbound.protection.outlook.com [40.107.100.43]) (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 3973618B46C for ; Tue, 25 Mar 2025 06:05:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.100.43 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742882733; cv=fail; b=ip1ASuc4eBJepx8xaPxk4eC0xjYw016wfTNAvjE03hsOzb1GaCmN4YZ9EFDzrtyz4Q052MQcRvw0yE4IdXyFM8MyrGwm/oNxHN29RcJEvUV7vYQlv/TchfRDzDzKVE9HwQYQ/XRQJDEWsm9ZYeB1O/bpiC5Tx8bh8Q8xlP/XFz4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742882733; c=relaxed/simple; bh=5gFLxVOj0wDUA5MQ1bmbqgTHdlADA0SYJ4WRHjyANtQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=VwH6C4Ri5YdMfo28HFh4pbsIy/NxJA9ii6NYrtU9GUdIZxobdunSUsYaagOqrMeSfY+Qr3k08C0TTa+budys7m7jSFXCLmGS45hFbO9PMq0H6BBaLPP4szfgBvZriOJAMZZf+byDe0HP0DuvJKPiZXcTVdBMLRAVCbosa4UY3mE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=0fijY2rN; arc=fail smtp.client-ip=40.107.100.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="0fijY2rN" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=drouSvfHzwLJPvLr/Yk5eWW3JqJAvxCk4a7Qbo/H2Hojn/8Hdv+dapl/w0zF3+/a57Czdnlc8WXUQFVYms3lvQo4c9sVzZctRmKNaFNyoDkl3cfW7XXhVO6Jm52xFedpzaUvt7PT8jQe28VozBaudgZ0Xu9CGaRhIztV42dg1YZu67X2+7bplFQwqpabwT5cX169a2Lrp3JuKcexH63WU5tvPnADO4dAnH/ZUtk7in3s4G0NLyPP836bCxq6gD82J4khReQv3suKPXOWJut0kEoz4u7Ap2rLVXj1l83LS21+Vlh/Yc+OoHjcn18kmzxmTDJ3OcRRr5ScGZzUEaS9zg== 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=fliewW0opu2JjA5JWJcnUM0hCDCez8qmk2e45SRJEGM=; b=ZrPN6OEMZO+apdbtdVy8T893rPh+2+8jB84WdpobbjnUnCA8+Cw+h9SRGSHfLfky8NT3HVsLlO9zbZK6HYAjLtvwEyrSJRiNTMXEtxJr0gARRbCUgeD4vLz8YQt12Jn+//XcJnerqhQ5GB3xXvypTKhVsNGrfurUIa43sw18SH+9tfQNpFKuz4X5t/h5KqYjLL87hFR4svnfN2Ywyw8ysD4FeLuJH2K8MG/OQU2QGy2cXzRPLW6pP84wrlP8pzH4J3wKihNAS8bVyNcXvuDknW7/y6C/pbKmUt+q70jdnf/8y9/1KaXbMqfF1/UMQhvhR//zcm8kV8Bpf7Vbzvdpbw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fliewW0opu2JjA5JWJcnUM0hCDCez8qmk2e45SRJEGM=; b=0fijY2rNWRLEK6vB7ZXACFJGtPvEH9OlcgTaVBRIvbxq33gXWb4hcqERSRkmiVJzj/BZm4vWUK1felulBvYD7aXh47RiGk6APNNpIJe/l8ZSCGPdDd6DYBaeFEBh9BXyDT3CQ/RSq0QdTkJc2g57XD/ccnrK8gQaoqufi1aSVnU= Received: from MN2PR17CA0033.namprd17.prod.outlook.com (2603:10b6:208:15e::46) by MN0PR12MB5929.namprd12.prod.outlook.com (2603:10b6:208:37c::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.42; Tue, 25 Mar 2025 06:05:25 +0000 Received: from BL6PEPF00022571.namprd02.prod.outlook.com (2603:10b6:208:15e:cafe::e) by MN2PR17CA0033.outlook.office365.com (2603:10b6:208:15e::46) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8511.27 via Frontend Transport; Tue, 25 Mar 2025 06:05:25 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BL6PEPF00022571.mail.protection.outlook.com (10.167.249.39) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8534.20 via Frontend Transport; Tue, 25 Mar 2025 06:05:25 +0000 Received: from amd.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 25 Mar 2025 01:05:22 -0500 From: Suma Hegde To: CC: , , Suma Hegde , Naveen Krishna Chatradhi Subject: [v2 3/3] platform/x86/amd/hsmp: acpi: Add sysfs files to show HSMP telemetry Date: Tue, 25 Mar 2025 06:04:57 +0000 Message-ID: <20250325060457.3643613-3-suma.hegde@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250325060457.3643613-1-suma.hegde@amd.com> References: <20250325060457.3643613-1-suma.hegde@amd.com> Precedence: bulk X-Mailing-List: platform-driver-x86@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF00022571:EE_|MN0PR12MB5929:EE_ X-MS-Office365-Filtering-Correlation-Id: 2c77136c-5083-459c-9306-08dd6b630946 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|36860700013|1800799024|376014; X-Microsoft-Antispam-Message-Info: xm/sl04+gJr4Ky8LV9P+0f6KIUFUHQ/n/qbvyMCJRt3Ba0hVmYq5wW12Dz9jLwn0OaOwb148G44zbft1k414a6GWleS08Yr8G5msYl/SxUpvd89piEfosEQ+XNZlEkDsSvvjzmzTuOMQE/850KbLl/YQ9Omjk3IiB5gdoV+TBpYoO+MHnQJQHmtq9tlfiP0s2xVIZp7OOn/30iC5dVHOJNluZBu1f3xQSvQdb9YQb7+Z9VRuM6+jPe+83FlqR/DRnYnPRbjNqwHhGky0sQXQSInJSk5ErbQXeZ5NpdxzCmvAWLvqNcePBMITh9PwsFeOzpJqgNYmC+JW52lZhM5wxPf4j0EwKLgyeW6RUk7Z31s4wOOTKWQUycnbnvkxq7j3S+X7vzgyDzhO/Ajwn47JCJZbsn+zKAA+bDW3Ulzh0rDA7/xPl0t2Ly7IKZofwLXj5gB6VZpJLJJmVT/aaD5K2NhP8t3Drv2lF7X5Q+q8tjzeYxp4o0sOVe+uU1BpYl0O7n0H90/uB3+0X6yHz9br/MZgEjLSP0V4W1zb+FNjtVPl/Si32mCcvWOCkzqUSGDmiOZyVAO9cmE/5fYx4FYXarIA2xQoKtED6GuBdY5Q49Xg7ZJQrhmbcY4UIXAp6WWpMr4wSIkh3NehMmowIjJJO1Xhb8hNHH+/dYk/g8KigaQ3uV4QO2F1+PwPvOPkq1yhxwz+IAvcNcAkWZHrWWS9w7sMSn2lGmA4HPEP/fevb17tRSmG9PXQ8FYmK8HDxH79UO4vUnlqPfOXB755ZgY0VFRr3WOXHK9GIuR7O/6qiJMJEwFY/9M2ZxnpamTTVl4GjPczyYzJJWcjK5AYaU5BTX+3vUyMHRMVKVnFF8/rQMSNT3LhPcxNq5pYRtJAaUEvxueERdEpFZQj9RPMYRsdmKa1IxfiBEC58oOYOImFkpygiIBV+mPtjHXe64hRgAYCXOukGPj546IYQ2kxYeuj83EkDQfseCEZQN1WMu5+VjxZR2vU93L00cgoNOkrYdGz9Mlc4QUK2OXqCMcbql1Uvxy54MO2DES1Hmw4VA8kAC8QgoEdpVwxM0h/AA2hVOTqx4pllHAizDzx+6vruLQ51M5QwZGitGJp0nLTutUNAyCLIkMzer3ksQrBSNslEqX9v5Dl7jwe3da29zvG/O0sMNPc+JaB5vZCl6gUqGg4hOLDDuRxWunYaWJimPaHiIigNn6EzGYgfY+ZIwfTDCQ4BoifcvcesfY8V4LDZbL32kYFXE6RLG29fc5BsHH1r8x3TKzXuGGpb6QWjB4Z7wDqpaxBIjssx7G2XCF5/Kf6H8RJHSD0PaP7Sld581+SmsZTTna+jaYpETAa74QEe9ZN83y+NpDWYtXBHaMyxxCXxjIkBMTARFhjJYXcLy8d7m0/WxnScEdr84P53HnPSzwftSAKfieFeVvTWIJ/m1zHi6CgQgkUKUO2hPHioZzQ9sbfNs37XT19l7JgQpT5XVlRzYYXHaYCRaAn5oBTc87wTx4= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(36860700013)(1800799024)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Mar 2025 06:05:25.7720 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2c77136c-5083-459c-9306-08dd6b630946 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF00022571.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB5929 Make frequently fetched telemetry available via sysfs interface. Create following sysfs files per acpi device node. * c0_residency_input * prochot_status * smu_fw_version * protocol_version * ddr_max_bw(GB/s) * ddr_utilised_bw_input(GB/s) * ddr_utilised_bw_perc_input(%) * mclk_input(MHz) * fclk_input(MHz) * clk_fmax(MHz) * clk_fmin(MHz) * cclk_freq_limit_input(MHz) * pwr_current_active_freq_limit(MHz) * pwr_current_active_freq_limit_source Signed-off-by: Suma Hegde Reviewed-by: Naveen Krishna Chatradhi --- Changes since v1: 1. Add linux/bitops.h 2. Define DDR_MAX_BW, DDR_UTIL_BW DDR_UTIL_BW_PERC FW_VER_MAJOR FW_VER_MINOR FW_VER_DEBUG FMAX FMIN FREQ_LIMIT FREQ_SRC_IND and use them in functions. 3. Return early in hsmp_msg_get_nargs() 4. Change while loop to for loop in hsmp_freq_limit_source_show() 5. Correct the GENMASK size in hsmp_ddr_util_bw_show()[bit 19:8, instead of bit 20:8] Documentation/arch/x86/amd_hsmp.rst | 31 +++- drivers/platform/x86/amd/hsmp/acpi.c | 259 +++++++++++++++++++++++++++ drivers/platform/x86/amd/hsmp/hsmp.c | 21 +++ drivers/platform/x86/amd/hsmp/hsmp.h | 1 + 4 files changed, 305 insertions(+), 7 deletions(-) diff --git a/Documentation/arch/x86/amd_hsmp.rst b/Documentation/arch/x86/amd_hsmp.rst index 1d7b159a35d5..45a209fd5861 100644 --- a/Documentation/arch/x86/amd_hsmp.rst +++ b/Documentation/arch/x86/amd_hsmp.rst @@ -71,6 +71,25 @@ Note: lseek() is not supported as entire metrics table is read. Metrics table definitions will be documented as part of Public PPR. The same is defined in the amd_hsmp.h header. +2. HSMP telemetry sysfs files + +Following sysfs file are available at /sys/devices/platform/AMDI0097:0X/. + +* c0_residency_input : percentage of cores in C0 state +* prochot_status : reports 1 if socket is in prochot, 0 otherwhile +* smu_fw_version : SMU firmware version +* protocol_version : HSMP interface version +* ddr_max_bw : theoretical maximum ddr bw in GB/s +* ddr_utilised_bw_input: current utilized ddr bw in GB/s +* ddr_utilised_bw_perc_input(%): Percentage of current utilized ddr bw +* mclk_input : memory clock in MHz +* fclk_input: fabric clock in MHz +* clk_fmax : max frequency of socket in MHz +* clk_fmin : min frequency of socket in MHz +* cclk_freq_limit_input : core clock frequency limit per socket in MHz +* pwr_current_active_freq_limit: current active frequency limit of socket in MHz +* pwr_current_active_freq_limit_source: source of current active frequency limit + ACPI device object format ========================= The ACPI object format expected from the amd_hsmp driver @@ -119,13 +138,11 @@ for socket with ID00 is given below:: HSMP HWMON interface ================== -HSMP power sensors are registered with hwmon interface. - -One hwmon directory is created for each socket and following files with 0444 permission are created -inside the hwmon directory. -- power1_input -- power1_cap_max -- power1_cap +HSMP power sensors are registered with hwmon interface. One hwmon directory is created for each +socket and following files are created inside the hwmon directory. +- power1_input(read only) +- power1_cap_max(read only) +- power1_cap(read, write) An example ========== diff --git a/drivers/platform/x86/amd/hsmp/acpi.c b/drivers/platform/x86/amd/hsmp/acpi.c index abbb680b9c71..803da111a034 100644 --- a/drivers/platform/x86/amd/hsmp/acpi.c +++ b/drivers/platform/x86/amd/hsmp/acpi.c @@ -13,6 +13,7 @@ #include #include +#include #include #include #include @@ -36,6 +37,11 @@ static struct hsmp_plat_device *hsmp_pdev; +struct hsmp_sys_attr { + struct device_attribute dattr; + u32 msg_id; +}; + static int amd_hsmp_acpi_rdwr(struct hsmp_socket *sock, u32 offset, u32 *value, bool write) { @@ -243,6 +249,214 @@ static umode_t hsmp_is_sock_attr_visible(struct kobject *kobj, return 0; } +static umode_t hsmp_is_sock_dev_attr_visible(struct kobject *kobj, + struct attribute *attr, int id) +{ + return attr->mode; +} + +#define to_hsmp_sys_attr(__attr) container_of(__attr, struct hsmp_sys_attr, dattr) + +static ssize_t hsmp_msg_resp32_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct hsmp_sys_attr *hattr = to_hsmp_sys_attr(attr); + struct hsmp_socket *sock = dev_get_drvdata(dev); + u32 data; + int ret; + + ret = hsmp_msg_get_nargs(sock->sock_ind, hattr->msg_id, &data, 1); + if (!ret) + return sysfs_emit(buf, "%u\n", data); + + return ret; +} + +#define DDR_MAX_BW(data) FIELD_GET(GENMASK(31, 20), data) +#define DDR_UTIL_BW(data) FIELD_GET(GENMASK(19, 8), data) +#define DDR_UTIL_BW_PERC(data) FIELD_GET(GENMASK(7, 0), data) +#define FW_VER_MAJOR(data) FIELD_GET(GENMASK(23, 16), data) +#define FW_VER_MINOR(data) FIELD_GET(GENMASK(15, 8), data) +#define FW_VER_DEBUG(data) FIELD_GET(GENMASK(7, 0), data) +#define FMAX(data) FIELD_GET(GENMASK(31, 16), data) +#define FMIN(data) FIELD_GET(GENMASK(15, 0), data) +#define FREQ_LIMIT(data) FIELD_GET(GENMASK(31, 16), data) +#define FREQ_SRC_IND(data) FIELD_GET(GENMASK(15, 0), data) + +static ssize_t hsmp_ddr_max_bw_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct hsmp_sys_attr *hattr = to_hsmp_sys_attr(attr); + struct hsmp_socket *sock = dev_get_drvdata(dev); + u32 data; + int ret; + + ret = hsmp_msg_get_nargs(sock->sock_ind, hattr->msg_id, &data, 1); + if (!ret) + return sysfs_emit(buf, "%u\n", (u32)DDR_MAX_BW(data)); + + return ret; +} + +static ssize_t hsmp_ddr_util_bw_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct hsmp_sys_attr *hattr = to_hsmp_sys_attr(attr); + struct hsmp_socket *sock = dev_get_drvdata(dev); + u32 data; + int ret; + + ret = hsmp_msg_get_nargs(sock->sock_ind, hattr->msg_id, &data, 1); + if (!ret) + return sysfs_emit(buf, "%u\n", (u32)DDR_UTIL_BW(data)); + return ret; +} + +static ssize_t hsmp_ddr_util_bw_perc_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct hsmp_sys_attr *hattr = to_hsmp_sys_attr(attr); + struct hsmp_socket *sock = dev_get_drvdata(dev); + u32 data; + int ret; + + ret = hsmp_msg_get_nargs(sock->sock_ind, hattr->msg_id, &data, 1); + if (!ret) + return sysfs_emit(buf, "%u\n", (u32)DDR_UTIL_BW_PERC(data)); + + return ret; +} + +static ssize_t hsmp_msg_fw_ver_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct hsmp_sys_attr *hattr = to_hsmp_sys_attr(attr); + struct hsmp_socket *sock = dev_get_drvdata(dev); + u32 data; + int ret; + + ret = hsmp_msg_get_nargs(sock->sock_ind, hattr->msg_id, &data, 1); + if (!ret) + return sysfs_emit(buf, "%u.%u.%u\n", (u32)FW_VER_MAJOR(data), + (u32)FW_VER_MINOR(data), (u32)FW_VER_DEBUG(data)); + + return ret; +} + +static ssize_t hsmp_fclk_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct hsmp_sys_attr *hattr = to_hsmp_sys_attr(attr); + struct hsmp_socket *sock = dev_get_drvdata(dev); + u32 data[2]; + int ret; + + ret = hsmp_msg_get_nargs(sock->sock_ind, hattr->msg_id, data, 2); + if (!ret) + return sysfs_emit(buf, "%u\n", data[0]); + + return ret; +} + +static ssize_t hsmp_mclk_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct hsmp_sys_attr *hattr = to_hsmp_sys_attr(attr); + struct hsmp_socket *sock = dev_get_drvdata(dev); + u32 data[2]; + int ret; + + ret = hsmp_msg_get_nargs(sock->sock_ind, hattr->msg_id, data, 2); + if (!ret) + return sysfs_emit(buf, "%u\n", data[1]); + + return ret; +} + +static ssize_t hsmp_clk_fmax_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct hsmp_sys_attr *hattr = to_hsmp_sys_attr(attr); + struct hsmp_socket *sock = dev_get_drvdata(dev); + u32 data; + int ret; + + ret = hsmp_msg_get_nargs(sock->sock_ind, hattr->msg_id, &data, 1); + if (!ret) + return sysfs_emit(buf, "%u\n", (u32)FMAX(data)); + + return ret; +} + +static ssize_t hsmp_clk_fmin_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct hsmp_sys_attr *hattr = to_hsmp_sys_attr(attr); + struct hsmp_socket *sock = dev_get_drvdata(dev); + u32 data; + int ret; + + ret = hsmp_msg_get_nargs(sock->sock_ind, hattr->msg_id, &data, 1); + if (!ret) + return sysfs_emit(buf, "%u\n", (u32)FMIN(data)); + + return ret; +} + +static ssize_t hsmp_freq_limit_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct hsmp_sys_attr *hattr = to_hsmp_sys_attr(attr); + struct hsmp_socket *sock = dev_get_drvdata(dev); + u32 data; + int ret; + + ret = hsmp_msg_get_nargs(sock->sock_ind, hattr->msg_id, &data, 1); + if (!ret) + return sysfs_emit(buf, "%u\n", (u32)FREQ_LIMIT(data)); + + return ret; +} + +static const char * const freqlimit_srcnames[] = { + "cHTC-Active", + "PROCHOT", + "TDC limit", + "PPT Limit", + "OPN Max", + "Reliability Limit", + "APML Agent", + "HSMP Agent" +}; + +static ssize_t hsmp_freq_limit_source_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct hsmp_sys_attr *hattr = to_hsmp_sys_attr(attr); + struct hsmp_socket *sock = dev_get_drvdata(dev); + u32 index = 0; + int len = 0; + u16 src_ind; + u32 data; + int ret; + + ret = hsmp_msg_get_nargs(sock->sock_ind, hattr->msg_id, &data, 1); + if (!ret) { + src_ind = (u16)FREQ_SRC_IND(data); + for (index = 0; index < ARRAY_SIZE(freqlimit_srcnames); index++) { + if (src_ind == 0) + break; + if ((src_ind & 1) == 1) + len += sysfs_emit_at(buf, len, "%s ", freqlimit_srcnames[index]); + src_ind = src_ind >> 1; + } + len += sysfs_emit_at(buf, len, "\n"); + return len; + } + + return ret; +} + static int init_acpi(struct device *dev) { u16 sock_ind; @@ -285,6 +499,8 @@ static int init_acpi(struct device *dev) if (ret) dev_err(dev, "Failed to register HSMP sensors with hwmon\n"); + dev_set_drvdata(dev, &hsmp_pdev->sock[sock_ind]); + return ret; } @@ -299,9 +515,52 @@ static const struct bin_attribute *hsmp_attr_list[] = { NULL }; +#define HSMP_DEV_ATTR(_name, _msg_id, _show, _mode) \ +static struct hsmp_sys_attr hattr_##_name = { \ + .dattr = __ATTR(_name, _mode, _show, NULL), \ + .msg_id = _msg_id \ +} + +HSMP_DEV_ATTR(c0_residency_input, HSMP_GET_C0_PERCENT, hsmp_msg_resp32_show, 0444); +HSMP_DEV_ATTR(prochot_status, HSMP_GET_PROC_HOT, hsmp_msg_resp32_show, 0444); +HSMP_DEV_ATTR(smu_fw_version, HSMP_GET_SMU_VER, hsmp_msg_fw_ver_show, 0444); +HSMP_DEV_ATTR(protocol_version, HSMP_GET_PROTO_VER, hsmp_msg_resp32_show, 0444); +HSMP_DEV_ATTR(cclk_freq_limit_input, HSMP_GET_CCLK_THROTTLE_LIMIT, hsmp_msg_resp32_show, 0444); +HSMP_DEV_ATTR(ddr_max_bw, HSMP_GET_DDR_BANDWIDTH, hsmp_ddr_max_bw_show, 0444); +HSMP_DEV_ATTR(ddr_utilised_bw_input, HSMP_GET_DDR_BANDWIDTH, hsmp_ddr_util_bw_show, 0444); +HSMP_DEV_ATTR(ddr_utilised_bw_perc_input, HSMP_GET_DDR_BANDWIDTH, hsmp_ddr_util_bw_perc_show, 0444); +HSMP_DEV_ATTR(fclk_input, HSMP_GET_FCLK_MCLK, hsmp_fclk_show, 0444); +HSMP_DEV_ATTR(mclk_input, HSMP_GET_FCLK_MCLK, hsmp_mclk_show, 0444); +HSMP_DEV_ATTR(clk_fmax, HSMP_GET_SOCKET_FMAX_FMIN, hsmp_clk_fmax_show, 0444); +HSMP_DEV_ATTR(clk_fmin, HSMP_GET_SOCKET_FMAX_FMIN, hsmp_clk_fmin_show, 0444); +HSMP_DEV_ATTR(pwr_current_active_freq_limit, HSMP_GET_SOCKET_FREQ_LIMIT, + hsmp_freq_limit_show, 0444); +HSMP_DEV_ATTR(pwr_current_active_freq_limit_source, HSMP_GET_SOCKET_FREQ_LIMIT, + hsmp_freq_limit_source_show, 0444); + +static struct attribute *hsmp_dev_attr_list[] = { + &hattr_c0_residency_input.dattr.attr, + &hattr_prochot_status.dattr.attr, + &hattr_smu_fw_version.dattr.attr, + &hattr_protocol_version.dattr.attr, + &hattr_cclk_freq_limit_input.dattr.attr, + &hattr_ddr_max_bw.dattr.attr, + &hattr_ddr_utilised_bw_input.dattr.attr, + &hattr_ddr_utilised_bw_perc_input.dattr.attr, + &hattr_fclk_input.dattr.attr, + &hattr_mclk_input.dattr.attr, + &hattr_clk_fmax.dattr.attr, + &hattr_clk_fmin.dattr.attr, + &hattr_pwr_current_active_freq_limit.dattr.attr, + &hattr_pwr_current_active_freq_limit_source.dattr.attr, + NULL, +}; + static const struct attribute_group hsmp_attr_grp = { .bin_attrs_new = hsmp_attr_list, + .attrs = hsmp_dev_attr_list, .is_bin_visible = hsmp_is_sock_attr_visible, + .is_visible = hsmp_is_sock_dev_attr_visible, }; static const struct attribute_group *hsmp_groups[] = { diff --git a/drivers/platform/x86/amd/hsmp/hsmp.c b/drivers/platform/x86/amd/hsmp/hsmp.c index 8c05e1415820..65d37605bf88 100644 --- a/drivers/platform/x86/amd/hsmp/hsmp.c +++ b/drivers/platform/x86/amd/hsmp/hsmp.c @@ -229,6 +229,27 @@ int hsmp_send_message(struct hsmp_message *msg) } EXPORT_SYMBOL_NS_GPL(hsmp_send_message, "AMD_HSMP"); +int hsmp_msg_get_nargs(u16 sock_ind, u32 msg_id, u32 *data, u8 n) +{ + struct hsmp_message msg = { 0 }; + int ret; + int i; + + if (!data) + return -EINVAL; + msg.msg_id = msg_id; + msg.sock_ind = sock_ind; + msg.response_sz = n; + + ret = hsmp_send_message(&msg); + if (!ret) { + for (i = 0; i < n; i++) + data[i] = msg.args[i]; + } + return ret; +} +EXPORT_SYMBOL_NS_GPL(hsmp_msg_get_nargs, "AMD_HSMP"); + int hsmp_test(u16 sock_ind, u32 value) { struct hsmp_message msg = { 0 }; diff --git a/drivers/platform/x86/amd/hsmp/hsmp.h b/drivers/platform/x86/amd/hsmp/hsmp.h index 0063904904ed..febc1672bd65 100644 --- a/drivers/platform/x86/amd/hsmp/hsmp.h +++ b/drivers/platform/x86/amd/hsmp/hsmp.h @@ -74,4 +74,5 @@ int hsmp_create_sensor(struct device *dev, u16 sock_ind); return 0; } #endif +int hsmp_msg_get_nargs(u16 sock_ind, u32 msg_id, u32 *data, u8 n); #endif /* HSMP_H */