#!/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()