blob: 7136fa583a5f4d5664fe6942d606a6ee913860c8 [file] [log] [blame]
#!/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()