diff mbox series

[V1,5/7] accel/amdxdna: Add query firmware version

Message ID 20241204213729.3113941-6-lizhi.hou@amd.com (mailing list archive)
State New, archived
Headers show
Series AMD NPU driver improvements | expand

Commit Message

Lizhi Hou Dec. 4, 2024, 9:37 p.m. UTC
Enhance GET_INFO ioctl to support retrieving firmware version.

Signed-off-by: Lizhi Hou <lizhi.hou@amd.com>
---
 drivers/accel/amdxdna/aie2_pci.c | 20 ++++++++++++++++++++
 include/uapi/drm/amdxdna_accel.h | 19 +++++++++++++++++++
 2 files changed, 39 insertions(+)

Comments

Mario Limonciello Dec. 4, 2024, 10:24 p.m. UTC | #1
On 12/4/2024 15:37, Lizhi Hou wrote:
> Enhance GET_INFO ioctl to support retrieving firmware version.
> 
> Signed-off-by: Lizhi Hou <lizhi.hou@amd.com>
> ---
>   drivers/accel/amdxdna/aie2_pci.c | 20 ++++++++++++++++++++
>   include/uapi/drm/amdxdna_accel.h | 19 +++++++++++++++++++
>   2 files changed, 39 insertions(+)
> 
> diff --git a/drivers/accel/amdxdna/aie2_pci.c b/drivers/accel/amdxdna/aie2_pci.c
> index 1c8170325837..83abd16ade11 100644
> --- a/drivers/accel/amdxdna/aie2_pci.c
> +++ b/drivers/accel/amdxdna/aie2_pci.c
> @@ -640,6 +640,23 @@ static int aie2_get_aie_version(struct amdxdna_client *client,
>   	return 0;
>   }
>   
> +static int aie2_get_firmware_version(struct amdxdna_client *client,
> +				     struct amdxdna_drm_get_info *args)
> +{
> +	struct amdxdna_drm_query_firmware_version version;
> +	struct amdxdna_dev *xdna = client->xdna;
> +
> +	version.major = xdna->fw_ver.major;
> +	version.minor = xdna->fw_ver.minor;
> +	version.patch = xdna->fw_ver.sub;
> +	version.build = xdna->fw_ver.build;
> +
> +	if (copy_to_user(u64_to_user_ptr(args->buffer), &version, sizeof(version)))
> +		return -EFAULT;
> +
> +	return 0;
> +}
> +
>   static int aie2_get_clock_metadata(struct amdxdna_client *client,
>   				   struct amdxdna_drm_get_info *args)
>   {
> @@ -752,6 +769,9 @@ static int aie2_get_info(struct amdxdna_client *client, struct amdxdna_drm_get_i
>   	case DRM_AMDXDNA_QUERY_HW_CONTEXTS:
>   		ret = aie2_get_hwctx_status(client, args);
>   		break;
> +	case DRM_AMDXDNA_QUERY_FIRMWARE_VERSION:
> +		ret = aie2_get_firmware_version(client, args);
> +		break;
>   	default:
>   		XDNA_ERR(xdna, "Not supported request parameter %u", args->param);
>   		ret = -EOPNOTSUPP;
> diff --git a/include/uapi/drm/amdxdna_accel.h b/include/uapi/drm/amdxdna_accel.h
> index af12af8bd699..ea86c57beb92 100644
> --- a/include/uapi/drm/amdxdna_accel.h
> +++ b/include/uapi/drm/amdxdna_accel.h
> @@ -375,6 +375,20 @@ struct amdxdna_drm_query_hwctx {
>   	__u64 errors;
>   };
>   
> +/**
> + * struct amdxdna_drm_query_firmware_version - Query the firmware version
> + * @major: The major version number
> + * @minor: The minor version number
> + * @patch: The patch level version number
> + * @build: The build ID
> + */
> +struct amdxdna_drm_query_firmware_version {
> +	__u32 major; /* out */
> +	__u32 minor; /* out */
> +	__u32 patch; /* out */
> +	__u32 build; /* out */
> +};
> +
>   enum amdxdna_drm_get_param {
>   	DRM_AMDXDNA_QUERY_AIE_STATUS,
>   	DRM_AMDXDNA_QUERY_AIE_METADATA,
> @@ -382,6 +396,11 @@ enum amdxdna_drm_get_param {
>   	DRM_AMDXDNA_QUERY_CLOCK_METADATA,
>   	DRM_AMDXDNA_QUERY_SENSORS,
>   	DRM_AMDXDNA_QUERY_HW_CONTEXTS,
> +	DRM_AMDXDNA_READ_AIE_MEM,
> +	DRM_AMDXDNA_READ_AIE_REG,
> +	DRM_AMDXDNA_QUERY_FIRMWARE_VERSION,
> +	DRM_AMDXDNA_GET_POWER_MODE,
> +	DRM_AMDXDNA_QUERY_TELEMETRY,

This is more than DRM_AMDXDNA_QUERY_FIRMWARE_VERSION.

The other ones should go with other patches.
Like DRM_AMDXDNA_GET_POWER_MODE should be in patch 6.

I didn't see DRM_AMDXDNA_READ_AIE_MEM, DRM_AMDXDNA_READ_AIE_REG, or
DRM_AMDXDNA_QUERY_TELEMETRY used in this series, are they just 
placeholders?  Maybe a different patch for the placeholders?


>   	DRM_AMDXDNA_NUM_GET_PARAM,
>   };
>
Lizhi Hou Dec. 5, 2024, 5:14 a.m. UTC | #2
On 12/4/24 14:24, Mario Limonciello wrote:
> On 12/4/2024 15:37, Lizhi Hou wrote:
>> Enhance GET_INFO ioctl to support retrieving firmware version.
>>
>> Signed-off-by: Lizhi Hou <lizhi.hou@amd.com>
>> ---
>>   drivers/accel/amdxdna/aie2_pci.c | 20 ++++++++++++++++++++
>>   include/uapi/drm/amdxdna_accel.h | 19 +++++++++++++++++++
>>   2 files changed, 39 insertions(+)
>>
>> diff --git a/drivers/accel/amdxdna/aie2_pci.c 
>> b/drivers/accel/amdxdna/aie2_pci.c
>> index 1c8170325837..83abd16ade11 100644
>> --- a/drivers/accel/amdxdna/aie2_pci.c
>> +++ b/drivers/accel/amdxdna/aie2_pci.c
>> @@ -640,6 +640,23 @@ static int aie2_get_aie_version(struct 
>> amdxdna_client *client,
>>       return 0;
>>   }
>>   +static int aie2_get_firmware_version(struct amdxdna_client *client,
>> +                     struct amdxdna_drm_get_info *args)
>> +{
>> +    struct amdxdna_drm_query_firmware_version version;
>> +    struct amdxdna_dev *xdna = client->xdna;
>> +
>> +    version.major = xdna->fw_ver.major;
>> +    version.minor = xdna->fw_ver.minor;
>> +    version.patch = xdna->fw_ver.sub;
>> +    version.build = xdna->fw_ver.build;
>> +
>> +    if (copy_to_user(u64_to_user_ptr(args->buffer), &version, 
>> sizeof(version)))
>> +        return -EFAULT;
>> +
>> +    return 0;
>> +}
>> +
>>   static int aie2_get_clock_metadata(struct amdxdna_client *client,
>>                      struct amdxdna_drm_get_info *args)
>>   {
>> @@ -752,6 +769,9 @@ static int aie2_get_info(struct amdxdna_client 
>> *client, struct amdxdna_drm_get_i
>>       case DRM_AMDXDNA_QUERY_HW_CONTEXTS:
>>           ret = aie2_get_hwctx_status(client, args);
>>           break;
>> +    case DRM_AMDXDNA_QUERY_FIRMWARE_VERSION:
>> +        ret = aie2_get_firmware_version(client, args);
>> +        break;
>>       default:
>>           XDNA_ERR(xdna, "Not supported request parameter %u", 
>> args->param);
>>           ret = -EOPNOTSUPP;
>> diff --git a/include/uapi/drm/amdxdna_accel.h 
>> b/include/uapi/drm/amdxdna_accel.h
>> index af12af8bd699..ea86c57beb92 100644
>> --- a/include/uapi/drm/amdxdna_accel.h
>> +++ b/include/uapi/drm/amdxdna_accel.h
>> @@ -375,6 +375,20 @@ struct amdxdna_drm_query_hwctx {
>>       __u64 errors;
>>   };
>>   +/**
>> + * struct amdxdna_drm_query_firmware_version - Query the firmware 
>> version
>> + * @major: The major version number
>> + * @minor: The minor version number
>> + * @patch: The patch level version number
>> + * @build: The build ID
>> + */
>> +struct amdxdna_drm_query_firmware_version {
>> +    __u32 major; /* out */
>> +    __u32 minor; /* out */
>> +    __u32 patch; /* out */
>> +    __u32 build; /* out */
>> +};
>> +
>>   enum amdxdna_drm_get_param {
>>       DRM_AMDXDNA_QUERY_AIE_STATUS,
>>       DRM_AMDXDNA_QUERY_AIE_METADATA,
>> @@ -382,6 +396,11 @@ enum amdxdna_drm_get_param {
>>       DRM_AMDXDNA_QUERY_CLOCK_METADATA,
>>       DRM_AMDXDNA_QUERY_SENSORS,
>>       DRM_AMDXDNA_QUERY_HW_CONTEXTS,
>> +    DRM_AMDXDNA_READ_AIE_MEM,
>> +    DRM_AMDXDNA_READ_AIE_REG,
>> +    DRM_AMDXDNA_QUERY_FIRMWARE_VERSION,
>> +    DRM_AMDXDNA_GET_POWER_MODE,
>> +    DRM_AMDXDNA_QUERY_TELEMETRY,
>
> This is more than DRM_AMDXDNA_QUERY_FIRMWARE_VERSION.
>
> The other ones should go with other patches.
> Like DRM_AMDXDNA_GET_POWER_MODE should be in patch 6.
Ok.
>
> I didn't see DRM_AMDXDNA_READ_AIE_MEM, DRM_AMDXDNA_READ_AIE_REG, or
> DRM_AMDXDNA_QUERY_TELEMETRY used in this series, are they just 
> placeholders?  Maybe a different patch for the placeholders?

Yes. These are placeholders. I can remove them.


Thanks,

Lizhi

>
>
>>       DRM_AMDXDNA_NUM_GET_PARAM,
>>   };
>
diff mbox series

Patch

diff --git a/drivers/accel/amdxdna/aie2_pci.c b/drivers/accel/amdxdna/aie2_pci.c
index 1c8170325837..83abd16ade11 100644
--- a/drivers/accel/amdxdna/aie2_pci.c
+++ b/drivers/accel/amdxdna/aie2_pci.c
@@ -640,6 +640,23 @@  static int aie2_get_aie_version(struct amdxdna_client *client,
 	return 0;
 }
 
+static int aie2_get_firmware_version(struct amdxdna_client *client,
+				     struct amdxdna_drm_get_info *args)
+{
+	struct amdxdna_drm_query_firmware_version version;
+	struct amdxdna_dev *xdna = client->xdna;
+
+	version.major = xdna->fw_ver.major;
+	version.minor = xdna->fw_ver.minor;
+	version.patch = xdna->fw_ver.sub;
+	version.build = xdna->fw_ver.build;
+
+	if (copy_to_user(u64_to_user_ptr(args->buffer), &version, sizeof(version)))
+		return -EFAULT;
+
+	return 0;
+}
+
 static int aie2_get_clock_metadata(struct amdxdna_client *client,
 				   struct amdxdna_drm_get_info *args)
 {
@@ -752,6 +769,9 @@  static int aie2_get_info(struct amdxdna_client *client, struct amdxdna_drm_get_i
 	case DRM_AMDXDNA_QUERY_HW_CONTEXTS:
 		ret = aie2_get_hwctx_status(client, args);
 		break;
+	case DRM_AMDXDNA_QUERY_FIRMWARE_VERSION:
+		ret = aie2_get_firmware_version(client, args);
+		break;
 	default:
 		XDNA_ERR(xdna, "Not supported request parameter %u", args->param);
 		ret = -EOPNOTSUPP;
diff --git a/include/uapi/drm/amdxdna_accel.h b/include/uapi/drm/amdxdna_accel.h
index af12af8bd699..ea86c57beb92 100644
--- a/include/uapi/drm/amdxdna_accel.h
+++ b/include/uapi/drm/amdxdna_accel.h
@@ -375,6 +375,20 @@  struct amdxdna_drm_query_hwctx {
 	__u64 errors;
 };
 
+/**
+ * struct amdxdna_drm_query_firmware_version - Query the firmware version
+ * @major: The major version number
+ * @minor: The minor version number
+ * @patch: The patch level version number
+ * @build: The build ID
+ */
+struct amdxdna_drm_query_firmware_version {
+	__u32 major; /* out */
+	__u32 minor; /* out */
+	__u32 patch; /* out */
+	__u32 build; /* out */
+};
+
 enum amdxdna_drm_get_param {
 	DRM_AMDXDNA_QUERY_AIE_STATUS,
 	DRM_AMDXDNA_QUERY_AIE_METADATA,
@@ -382,6 +396,11 @@  enum amdxdna_drm_get_param {
 	DRM_AMDXDNA_QUERY_CLOCK_METADATA,
 	DRM_AMDXDNA_QUERY_SENSORS,
 	DRM_AMDXDNA_QUERY_HW_CONTEXTS,
+	DRM_AMDXDNA_READ_AIE_MEM,
+	DRM_AMDXDNA_READ_AIE_REG,
+	DRM_AMDXDNA_QUERY_FIRMWARE_VERSION,
+	DRM_AMDXDNA_GET_POWER_MODE,
+	DRM_AMDXDNA_QUERY_TELEMETRY,
 	DRM_AMDXDNA_NUM_GET_PARAM,
 };