From 03d31427338ba59d3a354ac1beb3b0c153471768 Mon Sep 17 00:00:00 2001 From: Patrick Rudolph Date: Fri, 11 May 2018 12:28:54 +0200 Subject: 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 Reviewed-on: https://review.coreboot.org/26228 Reviewed-by: David Hendricks Tested-by: build bot (Jenkins) --- util/cavium/devicetree_convert.py | 55 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 util/cavium/devicetree_convert.py (limited to 'util/cavium') 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 \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") -- cgit v1.2.3