diff --git a/drivers/gpu/drm/panthor/panthor_device.h b/drivers/gpu/drm/panthor/panthor_device.h index e388c0472ba783ab777227595c4a8d155dbf65bb..224c53dcfe6d5bca35ab68d3f5dd3f5c3016a3e3 100644 --- a/drivers/gpu/drm/panthor/panthor_device.h +++ b/drivers/gpu/drm/panthor/panthor_device.h @@ -100,6 +100,9 @@ struct panthor_device { /** @csif_info: Command stream interface information. */ struct drm_panthor_csif_info csif_info; + /** @fw_info: Firmware info for the global interface */ + struct drm_panthor_fw_info fw_info; + /** @gpu: GPU management data. */ struct panthor_gpu *gpu; diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/panthor/panthor_drv.c index 0caf9e9a8c453fc3822020dd35e120b3ea81a071..d0f9b122c6bc946c637d17d2bd721273931a1045 100644 --- a/drivers/gpu/drm/panthor/panthor_drv.c +++ b/drivers/gpu/drm/panthor/panthor_drv.c @@ -170,6 +170,7 @@ panthor_get_uobj_array(const struct drm_panthor_obj_array *in, u32 min_stride, PANTHOR_UOBJ_DECL(struct drm_panthor_gpu_info, tiler_present), \ PANTHOR_UOBJ_DECL(struct drm_panthor_csif_info, pad), \ PANTHOR_UOBJ_DECL(struct drm_panthor_timestamp_info, current_timestamp), \ + PANTHOR_UOBJ_DECL(struct drm_panthor_fw_info, group_num), \ PANTHOR_UOBJ_DECL(struct drm_panthor_sync_op, timeline_value), \ PANTHOR_UOBJ_DECL(struct drm_panthor_queue_submit, syncs), \ PANTHOR_UOBJ_DECL(struct drm_panthor_queue_create, ringbuf_size), \ @@ -798,6 +799,10 @@ static int panthor_ioctl_dev_query(struct drm_device *ddev, void *data, struct d args->size = sizeof(timestamp_info); return 0; + case DRM_PANTHOR_DEV_QUERY_FW_INFO: + args->size = sizeof(ptdev->fw_info); + return 0; + default: return -EINVAL; } @@ -818,6 +823,9 @@ static int panthor_ioctl_dev_query(struct drm_device *ddev, void *data, struct d return PANTHOR_UOBJ_SET(args->pointer, args->size, timestamp_info); + case DRM_PANTHOR_DEV_QUERY_FW_INFO: + return PANTHOR_UOBJ_SET(args->pointer, args->size, ptdev->fw_info); + default: return -EINVAL; } diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/panthor/panthor_sched.c index 42afdf0ddb7ece54971912e3bb4353e3d37656ae..3d0cedcea8556fd94f594d1f33a41c6e3be22711 100644 --- a/drivers/gpu/drm/panthor/panthor_sched.c +++ b/drivers/gpu/drm/panthor/panthor_sched.c @@ -3518,6 +3518,10 @@ int panthor_sched_init(struct panthor_device *ptdev) ptdev->csif_info.cs_slot_count = sched->cs_slot_count; ptdev->csif_info.scoreboard_slot_count = sched->sb_slot_count; + ptdev->fw_info.version = glb_iface->control->version; + ptdev->fw_info.features = glb_iface->control->features; + ptdev->fw_info.group_num = glb_iface->control->group_num; + sched->last_tick = 0; sched->resched_target = U64_MAX; sched->tick_period = msecs_to_jiffies(10); diff --git a/include/uapi/drm/panthor_drm.h b/include/uapi/drm/panthor_drm.h index 1fd8473548ac63d7433162d7bb54eda02e8fefb4..4cca9b05d7ee6f8f15225d3b3c48c5a9e66b04d4 100644 --- a/include/uapi/drm/panthor_drm.h +++ b/include/uapi/drm/panthor_drm.h @@ -263,6 +263,9 @@ enum drm_panthor_dev_query_type { /** @DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO: Query timestamp information. */ DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO, + + /** @DRM_PANTHOR_DEV_QUERY_FW_INFO: Query firmware information */ + DRM_PANTHOR_DEV_QUERY_FW_INFO, }; /** @@ -380,6 +383,20 @@ struct drm_panthor_csif_info { __u32 pad; }; +/** struct drm_panthor_fw_info - FW information + * + * Structure grouping all queryable information relating to the global FW interface. + */ + +struct drm_panthor_fw_info { + /** @version: Firmware interface version */ + __u32 version; + /** @features: Firmware interface features */ + __u32 features; + /** @group_num: Number of CSG interfaces */ + __u32 group_num; +}; + /** * struct drm_panthor_timestamp_info - Timestamp information *