Author: wmb Date: 2007-10-20 09:42:32 +0200 (Sat, 20 Oct 2007) New Revision: 690
Modified: cpu/x86/pc/olpc/fw.bth cpu/x86/pc/olpc/security.fth dev/olpc/kb3700/ecio.fth Log: OLPC - Use new EC command that permits reflashing after reset-all, without having to remove all power.
Modified: cpu/x86/pc/olpc/fw.bth =================================================================== --- cpu/x86/pc/olpc/fw.bth 2007-10-19 07:02:17 UTC (rev 689) +++ cpu/x86/pc/olpc/fw.bth 2007-10-20 07:42:32 UTC (rev 690) @@ -336,12 +336,7 @@ fload ${BP}/ofw/gui/ofpong.fth fload ${BP}/cpu/x86/pc/olpc/life.fth fload ${BP}/cpu/x86/pc/olpc/sound.fth -: olpc-power-off ( -- ) - gx-power-off \ Try the nice way first - d# 20 ms - ec-power-off \ Then try the hard way -; -' olpc-power-off to power-off +' gx-power-off to power-off [then]
@@ -388,8 +383,7 @@ 2drop 2drop then
- 1. h# 5140.0017 wrmsr \ DIVIL_SOFT_RESET MSR, 5536 page 367 - begin again + ec-reboot \ Tell the EC to reboot us, so the EC can reset too ; ' dcon-reset-all to reset-all
Modified: cpu/x86/pc/olpc/security.fth =================================================================== --- cpu/x86/pc/olpc/security.fth 2007-10-19 07:02:17 UTC (rev 689) +++ cpu/x86/pc/olpc/security.fth 2007-10-20 07:42:32 UTC (rev 690) @@ -647,7 +647,9 @@
ec-indexed-io-off? if visible - .ec-ixio-msg + ." Restarting to enable SPI FLASH writing." cr + d# 3000 ms + ec-reboot security-failure then
Modified: dev/olpc/kb3700/ecio.fth =================================================================== --- dev/olpc/kb3700/ecio.fth 2007-10-19 07:02:17 UTC (rev 689) +++ dev/olpc/kb3700/ecio.fth 2007-10-20 07:42:32 UTC (rev 690) @@ -189,66 +189,55 @@ \ the port 66 command sequence. : sci-quiet ( -- ) h# 50 h# ff03 ec! ;
-\ While accessing the SPI FLASH, we have to turn off the keyboard controller, -\ because it continuously fetches from the SPI FLASH when it's on. That -\ interferes with our accesses.
-: ec-indexed-io-off? ( -- flag ) h# ff14 ec@ h# ff = ; -: .ec-ixio-msg ( -- ) - ." Writing to the SPI FLASH is disabled." cr - ." Disconnect/reconnect the battery and AC and try again." cr -; +\ kbc-pause temporarily halts execution of the keyboard controller microcode. +\ kbc-resume makes it run again, picking up where it left off. +\ This is useful for accessing the SPI FLASH in cases where you do not +\ overwrite the keyboard controller microcodes.
+: kbc-pause ( -- ) h# dd ec-cmd66 ; +: kbc-resume ( -- ) h# df ec-cmd66 ; + 0 value kbc-off? -: kbc-off ( -- ) - kbc-off? if exit then \ Fast bail out - ec-indexed-io-off? if .ec-ixio-msg abort then - h# d8 ec-cmd66 \ Prepare for reset - h# ff14 ec@ 1 or h# ff14 ec! - true to kbc-off? -;
-: ec-power-off ( -- ) - 1 h# ff14 ec! - 1 h# ff01 ec! \ Tell the EC to bounce us on restart - 0 h# ff14 ec! -; - -\ Unfortunately, since the system reset is mediated by the keyboard -\ controller, turning the keyboard controller back on resets the system. - : kbc-on ( -- ) + \ Release the reset line to the 8051 microcontroller in the EC, + \ thus letting it restart with possibly-new microcode. h# ff14 ec@ 1 invert and h# ff14 ec! \ Innocuous if already on
false to kbc-off? ; -: fancy-kbc-on ( -- ) - 2 h# ff01 ec! \ Prevent full system reset - h# ff14 ec@ 1 invert and h# ff14 ec! \ Innocuous if already on - d# 400 ms \ Give the EC time to start up - h# 44 h# fc80 ec! \ Re-enable scan code conversion and system flag - h# 43 h# fc81 ec! \ Re-enable fast gate and ibf/obf interrupts
- h# f h# fe51 ec! \ Clear pending interrupts - h# f h# fe50 ec! \ Re-enable GPT interrupts - h# 0 h# fea7 ec! \ Clear FLASH write enable - h# 4 h# fead ec! \ fast read mode - h# fe95 ec@ h# 80 or h# fe95 ec! \ Write-protect LPC - h# 3 h# ff04 ec! \ enable IBF/OBF interrupts -\ h# 40 h# ff08 ec! \ Clear some interrupt - h# ff30 ec@ h# 10 or h# ff30 ec! \ Enable interrupt from GPIO04, PCI_RST# +\ This restarts the EC and the CPU, resetting the EC state to its default. +\ EC indexed I/O will come up in enabled state. +: ec-reboot ( -- ) h# db ec-cmd66 begin again ;
- false to kbc-off? +: ec-indexed-io-off? ( -- flag ) h# ff14 ec@ h# ff = ; +: ?ixio-restart ( -- ) + ec-indexed-io-off? if + cr red-letters + ." Restarting to enable SPI FLASH writing. Try again after the system restarts." + black-letters cr + d# 5000 ms + ec-reboot + then ;
-\ kbc-pause temporarily halts execution of the keyboard controller microcode. -\ kbc-resume makes it run again, picking up where it left off. -\ This is useful for accessing the SPI FLASH in cases where you do not -\ overwrite the keyboard controller microcodes. +\ While accessing the SPI FLASH, we have to turn off the keyboard controller, +\ because it continuously fetches from the SPI FLASH when it's on. That +\ interferes with our accesses.
-: kbc-pause ( -- ) h# dd ec-cmd66 ; -: kbc-resume ( -- ) h# df ec-cmd66 ; +\ Unfortunately, since the system reset is mediated by the keyboard +\ controller, turning the keyboard controller back on resets the system.
+: kbc-off ( -- ) + kbc-off? if exit then \ Fast bail out + ?ixio-restart + h# d8 ec-cmd66 \ Prepare for reset + h# ff14 ec@ 1 or h# ff14 ec! + true to kbc-off? +; + : io-spi@ ( reg# -- b ) h# fea8 + ec@ ; : io-spi! ( b reg# -- ) h# fea8 + ec! ;
@@ -261,9 +250,7 @@
: io-spi-reprogrammed ( -- ) ." Restarting..." d# 2000 ms cr - kbc-on - begin again -\ ." Keyboard back on" cr + kbc-on begin again ;
: io-spi-start ( -- ) @@ -281,6 +268,7 @@ ; : use-local-ec ( -- ) ['] io-spi-start to spi-start ; use-local-ec + \ LICENSE_BEGIN \ Copyright (c) 2006 FirmWorks \