diff options
author | Patrick Rudolph <patrick.rudolph@9elements.com> | 2018-05-11 12:28:54 +0200 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2018-07-09 09:54:22 +0000 |
commit | 03d31427338ba59d3a354ac1beb3b0c153471768 (patch) | |
tree | 8b53b140303154019e246e8df7ea946a930ab29f /util/cavium | |
parent | 251279c537397835a4504165e7582cb29c19891c (diff) | |
download | coreboot-03d31427338ba59d3a354ac1beb3b0c153471768.tar.xz |
util/cavium: Add tool to convert devicetree blobs
Convert Cavium's BDK devicetree blob to a static C file.
The resulting file must be included in mainboard folder to provide
board specific configuration values to BDK functions.
Example call:
python devicetree_convert.py --in sff8104.dtb --out bdk_devicetree.c
Change-Id: I76a5588aefe4f680228eca46a0e4dba7e695931c
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Reviewed-on: https://review.coreboot.org/26228
Reviewed-by: David Hendricks <david.hendricks@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'util/cavium')
-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") |