mirror of
https://github.com/dgibson/dtc.git
synced 2025-10-13 16:27:39 -04:00
livetree: Add only new data to fixup nodes instead of complete regeneration
Removing the complete __fixups__ and __local_fixups__ tree might delete
data that should better be retained. See the added test for a situation
that was broken before.
Note that without removing /__fixups__ and /__local_fixups__ in
generate_fixups_tree() and generate_local_fixups_tree() respectively
calling build_and_name_child_node() isn't safe as the nodes might
already exist and then a duplicate would be added. So build_root_node()
has to be used which copes correctly here.
Fixes: 915daadbb6
("Start with empty __local_fixups__ and __fixups__ nodes")
Closes: https://github.com/dgibson/dtc/issues/170
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Message-ID: <b061ee57157fafbb9d5b9b0b86af760d13a04eda.1755512759.git.u.kleine-koenig@baylibre.com>
[dwg: Use -1 instead of 1 as an error return]
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
cba90ce820
commit
e1284ee5dc
3 changed files with 128 additions and 33 deletions
29
tests/retain-fixups.dts
Normal file
29
tests/retain-fixups.dts
Normal file
|
@ -0,0 +1,29 @@
|
|||
/dts-v1/;
|
||||
/plugin/;
|
||||
|
||||
/ {
|
||||
fixup-node {
|
||||
property = <0xffffffff>;
|
||||
property-with-fixup = <0xffffffff>;
|
||||
property-with-label = <&somenode>;
|
||||
property-with-label-and-fixup = <&somenode>;
|
||||
};
|
||||
|
||||
label: local-fixup-node {
|
||||
property = <0xffffffff>;
|
||||
property-with-local-fixup = <0xffffffff>;
|
||||
property-with-local-label = <&label>;
|
||||
property-with-local-label-and-fixup = <&label>;
|
||||
};
|
||||
|
||||
__fixups__ {
|
||||
somenode = "/fixup-node:property-with-fixup:0", "/fixup-node:property-with-label-and-fixup:0";
|
||||
};
|
||||
|
||||
__local_fixups__ {
|
||||
local-fixup-node {
|
||||
property-with-local-fixup = <0x00>;
|
||||
property-with-local-label-and-fixup = <0x00>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -667,6 +667,11 @@ dtc_tests () {
|
|||
run_test dtbs_equal_ordered $tree.test.dtb $tree.test.dts.test.dtb
|
||||
done
|
||||
|
||||
# Check preservation of __fixups__ and __local_fixups__
|
||||
run_dtc_test -I dts -O dtb -o retain-fixups.test.dtb "$SRCDIR/retain-fixups.dts"
|
||||
run_fdtget_test "/fixup-node:property-with-fixup:0 /fixup-node:property-with-label-and-fixup:0 /fixup-node:property-with-label:0" retain-fixups.test.dtb /__fixups__ somenode
|
||||
run_fdtget_test "property-with-local-fixup\nproperty-with-local-label-and-fixup\nproperty-with-local-label" -p retain-fixups.test.dtb /__local_fixups__/local-fixup-node
|
||||
|
||||
# Check -Oyaml output
|
||||
if ! $no_yaml; then
|
||||
for tree in type-preservation; do
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue