aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2017-05-27 07:38:22 -0600
committerSimon Glass <sjg@chromium.org>2017-06-02 10:16:48 -0600
commitb4360206a4bc67404125b0478132aeaeea41683f (patch)
tree2c972001e3388a272993cff51869f856bdb3cf0b
parent4a28b007031404f5cf0a18e0b79d1e6f7ec982b0 (diff)
downloadu-boot-b4360206a4bc67404125b0478132aeaeea41683f.zip
u-boot-b4360206a4bc67404125b0478132aeaeea41683f.tar.gz
u-boot-b4360206a4bc67404125b0478132aeaeea41683f.tar.bz2
fdt: Support use of the new python libfdt library
Use the new library if available, while retaining backwards compatibility with the old library for now. Signed-off-by: Simon Glass <sjg@chromium.org>
-rwxr-xr-xtools/binman/binman.py3
-rw-r--r--tools/dtoc/fdt.py1
-rw-r--r--tools/dtoc/fdt_normal.py35
3 files changed, 30 insertions, 9 deletions
diff --git a/tools/binman/binman.py b/tools/binman/binman.py
index 857d698..95d3a048 100755
--- a/tools/binman/binman.py
+++ b/tools/binman/binman.py
@@ -21,6 +21,9 @@ sys.path.append(os.path.join(our_path, '../patman'))
sys.path.append(os.path.join(our_path, '../dtoc'))
sys.path.append(os.path.join(our_path, '../'))
+# Bring in the libfdt module
+sys.path.append('tools')
+
# Also allow entry-type modules to be brought in from the etype directory.
sys.path.append(os.path.join(our_path, 'etype'))
diff --git a/tools/dtoc/fdt.py b/tools/dtoc/fdt.py
index 816fdbe..c40b9b6 100644
--- a/tools/dtoc/fdt.py
+++ b/tools/dtoc/fdt.py
@@ -96,6 +96,7 @@ class PropBase:
TYPE_INT: a byte-swapped integer stored as a 4-byte string
TYPE_BYTE: a byte stored as a single-byte string
"""
+ bytes = str(bytes)
size = len(bytes)
strings = bytes.split('\0')
is_string = True
diff --git a/tools/dtoc/fdt_normal.py b/tools/dtoc/fdt_normal.py
index 17b0a9a..e793f49 100644
--- a/tools/dtoc/fdt_normal.py
+++ b/tools/dtoc/fdt_normal.py
@@ -12,7 +12,13 @@ import sys
import fdt
from fdt import Fdt, NodeBase, PropBase
import fdt_util
-import libfdt_legacy as libfdt
+try:
+ import libfdt
+ legacy = False
+except ImportError:
+ import libfdt_legacy as libfdt
+ legacy = True
+
# This deals with a device tree, presenting it as a list of Node and Prop
# objects, representing nodes and properties, respectively.
@@ -36,7 +42,7 @@ class Prop(PropBase):
"""
def __init__(self, node, offset, name, bytes):
PropBase.__init__(self, node, offset, name)
- self.bytes = bytes
+ self.bytes = str(bytes)
if not bytes:
self.type = fdt.TYPE_BOOL
self.value = True
@@ -86,7 +92,10 @@ class Node(NodeBase):
offset = libfdt.fdt_first_subnode(self._fdt.GetFdt(), self.Offset())
while offset >= 0:
sep = '' if self.path[-1] == '/' else '/'
- name = libfdt.Name(self._fdt.GetFdt(), offset)
+ if legacy:
+ name = libfdt.Name(self._fdt.GetFdt(), offset)
+ else:
+ name = self._fdt._fdt_obj.get_name(offset)
path = self.path + sep + name
node = Node(self._fdt, offset, name, path)
self.subnodes.append(node)
@@ -139,6 +148,8 @@ class FdtNormal(Fdt):
with open(self._fname) as fd:
self._fdt = bytearray(fd.read())
+ if not legacy:
+ self._fdt_obj = libfdt.Fdt(self._fdt)
def GetFdt(self):
"""Get the contents of the FDT
@@ -175,12 +186,18 @@ class FdtNormal(Fdt):
props_dict = {}
poffset = libfdt.fdt_first_property_offset(self._fdt, node._offset)
while poffset >= 0:
- dprop, plen = libfdt.fdt_get_property_by_offset(self._fdt, poffset)
- prop = Prop(node, poffset, libfdt.String(self._fdt, dprop.nameoff),
- libfdt.Data(dprop))
- props_dict[prop.name] = prop
-
- poffset = libfdt.fdt_next_property_offset(self._fdt, poffset)
+ if legacy:
+ dprop, plen = libfdt.fdt_get_property_by_offset(self._fdt,
+ poffset)
+ prop = Prop(node, poffset,
+ libfdt.String(self._fdt, dprop.nameoff),
+ libfdt.Data(dprop))
+ else:
+ p = self._fdt_obj.get_property_by_offset(poffset)
+ prop = Prop(node, poffset, p.name, p.value)
+ props_dict[prop.name] = prop
+
+ poffset = libfdt.fdt_next_property_offset(self._fdt, poffset)
return props_dict
def Invalidate(self):