1bf215546Sopenharmony_ci#undef NDEBUG 2bf215546Sopenharmony_ci 3bf215546Sopenharmony_ci#include <assert.h> 4bf215546Sopenharmony_ci 5bf215546Sopenharmony_ci#include "intel_device_info.h" 6bf215546Sopenharmony_ci 7bf215546Sopenharmony_cistatic void 8bf215546Sopenharmony_civerify_device_info(const struct intel_device_info *devinfo) 9bf215546Sopenharmony_ci{ 10bf215546Sopenharmony_ci assert(devinfo->ver != 0); 11bf215546Sopenharmony_ci assert((devinfo->verx10 / 10) == devinfo->ver); 12bf215546Sopenharmony_ci assert(devinfo->max_eus_per_subslice != 0); 13bf215546Sopenharmony_ci assert(devinfo->num_thread_per_eu != 0); 14bf215546Sopenharmony_ci assert(devinfo->timestamp_frequency != 0); 15bf215546Sopenharmony_ci assert(devinfo->cs_prefetch_size > 0); 16bf215546Sopenharmony_ci 17bf215546Sopenharmony_ci assert(devinfo->ver < 7 || devinfo->max_constant_urb_size_kb > 0); 18bf215546Sopenharmony_ci assert(devinfo->ver < 8 || devinfo->max_threads_per_psd > 0); 19bf215546Sopenharmony_ci 20bf215546Sopenharmony_ci assert(devinfo->platform >= 1); 21bf215546Sopenharmony_ci 22bf215546Sopenharmony_ci assert(devinfo->num_slices <= ARRAY_SIZE(devinfo->subslice_masks)); 23bf215546Sopenharmony_ci 24bf215546Sopenharmony_ci assert(devinfo->num_slices <= devinfo->max_slices); 25bf215546Sopenharmony_ci assert(intel_device_info_subslice_total(devinfo) <= 26bf215546Sopenharmony_ci (devinfo->max_slices * devinfo->max_subslices_per_slice)); 27bf215546Sopenharmony_ci 28bf215546Sopenharmony_ci for (uint32_t s = 0; s < ARRAY_SIZE(devinfo->num_subslices); s++) 29bf215546Sopenharmony_ci assert(devinfo->num_subslices[s] <= devinfo->max_subslices_per_slice); 30bf215546Sopenharmony_ci 31bf215546Sopenharmony_ci assert(__builtin_popcount(devinfo->slice_masks) <= devinfo->max_slices); 32bf215546Sopenharmony_ci 33bf215546Sopenharmony_ci uint32_t total_subslices = 0; 34bf215546Sopenharmony_ci for (size_t i = 0; i < ARRAY_SIZE(devinfo->subslice_masks); i++) 35bf215546Sopenharmony_ci total_subslices += __builtin_popcount(devinfo->subslice_masks[i]); 36bf215546Sopenharmony_ci assert(total_subslices <= 37bf215546Sopenharmony_ci (devinfo->max_slices * devinfo->max_subslices_per_slice)); 38bf215546Sopenharmony_ci 39bf215546Sopenharmony_ci assert(intel_device_info_eu_total(devinfo) > 0); 40bf215546Sopenharmony_ci assert(intel_device_info_subslice_total(devinfo) > 0); 41bf215546Sopenharmony_ci 42bf215546Sopenharmony_ci total_subslices = 0; 43bf215546Sopenharmony_ci for (uint32_t s = 0; s < devinfo->max_slices; s++) 44bf215546Sopenharmony_ci for (uint32_t ss = 0; ss < devinfo->max_subslices_per_slice; ss++) 45bf215546Sopenharmony_ci total_subslices += intel_device_info_subslice_available(devinfo, s, ss); 46bf215546Sopenharmony_ci assert(total_subslices == intel_device_info_subslice_total(devinfo)); 47bf215546Sopenharmony_ci 48bf215546Sopenharmony_ci uint32_t total_eus = 0; 49bf215546Sopenharmony_ci for (uint32_t s = 0; s < devinfo->max_slices; s++) 50bf215546Sopenharmony_ci for (uint32_t ss = 0; ss < devinfo->max_subslices_per_slice; ss++) 51bf215546Sopenharmony_ci for (uint32_t eu = 0; eu < devinfo->max_eus_per_subslice; eu++) 52bf215546Sopenharmony_ci total_eus += intel_device_info_eu_available(devinfo, s, ss, eu); 53bf215546Sopenharmony_ci assert(total_eus == intel_device_info_eu_total(devinfo)); 54bf215546Sopenharmony_ci} 55