[PATCH i-g-t v4] tools/mk_detect_intel_gpu: add a tool to detect Intel GPUs from their PCI IDs
Jani Nikula
jani.nikula at intel.com
Thu May 23 09:10:05 UTC 2024
On Thu, 23 May 2024, Mauro Carvalho Chehab <mauro.chehab at linux.intel.com> wrote:
> On Thu, 23 May 2024 10:30:37 +0300
> Jani Nikula <jani.nikula at intel.com> wrote:
>
>> On Wed, 22 May 2024, Kamil Konieczny <kamil.konieczny at linux.intel.com> wrote:
>> > Looks like a good idea but this is also dependancy, btw
>>
>> [snip]
>>
>> > But this one is creating one more dependancy, one should have
>> > modules compiled in current running kernel.
>>
>> Reading the comments about dependencies, I think this needs a different
>> perspective.
>>
>> What is the target audience of the tool? What are they expected to have
>> around? What is the easiest for them to install?
>
> The target audience for the submitted changeset is to provide a way for
> IGT developers to generate a script to detect the presence and the GPU
> model for Device Under Test (DUT) machines.
>
> It was written to be generic enough to use different directories for Xe
> and for i915 (or the same one). So, it should work properly when different
> versions of the drivers would be used, during driver's development.
>
> On other words, the way it is, this is not focused on the end user.
>
> The way it works is that a C file read the i915 and Xe macros, creating
> a PCI ID database, stored as hash(dict):
>
> my %intel_pci_id = (
> "8086:46d0" => "ADLN",
> "8086:46d1" => "ADLN",
> "8086:46d2" => "ADLN",
> ...
> )
> ...
> my %intel_pci_id_alt_name = (
> # AML_CFL_GT2 alternative names
> "8086:87ca" => "CFL",
>
> # AML_KBL_GT2 alternative names
> "8086:591c" => "KBL",
> "8086:87c0" => "KBL",
> ...
> )
>
> Typically, most GPUs have two entries:
>
> $ grep 8086:9b41 ./intel_detect_gpu.pl
> "8086:9b41" => "CFL",
> "8086:9b41" => "CML_U_GT2",
>
> The first one is the generic name, the second one contains
> an alternate name, with has additional GPU version details
> (in this case, CML-U GT2). All of that obtained from the
> driver's source code.
>
> The generated script itself doesn't require anything other than lspci to
> run, as what the script does, on its 35 lines of code (not including the
> PCI ID database), is:
>
> 1. run lspci -nm
>
> 2. If the PCI ID device is at the database, it prints:
>
> print "Detected GPU PCI device: $id$subtype, PCI ID: $pci_id\n";
>
> For the above example, the output is:
>
> Detected GPU PCI device: CFL (CML_U_GT2), PCI ID: 8086:9b41
>
> 3. If multiple Intel GPUs are found, it prints a warning, as DUT
> tests may require an extra parameter to use the right GPU:
>
> Warning: More than one Intel GPUs detected
>
> 4. if no Intel GPU is found, it will print:
>
> Warning: No Intel GPUs detected
The way I see it, intel_device_info.c and igt_device_scan.c have all the
building blocks necessary to accomplish this. As long as
intel_device_match[] is kept up-to-date, which naturally will be, it
needs no further maintenance. It could be added to lsgpu as an option.
>> lspci and modinfo are trivial to install, and most people have them
>> installed already. modinfo does not require the modules to be probed,
>> you can also point it at the .ko under /usr/lib/modules. For a user,
>> this gives information about the modules they actually have on their
>> system, which may be different from kernel or igt sources.
>
> Once generated, intel_detect_gpu.pl would be trivial to install and
> to be used, as the only requirements are to have perl and pci-tools
> (due to lspci dependency) installed.
>
>> OTOH most people won't have kernel or igt sources available. (Let alone
>> specific versions of the source, which match the expectations of the
>> patch at hand.) Indeed, you can install igt via the distro package
>> manager, with no need to check out the sources.
>
> If IGT maintainers think it is worth targeting end users in the future,
> the best is for them to periodically generate the script (for example,
> when releasing a new IGT version), adding it to scripts/ and adding a
> target at Meson to install it under ${installprefix}/bin directory.
The best is what I described above, not adding Rube Goldberg machines
that require constant attention.
BR,
Jani.
>
> Regards,
> Mauro
--
Jani Nikula, Intel
More information about the igt-dev
mailing list