From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11013046.outbound.protection.outlook.com [40.107.201.46]) (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 824F22D3A69 for ; Wed, 11 Mar 2026 18:49:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.46 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773254953; cv=fail; b=iZRSJOpneflIkYVBLj7lU3STJ/e0JOI0Z/IlsipEeUZuRjuGWvqOg6M2vmLWMvvFjEv6qxN+I5ynCmHQguixwX2jmsFrculdBrqNMmZIluhkaUoqvJQ6DY6lrXQ2Oh9KFMg/9XiVxbn3yZuBYieECSlbMjTWTXVLXE2l3Bn+FoE= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773254953; c=relaxed/simple; bh=KrSZ6UEWKuIl0qNiD6kDmE8II4XIw2Iq4Yn7WM8BrgA=; h=Message-ID:Date:MIME-Version:Subject:To:CC:References:From: In-Reply-To:Content-Type; b=rDb6QQ3QBL5WKzFpALs/iK+L8AKBjpXhcS40H54zA812htnPJpaof+026JsIVzNRexk22F56agymPl9+eds36flV2LGMg8eaC86MWtA789yiLsQylIf9GKerjuGiOkg8RIcYhvDItsBZz5b8nCFHy20768Z+VuwK4f2mndwEk2Q= 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=fmbMIYyq; arc=fail smtp.client-ip=40.107.201.46 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="fmbMIYyq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=O/u1oVtMCkYU7Yba2KxEOS51bZZqINdZ6vwSQVar58YoNwc+3qjsTse627O+mLJWdXKAmlIxYrRdruWZvbVmd9CgD0U251Qxa05XCu2bBHzj9xcGuXg3qAZqKhjFO1e3SzxrcykhIm7Kd40KbiLzlf/92HcombCKHk7F99BNh2CFj56tA9r5UCuwCV8kyjgedf5CV3Lcu+bBKE0h0dWigZB/tXhkxMi/QMw9EhmRFTdqrHtmCvUVwbPrPRF6JexaioG1tlCL/4Ba1YGrmGzg1+JmJ8krXvwoX0rS05lSdtnwoNoI0IooEXAgXlmqwSFM3gzHug8RaB9KoaK6h6AE/w== 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=M/7UaJl0lKO3iRmp8QXe16pxCbdbLBROlcJmi8qd42Q=; b=etbNTIFbNJk2dRTCjgKfz4Z8feZVgRG37u+sFL14NGkktweE//h5A2DwJoKytDXYhLOrJ0sfDmXoauQrq0rkt+KXQqkHEE9WUOZ7Zb+Z9YubkpCSx9Ld3pnZDOuhONSW+DVQAXWs0Om5ZUWvJyy9I1tcIj/YM9EYSrIGsLxSXJilYNYr+I4gNVO6AVsDJs0zVRQAtfdSyXYEnHxi4sJ4M4cuvmxEe5ZkVJ7P43t5nB7lpd0uO2ifKJohGYcvWSeHETkJmn4SyBa+kAaEifmyozke2OoB0apc+43WVhtAeK6RYkxRgx7oG0dll/lySrAugXdNkfwlzro3WuSkXufsBA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=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=M/7UaJl0lKO3iRmp8QXe16pxCbdbLBROlcJmi8qd42Q=; b=fmbMIYyqZhT20gWh2vnOL5Nf58/PZIzOTHV8f1LP3uuEUpYXRwuCWSbhdcBylZBSPaoDMVoMRnYYxEbyhS1ccHVx249BfgtZjwgKWZJy4b9WPvSvhqP8SkT5nlpMh2mDBPc7j1+zh4aoS2YxSr/W5xuhAgEPM8R8pBqe3IFDzPw= Received: from BN9PR03CA0119.namprd03.prod.outlook.com (2603:10b6:408:fd::34) by LV3PR12MB9438.namprd12.prod.outlook.com (2603:10b6:408:212::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.11; Wed, 11 Mar 2026 18:49:07 +0000 Received: from BN1PEPF00004689.namprd05.prod.outlook.com (2603:10b6:408:fd:cafe::6b) by BN9PR03CA0119.outlook.office365.com (2603:10b6:408:fd::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9678.26 via Frontend Transport; Wed, 11 Mar 2026 18:48:38 +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 BN1PEPF00004689.mail.protection.outlook.com (10.167.243.134) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.18 via Frontend Transport; Wed, 11 Mar 2026 18:49:07 +0000 Received: from satlexmb08.amd.com (10.181.42.217) 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; Wed, 11 Mar 2026 13:49:07 -0500 Received: from [172.19.71.207] (10.180.168.240) by satlexmb08.amd.com (10.181.42.217) with Microsoft SMTP Server id 15.2.2562.17 via Frontend Transport; Wed, 11 Mar 2026 13:49:06 -0500 Message-ID: <45f5c601-f06d-ae8c-02e6-fb666faa27e6@amd.com> Date: Wed, 11 Mar 2026 11:49:06 -0700 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH V2] accel/amdxdna: Support sensors for column utilization Content-Language: en-US To: Mario Limonciello , , , , CC: "Mario Limonciello (AMD)" , , , References: <20260311171842.473453-1-lizhi.hou@amd.com> <899b5f81-73f9-4915-a613-c3da165ccf4f@amd.com> From: Lizhi Hou In-Reply-To: <899b5f81-73f9-4915-a613-c3da165ccf4f@amd.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN1PEPF00004689:EE_|LV3PR12MB9438:EE_ X-MS-Office365-Filtering-Correlation-Id: 423b461d-957e-4c33-cfcd-08de7f9ee041 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|376014|36860700016|1800799024|22082099003|56012099003|18002099003; X-Microsoft-Antispam-Message-Info: PQ7IlsDkgNU0n1hDc5ldthRepcq9zczQlQ+0HXOa/f8NznzXkD2cFmpfjO6JjPAoP6yOKyiM3Y/Rgd0TT1mUcwdINdbeRThCY3/JHDJwCh5HDNgITRwDiOpcsMK0jmUAn+Rmf/Yk+Wq+loalOHFTYjw8BLN23WDp2kMaEbQPpfzRCyinlyR6RLrNk42yGXqHlA3TpoP4fmgpAfab3jCZIwZ2bm0qJdH+5do5sAhZk3otjMlkGjXfEclsiOhtGgRKtKnHhW7aV1y3j+LJy9soRurLI6oeZuDEQc0oi8PCE0zP/PBfRIwC+sTFmcPMscS/LLUWqiRh9bcRIY84mFKSCBaRX7yYv95LsrjXxtGTSA3pH396tzYsG4dUgnsTz579ydGgvB4wGOALvfNKVeoA8EZx6UhprKPpS4vaaQ5/R674KHR6hayxbBVWnqqlvwV1IaXKB4u/JRx887FGV3O29M61HhiThu8Jyy3n9ljVQ7P4N7Dpj6qW97UyoadmPqvvZ9y7aD3yTTx9QCKeQN9CKmzbqR1cfRgWgmjtvFujevqODEybOxM+eCVuGOUXgrgfVswj7BOvdxYvQe7hgHyKKnqa7qUQ2FlGVaLRMnR5WtmFyckPHeiYasHwmoP49dEu7Mg5DpKqqNkjoZ695W3cuOHqAwalijCDc/COWq0YzJemoIx+m87XIRAu4VfiU8/K5BYtj3M5CoYNzDeCbb5z95/7CtaGblVnkz07xgvjusz816oTjWGmY3bnkvFytYcYzvdfPRBYtMBdndgLY4JvmQ== 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)(82310400026)(376014)(36860700016)(1800799024)(22082099003)(56012099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: JziN+Ly4j8DwLzWbgvfdbUBKXA/5Sq4S+UEHf6kgHI8FSc3RiRwlWA+2v3W6gjSOfruVxhXlyflLTJB49vSp4T4FoRENl3XHVGLGngo5PXhGzCy2bdJMy9c5hmg+9daNZoWDDCCsiv2fQONZqMie+npYmGN2blRsZ071LVd94zVBB8DbGCf3QxoXHTzJlBrCG8arjfS2I8EiVlRuUi3tZXkeitLwpbRRXuGPgo505RQ77WP7jUoAG6iA6fy3a6ZDY7ZEASte3Btbsfi0+egoETqssVrY/yttC0lFVAe35VugSw6UEiSwo2/eknjw5M3XQwkGH/Y+5fLQucvtxSOoM+8oGyxDQAPImv2cv+LEDsQTqZo+jYxDwDdWoHJLIOOSI7rb+y1SLWALnTh5fTZiWsHXxIbbuF37HA2YVaiX7W8dlVaabug+Fa89O2/E5Vsh X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Mar 2026 18:49:07.6729 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 423b461d-957e-4c33-cfcd-08de7f9ee041 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: BN1PEPF00004689.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR12MB9438 Applied to drm-misc-next On 3/11/26 10:21, Mario Limonciello wrote: > > > 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 >>   }; >>     /** >