1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #!/usr/bin/python
- #
- # Copyright (C) 2016 Google, Inc
- # Written by Simon Glass <sjg@chromium.org>
- #
- # SPDX-License-Identifier: GPL-2.0+
- #
- import os
- import struct
- import sys
- import tempfile
- import command
- import tools
- def fdt32_to_cpu(val):
- """Convert a device tree cell to an integer
- Args:
- Value to convert (4-character string representing the cell value)
- Return:
- A native-endian integer value
- """
- if sys.version_info > (3, 0):
- val = val.encode('raw_unicode_escape')
- return struct.unpack('>I', val)[0]
- def EnsureCompiled(fname):
- """Compile an fdt .dts source file into a .dtb binary blob if needed.
- Args:
- fname: Filename (if .dts it will be compiled). It not it will be
- left alone
- Returns:
- Filename of resulting .dtb file
- """
- _, ext = os.path.splitext(fname)
- if ext != '.dts':
- return fname
- dts_input = tools.GetOutputFilename('source.dts')
- dtb_output = tools.GetOutputFilename('source.dtb')
- search_paths = [os.path.join(os.getcwd(), 'include')]
- root, _ = os.path.splitext(fname)
- args = ['-E', '-P', '-x', 'assembler-with-cpp', '-D__ASSEMBLY__']
- args += ['-Ulinux']
- for path in search_paths:
- args.extend(['-I', path])
- args += ['-o', dts_input, fname]
- command.Run('cc', *args)
- # If we don't have a directory, put it in the tools tempdir
- search_list = []
- for path in search_paths:
- search_list.extend(['-i', path])
- args = ['-I', 'dts', '-o', dtb_output, '-O', 'dtb']
- args.extend(search_list)
- args.append(dts_input)
- command.Run('dtc', *args)
- 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"
- "a single integer" % (node.name, propname))
- return value
- def GetString(node, propname, default=None):
- prop = node.props.get(propname)
- if not prop:
- return default
- value = prop.value
- if type(value) == type(list):
- raise ValueError("Node '%s' property '%' has list value: expecting"
- "a single string" % (node.name, propname))
- return value
- def GetBool(node, propname, default=False):
- if propname in node.props:
- return True
- return default
|