mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-29 17:55:48 +00:00
dtoc: Make properties dirty when purging them
Without the 'dirty' flag properties are not written back to the devicetree when synced. This means that new properties copied over to a node are not always written out. Fix this and add a test. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
b2f47a599c
commit
7155646b22
3 changed files with 18 additions and 5 deletions
|
@ -272,6 +272,7 @@ class Prop:
|
||||||
the FDT is synced
|
the FDT is synced
|
||||||
"""
|
"""
|
||||||
self._offset = None
|
self._offset = None
|
||||||
|
self.dirty = True
|
||||||
|
|
||||||
class Node:
|
class Node:
|
||||||
"""A device tree node
|
"""A device tree node
|
||||||
|
|
|
@ -37,11 +37,12 @@
|
||||||
new-prop;
|
new-prop;
|
||||||
};
|
};
|
||||||
|
|
||||||
second1 {
|
second1: second1 {
|
||||||
new-prop;
|
new-prop;
|
||||||
};
|
};
|
||||||
|
|
||||||
second4 {
|
second4 {
|
||||||
|
use_second1 = <&second1>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -65,12 +66,13 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
second: second {
|
second: second {
|
||||||
second1 {
|
second_1_bad: second1 {
|
||||||
some-prop;
|
some-prop;
|
||||||
};
|
};
|
||||||
|
|
||||||
second2 {
|
second2 {
|
||||||
some-prop;
|
some-prop;
|
||||||
|
use_second1_bad = <&second_1_bad>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -308,7 +308,7 @@ class TestNode(unittest.TestCase):
|
||||||
|
|
||||||
def test_copy_node(self):
|
def test_copy_node(self):
|
||||||
"""Test copy_node() function"""
|
"""Test copy_node() function"""
|
||||||
def do_copy_checks(dtb, dst, expect_none):
|
def do_copy_checks(dtb, dst, second1_ph_val, expect_none):
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
['/dest/base', '/dest/first@0', '/dest/existing'],
|
['/dest/base', '/dest/first@0', '/dest/existing'],
|
||||||
[n.path for n in dst.subnodes])
|
[n.path for n in dst.subnodes])
|
||||||
|
@ -365,12 +365,22 @@ class TestNode(unittest.TestCase):
|
||||||
['second1', 'second2', 'second3', 'second4'],
|
['second1', 'second2', 'second3', 'second4'],
|
||||||
[n.name for n in second.subnodes])
|
[n.name for n in second.subnodes])
|
||||||
|
|
||||||
|
# Check the 'second_1_bad' phandle is not copied over
|
||||||
|
second1 = second.FindNode('second1')
|
||||||
|
self.assertTrue(second1)
|
||||||
|
sph = second1.props.get('phandle')
|
||||||
|
self.assertTrue(sph)
|
||||||
|
self.assertEqual(second1_ph_val, sph.bytes)
|
||||||
|
|
||||||
|
|
||||||
dtb = fdt.FdtScan(find_dtb_file('dtoc_test_copy.dts'))
|
dtb = fdt.FdtScan(find_dtb_file('dtoc_test_copy.dts'))
|
||||||
tmpl = dtb.GetNode('/base')
|
tmpl = dtb.GetNode('/base')
|
||||||
dst = dtb.GetNode('/dest')
|
dst = dtb.GetNode('/dest')
|
||||||
|
second1_ph_val = (dtb.GetNode('/dest/base/second/second1').
|
||||||
|
props['phandle'].bytes)
|
||||||
dst.copy_node(tmpl)
|
dst.copy_node(tmpl)
|
||||||
|
|
||||||
do_copy_checks(dtb, dst, expect_none=True)
|
do_copy_checks(dtb, dst, second1_ph_val, expect_none=True)
|
||||||
|
|
||||||
dtb.Sync(auto_resize=True)
|
dtb.Sync(auto_resize=True)
|
||||||
|
|
||||||
|
@ -378,7 +388,7 @@ class TestNode(unittest.TestCase):
|
||||||
new_dtb = fdt.Fdt.FromData(dtb.GetContents())
|
new_dtb = fdt.Fdt.FromData(dtb.GetContents())
|
||||||
new_dtb.Scan()
|
new_dtb.Scan()
|
||||||
dst = new_dtb.GetNode('/dest')
|
dst = new_dtb.GetNode('/dest')
|
||||||
do_copy_checks(new_dtb, dst, expect_none=False)
|
do_copy_checks(new_dtb, dst, second1_ph_val, expect_none=False)
|
||||||
|
|
||||||
def test_copy_subnodes_from_phandles(self):
|
def test_copy_subnodes_from_phandles(self):
|
||||||
"""Test copy_node() function"""
|
"""Test copy_node() function"""
|
||||||
|
|
Loading…
Add table
Reference in a new issue