From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=185.132.180.163 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793976189; b=lB72io5wO2MLlZd7+94Jy9Ci2nwekzt0UtZMATiC5+BDhA1Lp0QYSVIHNoq2bK7x4O0r Uy7jOHra0YK/aK7+yVbP3U2VwRdFa3DGh/Id+E6xRgP6NTY7n46obDVh0IcgdHjQtEqpM 7RW8/F2LgpQIIvhmvZrodu300BnG3LAbV24Cya207iaMiLCZf7z3LvDppXUDA770n4/kJ +obFg7fa9GOcsJIgHfmS968ULhXa59IkIeVfSOL0OgVbB7FjqSFEZwV91lL2Q25B7+JE/ BzfNANlOco1+GD+uDIU6k/i6e0jsjAlR+3hSH2Hq/uYcaGpOPywUmCyAfdZgKAm0rlw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793976189; h=DMARC-Filter:Received:DKIM-Signature:Received:Received:From:Date: Subject:MIME-Version:Content-Type:Content-Transfer-Encoding: Message-ID:X-B4-Tracking:X-Change-ID:To:CC:X-Mailer: X-Developer-Signature:X-Developer-Key:X-Originating-IP: X-Proofpoint-Spam-Details-Enc:X-Proofpoint-GUID: X-Proofpoint-ORIG-GUID:X-Authority-Analysis:X-Proofpoint-Spam-Info; bh=afKRoa4LbV4htm6pkon4V5tCJ3Npdx9Kujo0AmaTWO0=; b=fsZ+xoFdHiiOEnain/mr5r1Q8DlAALHGiHZ0BJV9U+iJArDrc8K3nFH9kmJIrNnZmbiR 5K9TyunkXYs+CouzSVWzljPgoVspJmthG3r3GSJsBHgLCrYs5LSdV7mdwkVmYq5VKj9DY e8e4saE17TIvTXpuq01UDOJP1RirSKSk9/vmKfXbVmXsvHdQ6idZYLQjT5h+gqqrBdj+K IUzaWqhjr6DleC4AxmvV7ANshKzGBiF+nYNHeRlrl+3rprQc4mlIHriaVlJUf2JFyefDa uWoL0dIXGUVL4ZWNlXTLTmOrS+zVox3SrJZLfDMgrenVcozOvFreU9V2w11NBWShrjw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=imgtec.com; spf=pass smtp.mailfrom=imgtec.com; dkim=pass header.d=imgtec.com header.i=@imgtec.com header.a=rsa-sha256 header.s=dk201812 header.b=FqkZh5Eo; arc=none smtp.remote-ip=185.132.180.163 Received: from mx07-00376f01.pphosted.com (mx07-00376f01.pphosted.com [185.132.180.163]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 24AD9606D82D for ; Fri, 6 Nov 2026 14:43:07 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 24AD9606D82D Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=imgtec.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=imgtec.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=imgtec.com header.i=@imgtec.com header.a=rsa-sha256 header.s=dk201812 header.b=FqkZh5Eo Received: from pps.filterd (m0168889.ppops.net [127.0.0.1]) by mx07-00376f01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6A6ER8Vk2487470; Fri, 6 Nov 2026 14:42:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=imgtec.com; h=cc :content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=dk201812; bh=afKRoa4LbV4htm6pkon4V5t CJ3Npdx9Kujo0AmaTWO0=; b=FqkZh5EoTq8wuxAr0stD4+I6nXKtGchC0sqpYKo I546MKlKJxF/u36qk296pCqvo3Grn5go7NRuQUVxUs7F0ocHuJuhDIU8iFi6CTmH pHjrB+6T0f+HJ4Qb0EvZ9dcveW2qHzTCR6CH5n4GY/tvileodyAOVZaho/ysMKB9 QZi+t2tJ/F4Ok93kRRJAm1NnpM0VW21rvV+UX5kvj72NorY1P0PMnUOeiarV+YI4 pz7/pPPepK3XSC72VyKk+YO95G6SZG7Mt9v7Y7tlpMJKXRBcc4YfCEaW6NXUe0cM lSMYCfiwH0GF+GXMgggr2Y0nZOWuKRPmllSFfEcwaZVt2Jg== Received: from hhmail01.hh.imgtec.org (83-244-153-141.cust-83.exponential-e.net [83.244.153.141]) by mx07-00376f01.pphosted.com (PPS) with ESMTPS id 4hry5frqbg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 06 Nov 2026 14:42:48 +0000 (GMT) Received: from [127.0.1.1] (172.25.128.158) by HHMAIL01.hh.imgtec.org (10.100.10.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.56; Fri, 6 Nov 2026 14:42:44 +0000 From: Brajesh Gupta Date: Fri, 6 Nov 2026 20:12:23 +0530 Subject: [PATCH v5] drm/imagination: Support for querying Firmware information X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-ID: <20261106-fwversion-v5-1-d0074f992e75@imgtec.com> X-B4-Tracking: v=1; b=H4sIAE7n7WoC/3XMvQ6CMBQF4Fchna3pL6VOvodxaMstdABMIVVDe HcLEwYd7nBuzndmNEIMMKJLMaMIKYxh6HOQpwK51vQN4FDnjBhhJc2H/TNBXFtYS1Mxo6nXXqH cf0Tw4bVt3e45t2GchvjephNdv79WEsUUc6ipcqW0Xrhr6JoJ3NkNHVpnEvtLWabWEiad5oYIc 6B8T9We8kw9L3kNUjMi7YGKPa32VGRqnKmk4tIwq77osiwf7H9X41QBAAA= X-Change-ID: 20261026-fwversion-95a82a91f9f7 To: Alessio Belle , Luigi Santivetti , Frank Binns , "Maarten Lankhorst" , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter CC: , , , Brajesh Gupta X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=7413; i=brajesh.gupta@imgtec.com; h=from:subject:message-id; bh=u0qpUd0/wftmnTEyRoJw1vHyKz8+6U2x2fO/4i0mYms=; b=owEBbQKS/ZANAwAKAdAmd1l+AvFwAcsmYgBq7edjHgObVsMX3yiCdjV0y7yaWqov7q+UDec5K 8OjOYSIlluJAjMEAAEKAB0WIQSQIkZAwD1cxcAsz3LQJndZfgLxcAUCau3nYwAKCRDQJndZfgLx cIM6D/9olhXrCsIcYN2fnQepWWdQ4ZjFnq+MSiw7CiIuDowYJ46yPcQLDkwY1zUf2kv/TfHeltT BAsMbyFNGbrYCtBKYBllNcvo2yPENlTLn5DMkhqzywnEOY1zzTCW/BdocWz5YqFN87/RfvJKo37 2medzO6NRLKFhALIXPDjYWRkMvAZMLY2ye/jhvW3MsOhGr6jhAeoo2lD73adH+dV7H5CDVsPbnG gGxg3YEkNWEwAF75i9X5+ZDt7CG74isoFS8R9CMKaZXzsvKZ3eDTs0mTMARfGCVbb2HF3fyZ22Z d5dxyee7h6bPfkU1ipnBY83HxhajUnb+J/LwFfvUqU363WdGkOE7M/QFr7xQsgobxAkpI0UoOoq /LkI69RsxsNTKp2CL+Tbho4cyrbHO4Y4MlZDe6aUjz7ZPY0IZ0uG+SEi7cGogzmh9s2hMOsiFVf uv18T1xToFTf2O/LWxbvs7Zrd4PnTWaFaRDJMlvlSklRxdcXa2CSVl/v6BjQiwhSZO8MVAATh1A r0zjJuhRnglH+5HHqDIpqkprOfDFvUbzSuXFuGHDJvqMOfWMD0KIYf/mDWBEUUgeFvrZ+c8pEla R+YsE861e4PNbC2JNnLyKQRzPwaJlEFIeBFfQta1t+1TTUEWJCpYBMThIha5IclKZ4glNHKTlfd Sd6lmn9AdvkpA3A== X-Developer-Key: i=brajesh.gupta@imgtec.com; a=openpgp; fpr=05BAA300FD5C580EFD3F8D2F073292BAD0D39671 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMTA2MDA1OCBTYWx0ZWRfX+Iny8ltPmOQU 43KvThRIQY1hurBH1LqueNSomiREFPUQRnMV2+4+cqC45W6oOx4uuCf30we8R0r68jAQd6amExP Fe/VuUTHr5/AV/KdHUo8TBRk3/f2HTSnkd8Td6m9gscYaZGtEa6eaVFNnR+iJJMcyPfKzPVQu3S oQsSeQjgm9O9f7skVGWM93r5D3zXfZmNwbcU8T8GhWEykjTZ8ixH8KnQTWgRsLstO8SSsXCBPG8 0FM2+QydHvBcSQ0f94mzwNNS9tIQBkn98M9EpOYkopS/W2L8Dz8/FFhELsuW0HhhAbtSuf3ilAN y/bqIdoGIDUZMQLcEJaTsO7H7OoBGwUihJEas8+7MN/vr1GuF/9hRc1UhHI538kKQIiJeC3Vssa mzJzcq0ri8EUEb/ulsozYhMGR+87t0IQU9sOHIFYYZbypen+xT6uWD3X8BVCKBlsZcZNAZl6CD8 6XkSPGbtGTVE5bq4MBA== X-Proofpoint-GUID: 1tDAhF8pY1ad2pOZLHVkOCkJLC6fnUgP X-Proofpoint-ORIG-GUID: 1tDAhF8pY1ad2pOZLHVkOCkJLC6fnUgP X-Authority-Analysis: v=2.4 cv=B40sQ+tM c=1 sm=1 tr=0 ts=6aede768 cx=c_pps a=AKOq//PuzOIrVTIF9yBwbA==:117 a=AKOq//PuzOIrVTIF9yBwbA==:17 a=x1VBDH5lXswA:10 a=IkcTkHD0fZMA:10 a=zJRp6_cAMcgA:10 a=VkNPw1HP01LnGYTKEx00:22 a=kQ-hrUj2-E3RCbRHssb7:22 a=7RYWX5rxfSByPNLylY2M:22 a=e5mUnYsNAAAA:8 a=bC-a23v3AAAA:8 a=r_1tXGB3AAAA:8 a=VwQbUJbxAAAA:8 a=QyXUC8HyAAAA:8 a=pGLkceISAAAA:8 a=DXV5632NrbJo1gk5ZQUA:9 a=QEXdDO2ut3YA:10 a=Vxmtnl_E_bksehYqCbjh:22 a=FO4_E8m0qiDe52t0p3_H:22 a=t8nPyN_e6usw4ciXM-Pk:22 X-Proofpoint-Spam-Info: AW1haW4tMjYxMTA2MDA1OCBTYWx0ZWRfX1ddxS4WzpeJJ hHZc9TeBH6OX5fFN8hwn4RKOIkSC3W4K84IWTs6otiEytSsq+Kpnm+u+OTNl13IqEMmmfvK8+uz qbn9jBA6+6Dg4Ru7xnkKFGknJuo/bqs= Add a new subtype DRM_PVR_DEV_QUERY_FW_INFO_GET under DRM_IOCTL_PVR_DEV_QUERY to query Firmware information. This allows the userspace to detect any bug fixes and features present in the Firmware and take appropriate action. Currently it supports querying major and minor version of the Firmware. Signed-off-by: Brajesh Gupta Reviewed-by: Alessio Belle --- Changes in v5: - Added reviewed-by tag to the description. - Added reference to corresponding MESA MR https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40973 that needs this change. - Link to v4: https://patch.msgid.link/20261028-fwversion-v4-1-aca85735a2b7@imgtec.com Changes in v4: - Add description for the new interface introduced. - Link to v3: https://patch.msgid.link/20261027-fwversion-v3-1-f363de59205b@imgtec.com Changes in v3: - Add missed check for padding field added in v2. - Link to v2: https://lore.kernel.org/r/20261026-fwversion-v2-1-bb025c93a04a@imgtec.com Changes in v2: - Add padding field to align new FW query struct to 64-bit. - Link to v1: https://patch.msgid.link/20261026-fwversion-v1-1-3ed17c65bf4c@imgtec.com To: Alessio Belle To: Luigi Santivetti To: Maarten Lankhorst To: Maxime Ripard To: Thomas Zimmermann To: David Airlie To: Simona Vetter Cc: imagination@lists.freedesktop.org Cc: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org --- drivers/gpu/drm/imagination/pvr_drv.c | 5 ++++ drivers/gpu/drm/imagination/pvr_drv.h | 4 ++- drivers/gpu/drm/imagination/pvr_fw.c | 46 +++++++++++++++++++++++++++++++++++ drivers/gpu/drm/imagination/pvr_fw.h | 3 +++ include/uapi/drm/pvr_drm.h | 21 ++++++++++++++++ 5 files changed, 78 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/imagination/pvr_drv.c b/drivers/gpu/drm/imagination/pvr_drv.c index 5c965ef0274f..2d522a8e46ad 100644 --- a/drivers/gpu/drm/imagination/pvr_drv.c +++ b/drivers/gpu/drm/imagination/pvr_drv.c @@ -6,6 +6,7 @@ #include "pvr_device.h" #include "pvr_drv.h" #include "pvr_free_list.h" +#include "pvr_fw.h" #include "pvr_gem.h" #include "pvr_hwrt.h" #include "pvr_job.h" @@ -658,6 +659,10 @@ pvr_ioctl_dev_query(struct drm_device *drm_dev, void *raw_args, case DRM_PVR_DEV_QUERY_STATIC_DATA_AREAS_GET: ret = pvr_static_data_areas_get(pvr_dev, args); break; + + case DRM_PVR_DEV_QUERY_FW_INFO_GET: + ret = pvr_fw_info_get(pvr_dev, args); + break; } drm_dev_exit(idx); diff --git a/drivers/gpu/drm/imagination/pvr_drv.h b/drivers/gpu/drm/imagination/pvr_drv.h index 7fa147312dd1..4e058a6fdd5c 100644 --- a/drivers/gpu/drm/imagination/pvr_drv.h +++ b/drivers/gpu/drm/imagination/pvr_drv.h @@ -13,9 +13,10 @@ /* * Driver interface version: * - 1.0: Initial interface + * - 1.1: Add DRM_PVR_DEV_QUERY_FW_INFO_GET query */ #define PVR_DRIVER_MAJOR 1 -#define PVR_DRIVER_MINOR 0 +#define PVR_DRIVER_MINOR 1 #define PVR_DRIVER_PATCHLEVEL 0 int pvr_get_uobj(u64 usr_ptr, u32 usr_size, u32 min_size, u32 obj_size, void *out); @@ -68,6 +69,7 @@ int pvr_set_uobj_array(const struct drm_pvr_obj_array *out, u32 min_stride, u32 PVR_UOBJ_DECL(struct drm_pvr_dev_query_heap_info, heaps) \ PVR_UOBJ_DECL(struct drm_pvr_static_data_area, offset) \ PVR_UOBJ_DECL(struct drm_pvr_dev_query_static_data_areas, static_data_areas) \ + PVR_UOBJ_DECL(struct drm_pvr_dev_query_fw_info, _padding_4) \ ) /** diff --git a/drivers/gpu/drm/imagination/pvr_fw.c b/drivers/gpu/drm/imagination/pvr_fw.c index c6c77b152342..d014a34b4f1f 100644 --- a/drivers/gpu/drm/imagination/pvr_fw.c +++ b/drivers/gpu/drm/imagination/pvr_fw.c @@ -4,6 +4,7 @@ #include "pvr_ccb.h" #include "pvr_device.h" #include "pvr_device_info.h" +#include "pvr_drv.h" #include "pvr_fw.h" #include "pvr_fw_info.h" #include "pvr_fw_startstop.h" @@ -1496,3 +1497,48 @@ pvr_fw_hard_reset(struct pvr_device *pvr_dev) return 0; } + +/** + * pvr_fw_info_get() + * @pvr_dev: Device pointer. + * @args: [IN] Device query arguments containing a pointer to a userspace + * struct drm_pvr_dev_query_fw_info. + * + * If the query object pointer is NULL, the size field is updated with the + * expected size of the query object. + * + * Returns: + * * 0 on success, or if size is requested using a NULL pointer, or + * * -%EINVAL if args contained non-zero reserved fields or + * if the input object is smaller than the minimum required, or + * * -%EFAULT if local memory could not be copied to userspace. + */ +int +pvr_fw_info_get(const struct pvr_device *pvr_dev, + struct drm_pvr_ioctl_dev_query_args *args) +{ + struct drm_pvr_dev_query_fw_info fw_info = {0}; + int err; + + if (!args->pointer) { + args->size = sizeof(struct drm_pvr_dev_query_fw_info); + return 0; + } + + err = PVR_UOBJ_GET(fw_info, args->size, args->pointer); + if (err < 0) + return err; + if (fw_info._padding_4) + return -EINVAL; + + fw_info.major_version = pvr_dev->fw_version.major; + fw_info.minor_version = pvr_dev->fw_version.minor; + + err = PVR_UOBJ_SET(args->pointer, args->size, fw_info); + if (err < 0) + return err; + + if (args->size > sizeof(fw_info)) + args->size = sizeof(fw_info); + return 0; +} diff --git a/drivers/gpu/drm/imagination/pvr_fw.h b/drivers/gpu/drm/imagination/pvr_fw.h index 4b25291135b6..7e18f3e7d4be 100644 --- a/drivers/gpu/drm/imagination/pvr_fw.h +++ b/drivers/gpu/drm/imagination/pvr_fw.h @@ -496,4 +496,7 @@ int pvr_fw_process_elf_command_stream(struct pvr_device *pvr_dev, const u8 *fw, u8 *fw_code_ptr, u8 *fw_data_ptr, u8 *fw_core_code_ptr, u8 *fw_core_data_ptr); +int +pvr_fw_info_get(const struct pvr_device *pvr_dev, struct drm_pvr_ioctl_dev_query_args *args); + #endif /* PVR_FW_H */ diff --git a/include/uapi/drm/pvr_drm.h b/include/uapi/drm/pvr_drm.h index ccf6c2112468..1179c1e7d92d 100644 --- a/include/uapi/drm/pvr_drm.h +++ b/include/uapi/drm/pvr_drm.h @@ -434,6 +434,21 @@ struct drm_pvr_dev_query_static_data_areas { struct drm_pvr_obj_array static_data_areas; }; +/** + * struct drm_pvr_dev_query_fw_info - Container used to fetch information + * about the GPU Firmware like its version. + */ +struct drm_pvr_dev_query_fw_info { + /** @major_version: Major version of the Firmware. */ + __u16 major_version; + + /** @minor_version: Minor version of the Firmware. */ + __u16 minor_version; + + /** @_padding_4: Reserved. This field must be zeroed. */ + __u32 _padding_4; +}; + /** * enum drm_pvr_dev_query - For use with &drm_pvr_ioctl_dev_query_args.type to * indicate the type of the receiving container. @@ -476,6 +491,12 @@ enum drm_pvr_dev_query { * a pointer to &struct drm_pvr_dev_query_static_data_areas. */ DRM_PVR_DEV_QUERY_STATIC_DATA_AREAS_GET, + + /** + * @DRM_PVR_DEV_QUERY_FW_INFO_GET: The dev query args contain + * a pointer to &struct drm_pvr_dev_query_fw_info. + */ + DRM_PVR_DEV_QUERY_FW_INFO_GET, }; /** --- base-commit: a8fe4e162ba8212b7e51fdb024b37800f36b496c change-id: 20261026-fwversion-95a82a91f9f7 Best regards, -- Brajesh Gupta