From nobody Sun Feb 8 15:07:21 2026 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010066.outbound.protection.outlook.com [52.101.201.66]) (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 A030931B800; Thu, 11 Dec 2025 17:58:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.66 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765475924; cv=fail; b=WeeSj1Aj+nLnvgPK/w3ByEXr1imnX8G0JQweY4ZZnR6vnPhmpfU3iyx9+nmQu6hqTJ3+4udmixuOpZkAzigeR5AczF0v6ksw5eIl488brKjU0fsFPqcf7uTPJa1Bl+SlkmNvY9E8P/DgkSUqPAIo/uO5VpiinKav8Rzr6qNBt5Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765475924; c=relaxed/simple; bh=IN/BSGg/xKw5FkTdifs9JgD4v2RX05s6k+rLhoOsAWY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=fMuGOg/NeReYbo+JF6WkuMZB2WCOzyAlZoXfBE6kKs7h7AKHCeIODg98jkbMryrrqx4Q+CtsOWuvg/0khxSO4RS3pnTRNeBLhhXHm5s44ZMjFwJ1ksuUl4hhF6uLlclK61Ai3kGddGpA/b1xm5jDulPkTIIrwexXrFwyDUEZE8U= 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=5insI7BS; arc=fail smtp.client-ip=52.101.201.66 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="5insI7BS" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=I5nb0ydHBLPqqpUCs1sQLiXXVi9SyBiOpF9lZzA3KQ9Z4RE9Mghe5JRAm8yPuK2Poyp3ZBBxCKt/YFuFPdJPPGjFGfI1MheHew3OVDjy9S6qbRkNnZiATzsGWDsTJkR7pNBBb0hSVoGW7enDJ1PeIPBa8zErjdE293LJ2+NwSxOjvcM0RfSWQ8sJ1kTNZDohwOVS+zZlAPup+61c7XMCPgMlGB9m7WOfvNNFuVEEhIdU5JzoeBBmU8YFqKzST75bVsZEiXX1Rrjm6yHCvw6sMOtiFIQEbpUi6bQXukvGr4mff5dDHVwEnTh6q+o3qsYDTT5CKAJZRqXlkFOReO+EDw== 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=nA3w352/1hZpfaTUrFo0xBplOOUVgnk5p220tX7LKFY=; b=oR75Nn3hkCLQrkvnFd0HUQhZZyFNElhE7wcR/3/oaEWIWiOEjL/K88Dc8ttaNquVaBwJkOowriNaEoB3ahzU1EJyVWZRXiICyIni67u7HdjcHeUGlIc70R3n9rou14Nh27yUcTp3RZvINiOHQeNGouvuWgXn/y8W/O3c3INjm2a3ek31nArkKLoMZWg4Cy9HfXcvYIIRlTLcu+HE1UsPzzZs5BFaTfbOlA0me2RTnlHUZq3Gm5N2iYtCZB+9/kk/UeVV2sCEe41seQMJrmnp6k9DQdUYGBPh0MfLbMJB3YihMQxLruqpcj1QFQq65BRjalYxMZiNBIU8IOWl7NH8Cg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linux.intel.com 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=nA3w352/1hZpfaTUrFo0xBplOOUVgnk5p220tX7LKFY=; b=5insI7BSTyX/0bOL7LBBNb3qzmkLr2Qsco+7Xu7UCUZxzX1INS642y7YhbDH4uAwodcOwVd07t54nRLDj1grWyUymH2EtfQoCApwwCrnAabnUQwqOA3YuxfsmKP0Nz7bHhcI/b7xQ2dDFgCNGtCpABAS460XCgTI1uv5v9tbifI= Received: from BLAPR03CA0136.namprd03.prod.outlook.com (2603:10b6:208:32e::21) by MN0PR12MB6223.namprd12.prod.outlook.com (2603:10b6:208:3c1::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Thu, 11 Dec 2025 17:58:36 +0000 Received: from BL02EPF0002992E.namprd02.prod.outlook.com (2603:10b6:208:32e:cafe::46) by BLAPR03CA0136.outlook.office365.com (2603:10b6:208:32e::21) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9388.16 via Frontend Transport; Thu, 11 Dec 2025 17:58:28 +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=satlexmb07.amd.com; pr=C Received: from satlexmb07.amd.com (165.204.84.17) by BL02EPF0002992E.mail.protection.outlook.com (10.167.249.59) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.4 via Frontend Transport; Thu, 11 Dec 2025 17:58:36 +0000 Received: from satlexmb10.amd.com (10.181.42.219) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 11 Dec 2025 11:58:36 -0600 Received: from satlexmb08.amd.com (10.181.42.217) by satlexmb10.amd.com (10.181.42.219) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.17; Thu, 11 Dec 2025 11:58:35 -0600 Received: from xsjlizhih51.xilinx.com (10.180.168.240) by satlexmb08.amd.com (10.181.42.217) with Microsoft SMTP Server id 15.2.2562.17 via Frontend Transport; Thu, 11 Dec 2025 09:58:34 -0800 From: Lizhi Hou To: , , , , CC: Shyam Sundar S K , , , , , , , , "Patil Rajesh Reddy" , Lizhi Hou Subject: [PATCH V1 1/2] platform/x86/amd/pmf: Introduce new interface to export NPU metrics Date: Thu, 11 Dec 2025 09:58:01 -0800 Message-ID: <20251211175802.1760860-2-lizhi.hou@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251211175802.1760860-1-lizhi.hou@amd.com> References: <20251211175802.1760860-1-lizhi.hou@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0002992E:EE_|MN0PR12MB6223:EE_ X-MS-Office365-Filtering-Correlation-Id: fccabc33-2d97-4f89-4c2c-08de38dee86e 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: =?us-ascii?Q?35YBiYKLaSYXAMpk5CV2z6UTbbUKmbOEobguaLnpxr9t9k2TNhJAsWBbwsg+?= =?us-ascii?Q?RqPjAkKzEwcTmrjZTb3N3sVG5sCzyw9UaGbpgLTAPv8HpUKW4ArA3TvyhL7h?= =?us-ascii?Q?GPjDxd57abGkHfwRjdxnMMSgJ9l8QSQ8pJoYU2c/zo+PvDcbc5u6X+x93V2p?= =?us-ascii?Q?7Xu6+d6ND1sSH5JMoLEsDq5qqCjQjitbH5c49srDZcytpU9KKlX1DP5Vy8wX?= =?us-ascii?Q?sICLQPtWGYWKQ9Bq7Dc4E4wlXeHsWBKuAIPtck8fgKaZFzeJnEES8MIQzzag?= =?us-ascii?Q?sdDqyOQp3K/66+ybp4C1Ys40EYbM5HFg3HRqLOUDG6u7ekgTCWXum8v7r8mA?= =?us-ascii?Q?JBGhc4plIpY4duqet4TcP9UTCzzYJM8By6TtkRWBNtDOgn8PkgQ8KsMEYWpL?= =?us-ascii?Q?wbLu4MYOs99vfhrDKm6PTEICNDQ5IjkbuQOADxbKAHXNuBGHCU/4Lcmv6F2e?= =?us-ascii?Q?UiDBWWtxl4uFwb+q6PHQvmQfPYslagDuYol/3oY5WsTCCYmDPOh7JRY7IKL/?= =?us-ascii?Q?+gUcm0ohPeymD0dCgR+W4viXRJixzGqOGwKlrlgCSxRhxqGJIeGTks2pcKHn?= =?us-ascii?Q?8cq8/qosC11hbYwjOMMwRdWeVtAeKhlUSctvOXO54h4kz5hFuN2/HGX7VOJ4?= =?us-ascii?Q?IU0x20CitqUxM/z5LIAAGydClXb0ikwYPN9S16e97RLc97Kp9+a4eWkna3rF?= =?us-ascii?Q?wSrcjRupNaXkZR6w5ocDAvMP4gtmHGya2fbMdRnUZNDjznpVy805bA7J1G+Q?= =?us-ascii?Q?dFpyKW6XhyxIYt0skQgsOPotMF3orsTLEAT+nIpSnYeA6Rk4SeAnbd4REQLx?= =?us-ascii?Q?6K7IWx7zaU/G8A1pVFglTH8NGAWrNuY3CtLcp4I6/Qo7iNRAb45JBd7Fyq1O?= =?us-ascii?Q?OkY4xslJGMq7vB6IZSWJrVN5xuGXwZvQ2U/iS8ktQZ+Z6IepJJkqao/FpBKS?= =?us-ascii?Q?s9FmLRLYXEtR3mkM29lCpn2vOspbS2jagqhsTUXLPjCHZSVbZTF0C7UI8zfY?= =?us-ascii?Q?IjT4nZ/LkIxEALG3irtU63Sna/D4aDxwpbRO8W8/KLYjCTEmUrMaquTziiiS?= =?us-ascii?Q?gUdTMwzPEIo+5oNuOLFZ7YlT9qE1idxc5nM6iW4dMFTOAa9E15pDuoXJ9L+c?= =?us-ascii?Q?2Bduvc4Jvc0EMHj/H8NiYEYIDCcLDtaHAhVTznIm2i3anz4DDZkRgLazmRxu?= =?us-ascii?Q?mIFdEwZaq74nJLZQwpjaSP8luuLF4l13zW2U/TBHek2I+cYGZXZ1VqVA6Aar?= =?us-ascii?Q?Ry7il2rSl02jZd3R1MxUfPmXyWXukc2nW3v92Dgkz1bBzhS3H5+7XFaGPZzG?= =?us-ascii?Q?nKEmRzgvgJMSxbG7ELAgJMZKT31iqct9PY4Pr6olQxmtYiumQmukhxByye8q?= =?us-ascii?Q?cL4H8q/M46tcguPSE9U7uJ9pYBOb0wv7aLyCBXiClxLWPF1Rtb1GF2OmUrk4?= =?us-ascii?Q?5NigBCgRkgVvPMw4b/i9PmDEDgz44fx8uU/EKI1y91U16tnX2PWhPANcXyIk?= =?us-ascii?Q?Yy6Stt3s9WviSMaGPRXDoOmulytU00aqfQElVbwJBsA07DMOhSLTa7FaxNIN?= =?us-ascii?Q?mW88+Y869Yy8uHLsdeo=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb07.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: 11 Dec 2025 17:58:36.6189 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fccabc33-2d97-4f89-4c2c-08de38dee86e 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=[satlexmb07.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0002992E.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB6223 Content-Type: text/plain; charset="utf-8" From: Shyam Sundar S K The PMF driver retrieves NPU metrics data from the PMFW. Introduce a new interface to make NPU metrics accessible to other drivers like AMDXDNA driver, which can access and utilize this information as needed. Reviewed-by: Mario Limonciello Co-developed-by: Patil Rajesh Reddy Signed-off-by: Patil Rajesh Reddy Signed-off-by: Shyam Sundar S K Signed-off-by: Lizhi Hou --- drivers/platform/x86/amd/pmf/core.c | 75 +++++++++++++++++++++++++++++ drivers/platform/x86/amd/pmf/pmf.h | 2 + include/linux/amd-pmf-io.h | 21 ++++++++ 3 files changed, 98 insertions(+) diff --git a/drivers/platform/x86/amd/pmf/core.c b/drivers/platform/x86/amd= /pmf/core.c index a6a5d416edf9..8e4ce91b3527 100644 --- a/drivers/platform/x86/amd/pmf/core.c +++ b/drivers/platform/x86/amd/pmf/core.c @@ -8,12 +8,15 @@ * Author: Shyam Sundar S K */ =20 +#include +#include #include #include #include #include #include #include +#include #include #include "pmf.h" =20 @@ -53,6 +56,8 @@ static bool force_load; module_param(force_load, bool, 0444); MODULE_PARM_DESC(force_load, "Force load this driver on supported older pl= atforms (experimental)"); =20 +static struct device *pmf_device; + static int amd_pmf_pwr_src_notify_call(struct notifier_block *nb, unsigned= long event, void *data) { struct amd_pmf_dev *pmf =3D container_of(nb, struct amd_pmf_dev, pwr_src_= notifier); @@ -314,6 +319,70 @@ int amd_pmf_init_metrics_table(struct amd_pmf_dev *dev) return 0; } =20 +static int is_npu_metrics_supported(struct amd_pmf_dev *pdev) +{ + switch (pdev->cpu_id) { + case PCI_DEVICE_ID_AMD_1AH_M20H_ROOT: + case PCI_DEVICE_ID_AMD_1AH_M60H_ROOT: + return 0; + default: + return -EOPNOTSUPP; + } +} + +static int amd_pmf_get_smu_metrics(struct amd_pmf_dev *dev, struct amd_pmf= _npu_metrics *data) +{ + int ret, i; + + guard(mutex)(&dev->metrics_mutex); + + if (is_npu_metrics_supported(dev)) + return -EOPNOTSUPP; + + ret =3D amd_pmf_set_dram_addr(dev, true); + if (ret) + return ret; + + memset(dev->buf, 0, dev->mtable_size); + + /* Send SMU command to get NPU metrics */ + ret =3D amd_pmf_send_cmd(dev, SET_TRANSFER_TABLE, SET_CMD, METRICS_TABLE_= ID, NULL); + if (ret) { + dev_err(dev->dev, "SMU command failed to get NPU metrics: %d\n", ret); + return ret; + } + + memcpy(&dev->m_table_v2, dev->buf, dev->mtable_size); + + data->npuclk_freq =3D dev->m_table_v2.npuclk_freq; + for (i =3D 0; i < ARRAY_SIZE(data->npu_busy); i++) + data->npu_busy[i] =3D dev->m_table_v2.npu_busy[i]; + data->npu_power =3D dev->m_table_v2.npu_power; + data->mpnpuclk_freq =3D dev->m_table_v2.mpnpuclk_freq; + data->npu_reads =3D dev->m_table_v2.npu_reads; + data->npu_writes =3D dev->m_table_v2.npu_writes; + + return 0; +} + +int amd_pmf_get_npu_data(struct amd_pmf_npu_metrics *info) +{ + struct amd_pmf_dev *pdev; + + if (!info) + return -EINVAL; + + if (!pmf_device) + return -ENODEV; + + pdev =3D dev_get_drvdata(pmf_device); + if (!pdev) + return -ENODEV; + + return amd_pmf_get_smu_metrics(pdev, info); +} +EXPORT_SYMBOL_GPL(amd_pmf_get_npu_data); + static int amd_pmf_suspend_handler(struct device *dev) { struct amd_pmf_dev *pdev =3D dev_get_drvdata(dev); @@ -469,6 +538,10 @@ static int amd_pmf_probe(struct platform_device *pdev) mutex_init(&dev->update_mutex); mutex_init(&dev->cb_mutex); =20 + err =3D devm_mutex_init(dev->dev, &dev->metrics_mutex); + if (err) + return err; + apmf_acpi_init(dev); platform_set_drvdata(pdev, dev); amd_pmf_dbgfs_register(dev); @@ -477,6 +550,8 @@ static int amd_pmf_probe(struct platform_device *pdev) if (is_apmf_func_supported(dev, APMF_FUNC_SBIOS_HEARTBEAT_V2)) amd_pmf_notify_sbios_heartbeat_event_v2(dev, ON_LOAD); =20 + pmf_device =3D dev->dev; + dev_info(dev->dev, "registered PMF device successfully\n"); =20 return 0; diff --git a/drivers/platform/x86/amd/pmf/pmf.h b/drivers/platform/x86/amd/= pmf/pmf.h index f07e9f4c660a..0354cc5dc79e 100644 --- a/drivers/platform/x86/amd/pmf/pmf.h +++ b/drivers/platform/x86/amd/pmf/pmf.h @@ -12,6 +12,7 @@ #define PMF_H =20 #include +#include #include #include #include @@ -412,6 +413,7 @@ struct amd_pmf_dev { struct apmf_sbios_req_v1 req1; struct pmf_bios_inputs_prev cb_prev; /* To preserve custom BIOS inputs */ bool cb_flag; /* To handle first custom BIOS input */ + struct mutex metrics_mutex; }; =20 struct apmf_sps_prop_granular_v2 { diff --git a/include/linux/amd-pmf-io.h b/include/linux/amd-pmf-io.h index 6fa510f419c0..55198d2875cc 100644 --- a/include/linux/amd-pmf-io.h +++ b/include/linux/amd-pmf-io.h @@ -61,5 +61,26 @@ enum laptop_placement { LP_UNDEFINED, }; =20 +/** + * struct amd_pmf_npu_metrics: Get NPU metrics data from PMF driver + * @npuclk_freq: NPU clock frequency [MHz] + * @npu_busy: NPU busy % [0-100] + * @npu_power: NPU power [mW] + * @mpnpuclk_freq: MPNPU [MHz] + * @npu_reads: NPU read bandwidth [MB/sec] + * @npu_writes: NPU write bandwidth [MB/sec] + */ +struct amd_pmf_npu_metrics { + u16 npuclk_freq; + u16 npu_busy[8]; + u16 npu_power; + u16 mpnpuclk_freq; + u16 npu_reads; + u16 npu_writes; +}; + int amd_get_sfh_info(struct amd_sfh_info *sfh_info, enum sfh_message_type = op); + +/* AMD PMF and NPU interface */ +int amd_pmf_get_npu_data(struct amd_pmf_npu_metrics *info); #endif --=20 2.34.1 From nobody Sun Feb 8 15:07:21 2026 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010025.outbound.protection.outlook.com [52.101.85.25]) (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 B243131BCAB; Thu, 11 Dec 2025 17:58:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765475927; cv=fail; b=DteawjzT7TZ+vfJ/Bw0m0+m8Z5jL1jDh5NN2BZE3cc6Yp+hmsypkH+p6ZuXMPK2YF6FZE/UziQcgrZJOBXMh1AKXtJ3IpEhm/rfiZvWJ/wr75kmRp4tPcwvR1KBjeftazifWaM7NQDmdHB+ipnvqwGdg9b3bVcP4AS0maIj6RwI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765475927; c=relaxed/simple; bh=0EKhabPkF+Lqk7ZTJRmycDQtRUX1erqqyVd9uWSDdIM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=KTrMrhABBMDYwswq+mBIKi/Sudv30mE2R2faqFQjgRFuGmhxK/Iat96w8d5qSlmCNRkKKIobjpH6qsJYuSHdvjvbBsRYYV+G5a5vB+EI3j/Ixs4tNQuGaCUoS+E3d/ZG3a/Ja6ncKkK5c9BznRlTgjBTtm8t933W+I7f/63mFHA= 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=AYJ2FMlp; arc=fail smtp.client-ip=52.101.85.25 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="AYJ2FMlp" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AA6bKePi5QUQ2sL1Bq+Qztb5L9i1rO2iwDDFzt2ktjdb849dLa32w48vhUtKUIPfaaCDk4dtPzwZa5vGWr6uO702K3Utmnw8ILS9R8q7Tcb2RnRj9LnDNNzDU9rp/UuAb7OSfxuqcgxjutwHvc4h9Osctajt4nonX0C6Ju7TlX3j1YoPMpYWWHaztAO5P+xt13xLsMGtd38vLkmd59DiNpiW+QYb972G5a1baRlsj2nPztwz2l4X6punQA3/jXPPTQ1R6lxEsAMBigxX+Y4Gpt67+KWYr4dflas7s6PTWZuCUaoN70LgXQI9kiYRMwrGD93JxulMXWs9R60Ovcb8fA== 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=/Nrx9Fj1jc4ylKMfgokiq0E+n14DdC3l0yR/p1FlTZU=; b=gzgoHuI1SmjIMp/28ijOrIAS3UvwTedyyfmLCrXTKasu7YZVXL4+ysVAHassOfDPelfFVm5fe3/t79fX8rUEEm1xPw2ws7qlsssCP9UHDAGdiSTnsrkwiQbXrK6ytRJ38fajq6m1Ssu1TU85wggARYuRM+GMHT7EH5UMVjxESifgE7wIZ38fHMQWy8onSdS4Z0PMlGVPETtMgYKo7iKq81pgWPNcxw5wSIWJCLoGbM0qqgkCzrd2PbxIElL67LQF3EhQXGQ3RHvsuPtyAkOSautVlesPr0RYTRskWEjaPagn/RPgpm1+3NvUmdVk56HGbxBBi6rG9ET+JSgvpdC6Fg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=linux.intel.com 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=/Nrx9Fj1jc4ylKMfgokiq0E+n14DdC3l0yR/p1FlTZU=; b=AYJ2FMlpHR+F1GRuZZrOQUs6dIAYhNMvbIGfDU8UJaGuA8ePb8HFTebgZF8u8KyeWmz+SYH/Ki8rYogtBgFdjkGqr/TGQuhCpyq3TcV8RbTJafEE3O5jqOp4PwgI+85s+1ImnAzUuPAv42ywAfivelHKcWEjk29mtKAH0lzISY0= Received: from SJ0PR05CA0062.namprd05.prod.outlook.com (2603:10b6:a03:332::7) by BY5PR12MB4257.namprd12.prod.outlook.com (2603:10b6:a03:20f::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.10; Thu, 11 Dec 2025 17:58:41 +0000 Received: from SJ1PEPF000023D1.namprd02.prod.outlook.com (2603:10b6:a03:332:cafe::72) by SJ0PR05CA0062.outlook.office365.com (2603:10b6:a03:332::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9434.5 via Frontend Transport; Thu, 11 Dec 2025 17:58:41 +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=satlexmb08.amd.com; pr=C Received: from satlexmb08.amd.com (165.204.84.17) by SJ1PEPF000023D1.mail.protection.outlook.com (10.167.244.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.4 via Frontend Transport; Thu, 11 Dec 2025 17:58:40 +0000 Received: from SATLEXMB04.amd.com (10.181.40.145) by satlexmb08.amd.com (10.181.42.217) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.2.2562.17; Thu, 11 Dec 2025 11:58:37 -0600 Received: from satlexmb08.amd.com (10.181.42.217) 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; Thu, 11 Dec 2025 11:58:36 -0600 Received: from xsjlizhih51.xilinx.com (10.180.168.240) by satlexmb08.amd.com (10.181.42.217) with Microsoft SMTP Server id 15.2.2562.17 via Frontend Transport; Thu, 11 Dec 2025 09:58:36 -0800 From: Lizhi Hou To: , , , , CC: Lizhi Hou , , , , , , , , Subject: [PATCH V2 2/2] accel/amdxdna: Add IOCTL to retrieve realtime NPU power estimate Date: Thu, 11 Dec 2025 09:58:02 -0800 Message-ID: <20251211175802.1760860-3-lizhi.hou@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251211175802.1760860-1-lizhi.hou@amd.com> References: <20251211175802.1760860-1-lizhi.hou@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: None (SATLEXMB04.amd.com: lizhi.hou@amd.com does not designate permitted sender hosts) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ1PEPF000023D1:EE_|BY5PR12MB4257:EE_ X-MS-Office365-Filtering-Correlation-Id: a50778ae-26ff-4ee2-cd05-08de38deead9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Uy3bf8YzsXEr+z0Qv0IO0MtSa/uGvb+SmUSAXlbLil7s0PzVEo6YEQetLGb8?= =?us-ascii?Q?dj6ARJOG7MBBwvwUFiFXWY/J5Z06K9fO57uwncZqt2tii8IQFrK0D8ZpNOk+?= =?us-ascii?Q?YsRpK2J9TPPBlRr8qpymys0xi9NbK+IkId3bgXzwnFa5dpJ9SSi8MypLojOm?= =?us-ascii?Q?PjHALbHLD+RS7Rp5ZTIyMXgQM9ke91l00ku15uXqWMrhR1/IBDNElmctcBa/?= =?us-ascii?Q?NhYOJ4vPCXzOPo3rkTK9tbw+bjoZTxvmKpzkU16qN9Ukl9aT46TaJBoAYE/G?= =?us-ascii?Q?ysA0U73TYxshozNoi0gEMhM6n1aPtbSbrYCH2dteTzjrI+QMVvCecAiHK5up?= =?us-ascii?Q?51cszpuyxUhEh/e2SaMtHJBFJ/C7gQkeMnN28VDpHIHd5VTyKQ0EtNn7JbCV?= =?us-ascii?Q?/jfM2bm55i66A3A29XeehzCj740gs1mQ8h8CawumukL171ptG++onCOiuKl3?= =?us-ascii?Q?NQcEwXrxFoIQ79QKe/e7B0Yfys/Z0504zYTADIp0GRBdkKBdwLzOQLVMsY1R?= =?us-ascii?Q?AC67lzF2IbNqBhBGQIlRiHvpnk+D0OHqojTR2HFJPj+83nPpOuyU415fbypZ?= =?us-ascii?Q?TuTt8RqatWTjumoNmiVi6V/zPvf1QA+OVtLMuHEHJ2RU1OJDG0931OfcdOVb?= =?us-ascii?Q?N7mIhEuhBWUI9RI7LbZXRPwe9rUKmaqVgdhHFKLnArNYBLpbW/QoAOrOnWMX?= =?us-ascii?Q?6EV6UxQvTlvTi8H+8qiCE9kOndL9BRXFKctfv2w8iY0RCA7i2NrTeMwCGri4?= =?us-ascii?Q?zTOH8DlILvX96gw1TezhJ4V1JKKTQ/uQ4rzafiatYTMoXWspLEDAICPqrboU?= =?us-ascii?Q?EWpVI1qudDzYjDeN8j6NgqVQ4oEDzPs11Jkv4b8AVmgJSNYBwcUPco0WIQLK?= =?us-ascii?Q?KkYLaXe+y8PIefSk7+Hk3LgzecOBj0iJd/aLU8pJ2rU+CuWbswm0OzZtWxzC?= =?us-ascii?Q?R6WCmm5/ADWyzrbpqACqTX9qwMjAUBnMZUQwxPq8bd+npsMZjuvkxIGOJiXl?= =?us-ascii?Q?LvgC9otMlZOsq6l/zdPE1tv4lRsoCjL+i3mxpPR1BovMrWWn+28epcmZVOZO?= =?us-ascii?Q?yLkjvDB7IFKNu0YKFnCB7FBURm7vGtpJEOsS79w4KV+/ZVkzoQVhkUgpcDsU?= =?us-ascii?Q?5QXDwkqkh4of7lx8ljrtFDiZsuE6bfU6gpIqJeqret3pVMZy2ubnnYkAY60Y?= =?us-ascii?Q?FPjbsKwUHP2F8jgl8TS7BwrIqIjcbElOkUJgNa56iXuHtv2cdxRNG2aL5BrC?= =?us-ascii?Q?2R4pZGqQgGL7WtIUtcmOCRi3/r0iL909XiAy+38IAbJXU6vdvC3g7kfzpxNs?= =?us-ascii?Q?gG+0oFcQs0hoCUue3BNGE5YL970/MaA/kcwNEnKRE6W9diPnkrvGzXHaGMRj?= =?us-ascii?Q?szygl406DBn1uWXqiFCa8KrbaaD5nCCoEdgms4IFv+y57j7IBDPYKexFsNSb?= =?us-ascii?Q?+dgtgZriC/Fkki6t64ktEVVHYGrl/OYL35umynJAtYeyEZJs8hSovfbHcwy1?= =?us-ascii?Q?3/M3FEDw67SFRP2dx97N3floh/iUH0dop5KtHVeNhC3JCuC7AbIZC/75vX6Z?= =?us-ascii?Q?t7xxXVX5pNTJWBoeXCc=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:satlexmb08.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(376014)(82310400026)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Dec 2025 17:58:40.5891 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a50778ae-26ff-4ee2-cd05-08de38deead9 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=[satlexmb08.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ1PEPF000023D1.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4257 Content-Type: text/plain; charset="utf-8" The AMD PMF driver provides an interface to obtain realtime power estimates for the NPU. Expose this information to userspace through a new DRM_IOCTL_AMDXDNA_GET_INFO parameter, allowing applications to query the current NPU power level. Signed-off-by: Lizhi Hou Reviewed-by: Mario Limonciello (AMD) > --- Reviewed-by: Shyam Sundar S K --- drivers/accel/amdxdna/aie2_pci.c | 29 +++++++++++++++++++++++++ drivers/accel/amdxdna/aie2_pci.h | 18 +++++++++++++++ drivers/accel/amdxdna/amdxdna_pci_drv.c | 3 ++- 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/drivers/accel/amdxdna/aie2_pci.c b/drivers/accel/amdxdna/aie2_= pci.c index 81a8e4137bfd..4a2c7addcd79 100644 --- a/drivers/accel/amdxdna/aie2_pci.c +++ b/drivers/accel/amdxdna/aie2_pci.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -777,6 +778,31 @@ static int aie2_get_clock_metadata(struct amdxdna_clie= nt *client, return ret; } =20 +static int aie2_get_sensors(struct amdxdna_client *client, + struct amdxdna_drm_get_info *args) +{ + struct amdxdna_drm_query_sensor sensor =3D { 0 }; + int ret; + + if (args->buffer_size < sizeof(sensor)) + return -EINVAL; + + ret =3D AIE2_GET_PMF_NPU_DATA(npu_power, sensor.input); + if (ret) + return ret; + sensor.type =3D AMDXDNA_SENSOR_TYPE_POWER; + sensor.unitm =3D -3; + snprintf(sensor.label, sizeof(sensor.label), "Total Power"); + snprintf(sensor.units, sizeof(sensor.units), "mW"); + + if (copy_to_user(u64_to_user_ptr(args->buffer), &sensor, sizeof(sensor))) + return -EFAULT; + + args->buffer_size =3D sizeof(sensor); + + return 0; +} + static int aie2_hwctx_status_cb(struct amdxdna_hwctx *hwctx, void *arg) { struct amdxdna_drm_hwctx_entry *tmp __free(kfree) =3D NULL; @@ -980,6 +1006,9 @@ static int aie2_get_info(struct amdxdna_client *client= , struct amdxdna_drm_get_i case DRM_AMDXDNA_QUERY_CLOCK_METADATA: ret =3D aie2_get_clock_metadata(client, args); break; + case DRM_AMDXDNA_QUERY_SENSORS: + ret =3D aie2_get_sensors(client, args); + break; case DRM_AMDXDNA_QUERY_HW_CONTEXTS: ret =3D aie2_get_hwctx_status(client, args); break; diff --git a/drivers/accel/amdxdna/aie2_pci.h b/drivers/accel/amdxdna/aie2_= pci.h index c6b5cf4ae5c4..edf6f2e00dea 100644 --- a/drivers/accel/amdxdna/aie2_pci.h +++ b/drivers/accel/amdxdna/aie2_pci.h @@ -46,6 +46,24 @@ pci_resource_len(NDEV2PDEV(_ndev), (_ndev)->xdna->dev_info->mbox_bar); \ }) =20 +#if IS_ENABLED(CONFIG_AMD_PMF) +#define AIE2_GET_PMF_NPU_DATA(field, val) \ +({ \ + struct amd_pmf_npu_metrics _npu_metrics; \ + int _ret; \ + _ret =3D amd_pmf_get_npu_data(&_npu_metrics); \ + val =3D _ret ? U32_MAX : _npu_metrics.field; \ + (_ret); \ +}) +#else +#define SENSOR_DEFAULT_npu_power U32_MAX +#define AIE2_GET_PMF_NPU_DATA(field, val) \ +({ \ + val =3D SENSOR_DEFAULT_##field; \ + (-EOPNOTSUPP); \ +}) +#endif + enum aie2_smu_reg_idx { SMU_CMD_REG =3D 0, SMU_ARG_REG, diff --git a/drivers/accel/amdxdna/amdxdna_pci_drv.c b/drivers/accel/amdxdn= a/amdxdna_pci_drv.c index 1973ab67721b..643ebd387074 100644 --- a/drivers/accel/amdxdna/amdxdna_pci_drv.c +++ b/drivers/accel/amdxdna/amdxdna_pci_drv.c @@ -32,9 +32,10 @@ MODULE_FIRMWARE("amdnpu/17f0_20/npu.sbin"); * 0.4: Support getting resource information * 0.5: Support getting telemetry data * 0.6: Support preemption + * 0.7: Support getting power data */ #define AMDXDNA_DRIVER_MAJOR 0 -#define AMDXDNA_DRIVER_MINOR 6 +#define AMDXDNA_DRIVER_MINOR 7 =20 /* * Bind the driver base on (vendor_id, device_id) pair and later use the --=20 2.34.1