Commit 1bc728dc authored by Matt Roper's avatar Matt Roper Committed by Rodrigo Vivi

drm/xe: Update query uapi to support standalone media

Now that a higher GT count can result from either multiple tiles (with
one GT each) or an extra media GT within the root tile, we need to
update the query code slightly to stop looking at tile_count.

FIXME: As noted previously, we need to decide on a formal direction for
exposing tiles and/or GTs to userspace.

v2:
 - Drop num_gt() function in favor of stored xe->info.gt_count.  (Brian)
v3:
 - Keep XE_QUERY_GT_TYPE_REMOTE around for now.  Userspace probably
   doesn't actually need this, and we may remove it in the future, but
   for now let's avoid changing uapi.  (Brian)

Cc: Brian Welty <brian.welty@intel.com>
Reviewed-by: default avatarBrian Welty <brian.welty@intel.com>
Link: https://lore.kernel.org/r/20230601215244.678611-30-matthew.d.roper@intel.comSigned-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
Signed-off-by: default avatarRodrigo Vivi <rodrigo.vivi@intel.com>
parent 37efea9c
......@@ -192,7 +192,7 @@ static int query_config(struct xe_device *xe, struct drm_xe_device_query *query)
xe->info.vram_flags & XE_VRAM_FLAGS_NEED64K ? SZ_64K : SZ_4K;
config->info[XE_QUERY_CONFIG_VA_BITS] = 12 +
(9 * (xe->info.vm_max_level + 1));
config->info[XE_QUERY_CONFIG_GT_COUNT] = xe->info.tile_count;
config->info[XE_QUERY_CONFIG_GT_COUNT] = xe->info.gt_count;
config->info[XE_QUERY_CONFIG_MEM_REGION_COUNT] =
hweight_long(xe->info.mem_region_mask);
config->info[XE_QUERY_CONFIG_MAX_ENGINE_PRIORITY] =
......@@ -211,7 +211,7 @@ static int query_gts(struct xe_device *xe, struct drm_xe_device_query *query)
{
struct xe_gt *gt;
size_t size = sizeof(struct drm_xe_query_gts) +
xe->info.tile_count * sizeof(struct drm_xe_query_gt);
xe->info.gt_count * sizeof(struct drm_xe_query_gt);
struct drm_xe_query_gts __user *query_ptr =
u64_to_user_ptr(query->data);
struct drm_xe_query_gts *gts;
......@@ -228,14 +228,14 @@ static int query_gts(struct xe_device *xe, struct drm_xe_device_query *query)
if (XE_IOCTL_ERR(xe, !gts))
return -ENOMEM;
gts->num_gt = xe->info.tile_count;
gts->num_gt = xe->info.gt_count;
for_each_gt(gt, xe, id) {
if (id == 0)
gts->gts[id].type = XE_QUERY_GT_TYPE_MAIN;
else if (xe_gt_is_media_type(gt))
if (xe_gt_is_media_type(gt))
gts->gts[id].type = XE_QUERY_GT_TYPE_MEDIA;
else
else if (gt_to_tile(gt)->id > 0)
gts->gts[id].type = XE_QUERY_GT_TYPE_REMOTE;
else
gts->gts[id].type = XE_QUERY_GT_TYPE_MAIN;
gts->gts[id].instance = id;
gts->gts[id].clock_freq = gt->info.clock_freq;
if (!IS_DGFX(xe))
......@@ -290,7 +290,7 @@ static int query_hwconfig(struct xe_device *xe,
static size_t calc_topo_query_size(struct xe_device *xe)
{
return xe->info.tile_count *
return xe->info.gt_count *
(3 * sizeof(struct drm_xe_query_topology_mask) +
sizeof_field(struct xe_gt, fuse_topo.g_dss_mask) +
sizeof_field(struct xe_gt, fuse_topo.c_dss_mask) +
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment