mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-19 13:41:31 +00:00
dtoc: Allow adding variable-sized data to a dtb
Add a method for adding a property containing arbitrary bytes. Make sure that the tree can expand as needed in this case. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
152b246298
commit
c063917906
2 changed files with 19 additions and 2 deletions
|
@ -207,7 +207,8 @@ class Prop:
|
||||||
if auto_resize:
|
if auto_resize:
|
||||||
while fdt_obj.setprop(node.Offset(), self.name, self.bytes,
|
while fdt_obj.setprop(node.Offset(), self.name, self.bytes,
|
||||||
(libfdt.NOSPACE,)) == -libfdt.NOSPACE:
|
(libfdt.NOSPACE,)) == -libfdt.NOSPACE:
|
||||||
fdt_obj.resize(fdt_obj.totalsize() + 1024)
|
fdt_obj.resize(fdt_obj.totalsize() + 1024 +
|
||||||
|
len(self.bytes))
|
||||||
fdt_obj.setprop(node.Offset(), self.name, self.bytes)
|
fdt_obj.setprop(node.Offset(), self.name, self.bytes)
|
||||||
else:
|
else:
|
||||||
fdt_obj.setprop(node.Offset(), self.name, self.bytes)
|
fdt_obj.setprop(node.Offset(), self.name, self.bytes)
|
||||||
|
@ -410,6 +411,18 @@ class Node:
|
||||||
val = val.encode('utf-8')
|
val = val.encode('utf-8')
|
||||||
self._CheckProp(prop_name).props[prop_name].SetData(val + b'\0')
|
self._CheckProp(prop_name).props[prop_name].SetData(val + b'\0')
|
||||||
|
|
||||||
|
def AddData(self, prop_name, val):
|
||||||
|
"""Add a new property to a node
|
||||||
|
|
||||||
|
The device tree is marked dirty so that the value will be written to
|
||||||
|
the blob on the next sync.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
prop_name: Name of property to add
|
||||||
|
val: Bytes value of property
|
||||||
|
"""
|
||||||
|
self.props[prop_name] = Prop(self, None, prop_name, val)
|
||||||
|
|
||||||
def AddString(self, prop_name, val):
|
def AddString(self, prop_name, val):
|
||||||
"""Add a new string property to a node
|
"""Add a new string property to a node
|
||||||
|
|
||||||
|
@ -422,7 +435,7 @@ class Node:
|
||||||
"""
|
"""
|
||||||
if sys.version_info[0] >= 3: # pragma: no cover
|
if sys.version_info[0] >= 3: # pragma: no cover
|
||||||
val = bytes(val, 'utf-8')
|
val = bytes(val, 'utf-8')
|
||||||
self.props[prop_name] = Prop(self, None, prop_name, val + b'\0')
|
self.AddData(prop_name, val + b'\0')
|
||||||
|
|
||||||
def AddSubnode(self, name):
|
def AddSubnode(self, name):
|
||||||
"""Add a new subnode to the node
|
"""Add a new subnode to the node
|
||||||
|
|
|
@ -417,6 +417,10 @@ class TestProp(unittest.TestCase):
|
||||||
self.node.SetData('empty', b'123')
|
self.node.SetData('empty', b'123')
|
||||||
self.assertEqual(b'123', prop.bytes)
|
self.assertEqual(b'123', prop.bytes)
|
||||||
|
|
||||||
|
# Trying adding a lot of data at once
|
||||||
|
self.node.AddData('data', tools.GetBytes(65, 20000))
|
||||||
|
self.dtb.Sync(auto_resize=True)
|
||||||
|
|
||||||
def testFromData(self):
|
def testFromData(self):
|
||||||
dtb2 = fdt.Fdt.FromData(self.dtb.GetContents())
|
dtb2 = fdt.Fdt.FromData(self.dtb.GetContents())
|
||||||
self.assertEqual(dtb2.GetContents(), self.dtb.GetContents())
|
self.assertEqual(dtb2.GetContents(), self.dtb.GetContents())
|
||||||
|
|
Loading…
Add table
Reference in a new issue