diff --git a/src/intel/dev/xe/intel_device_info.c b/src/intel/dev/xe/intel_device_info.c index bfd78802b5f..a497cbfe63b 100644 --- a/src/intel/dev/xe/intel_device_info.c +++ b/src/intel/dev/xe/intel_device_info.c @@ -186,7 +186,7 @@ static void xe_compute_topology(struct intel_device_info * devinfo, const uint8_t *geo_dss_mask, const uint32_t geo_dss_num_bytes, - const uint32_t eu_per_dss_mask, + const uint64_t eu_per_dss_mask, const unsigned l3_banks) { intel_device_info_topology_reset_masks(devinfo); @@ -214,7 +214,7 @@ xe_compute_topology(struct intel_device_info * devinfo, uint32_t dss_mask; struct { bool enabled; - uint32_t eu_mask; + uint64_t eu_mask; } dual_subslice[INTEL_DEVICE_MAX_SUBSLICES]; } slices[INTEL_DEVICE_MAX_SLICES] = {}; @@ -257,7 +257,7 @@ xe_compute_topology(struct intel_device_info * devinfo, ss / 8] |= (1u << (ss % 8)); for (unsigned eu = 0; eu < devinfo->max_eus_per_subslice; eu++) { - if (!(slices[s].dual_subslice[ss].eu_mask & (1u << eu))) + if (!(slices[s].dual_subslice[ss].eu_mask & (1ULL << eu))) continue; devinfo->eu_masks[s * devinfo->eu_slice_stride + @@ -285,7 +285,8 @@ xe_query_topology(int fd, struct intel_device_info *devinfo) if (!topology) return false; - uint32_t geo_dss_num_bytes = 0, eu_per_dss_mask = 0; + uint64_t eu_per_dss_mask = 0; + uint32_t geo_dss_num_bytes = 0; uint8_t *geo_dss_mask = NULL, *tmp; unsigned l3_banks = 0; const struct drm_xe_query_topology_mask *head = topology; @@ -306,9 +307,9 @@ xe_query_topology(int fd, struct intel_device_info *devinfo) break; case DRM_XE_TOPO_EU_PER_DSS: case DRM_XE_TOPO_SIMD16_EU_PER_DSS: - assert(topology->num_bytes <= sizeof(uint32_t)); + assert(topology->num_bytes <= sizeof(eu_per_dss_mask)); for (int i = 0; i < topology->num_bytes; i++) - eu_per_dss_mask |= topology->mask[i] << (8 * i); + eu_per_dss_mask |= ((uint64_t)topology->mask[i]) << (8 * i); break; } }