X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=tools%2Fdtoc%2Ffdt_util.py;h=5b631419a921b323819fa092552140b6aa1fdd5f;hb=1612ff0dfba57b1002d8c7a54778eb553ace98f4;hp=ba0b6cc38158f4ccdd880896c991c855c80c6840;hpb=76cc372879e2f2f0467e8a3875f097d189647793;p=u-boot diff --git a/tools/dtoc/fdt_util.py b/tools/dtoc/fdt_util.py index ba0b6cc381..5b631419a9 100644 --- a/tools/dtoc/fdt_util.py +++ b/tools/dtoc/fdt_util.py @@ -1,10 +1,9 @@ #!/usr/bin/python +# SPDX-License-Identifier: GPL-2.0+ # # Copyright (C) 2016 Google, Inc # Written by Simon Glass # -# SPDX-License-Identifier: GPL-2.0+ -# import os import struct @@ -14,6 +13,14 @@ import tempfile import command import tools +VERSION3 = sys.version_info > (3, 0) + +def get_plain_bytes(val): + """Handle Python 3 strings""" + if isinstance(val, bytes): + val = val.decode('utf-8') + return val.encode('raw_unicode_escape') + def fdt32_to_cpu(val): """Convert a device tree cell to an integer @@ -23,10 +30,9 @@ def fdt32_to_cpu(val): Return: A native-endian integer value """ - if sys.version_info > (3, 0): - if isinstance(val, bytes): - val = val.decode('utf-8') - val = val.encode('raw_unicode_escape') + if VERSION3: + # This code is not reached in Python 2 + val = get_plain_bytes(val) # pragma: no cover return struct.unpack('>I', val)[0] def fdt_cells_to_cpu(val, cells): @@ -45,7 +51,7 @@ def fdt_cells_to_cpu(val, cells): out = out << 32 | fdt32_to_cpu(val[1]) return out -def EnsureCompiled(fname): +def EnsureCompiled(fname, capture_stderr=False): """Compile an fdt .dts source file into a .dtb binary blob if needed. Args: @@ -79,17 +85,18 @@ def EnsureCompiled(fname): '-W', 'no-unit_address_vs_reg'] args.extend(search_list) args.append(dts_input) - command.Run('dtc', *args) + dtc = os.environ.get('DTC') or 'dtc' + command.Run(dtc, *args, capture_stderr=capture_stderr) return dtb_output def GetInt(node, propname, default=None): prop = node.props.get(propname) if not prop: return default - value = fdt32_to_cpu(prop.value) - if type(value) == type(list): - raise ValueError("Node '%s' property '%' has list value: expecting" + if isinstance(prop.value, list): + raise ValueError("Node '%s' property '%s' has list value: expecting " "a single integer" % (node.name, propname)) + value = fdt32_to_cpu(prop.value) return value def GetString(node, propname, default=None): @@ -97,8 +104,8 @@ def GetString(node, propname, default=None): if not prop: return default value = prop.value - if type(value) == type(list): - raise ValueError("Node '%s' property '%' has list value: expecting" + if isinstance(value, list): + raise ValueError("Node '%s' property '%s' has list value: expecting " "a single string" % (node.name, propname)) return value