From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 450E91125857 for ; Wed, 11 Mar 2026 17:21:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A3C4F10E0D4; Wed, 11 Mar 2026 17:21:13 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=amd.com header.i=@amd.com header.b="V6X1fBXW"; dkim-atps=neutral Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011031.outbound.protection.outlook.com [40.107.208.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id ACE7510E910 for ; Wed, 11 Mar 2026 17:21:12 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dB1lKwhzxQbYQVxecSyUCExOkFIz+RltV3lmP1TAYt1pixVeOtN80jZkJ0CTTG/OALecHW5qRkhqhh0sNs5GrGE4Cz+KBdIZ487ICiOybJX7REw7EDMInvws0ySxNUQFGtvLfD67+RUuD2zuly85AOjNjWBR1MGrzZ1fiE9ZzRf8LBqEXwg6OwniUdo2wXGroFlFWFFZfWy1BxypcHRMn7upue6g1y631rTNvrqCidWLcXNd0JpqpjvZ/CdTaexJGLsdaV9vvKlovHVIq5v09S1KsMFXtcm30Bu0BQbfR9/WQab7ZOt7o00pmT6Z6dXBYigMj3PY0hl+/0ZbPmlmMQ== 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=o5MZujv2yI3UOMjO4tmCeTFzB/oUePOXZyjyhpVzzX4=; b=eICs/ML8QTv5YbFjpikinyx2/D/OPetvY8rEWfVxCQpmlOnHZbe63X6zCddiNpcFWXmKCz8R8daYHLKYznkcpZIc7leVgW2O/Zfeae6I71hFj4sNQxrywMQrLcbzyigmRonfMRuPzQ7xp7FJ8npdgyEuImwa7Am/Eq9kv3Jgepzg3aaCY7JF7LqbYqdaR00ysH2IrqMKbNYwDQhoOoE1/kyVVAupsxxubRMMUAXnI8zm8D3s56hVmfu/RtqZ3N262W4qJXn/d5Yib9dOsnlpuoZKNoTcEeazdN4WqufTV6qTt1ru60RY/3hNLH8fzRY1I7iIsitX3noaDMi6XCAYFA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none 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=o5MZujv2yI3UOMjO4tmCeTFzB/oUePOXZyjyhpVzzX4=; b=V6X1fBXWhvUoLZ5K55CKlBvYylFzNI1yu9h3ymFpWhyLqCNEZ1ROqfVMPiJRCfLtgBkBIg3thWwoBXmW1ddz/8d3kdyyhJwlqEVPQCh/53OtOPN+H6xTX7qyrL+2HjY+CYn7oEoQMdiXWxwCiksc4aWqnbbxRK2qFk3liAdjumw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from SA0PR12MB4557.namprd12.prod.outlook.com (2603:10b6:806:9d::10) by SA0PR12MB4397.namprd12.prod.outlook.com (2603:10b6:806:93::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.6; Wed, 11 Mar 2026 17:21:10 +0000 Received: from SA0PR12MB4557.namprd12.prod.outlook.com ([fe80::885a:79b3:8288:287]) by SA0PR12MB4557.namprd12.prod.outlook.com ([fe80::885a:79b3:8288:287%5]) with mapi id 15.20.9723.000; Wed, 11 Mar 2026 17:21:10 +0000 Message-ID: <899b5f81-73f9-4915-a613-c3da165ccf4f@amd.com> Date: Wed, 11 Mar 2026 12:21:08 -0500 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH V2] accel/amdxdna: Support sensors for column utilization To: Lizhi Hou , ogabbay@kernel.org, quic_jhugo@quicinc.com, dri-devel@lists.freedesktop.org, maciej.falkowski@linux.intel.com Cc: "Mario Limonciello (AMD)" , linux-kernel@vger.kernel.org, max.zhen@amd.com, sonal.santan@amd.com References: <20260311171842.473453-1-lizhi.hou@amd.com> Content-Language: en-US From: Mario Limonciello In-Reply-To: <20260311171842.473453-1-lizhi.hou@amd.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: DS7PR03CA0194.namprd03.prod.outlook.com (2603:10b6:5:3b6::19) To SA0PR12MB4557.namprd12.prod.outlook.com (2603:10b6:806:9d::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA0PR12MB4557:EE_|SA0PR12MB4397:EE_ X-MS-Office365-Filtering-Correlation-Id: 58ccd7e3-97d4-4549-f494-08de7f92967b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|366016|376014|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: Jo+5MBd71mhzsAnqxgLCLDHK7rSSIWqU3zDobxFevNMET8taRMIuu4qegsAW52l6RNWX1iHzY6HSWWi/rkxVFQiCYPeLRpMyvOrCNPzDbJJt1LMDOsOwsmbGjUBaW6vQ1QLDP1K2TwdjPEJ+CYjqAJmM4dTAMtjWsuHTLNgyeOg6v0fcMZmhRCtp8u5RUIneWn7MwOWcNpPRJIfgvmWASax0JIgbzcUmJNLVOnWCfSzOfrVBaXySd4FJxjGs36zmH4zqjGcNMA8uQoqzpMwxsmXwAaWoxS8c16c/DNIYnxuvoYmjKNlusBdxPNwQD8tpAXBaUP0lO+jaB8t8XEfbScsxX5zETcWgPdoESQZIB7ssWss2C5GwD0d1SWudxoAD8T6EklpI/lYCNpu6nUyKqst1bSx8WzeuJk3lkSge0ojKQi7rUW9RvKURUq34LsULL9SHZaTJ2c1Rz4pX+qemcZgiQN6lhYdtPxeIHJW3ZFQPr84rOxCsXbJriqEzq600fkPbeut95DPEnw+iqVuTQaLcKibGNfsUPuXF5XasMPpL7rx1mMpSowf/fa75wX4e9/iJ8UJ7Ecq6fSOAhOP4fK5Fl3lxi6fIh4all8sy7oajz22kep30nyI70JTybZXp8L266BWjLaUpNwFTBP7YX5yFtIXYfpryG9OThPPrjCkKHTd8x101JzLhzWllm1HF1/RhWDQLCAY/l72p3QBzuuvODyFK0WmLm8gqDxkhAsM= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA0PR12MB4557.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014)(56012099003)(18002099003)(22082099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?d1RiYnJaaUcxNXlkK3Y5d1RWZlBTWGN1bEJXdXRKaXpzdUhzV3dtOXpKZDk3?= =?utf-8?B?YXVyc3NVenV3c2dzUG1heXBKb3MzbUNUZk1HbUxKemhmQTlvM1IxYkszSXo0?= =?utf-8?B?UjR3WGIvQzUzQkV4WUx6cmRFK2o0S215Q1FnUDhlVDkydmdZdUN5cTd1NHI0?= =?utf-8?B?d2E2SkdlUUJZaHVBS0cvNXllUGc5VDZ1eVhFbXRWN0pueHdhcVFQVE9KSTc5?= =?utf-8?B?cjF2MzQvNUU1M0wveVh2MmxFN29xNUU4Sm10TlVWT1UxdWNkY3Vvc0U0d2xm?= =?utf-8?B?SHBrMmpjUktUaDBBb1pidldVQkdhOURJUWYzUDFrVFpkTklMWnpMRXl3K3k0?= =?utf-8?B?RTByc0hUNUVIRFhjUy9ZM2FmODNQdXcwVEdCNWNSZXh3K2RZNm9xNlg5WFdP?= =?utf-8?B?bG9Db3NESEI2dzFpdUtlOTVCaGx5dTNtOWJlM2UzbFd3R21JZk1DQVJha3J4?= =?utf-8?B?MldzK0wwWHpvZXRlYnUwbVZKOU5zYVNwTzZtY1ZIUXk2MHdPV3dsY01pSC9q?= =?utf-8?B?UjFhRmY0VGR5eVQ2REo5SlVnUEh2U1p3YklaVGZ6ekovdVdscm1uVGJBMlVK?= =?utf-8?B?QUxOd2MxVnFFdCswZk9yY3VZUjRXeUxUYi8veFViQjhOWWJ6UEhBRUVSR0Vl?= =?utf-8?B?MjhxUWhBTS9CTThEd0xkY2V2ZkplNVpHRDQydkFpbEpaVFpwdktUMmRMTmF3?= =?utf-8?B?Kzk5QVQ1cFd6bkptaHVGVEhRRGg0UDVDcExNSmdUODVIS3JiQTl2WDdpbXZV?= =?utf-8?B?NWRvbjZuVFk0R2ZwK3VGRW5lOEh0VFdmTXpRYTN1WTZCTGZ4TjBZbDRPT0Fk?= =?utf-8?B?b1FmSXdSQnNZMlFhamZVbDhyYUxyZjVRbVlFOFMvWlFpWnVqME9mU3J2SGNF?= =?utf-8?B?R244YmVlOU92NllYVklteTBVTGFESkFwYVRsR1Y0V1owMThCSzFvTytMTCtt?= =?utf-8?B?WnFuejhzdXJBTEFtRGZrRmFBN0YvdDFSQ1A0UjJrYWFzOXlMTlhmc1ZKVk5L?= =?utf-8?B?N2NBYTAzYVJlUVBPWW9MUkRveWRwZHY0TEQ5OXpDbjBZUzdRV1lRblVvYnZp?= =?utf-8?B?WHAvZkVHVGZkNUx1a1NxajB2MkR1QU9odVFNL3BpWFYvN3NXaVZWQmt2N1Zv?= =?utf-8?B?NVNHKzcvS3V2K1NrM2Uyd1RHMXRnOUtIN0tObTRKUjUybGNQT0RKVEdJaWFt?= =?utf-8?B?cDYydDZ6aldna1dXV1owNVEwVVd4R2M5NzliOW9kKzJmOTdCZ3N1U1U1cnFo?= =?utf-8?B?WlR4Tk55Q2hPS3Uvc1IyMEsrNWFUWnZra0NPb29yeUIxRWtSV0NmR0dHYlBq?= =?utf-8?B?RGlJQ25yZmo0bGw4d2w2WmVjWTlFMkhIMUliYjVsZGsxVHV0dmx5NzFPTHcx?= =?utf-8?B?eFFZYzBVZkcvdDdJTHhJVkRiak1JMkRHVkRxYUJ6UjlTM3p3UzRZOWtUWVg3?= =?utf-8?B?SW8yZ3VicU9oZ0JZZkYvMGNKaGs0WGNwc25MR2xzd0xoV0tlOHdnbVl0WHZE?= =?utf-8?B?a1JDVGZlRXNwTDh6SnBzSlArMDkyd0pJYkJtcHpZajRqcG9QZmtuUS9KWTAr?= =?utf-8?B?N1VkVVVtN1NYMUpSaE1uOWh5UUpOYUtRYm5MbGdlTDdOWWxsNWJoMkN6MG1s?= =?utf-8?B?K0thV1dCQ2RaLzg3VmlHc24zOEFYanVTdTgxTEFVMU1RQ09ENXhqSm1Eb00v?= =?utf-8?B?Yzhza09hK3Q5ODZ2QW4wU2w5UTF6OEpYMk9tZzBmYzh3NThNUERONHY5d0Jv?= =?utf-8?B?dkxBNlhrYVJvR1RtMGpuSHFaaHJOWFN1RVl6L2syM1ZJUmRjNlV2NStjOE5u?= =?utf-8?B?MWRoOHBUQU9sSlZBUzVVdzZlbVJSUXRhT3pDTU04amYvSzFUNmZqbVhTbld5?= =?utf-8?B?MXgycTdFaGUyTzRieFNqcTVYTU93dFZFUVl1YU9TREIyMjJDeTUvOGlzYlJj?= =?utf-8?B?cG5hNTF3NEsrelNleE9ndldxd2JTOW5kL2YyQStjMUpWVzQ0WUFsblNhZUVS?= =?utf-8?B?eHZMZ0NUTXNVY081aVdOSXRRTVd4UTNhVFFuOVhrNUxOT0poYUhvTVZJcUNG?= =?utf-8?B?SkR5dVNmSTN1dGNYQ215dWtTaFZTbytNbWhVSjlGWTlOUjQwN2YyRFhtd1B1?= =?utf-8?B?TGFEdG4zWjhhSmZmTWIwazd6ZUZRaWJwZUNCV3RSZm5tbUUzZjVZeVlGY05u?= =?utf-8?B?UjFWOEZUZW9sN2ZQaHlMMlZURjdnVndkYXRKUEFuRjFtK1cyaW0vekN2MzVs?= =?utf-8?B?Tm5lMTJ4QzZNMWtPRmZqRnp5MFhxYWlQRUFVL05BaTU0dFlOT3hzNlY1MnBW?= =?utf-8?B?eVF2NWJlcGFUcE81VzRYNW1xdHdONXRGS0hsa0ZndllZSnR2UlRFdz09?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 58ccd7e3-97d4-4549-f494-08de7f92967b X-MS-Exchange-CrossTenant-AuthSource: SA0PR12MB4557.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Mar 2026 17:21:10.1887 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: q+QdVPL7lX+ro8rbGpVxXJXBMWegrjZPLnW4s+5qo05eKUc+EsVs7VoPs+2GXNQDQnK+e92hkjLikrVY5S/lMw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR12MB4397 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On 3/11/26 12:18, Lizhi Hou wrote: > From: "Mario Limonciello (AMD)" > > The AMD PMF driver provides realtime column utilization (npu_busy) > metrics for the NPU. Extend the DRM_IOCTL_AMDXDNA_GET_INFO sensor > query to expose these metrics to userspace. > > Add AMDXDNA_SENSOR_TYPE_COLUMN_UTILIZATION to the sensor type enum > and update aie2_get_sensors() to return both the total power and up > to 8 column utilization sensors if the user buffer permits. > > Signed-off-by: Mario Limonciello (AMD) > Reviewed-by: Lizhi Hou > [lizhi: support legacy tool which uses small buffer. checkpatch cleanup] > Signed-off-by: Lizhi Hou Thanks, no concerns on the cleanups. > --- > drivers/accel/amdxdna/aie2_pci.c | 34 +++++++++++++++++++++++++++----- > drivers/accel/amdxdna/aie2_pci.h | 8 ++++++++ > include/uapi/drm/amdxdna_accel.h | 3 ++- > 3 files changed, 39 insertions(+), 6 deletions(-) > > diff --git a/drivers/accel/amdxdna/aie2_pci.c b/drivers/accel/amdxdna/aie2_pci.c > index a2e586512e26..c57c785a2d15 100644 > --- a/drivers/accel/amdxdna/aie2_pci.c > +++ b/drivers/accel/amdxdna/aie2_pci.c > @@ -787,16 +787,18 @@ static int aie2_get_clock_metadata(struct amdxdna_client *client, > static int aie2_get_sensors(struct amdxdna_client *client, > struct amdxdna_drm_get_info *args) > { > + struct amdxdna_dev_hdl *ndev = client->xdna->dev_handle; > struct amdxdna_drm_query_sensor sensor = {}; > + struct amd_pmf_npu_metrics npu_metrics; > + u32 sensors_count = 0, i; > int ret; > > - if (args->buffer_size < sizeof(sensor)) > - return -EINVAL; > - > - ret = AIE2_GET_PMF_NPU_DATA(npu_power, sensor.input); > + ret = AIE2_GET_PMF_NPU_METRICS(&npu_metrics); > if (ret) > return ret; > + > sensor.type = AMDXDNA_SENSOR_TYPE_POWER; > + sensor.input = npu_metrics.npu_power; > sensor.unitm = -3; > scnprintf(sensor.label, sizeof(sensor.label), "Total Power"); > scnprintf(sensor.units, sizeof(sensor.units), "mW"); > @@ -804,7 +806,29 @@ static int aie2_get_sensors(struct amdxdna_client *client, > if (copy_to_user(u64_to_user_ptr(args->buffer), &sensor, sizeof(sensor))) > return -EFAULT; > > - args->buffer_size = sizeof(sensor); > + sensors_count++; > + if (args->buffer_size <= sensors_count * sizeof(sensor)) > + goto out; > + > + for (i = 0; i < min_t(u32, ndev->total_col, 8); i++) { > + memset(&sensor, 0, sizeof(sensor)); > + sensor.input = npu_metrics.npu_busy[i]; > + sensor.type = AMDXDNA_SENSOR_TYPE_COLUMN_UTILIZATION; > + sensor.unitm = 0; > + scnprintf(sensor.label, sizeof(sensor.label), "Column %d Utilization", i); > + scnprintf(sensor.units, sizeof(sensor.units), "%%"); > + > + if (copy_to_user(u64_to_user_ptr(args->buffer) + sensors_count * sizeof(sensor), > + &sensor, sizeof(sensor))) > + return -EFAULT; > + > + sensors_count++; > + if (args->buffer_size <= sensors_count * sizeof(sensor)) > + goto out; > + } > + > +out: > + args->buffer_size = sensors_count * sizeof(sensor); > > return 0; > } > diff --git a/drivers/accel/amdxdna/aie2_pci.h b/drivers/accel/amdxdna/aie2_pci.h > index 1bb88711bedb..0ae174862592 100644 > --- a/drivers/accel/amdxdna/aie2_pci.h > +++ b/drivers/accel/amdxdna/aie2_pci.h > @@ -48,6 +48,7 @@ > }) > > #if IS_ENABLED(CONFIG_AMD_PMF) > +#define AIE2_GET_PMF_NPU_METRICS(metrics) amd_pmf_get_npu_data(metrics) > #define AIE2_GET_PMF_NPU_DATA(field, val) \ > ({ \ > struct amd_pmf_npu_metrics _npu_metrics; \ > @@ -58,6 +59,13 @@ > (_ret); \ > }) > #else > +#define AIE2_GET_PMF_NPU_METRICS(metrics) \ > +({ \ > + typeof(metrics) _m = metrics; \ > + memset(_m, 0xff, sizeof(*_m)); \ > + (-EOPNOTSUPP); \ > +}) > + > #define SENSOR_DEFAULT_npu_power U32_MAX > #define AIE2_GET_PMF_NPU_DATA(field, val) \ > ({ \ > diff --git a/include/uapi/drm/amdxdna_accel.h b/include/uapi/drm/amdxdna_accel.h > index 9c44db2b3dcd..5bd13f4435f5 100644 > --- a/include/uapi/drm/amdxdna_accel.h > +++ b/include/uapi/drm/amdxdna_accel.h > @@ -353,7 +353,8 @@ struct amdxdna_drm_query_clock_metadata { > }; > > enum amdxdna_sensor_type { > - AMDXDNA_SENSOR_TYPE_POWER > + AMDXDNA_SENSOR_TYPE_POWER, > + AMDXDNA_SENSOR_TYPE_COLUMN_UTILIZATION > }; > > /**