93 lines
2.6 KiB
Python
Executable File
93 lines
2.6 KiB
Python
Executable File
#!/usr/bin/env python2
|
|
# Copyright 2015 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""Create a JSON file containing PCI ID-to-name mappings for Intel GPUs.
|
|
|
|
This script gets the latest PCI ID list from Mesa.
|
|
The list is used by get_gpu_family() in utils.py.
|
|
This script should be run whenever Mesa is updated
|
|
to keep the list up-to-date.
|
|
"""
|
|
|
|
import json
|
|
import os
|
|
import shutil
|
|
import subprocess as sp
|
|
from six.moves import range
|
|
|
|
|
|
def map_gpu_name(mesa_name):
|
|
"""Map Mesa GPU names to autotest names.
|
|
"""
|
|
family_name_map = {
|
|
'Pineview': 'pinetrail',
|
|
'ILK': 'ironlake',
|
|
'SNB': 'sandybridge',
|
|
'IVB': 'ivybridge',
|
|
'HSW': 'haswell',
|
|
'BYT': 'baytrail',
|
|
'BDW': 'broadwell',
|
|
'CHV': 'braswell',
|
|
'BSW': 'braswell',
|
|
'SKL': 'skylake',
|
|
'APL': 'broxton',
|
|
'BXT': 'broxton',
|
|
'KBL': 'kabylake',
|
|
'GLK': 'geminilake',
|
|
'CNL': 'cannonlake',
|
|
'CFL': 'coffeelake',
|
|
'ICL': 'icelake',
|
|
'CML': 'cometlake',
|
|
'WHL': 'whiskeylake',
|
|
'TGL': 'tigerlake',
|
|
'JSL': 'jasperlake'
|
|
}
|
|
|
|
for name in family_name_map:
|
|
if name in mesa_name:
|
|
return family_name_map[name]
|
|
return ''
|
|
|
|
|
|
def main():
|
|
"""Extract Intel GPU PCI IDs from Mesa and write to JSON file.
|
|
"""
|
|
|
|
in_files = ['i915_pci_ids.h', 'i965_pci_ids.h', 'iris_pci_ids.h']
|
|
script_dir = os.path.dirname(os.path.realpath(__file__))
|
|
out_file = os.path.join(script_dir, 'intel_pci_ids.json')
|
|
local_repo = os.path.join(script_dir, '../../../../mesa')
|
|
|
|
pci_ids = {}
|
|
chipsets = []
|
|
cmd = 'cd %s; git show HEAD:include/pci_ids/' % local_repo
|
|
for id_file in in_files:
|
|
chipsets.extend(sp.check_output(cmd + id_file,
|
|
shell=True).splitlines())
|
|
for cset in chipsets:
|
|
# Prevent unexpected lines from being parsed
|
|
if not 'CHIPSET(' in cset:
|
|
continue
|
|
cset_attr = cset[len('CHIPSET('):-2].split(',')
|
|
|
|
# Remove leading and trailing spaces and double quotes.
|
|
for i in range(0, len(cset_attr)):
|
|
cset_attr[i] = cset_attr[i].strip(' "').rstrip(' "')
|
|
|
|
pci_id = cset_attr[0].lower()
|
|
family_name = map_gpu_name(cset_attr[2])
|
|
|
|
# Ignore GPU families not in family_name_map.
|
|
if family_name:
|
|
pci_ids[pci_id] = family_name
|
|
|
|
with open(out_file, 'w') as out_f:
|
|
json.dump(pci_ids, out_f, sort_keys=True, indent=4,
|
|
separators=(',', ': '))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|