Author: quozl Date: Wed Nov 3 00:38:12 2010 New Revision: 2000 URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2000
Log: OLPC XO-1.5 - dual boot, enable third SD slot for Windows sometimes.
During Windows boot preparation, determine which SD slot is being used for the boot, and disable the internal slot only if the external is being used.
Modified: cpu/x86/pc/olpc/via/acpi.fth cpu/x86/pc/olpc/via/addrs.fth cpu/x86/pc/olpc/via/startpcirestore.fth
Modified: cpu/x86/pc/olpc/via/acpi.fth ============================================================================== --- cpu/x86/pc/olpc/via/acpi.fth Tue Nov 2 07:23:07 2010 (r1999) +++ cpu/x86/pc/olpc/via/acpi.fth Wed Nov 3 00:38:12 2010 (r2000) @@ -315,10 +315,31 @@
\ Geode h# 6000 constant xp-smbus-base
+: loaded-from-external-sd? ( -- flag ) + " /chosen" find-package drop ( phandle ) + " bootpath" rot get-package-property abort" No bootpath property" + ( adr len ) + [char] : left-parse-string 2nip ( devname$ ) + find-package 0= abort" Can't find bootpath device node" + ( phandle ) + " slot-name" rot get-package-property if ( ) + false \ If no slot-name, say false ( flag ) + else ( adr len ) + " external" $= ( flag ) + then +; + defer more-platform-fixup ' noop to more-platform-fixup : rm-platform-fixup ( -- ) - \ Disable the internal SD to prevent Windows from making it C: - h# f9 h# 6099 config-b! + loaded-from-external-sd? if + \ Disable the internal SD to prevent Windows from making it C: + h# f9 h# 6099 config-b! + 2 + else + 3 + then + windows-#sd-slots ! + h# 80 h# 6088 config-b! \ Set timeout clock 0:33Mhz h# 00 h# 6089 config-b! \ Set max clock to 33Mhz
Modified: cpu/x86/pc/olpc/via/addrs.fth ============================================================================== --- cpu/x86/pc/olpc/via/addrs.fth Tue Nov 2 07:23:07 2010 (r1999) +++ cpu/x86/pc/olpc/via/addrs.fth Wed Nov 3 00:38:12 2010 (r2000) @@ -89,7 +89,8 @@ h# fff40 constant rm-buf \ 8-byte buffer used by BIOS INT 15 AH=C0 for returning config info h# fff48 constant video-mode-adr \ Saves display mode for resume code h# fff4c constant windows-mode-adr \ Flag to control Windows-specific resume fixups -\ h# fff50 Next address available for resume variables +h# fff50 constant windows-#sd-slots \ Number of SD slots to enable +\ h# fff54 Next address available for resume variables
h# fff80 constant 'int10-dispatch
Modified: cpu/x86/pc/olpc/via/startpcirestore.fth ============================================================================== --- cpu/x86/pc/olpc/via/startpcirestore.fth Tue Nov 2 07:23:07 2010 (r1999) +++ cpu/x86/pc/olpc/via/startpcirestore.fth Wed Nov 3 00:38:12 2010 (r2000) @@ -28,7 +28,9 @@ al 8000.1029 #) mov al 8000.2029 #) mov
- f9 6099 config-wb \ Two SD slots (correct for XP, wrong for Linux) + 2 # windows-#sd-slots #) cmp = if + f9 6099 config-wb \ Two SD slots (correct for XP, wrong for Linux) + then d# 10000 wait-us \ 10 ms delay to let power come on 80 6088 config-wb \ Set timeout clock 0:33Mhz 00 6089 config-wb \ Set max clock to 33Mhz