diff options
Diffstat (limited to 'board-qemu/slof')
-rw-r--r-- | board-qemu/slof/fdt.fs | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/board-qemu/slof/fdt.fs b/board-qemu/slof/fdt.fs index 8e8921f..3138c9e 100644 --- a/board-qemu/slof/fdt.fs +++ b/board-qemu/slof/fdt.fs @@ -279,6 +279,21 @@ fdt-claim-reserve 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 \ in its child nodes: : fdt-replace-all-phandles ( old new node -- ) @@ -288,14 +303,8 @@ fdt-claim-reserve ( old new prop-addr prop-len R: node ) fdt-replace-interrupt-map THEN - s" interrupt-parent" r@ get-property 0= IF - ( old new prop-addr prop-len R: node ) - 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 + + 2dup s" interrupt-parent" r@ (fdt-replace-phandles) \ ... add more properties that have to be fixed here ... r> \ Now recurse over all child nodes: ( old new node ) |