fdt: Factor out code to replace a phandle in place
We generate a fake XICS phandle in QEMU and SLOF replaces that phandle with the real one (i.e. SLOF's node address) in interrupt-parent and interrupt-map properties. These properties are handled differently - the interrupt-map is fixed in place while interrupt-parent is decoded+encoded+set as a property. This changes interrupt-parent fixing code to do what the interrupt-map code does because soon we are going to have more phandles to fix and some contain an array of phandles (such as "ibm,npu"). Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> --- Changes: v2: * removed fdt-replace-l,
This commit is contained in:
parent
6e4b4adb89
commit
b752674383
|
@ -279,6 +279,21 @@ fdt-claim-reserve
|
||||||
2drop
|
2drop
|
||||||
;
|
;
|
||||||
|
|
||||||
|
: (fdt-replace-phandles) ( old new propname propnamelen node -- )
|
||||||
|
get-property IF 2drop EXIT THEN
|
||||||
|
BEGIN
|
||||||
|
dup
|
||||||
|
WHILE ( old new prop-addr prop-len )
|
||||||
|
over l@
|
||||||
|
4 pick = IF
|
||||||
|
2 pick 2 pick l! \ replace old with new in place
|
||||||
|
TRUE TO (fdt-phandle-replaced)
|
||||||
|
THEN
|
||||||
|
4 - swap 4 + swap
|
||||||
|
REPEAT
|
||||||
|
2drop 2drop
|
||||||
|
;
|
||||||
|
|
||||||
\ Replace one phandle "old" with a phandle "new" in "node" and recursively
|
\ Replace one phandle "old" with a phandle "new" in "node" and recursively
|
||||||
\ in its child nodes:
|
\ in its child nodes:
|
||||||
: fdt-replace-all-phandles ( old new node -- )
|
: fdt-replace-all-phandles ( old new node -- )
|
||||||
|
@ -288,14 +303,8 @@ fdt-claim-reserve
|
||||||
( old new prop-addr prop-len R: node )
|
( old new prop-addr prop-len R: node )
|
||||||
fdt-replace-interrupt-map
|
fdt-replace-interrupt-map
|
||||||
THEN
|
THEN
|
||||||
s" interrupt-parent" r@ get-property 0= IF
|
|
||||||
( old new prop-addr prop-len R: node )
|
2dup s" interrupt-parent" r@ (fdt-replace-phandles)
|
||||||
decode-int -rot 2drop ( old new val R: node )
|
|
||||||
2 pick = IF ( old new R: node )
|
|
||||||
dup encode-int s" interrupt-parent" r@ set-property
|
|
||||||
TRUE TO (fdt-phandle-replaced)
|
|
||||||
THEN
|
|
||||||
THEN
|
|
||||||
\ ... add more properties that have to be fixed here ...
|
\ ... add more properties that have to be fixed here ...
|
||||||
r>
|
r>
|
||||||
\ Now recurse over all child nodes: ( old new node )
|
\ Now recurse over all child nodes: ( old new node )
|
||||||
|
|
Loading…
Reference in New Issue