public inbox for drm-ai-reviews@public-inbox.freedesktop.org
 help / color / mirror / Atom feed
From: Lizhi Hou <lizhi.hou@amd.com>
To: Mario Limonciello <mario.limonciello@amd.com>,
	<ogabbay@kernel.org>, <quic_jhugo@quicinc.com>,
	<dri-devel@lists.freedesktop.org>,
	<maciej.falkowski@linux.intel.com>
Cc: "Mario Limonciello (AMD)" <superm1@kernel.org>,
	<linux-kernel@vger.kernel.org>, <max.zhen@amd.com>,
	<sonal.santan@amd.com>
Subject: Re: [PATCH V2] accel/amdxdna: Support sensors for column utilization
Date: Wed, 11 Mar 2026 11:49:06 -0700	[thread overview]
Message-ID: <45f5c601-f06d-ae8c-02e6-fb666faa27e6@amd.com> (raw)
In-Reply-To: <899b5f81-73f9-4915-a613-c3da165ccf4f@amd.com>

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)" <superm1@kernel.org>
>>
>> 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) <superm1@kernel.org>
>> Reviewed-by: Lizhi Hou <lizhi.hou@amd.com>
>> [lizhi: support legacy tool which uses small buffer. checkpatch cleanup]
>> Signed-off-by: Lizhi Hou <lizhi.hou@amd.com>
>
> 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
>>   };
>>     /**
>

  reply	other threads:[~2026-03-11 18:49 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-11 17:18 [PATCH V2] accel/amdxdna: Support sensors for column utilization Lizhi Hou
2026-03-11 17:21 ` Mario Limonciello
2026-03-11 18:49   ` Lizhi Hou [this message]
2026-03-11 20:48 ` Claude review: " Claude Code Review Bot
2026-03-11 20:48 ` Claude Code Review Bot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=45f5c601-f06d-ae8c-02e6-fb666faa27e6@amd.com \
    --to=lizhi.hou@amd.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maciej.falkowski@linux.intel.com \
    --cc=mario.limonciello@amd.com \
    --cc=max.zhen@amd.com \
    --cc=ogabbay@kernel.org \
    --cc=quic_jhugo@quicinc.com \
    --cc=sonal.santan@amd.com \
    --cc=superm1@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox