At present the Fdt class has its own copy of the device tree. This is
confusing an unnecessary now that pylibfdt has its own. Drop it and
provide access functions to the buffer.
This allows us to move the rest of the implementation to use pylibfdt
methods instead of directly calling libfdt stubs.
Signed-off-by: Simon Glass <sjg@chromium.org>
Note: This does not take account of property offsets - these will not
be updated.
"""
Note: This does not take account of property offsets - these will not
be updated.
"""
+ fdt_obj = self._fdt._fdt_obj
if self._offset != my_offset:
self._offset = my_offset
if self._offset != my_offset:
self._offset = my_offset
- offset = libfdt.fdt_first_subnode(self._fdt.GetFdt(), self._offset)
+ offset = fdt_obj.first_subnode(self._offset, QUIET_NOTFOUND)
for subnode in self.subnodes:
subnode.Refresh(offset)
for subnode in self.subnodes:
subnode.Refresh(offset)
- offset = libfdt.fdt_next_subnode(self._fdt.GetFdt(), offset)
+ offset = fdt_obj.next_subnode(offset, QUIET_NOTFOUND)
def DeleteProp(self, prop_name):
"""Delete a property of a node
def DeleteProp(self, prop_name):
"""Delete a property of a node
Raises:
ValueError if the property does not exist
"""
Raises:
ValueError if the property does not exist
"""
- CheckErr(libfdt.fdt_delprop(self._fdt.GetFdt(), self.Offset(), prop_name),
+ CheckErr(self._fdt._fdt_obj.delprop(self.Offset(), prop_name),
"Node '%s': delete property: '%s'" % (self.path, prop_name))
del self.props[prop_name]
self._fdt.Invalidate()
"Node '%s': delete property: '%s'" % (self.path, prop_name))
del self.props[prop_name]
self._fdt.Invalidate()
self._fname = fdt_util.EnsureCompiled(self._fname)
with open(self._fname) as fd:
self._fname = fdt_util.EnsureCompiled(self._fname)
with open(self._fname) as fd:
- self._fdt = bytearray(fd.read())
- self._fdt_obj = libfdt.Fdt(self._fdt)
+ self._fdt_obj = libfdt.Fdt(fd.read())
def Scan(self, root='/'):
"""Scan a device tree, building up a tree of Node objects
def Scan(self, root='/'):
"""Scan a device tree, building up a tree of Node objects
If the device tree has changed in memory, write it back to the file.
"""
with open(self._fname, 'wb') as fd:
If the device tree has changed in memory, write it back to the file.
"""
with open(self._fname, 'wb') as fd:
+ fd.write(self._fdt_obj.as_bytearray())
def Pack(self):
"""Pack the device tree down to its minimum size
def Pack(self):
"""Pack the device tree down to its minimum size
CheckErr(self._fdt_obj.pack(), 'pack')
self.Invalidate()
CheckErr(self._fdt_obj.pack(), 'pack')
self.Invalidate()
"""Get the contents of the FDT
Returns:
The FDT contents as a string of bytes
"""
"""Get the contents of the FDT
Returns:
The FDT contents as a string of bytes
"""
+ return self._fdt_obj.as_bytearray()
def GetFdtObj(self):
"""Get the contents of the FDT
def GetFdtObj(self):
"""Get the contents of the FDT
def testGetFdt(self):
"""Tetst that we can access the raw device-tree data"""
def testGetFdt(self):
"""Tetst that we can access the raw device-tree data"""
- self.assertTrue(isinstance(self.dtb.GetFdt(), bytearray))
+ self.assertTrue(isinstance(self.dtb.GetContents(), bytearray))
def testGetProps(self):
"""Tests obtaining a list of properties"""
def testGetProps(self):
"""Tests obtaining a list of properties"""
# Add 12, which is sizeof(struct fdt_property), to get to start of data
offset = prop.GetOffset() + 12
# Add 12, which is sizeof(struct fdt_property), to get to start of data
offset = prop.GetOffset() + 12
- data = self.dtb._fdt[offset:offset + len(prop.value)]
+ data = self.dtb.GetContents()[offset:offset + len(prop.value)]
bytes = [chr(x) for x in data]
self.assertEqual(bytes, prop.value)
bytes = [chr(x) for x in data]
self.assertEqual(bytes, prop.value)