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