diff options
Diffstat (limited to 'util/cavium/devicetree_convert.py')
-rw-r--r-- | util/cavium/devicetree_convert.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/util/cavium/devicetree_convert.py b/util/cavium/devicetree_convert.py new file mode 100644 index 0000000000..70d89af686 --- /dev/null +++ b/util/cavium/devicetree_convert.py @@ -0,0 +1,55 @@ +#!/usr/bin/python + +# devicetree_convert Tool to convert a DTB to a static C file +# Copyright (C) 2018 Facebook Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# + +from pyfdt.pyfdt import FdtBlobParse +import argparse + +parser = argparse.ArgumentParser(description='Cavium DTB to C converter') +parser.add_argument('--indtb', help='Compiled devicetree blob to parse') +parser.add_argument('--out', help='The file to write') +parser.add_argument('--verbose', help='Be verbose', action='store_true', default=False) +args = parser.parse_args() + +outfile = None +if args.out is not None: + outfile = open(args.out, 'w') + outfile.write("// This file is part of the coreboot project.\n") + outfile.write("// This file is automatically generated.\n") + outfile.write("// DO NOT EDIT BY HAND.\n\n") + outfile.write("#include <bdk-devicetree.h>\n\n") + outfile.write("const struct bdk_devicetree_key_value devtree[] = {\n") + +with open(args.indtb) as infile: + dtb = FdtBlobParse(infile) + fdt = dtb.to_fdt() + for (path, node) in fdt.resolve_path('/cavium,bdk').walk(): + if "/" in path: + path = path.replace("/", "") + if len(node) == 1: + for i in node: + if type(i) is not unicode: + print "%s: Type is not string" % path + continue + if args.verbose: + print "%s = %s" % (path, i) + if outfile is not None: + outfile.write("{\"%s\", \"%s\"},\n" % (path, i)) + else: + print "%s: Arrays aren't supported" % path + +if outfile is not None: + outfile.write("{0, 0},\n") + outfile.write("};\n") |