mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 02:15:45 +01: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:
		| @@ -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()) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user