diff --git a/src/intel/dev/intel_device_info.c b/src/intel/dev/intel_device_info.c index 8306b0ce78c..b104110df56 100644 --- a/src/intel/dev/intel_device_info.c +++ b/src/intel/dev/intel_device_info.c @@ -1338,6 +1338,37 @@ intel_device_info_update_l3_banks(struct intel_device_info *devinfo) } } +/* Returns the number of EUs of the first subslice enabled */ +uint32_t +intel_device_info_get_eu_count_first_subslice(const struct intel_device_info *devinfo) +{ + uint32_t first_subslice, first_slice, offset, i; + uint32_t eu_count = 0; + + first_slice = ffs(devinfo->slice_masks); + first_slice--; + offset = first_slice * devinfo->subslice_slice_stride; + + for (i = 0; i < DIV_ROUND_UP(devinfo->max_subslices_per_slice, 8); i++) { + first_subslice = ffs(devinfo->subslice_masks[offset + i]); + + if (first_subslice == 0) + continue; + + break; + } + + assert(first_subslice > 0); + first_subslice--; + offset = first_slice * devinfo->eu_slice_stride + + first_subslice * devinfo->eu_subslice_stride; + for (i = 0; i < DIV_ROUND_UP(devinfo->max_eus_per_subslice, 8); i++) + eu_count += __builtin_popcount(devinfo->eu_masks[offset + i]); + + assert(eu_count > 0); + return eu_count; +} + /* Generate mask from the device data. */ static void fill_masks(struct intel_device_info *devinfo) diff --git a/src/intel/dev/intel_device_info.h b/src/intel/dev/intel_device_info.h index 961c2b378bb..b96f7a2e638 100644 --- a/src/intel/dev/intel_device_info.h +++ b/src/intel/dev/intel_device_info.h @@ -195,6 +195,7 @@ void intel_device_info_topology_reset_masks(struct intel_device_info *devinfo); void intel_device_info_topology_update_counts(struct intel_device_info *devinfo); void intel_device_info_update_pixel_pipes(struct intel_device_info *devinfo, uint8_t *subslice_masks); void intel_device_info_update_l3_banks(struct intel_device_info *devinfo); +uint32_t intel_device_info_get_eu_count_first_subslice(const struct intel_device_info *devinfo); void intel_device_info_update_cs_workgroup_threads(struct intel_device_info *devinfo); bool intel_device_info_compute_system_memory(struct intel_device_info *devinfo, bool update); void intel_device_info_update_after_hwconfig(struct intel_device_info *devinfo);