Author: quozl Date: Tue May 7 07:06:33 2013 New Revision: 3656 URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3656
Log: OLPC XO-1.75 - retain the file name portion of the /chosen bootpath property, so that the initramfs can deduce whether the system is being booted in activation mode or not. The initramfs may also use ramdisk to deduce. #12672.
Modified: cpu/arm/olpc/1.75/dtcompat.fth
Modified: cpu/arm/olpc/1.75/dtcompat.fth ============================================================================== --- cpu/arm/olpc/1.75/dtcompat.fth Thu May 2 04:36:27 2013 (r3655) +++ cpu/arm/olpc/1.75/dtcompat.fth Tue May 7 07:06:33 2013 (r3656) @@ -9,15 +9,30 @@ \ form.
-\ If "bootpath" (whose underlying storage is load-path) matches newpath$, -\ replace it with oldpath$ . -: $replaced? ( oldpath$ newpath$ -- flag ) - load-path cscount substring? if ( oldpath$ ) - load-path place-cstr ( ) - true ( flag ) - else ( oldpath$ ) - 2drop false ( flag ) - then ( flag ) +\ append a fragment to a path in place, returning the new path string +: $append ( path$ fragment$ -- 'path$ ) + dup >r ( path$ fragment$ r: /fragment ) + 2over ca+ ( path$ fragment$ dst r: /fragment ) + swap cmove ( path$ r: /fragment ) + r> ca+ ( 'path$ ) + 2dup ca+ 0 swap c! ( 'path$ ) +; + +\ if "bootpath" (whose underlying storage is load-path) starts with +\ new$ then replace only those characters with old$ +: $replaced? ( old$ new$ -- flag ) + load-path cscount ( old$ new$ path$ ) + [char] : left-parse-string ( old$ new$ tail$ head$ ) + 2swap 2>r ( old$ new$ head$ r: tail$ ) + $= if ( old$ r: tail$ ) + load-path 0 ( old$ path$ ) + 2swap $append ( path$ r: tail$ ) + " :" $append ( path$ r: tail$ ) + 2r> $append ( path$ ) + 2drop true ( flag ) + else ( old$ r: tail$ ) + 2r> 4drop false ( flag ) + then ( flag ) ;
: fixup-bootpath ( -- ) @@ -25,9 +40,9 @@ /ramdisk 0= if exit then " $bootpath in"n"t"t/sd@" ramdisk-adr /ramdisk $sindex nip if ( ) false to use-fdt? - " /sd@d4280000/disk@1:/" " /sd/sdhci@d4280000/disk" $replaced? ?exit - " /sd@d4280000/disk@2:/" " /sd/sdhci@d4280800/disk" $replaced? ?exit - " /sd@d4280000/disk@3:/" " /sd/sdhci@d4281000/disk" $replaced? ?exit + " /sd@d4280000/disk@1" " /sd/sdhci@d4280000/disk" $replaced? ?exit + " /sd@d4280000/disk@2" " /sd/sdhci@d4280800/disk" $replaced? ?exit + " /sd@d4280000/disk@3" " /sd/sdhci@d4281000/disk" $replaced? ?exit then ;