pylibfdt: Support device-tree creation/expansion
Add support for fdt_open_into() and fdt_create_empty_tree() from the Python library. The former is named resize() since it better fits with what the Python binding actually does. Signed-off-by: Simon Glass <sjg@chromium.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>main
parent
483e170625
commit
5a598671fd
|
|
@ -434,6 +434,39 @@ class Fdt:
|
||||||
return pdata
|
return pdata
|
||||||
return Property(pdata[0], pdata[1])
|
return Property(pdata[0], pdata[1])
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def create_empty_tree(size, quiet=()):
|
||||||
|
"""Create an empty device tree ready for use
|
||||||
|
|
||||||
|
Args:
|
||||||
|
size: Size of device tree in bytes
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Fdt object containing the device tree
|
||||||
|
"""
|
||||||
|
data = bytearray(size)
|
||||||
|
err = check_err(fdt_create_empty_tree(data, size), quiet)
|
||||||
|
if err:
|
||||||
|
return err
|
||||||
|
return Fdt(data)
|
||||||
|
|
||||||
|
def resize(self, size, quiet=()):
|
||||||
|
"""Move the device tree into a larger or smaller space
|
||||||
|
|
||||||
|
This creates a new device tree of size @size and moves the existing
|
||||||
|
device tree contents over to that. It can be used to create more space
|
||||||
|
in a device tree. Note that the Fdt object remains the same, but it
|
||||||
|
now has a new bytearray holding the contents.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
size: Required new size of device tree in bytes
|
||||||
|
"""
|
||||||
|
fdt = bytearray(size)
|
||||||
|
err = check_err(fdt_open_into(self._fdt, fdt, size), quiet)
|
||||||
|
if err:
|
||||||
|
return err
|
||||||
|
self._fdt = fdt
|
||||||
|
|
||||||
def pack(self, quiet=()):
|
def pack(self, quiet=()):
|
||||||
"""Pack the device tree to remove unused space
|
"""Pack the device tree to remove unused space
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ import unittest
|
||||||
|
|
||||||
sys.path.insert(0, '../pylibfdt')
|
sys.path.insert(0, '../pylibfdt')
|
||||||
import libfdt
|
import libfdt
|
||||||
from libfdt import FdtException, QUIET_NOTFOUND, QUIET_ALL
|
from libfdt import Fdt, FdtException, QUIET_NOTFOUND, QUIET_ALL
|
||||||
|
|
||||||
def get_err(err_code):
|
def get_err(err_code):
|
||||||
"""Convert an error code into an error message
|
"""Convert an error code into an error message
|
||||||
|
|
@ -364,6 +364,22 @@ class PyLibfdtTests(unittest.TestCase):
|
||||||
self.fdt.get_mem_rsv(0))
|
self.fdt.get_mem_rsv(0))
|
||||||
self.assertEquals([123456789, 010000], self.fdt.get_mem_rsv(1))
|
self.assertEquals([123456789, 010000], self.fdt.get_mem_rsv(1))
|
||||||
|
|
||||||
|
def testEmpty(self):
|
||||||
|
"""Test that we can create an empty tree"""
|
||||||
|
self.assertEquals(-libfdt.NOSPACE,
|
||||||
|
Fdt.create_empty_tree(1, (libfdt.NOSPACE,)))
|
||||||
|
fdt = Fdt.create_empty_tree(128)
|
||||||
|
self.assertEquals(128, fdt.totalsize())
|
||||||
|
|
||||||
|
def testOpenInto(self):
|
||||||
|
"""Test that we can resize a tree"""
|
||||||
|
fdt = Fdt.create_empty_tree(128)
|
||||||
|
self.assertEquals(128, fdt.totalsize())
|
||||||
|
fdt.resize(256)
|
||||||
|
self.assertEquals(256, fdt.totalsize())
|
||||||
|
fdt.pack()
|
||||||
|
self.assertTrue(fdt.totalsize() < 128)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue