Author: wmb Date: Sat Feb 4 00:16:53 2012 New Revision: 2851 URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2851
Log: Flattened device tree fixes from debugging session.
Modified: cpu/arm/linux.fth ofw/core/fdt.fth
Modified: cpu/arm/linux.fth ============================================================================== --- cpu/arm/linux.fth Tue Jan 24 23:11:27 2012 (r2850) +++ cpu/arm/linux.fth Sat Feb 4 00:16:53 2012 (r2851) @@ -48,8 +48,8 @@ defer fb-tag, ' noop to fb-tag, \ Define externally if appropriate defer ofw-tag, ' noop to ofw-tag, \ Define externally if appropriate
-: set-parameters ( cmdline$ -- ) - linux-params to tag-adr +: set-parameters ( cmdline$ adr -- ) + to tag-adr
5 tag-l, \ size h# 54410001 tag-l, \ ATAG_CORE @@ -94,9 +94,9 @@
: linux-fixup ( -- ) [ifdef] linux-logo linux-logo [then] - use-fdt? 0= if - args-buf cscount set-parameters ( ) - then +\ use-fdt? 0= if +\ args-buf cscount set-parameters ( ) +\ then disable-interrupts
linux-base linux-base (init-program) \ Starting address, SP @@ -104,13 +104,12 @@ arm-linux-machine-type to r1 [ifdef] flatten-device-tree use-fdt? if - flatten-device-tree to r2 + linux-params h# 40000 flatten-device-tree else - linux-params to r2 + args-buf cscount linux-params set-parameters then -[else] - linux-params to r2 [then] + linux-params to r2 linux-hook ;
@@ -127,8 +126,8 @@ \ dup to linux-memtop to ramdisk-adr
- ramdisk-adr " linux,initd-start" chosen-int-property - ramdisk-adr /ramdisk + " linux,initd-end" chosen-int-property + ramdisk-adr " linux,initrd-start" chosen-int-property + ramdisk-adr /ramdisk + " linux,initrd-end" chosen-int-property ; : $load-ramdisk ( name$ -- ) 0 to /ramdisk ( name$ )
Modified: ofw/core/fdt.fth ============================================================================== --- ofw/core/fdt.fth Tue Jan 24 23:11:27 2012 (r2850) +++ ofw/core/fdt.fth Sat Feb 4 00:16:53 2012 (r2851) @@ -10,14 +10,11 @@ 0 value fdt-strings 0 value fdt-strings-ptr 0 value fdt-strings-end -h# 40000 value /fdt +0 value /fdt
0 value the-node
: fdt-remaining ( -- n ) fdt-end fdt-ptr - ; -: ?fdt-enough ( n -- ) - -;
: +fdt ( n -- ptr ) dup fdt-remaining > abort" FDT buffer overflow" ( n ) @@ -101,9 +98,8 @@ 2 fdt, \ OF_DT_END_NODE ;
-: flatten-device-tree ( -- adr ) - /fdt alloc-mem /fdt-align round-up to fdt - fdt /fdt erase +: flatten-device-tree ( adr len -- ) + to /fdt to fdt fdt to fdt-ptr fdt /fdt + to fdt-end
@@ -166,6 +162,57 @@
fdt ; + +: fdt@ ( offset -- l ) fdt + be-l@ ; +: +fdt-ptr ( n -- ) fdt-ptr + 4 round-up to fdt-ptr ; +: fdt@@ ( -- l ) fdt-ptr be-l@ /l +fdt-ptr ; + +: fdt@$ ( -- adr len ) + fdt-ptr cscount ( adr len ) + dup 1+ +fdt-ptr +; +: .fdt-value ( value$ name$ -- ) + " compatible" $= if show-strings exit then + + \ Test for unprintable characters + 2dup -null text? if + to-display-column -null type exit + then ( adr,len ) + + dup /n /mod swap 0= if ( adr len #ints ) + .ints exit ( -- ) + then ( adr,len #ints ) + drop ( adr,len ) + + to-display-column h# 10 min cdump ( ) +; +: .fdt-property ( -- ) + [ also hidden ] indent [ previous ] + fdt@@ ( value-length ) + fdt@@ fdt-strings + cscount 2dup type ( value-length name$ ) + 2>r fdt-ptr over 2r> .fdt-value ( value-length ) + +fdt-ptr ( ) +; +: .fdt-node ( -- ) + [ also hidden ] indent [ previous ] + fdt@$ type cr +; + +: dump-fdt ( -- ) + 0 fdt@ h# d00dfeed <> abort" FDT magic mismatch" + fdt h# 0c fdt@ + to fdt-strings + fdt h# 80 + to fdt-ptr + begin + fdt@@ case + 1 of .fdt-node 2 lmargin +! endof + 2 of -2 lmargin +! endof + 3 of .fdt-property endof + 9 of exit endof + ( -- ) ." Bogus DT tag " . cr exit + endcase + again +; + previous
\ LICENSE_BEGIN
openfirmware@openfirmware.info