diff options
author | Damien Lespiau <damien.lespiau@intel.com> | 2013-05-03 16:08:25 +0100 |
---|---|---|
committer | Damien Lespiau <damien.lespiau@intel.com> | 2013-05-08 13:27:24 +0100 |
commit | b9765af636510fe0896c8e1648a4cd003cd91ca1 (patch) | |
tree | 4d2817404338256dec71527077dffd3c0835ad56 /scripts | |
parent | a417ef7cc8ebe01a3198849db8cf9e6896c54a0b (diff) | |
download | platform_external_igt-gpu-tools-b9765af636510fe0896c8e1648a4cd003cd91ca1.tar.gz platform_external_igt-gpu-tools-b9765af636510fe0896c8e1648a4cd003cd91ca1.tar.bz2 platform_external_igt-gpu-tools-b9765af636510fe0896c8e1648a4cd003cd91ca1.zip |
scripts: Add a script to list implemented workarounds
We document the implemented workarounds with
workaround_name:platforms
with platforms being a comma separated list of 3-letters platform names.
This scripts gather those tags and output a summary of implemented work
arounds. Example usages:
$ ./scripts/list-workarounds ~/gfx/sources/linux-2.6/
WaApplyL3ControlAndL3ChickenMode: hsw, ivb, vlv
WaCatErrorRejectionIssue: hsw, ivb, vlv
WaDisable4x2SubspanOptimization: hsw, ivb
WaDisableBackToBackFlipFix: ivb, vlv
WaDisableDopClockGating: vlv
....
$ ./scripts/list-workarounds ~/gfx/sources/linux-2.6/ -p ivb
WaApplyL3ControlAndL3ChickenMode
WaCatErrorRejectionIssue
WaDisable4x2SubspanOptimization
WaDisableBackToBackFlipFix
WaDisableEarlyCull
...
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/list-workarounds | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/scripts/list-workarounds b/scripts/list-workarounds new file mode 100755 index 00000000..7bfd82dd --- /dev/null +++ b/scripts/list-workarounds @@ -0,0 +1,107 @@ +#!/usr/bin/env python + +import os,sys +import optparse +import subprocess +import re +import operator + +# map of Workaround names -> (list of platforms) +workarounds = {} +verbose = False + +def find_nth(haystack, needle, n): + start = haystack.find(needle) + while start >= 0 and n > 1: + start = haystack.find(needle, start + len(needle)) + n -= 1 + return start + +valid_platforms = ('ctg', 'elk', 'ilk', 'snb', 'ivb', 'vlv', 'hsw') +def parse_platforms(p): + l = p.split(',') + for p in l: + if p not in valid_platforms: + sys.stdout.write("unknown platform %s\n" % p) + return l + +wa_re = re.compile('(?P<name>Wa[A-Z0-9][a-zA-Z0-9_]+):(?P<platforms>[a-z,]+)') +waname_re = re.compile('(?P<name>Wa[A-Z0-9][a-zA-Z0-9_]+)') +def parse(me): + for line in me.splitlines(): + match = wa_re.search(line) + if not match: + if not verbose: + continue + + # Those lines come from a git grep that looks for Wa + # names, so if we don't match wa_re here it's because + # no platform has been specified + name = waname_re.search(line).group('name') + path = line[:find_nth(line, ':', 2)] + sys.stdout.write("%s: no platform for %s\n" + % (path, name)) + continue + + wa_name = match.group('name') + platforms = match.group('platforms') + + if wa_name in workarounds: + workarounds[wa_name] += parse_platforms(platforms) + else: + workarounds[wa_name] = parse_platforms(platforms) + + +def execute(cmd): + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + out, err = p.communicate() + return out, err + +def parse_options(args): + usage = "Usage: list-workarounds [options] path-to-kernel" + parser = optparse.OptionParser(usage, version=1.0) + + parser.add_option("-v", "--verbose", action="store_true", + dest="verbose", default=False, + help="be more verbose") + + parser.add_option("-p", "--platform", dest="platform", default=None, + help="List workarounds for the specified platform") + + (options, args) = parser.parse_args() + + return (options, args) + +if __name__ == '__main__': + (options, args) = parse_options(sys.argv[1:]) + verbose = options.verbose + + if not len(args): + sys.stderr.write("error: A path to a kernel tree is required\n") + sys.exit(1) + + kernel_path = args[0] + kconfig = os.path.join(kernel_path, 'Kconfig') + if not os.path.isfile(kconfig): + sys.stderr.write("error: %s does not point to a kernel tree \n" + % kernel_path) + sys.exit(1) + + i915_dir = os.path.join(kernel_path, 'drivers', 'gpu', 'drm', 'i915') + olddir = os.getcwd() + os.chdir(kernel_path) + work_arounds, err = execute(['git', 'grep', '-n', + '-e', 'Wa[A-Z0-9][a-zA-Z0-9_]\+', + i915_dir]) + os.chdir(olddir) + if err: + print(err) + sys.exit(1) + + parse(work_arounds) + for wa in sorted(workarounds.iterkeys()): + if not options.platform: + print("%s: %s" % (wa, ', '.join(workarounds[wa]))) + elif options.platform in workarounds[wa]: + print(wa) |