Re: [U-Boot] [PATCH 11/19] fdt: Support use of the new python libfdt library

2017-05-02 Thread sjg
Use the new library if available, while retaining backwards compatibility
with the old library for now.

Signed-off-by: Simon Glass 
---

 tools/Makefile   |  4 +++-
 tools/binman/binman.py   |  3 +++
 tools/dtoc/fdt.py|  1 +
 tools/dtoc/fdt_normal.py | 35 ++-
 4 files changed, 33 insertions(+), 10 deletions(-)

Applied to u-boot-fdt/next, thanks!
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


[U-Boot] [PATCH 11/19] fdt: Support use of the new python libfdt library

2017-04-16 Thread Simon Glass
Use the new library if available, while retaining backwards compatibility
with the old library for now.

Signed-off-by: Simon Glass 
---

 tools/Makefile   |  4 +++-
 tools/binman/binman.py   |  3 +++
 tools/dtoc/fdt.py|  1 +
 tools/dtoc/fdt_normal.py | 35 ++-
 4 files changed, 33 insertions(+), 10 deletions(-)

diff --git a/tools/Makefile b/tools/Makefile
index 65d3fb911a..3ffd3eeca9 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -120,7 +120,9 @@ fit_info-objs   := $(dumpimage-mkimage-objs) fit_info.o
 fit_check_sign-objs   := $(dumpimage-mkimage-objs) fit_check_sign.o
 
 tools/_libfdt.so: $(LIBFDT_SRCS) $(LIBFDT_SWIG)
-   LDFLAGS="$(HOSTLDFLAGS)" CFLAGS= VERSION=u-boot-$(UBOOTVERSION) \
+   unset CC; \
+   unset CROSS_COMPILE; \
+   LDFLAGS="$(HOSTLDFLAGS)" CFLAGS= VERSION="u-boot-$(UBOOTVERSION)" \
CPPFLAGS="$(_hostc_flags)" OBJDIR=tools \
SOURCES="$(LIBFDT_SRCS) $(LIBFDT_SWIG)" \
SWIG_OPTS="-I$(srctree)/lib/libfdt -I$(srctree)/lib" \
diff --git a/tools/binman/binman.py b/tools/binman/binman.py
index 857d698b4c..95d3a048d8 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 816fdbe525..c40b9b6bab 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 17b0a9a726..e793f49fa8 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):
-- 
2.12.2.762.g0e3151a226-goog