• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #undef NDEBUG
2 
3 #include <stdint.h>
4 #include <assert.h>
5 
6 #include "intel_device_info.h"
7 
8 int
main(int argc,char * argv[])9 main(int argc, char *argv[])
10 {
11    struct {
12       uint32_t pci_id;
13       const char *name;
14    } chipsets[] = {
15 #undef CHIPSET
16 #define CHIPSET(id, family, family_str, str_name) { .pci_id = id, .name = str_name, },
17 #include "pci_ids/i965_pci_ids.h"
18 #include "pci_ids/iris_pci_ids.h"
19    };
20 
21    for (uint32_t i = 0; i < ARRAY_SIZE(chipsets); i++) {
22       struct intel_device_info devinfo = { 0, };
23 
24       assert(intel_get_device_info_from_pci_id(chipsets[i].pci_id, &devinfo));
25 
26       assert(devinfo.ver != 0);
27       assert(devinfo.num_eu_per_subslice != 0);
28       assert(devinfo.num_thread_per_eu != 0);
29       assert(devinfo.timestamp_frequency != 0);
30       assert(devinfo.cs_prefetch_size > 0);
31 
32       assert(devinfo.ver < 7 || devinfo.max_constant_urb_size_kb > 0);
33 
34       assert(devinfo.num_slices <= ARRAY_SIZE(devinfo.subslice_masks));
35 
36       assert(devinfo.num_slices <= devinfo.max_slices);
37       assert(intel_device_info_subslice_total(&devinfo) <=
38              (devinfo.max_slices * devinfo.max_subslices_per_slice));
39 
40       for (uint32_t s = 0; s < ARRAY_SIZE(devinfo.num_subslices); s++)
41          assert(devinfo.num_subslices[s] <= devinfo.max_subslices_per_slice);
42 
43       assert(__builtin_popcount(devinfo.slice_masks) <= devinfo.max_slices);
44 
45       uint32_t total_subslices = 0;
46       for (size_t i = 0; i < ARRAY_SIZE(devinfo.subslice_masks); i++)
47          total_subslices += __builtin_popcount(devinfo.subslice_masks[i]);
48       assert(total_subslices <=
49              (devinfo.max_slices * devinfo.max_subslices_per_slice));
50 
51       assert(intel_device_info_eu_total(&devinfo) > 0);
52       assert(intel_device_info_subslice_total(&devinfo) > 0);
53 
54       total_subslices = 0;
55       for (uint32_t s = 0; s < devinfo.max_slices; s++)
56          for (uint32_t ss = 0; ss < devinfo.max_subslices_per_slice; ss++)
57             total_subslices += intel_device_info_subslice_available(&devinfo, s, ss);
58       assert(total_subslices == intel_device_info_subslice_total(&devinfo));
59 
60       uint32_t total_eus = 0;
61       for (uint32_t s = 0; s < devinfo.max_slices; s++)
62          for (uint32_t ss = 0; ss < devinfo.max_subslices_per_slice; ss++)
63             for (uint32_t eu = 0; eu < devinfo.max_eu_per_subslice; eu++)
64                total_eus += intel_device_info_eu_available(&devinfo, s, ss, eu);
65       assert(total_eus == intel_device_info_eu_total(&devinfo));
66    }
67 
68    return 0;
69 }
70