summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/libfdt/libfdt.swig12
-rw-r--r--tools/dtoc/fdt.py10
-rw-r--r--tools/dtoc/fdt_fallback.py13
-rw-r--r--tools/dtoc/fdt_normal.py20
4 files changed, 55 insertions, 0 deletions
diff --git a/lib/libfdt/libfdt.swig b/lib/libfdt/libfdt.swig
index 26d42fc5d6..ce516fddf2 100644
--- a/lib/libfdt/libfdt.swig
+++ b/lib/libfdt/libfdt.swig
@@ -95,3 +95,15 @@ const char *fdt_get_name(const void *fdt, int nodeoffset, int *OUTPUT);
const char *fdt_string(const void *fdt, int stroffset);
int fdt_first_subnode(const void *fdt, int offset);
int fdt_next_subnode(const void *fdt, int offset);
+
+%typemap(in) (void *) {
+ if (!PyByteArray_Check($input)) {
+ SWIG_exception_fail(SWIG_TypeError, "in method '" "$symname" "', argument "
+ "$argnum"" of type '" "$type""'");
+ }
+ $1 = PyByteArray_AsString($input);
+}
+
+int fdt_delprop(void *fdt, int nodeoffset, const char *name);
+
+const char *fdt_strerror(int errval);
diff --git a/tools/dtoc/fdt.py b/tools/dtoc/fdt.py
index c0ce5af8ac..f01c7b18ea 100644
--- a/tools/dtoc/fdt.py
+++ b/tools/dtoc/fdt.py
@@ -184,6 +184,16 @@ class NodeBase:
"""
raise NotImplementedError()
+ def DeleteProp(self, prop_name):
+ """Delete a property of a node
+
+ This should be implemented by subclasses
+
+ Args:
+ prop_name: Name of the property to delete
+ """
+ raise NotImplementedError()
+
class Fdt:
"""Provides simple access to a flat device tree blob.
diff --git a/tools/dtoc/fdt_fallback.py b/tools/dtoc/fdt_fallback.py
index 1c8c9c7a6d..0c0ebbcf47 100644
--- a/tools/dtoc/fdt_fallback.py
+++ b/tools/dtoc/fdt_fallback.py
@@ -70,6 +70,19 @@ class Node(NodeBase):
node.Scan()
+ def DeleteProp(self, prop_name):
+ """Delete a property of a node
+
+ The property is deleted using fdtput.
+
+ Args:
+ prop_name: Name of the property to delete
+ Raises:
+ CommandError if the property does not exist
+ """
+ args = [self._fdt._fname, '-d', self.path, prop_name]
+ command.Output('fdtput', *args)
+ del self.props[prop_name]
class FdtFallback(Fdt):
"""Provides simple access to a flat device tree blob using fdtget/fdtput
diff --git a/tools/dtoc/fdt_normal.py b/tools/dtoc/fdt_normal.py
index eb45742a10..52d80555ab 100644
--- a/tools/dtoc/fdt_normal.py
+++ b/tools/dtoc/fdt_normal.py
@@ -20,6 +20,11 @@ import libfdt
# This implementation uses a libfdt Python library to access the device tree,
# so it is fairly efficient.
+def CheckErr(errnum, msg):
+ if errnum:
+ raise ValueError('Error %d: %s: %s' %
+ (errnum, libfdt.fdt_strerror(errnum), msg))
+
class Prop(PropBase):
"""A device tree property
@@ -95,6 +100,21 @@ class Node(NodeBase):
subnode.Refresh(offset)
offset = libfdt.fdt_next_subnode(self._fdt.GetFdt(), offset)
+ def DeleteProp(self, prop_name):
+ """Delete a property of a node
+
+ The property is deleted and the offset cache is invalidated.
+
+ Args:
+ prop_name: Name of the property to delete
+ Raises:
+ ValueError if the property does not exist
+ """
+ CheckErr(libfdt.fdt_delprop(self._fdt.GetFdt(), self.Offset(), prop_name),
+ "Node '%s': delete property: '%s'" % (self.path, prop_name))
+ del self.props[prop_name]
+ self._fdt.Invalidate()
+
class FdtNormal(Fdt):
"""Provides simple access to a flat device tree blob using libfdt.