diff --git a/src/intel/dev/intel_device_info_override_test.c b/src/intel/dev/intel_device_info_override_test.c new file mode 100644 index 00000000000..b632f5ce2ba --- /dev/null +++ b/src/intel/dev/intel_device_info_override_test.c @@ -0,0 +1,77 @@ +/* + * Copyright © 2022 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#undef NDEBUG + +#include +#include +#include +#include +#include +#include + +#include + +#include "intel_device_info.h" +#include "intel_device_info_test.h" + +int +main(int argc, char *argv[]) +{ + drmDevicePtr devices[8]; + int max_devices; + + if (argc != 2) { + fprintf(stderr, "format: %s verx10_number\n", argv[0]); + return -1; + } + + int verx10 = atoi(argv[1]); + + max_devices = drmGetDevices2(0, devices, ARRAY_SIZE(devices)); + if (max_devices < 1) { + fprintf(stderr, "Device not found\n"); + return -1; + } + + for (int i = 0; i < max_devices; i++) { + struct intel_device_info devinfo; + const char *path = devices[i]->nodes[DRM_NODE_RENDER]; + int fd = open(path, O_RDWR | O_CLOEXEC); + + if (fd < 0) + continue; + + bool success = intel_get_device_info_from_fd(fd, &devinfo); + close(fd); + + if (!success) + continue; + + fprintf(stderr, "%u\n", devinfo.verx10); + assert(devinfo.verx10 == verx10); + verify_device_info(&devinfo); + } + + return 0; +} diff --git a/src/intel/dev/meson.build b/src/intel/dev/meson.build index e15f45a1e71..8fb9b8776eb 100644 --- a/src/intel/dev/meson.build +++ b/src/intel/dev/meson.build @@ -50,6 +50,37 @@ if with_tests ) endif +if with_tests and with_tools.contains('drm-shim') and with_tools.contains('intel') + platforms = [ [ 70, ['ivb', 'byt'] ], + [ 75, ['hsw'] ], + [ 80, ['bdw', 'chv'] ], + [ 90, ['skl', 'kbl', 'aml', 'cml', 'whl', 'bxt', 'glk'] ], + [ 110, ['icl', 'ehl', 'jsl'] ], + [ 120, ['tgl', 'rkl', 'adl', 'rpl', 'dg1', 'sg1'] ], + [ 125, ['dg2'] ], + ] + intel_devinfo_override_test = executable( + 'intel_device_info_override_test', + 'intel_device_info_override_test.c', + dependencies : [dep_libdrm], + include_directories : [inc_include, inc_src], + link_with : libintel_dev, + ) + foreach _gens : platforms + gen = _gens[0] + foreach p : _gens[1] + test('intel_device_info_override_test_@0@'.format(p), + intel_devinfo_override_test, + args : '@0@'.format(gen), + env : [ 'LD_PRELOAD=@0@'.format(join_paths( + meson.current_build_dir(), '../tools/libintel_noop_drm_shim.so')), + 'INTEL_STUB_GPU_PLATFORM=@0@'.format(p) ], + suite : ['intel'], + ) + endforeach + endforeach +endif + if with_intel_tools intel_dev_info = executable( 'intel_dev_info',