[openfirmware] [commit] r1776 - cpu/x86/pc/olpc cpu/x86/pc/olpc/via dev/olpc/kb3700

repository service svn at openfirmware.info
Mon Apr 5 21:30:35 CEST 2010


Author: rsmith
Date: Mon Apr  5 21:30:34 2010
New Revision: 1776
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/1776

Log:
Merge branch 'richard'

Modified:
   cpu/x86/pc/olpc/charge.fth
   cpu/x86/pc/olpc/via/fw.bth
   dev/olpc/kb3700/battery.fth

Modified: cpu/x86/pc/olpc/charge.fth
==============================================================================
--- cpu/x86/pc/olpc/charge.fth	Mon Apr  5 05:54:49 2010	(r1775)
+++ cpu/x86/pc/olpc/charge.fth	Mon Apr  5 21:30:34 2010	(r1776)
@@ -2,48 +2,61 @@
 \ See license at end of file
 
 \ Need the comma to be compatible with olpc-pwr-log stuff
-
 : >sd,
-   <# " ," hold$ u#s u#>
+   base @ >r decimal
+   dup abs <# " ," hold$ u#s swap sign u#>
+   r> base !
 ;
 
 : >sd.dd,  ( n -- formatted )
    base @ >r  decimal
-   dup abs <# " ," hold$ u# u# [char] . hold u#s rot sign u#>
+   dup abs <# " ," hold$ u# u# [char] . hold u#s swap sign u#>
    r> base !
 ;
 
-:  bat-log-append ( adr len -- )
-   " sd:\charge.log" $append-open   \ hardcode the path for now
-      ftype
-      fcr
-      ofd @ fclose
-;
+0 value start-acr
+d# 60 value (wake-delay)
+d# 0  value wake-delay
 
+: setup-rtc-wake ( delay -- )
+   0 acpi-l@ h# 400.0000 or 0 acpi-l!
+   ['] noop " set-alarm" clock-node @ $call-method
+;
 
-0 value start-acr
-d# 15 value wake-delay
+: finish-rtc-wake ( -- ) 0 acpi-l@ h# 400.0000 invert and 0 acpi-l! ;
 
 : bat-charge-dataf@
-      base @ >r  decimal
       0 logstr c!
       time&date >unix-seconds >sd, logstr $cat
       soc >sd, logstr $cat
-      uvolt@ dup >sd, logstr $cat 100 /         ( V__.1mV ) 
-      cur@ dup >sd, logstr $cat   100 /         ( V_.1mV I__.1mA )
-       * drop                            ( W_mW ) 
-      bat-temp >sd, logstr $cat                 
-      bat-acr@ s16>s32 dup >sd, logstr $cat     
+      uvolt@ dup >sd, logstr $cat
+      cur@ dup >sd, logstr $cat
+      bat-temp >sd, logstr $cat
+      bat-acr@ s16>s32 dup >sd, logstr $cat
       start-acr - bg-acr>mAh >sd.dd, logstr $cat
-      r> base !
 ;
 
-: bat-charge-log ( -- )
-   " sd:\charge.log" $new-file      \ Make sure the file exists and is empty.
+h# 100 buffer: fname-buf 
+ 
+:  charge-log-append ( adr len -- )
+      fname-buf $append-open
+      ftype
+      fcr
+      ofd @ fclose
+;
+
+: charge-log ( "filename" -- ) \ filename is optional
+   ['] safe-parse-word catch if 
+      fname-buf place 
+   else 
+   " sd:\charge.log" fname-buf place
+   then  
+   ." Logging to: " fname-buf count type cr
+   fname-buf $new-file  
    ofd @ fclose
 
-   " chg_log Ver: 1.0" bat-log-append
-   " <StartData>" bat-log-append   \ This makes us compatible with the processing scripts for use with olpc-pwr-log
+   " chg_log Ver: 1.0" charge-log-append
+   " <StartData>" charge-log-append   \ This makes us compatible with the processing scripts for use with olpc-pwr-log
 
    \ Allow for suspend to be super low power
    dcon-power-off
@@ -53,17 +66,48 @@
    bat-acr@ s16>s32 to start-acr
    begin
       bat-charge-dataf@
+      \ Even though we have no screen still do console output
+      \ So it shows up on the serial port.
       logstr count type cr
-      logstr count bat-log-append
-      0 acpi-l@ h# 400.0000 or  0 acpi-l!  \ Enable RTC SCI
-      ['] noop  wake-delay " set-alarm" clock-node @ $call-method
+      logstr count charge-log-append
+      wake-delay setup-rtc-wake
+      \ We don't want to do video restore. Only usb 
+      suspend-usb
       s3
-      0 0 acpi-l!                          \ Disable RTC SCI
+      resume-usb
+      finish-rtc-wake
       key?
    until key drop
 ;
 
+: watch-charge ( -- )
+   \ 5 seconds is the default unless the user sets wake-delay
+   wake-delay 0= if 
+      d# 5 to (wake-delay) 
+      ." Using default delay" cr
+      ." Set wake-delay fo a different value" cr
+   else
+      wake-delay to (wake-delay)
+   then
+   (wake-delay)
+   ." Sampling every " .d ." seconds" cr
+   sci-wakeup
+   bat-acr@ s16>s32 to start-acr
+   begin
+      bat-charge-dataf@
+      logstr count type cr
 
+\      wake-delay setup-rtc-wake
+\      s3-suspend
+\      finish-rtc-wake
+
+\     RTC wake seems flaky.
+\     use EC for now (only works on 1.5)
+      (wake-delay) d# 1000 * h# 36 ec-cmd-l! 
+      s3-suspend
+      key?
+   until key drop
+;
 \ LICENSE_BEGIN
 \ Copyright (c) 2007 FirmWorks
 \

Modified: cpu/x86/pc/olpc/via/fw.bth
==============================================================================
--- cpu/x86/pc/olpc/via/fw.bth	Mon Apr  5 05:54:49 2010	(r1775)
+++ cpu/x86/pc/olpc/via/fw.bth	Mon Apr  5 21:30:34 2010	(r1776)
@@ -719,12 +719,25 @@
    quit
 ;
 
+: enable-serial ( -- )
+   serial-enabled? if exit then
+
+   h# 40 h# 8846 config-b!
+   " com1" open-dev dup to fallback-in-ih  add-input
+   " com1" open-dev dup to fallback-out-ih add-output
+;
+: disable-serial
+   fallback-in-ih   ?dup  if  remove-input  then
+   fallback-out-ih  ?dup  if  remove-output  then
+;
+
 : newrom
+   enable-serial
    " flash! http:\\10.20.0.14\new.rom" eval
 \   " wifi media lab 802.11" eval
 \   " flash http:\\18.85.46.172\new.rom" eval
 ;
-: urom  " flash! u:\new.rom" eval  ;
+: urom  enable-serial " flash! u:\new.rom" eval  ;
 : no-usb-delay  " dev /usb  false to delay?  dend"  evaluate  ;
 : null-fsdisk
    " dev /null : write-blocks-start 3drop ; : write-blocks-finish ; dend" evaluate
@@ -741,18 +754,6 @@
 warning !
 previous previous definitions
 
-: enable-serial ( -- )
-   serial-enabled? if exit then
-
-   h# 40 h# 8846 config-b!
-   " com1" open-dev dup to fallback-in-ih  add-input
-   " com1" open-dev dup to fallback-out-ih add-output
-;
-: disable-serial
-   fallback-in-ih   ?dup  if  remove-input  then
-   fallback-out-ih  ?dup  if  remove-output  then
-;
-
 tag-file @ fclose  tag-file off
 
 .( --- Saving fw.dic ...)

Modified: dev/olpc/kb3700/battery.fth
==============================================================================
--- dev/olpc/kb3700/battery.fth	Mon Apr  5 05:54:49 2010	(r1775)
+++ dev/olpc/kb3700/battery.fth	Mon Apr  5 21:30:34 2010	(r1776)
@@ -110,6 +110,12 @@
    dup abs  d# 10,000 /  <# u# u# [char] . hold u#s swap sign u#> type
    pop-base
 ;
+
+: .mppt-active?
+   h# 3d ec-cmd-b@ h# d and
+   if ." MPPT" then
+;
+
 \needs 2.d : 2.d  ( n -- )  push-decimal <# u# u#s u#>  type  pop-base  ;
 : .%  ( n -- )  2.d ." %" ;
 : .bat  ( -- )
@@ -133,9 +139,10 @@
       dup h# 40 and  if  ." discharging "  then
       dup h# 80 and  if  ." trickle  "  then
    else
-      ." No battery"
+      ." No battery "
    then
    drop
+   .mppt-active?
 ;
 
 : ?enough-power  ( )
@@ -157,17 +164,6 @@
 \ (stdout off) this will miss some state changes.
 \
 
-: .mppt 
-   ec-pwr_limit ec-ram@       ( pwr_limit )
-   ec-rambase ec-va2 + ecw@     ( pwr_limit VA2 )
-    ." VA2: " .d ." PWM: " . 
-;
-
-: watch-mppt ( -- )
-   begin  (cr .mppt kill-line  d# 500 ms  key?  until
-   key drop
-;
-
 : next-bstate
         begin
          f780 ec@ tuck <>
@@ -442,6 +438,28 @@
    d# 16 << d# 16 >>a
 ;
 
+: >sd
+   base @ >r decimal
+   dup abs <# u#s swap sign u#>
+   r> base !
+;
+
+: >sdx
+   <# "  " hold$ u#s " 0x" hold$ u#>
+;
+
+: >sd.ddd  ( n -- formatted )
+   base @ >r  decimal
+   dup abs <# u# u# u# [char] . hold u# u#s swap sign u#>
+   r> base !
+;
+
+: >sd.dd  ( n -- formatted )
+   base @ >r  decimal
+   dup abs <# u# u# [char] . hold u# u#s swap sign u#>
+   r> base !
+;
+
 : bat-save  ( -- )
    " disk:\battery.dmp"
    2dup ['] $delete  catch  if  2drop  then  ( name$ )
@@ -533,6 +551,42 @@
    1w-reset
 ;
 
+\ Retrieve the key battery stats in bulk and put it on the stack
+\ sign extending the values that are 2's complement.
+: bg-charge-info@
+   ds-bank-buf 6 h# 0c 1w-read         ( )
+   ds-bank-buf c@ 8 <<              ( voltage_msb )
+   ds-bank-buf 1 + c@ or s16>s32    ( voltage )
+   ds-bank-buf 2 + c@ 8 <<          ( voltage current_msb )
+   ds-bank-buf 3 + c@ or s16>s32    ( voltage current )
+   ds-bank-buf 4 + c@ 8 <<          ( voltage current ACR_msb )
+   ds-bank-buf 5 + c@ or s16>s32    ( voltage current ACR )
+;
+
+: bg-net-addr@
+   1w-reset
+   h# 33 1w-write-byte
+   1w-read-byte
+   0 7 bounds ?do 1w-read-byte loop
+;
+
+: bg-acr>mAh ( raw-value -- acr_in_mAh )
+   d# 625 ( mV ) * d# 15 ( mOhm ) /
+;
+
+: bg-V>V ( raw-value - V_in_mV )
+   d# 488 ( mV ) * 2* d# 100 / 5 >>
+;
+
+: bg-I>mA ( raw-value -- I_in_mA )
+   3 >>a
+   d# 15625 ( nV ) * d# 15 ( mOhm ) / d# 10 /
+;
+
+: bg-temp>degc ( raw-value -- temp_in_degc )
+   d# 125 * d# 10 / 5 >>
+;
+
 : .bg-eeprom
    base @ >r
    decimal
@@ -548,6 +602,40 @@
    r> base !
 ;
 
+: .bg-acr ( raw_acr_in_s32 -- )
+   bg-acr>mAh >sd.dd type
+;
+
+: .bg-current ( raw_I_in_s32 -- )
+   bg-I>mA >sd.dd type
+;
+
+: .bg-volt ( raw_V_in_s32 -- )
+   bg-V>V >sd.ddd type
+;
+
+: .bg-net-addr ( -- )
+   bg-net-addr@
+   0 8 bounds ?do . loop cr
+;
+
+0 value bg-last-acr
+0 value bg-v_avg
+
+: bg-watch ( -- )
+   bg-acr@
+   begin
+      bg-charge-info@
+      dup to bg-last-acr
+      ." ACR:" .bg-acr ."  I:" .bg-current ."  V:"  .bg-volt
+      dup bg-last-acr swap - ."  Chg:" .bg-acr
+      cr
+      500 ms
+      key?
+   until
+   drop
+;
+
 : bat-set-default-status ( val -- )
    ds-bank0 1w-recall
    ds-default-status 1w-write-start
@@ -573,55 +661,7 @@
    then 
 ;
 
-\ Retrieve the key battery stats in bulk and put it on the stack
-\ sign extending the values that are 2's complement.
-: bg-charge-info@
-   ds-bank-buf 6 h# 0c 1w-read         ( )
-   ds-bank-buf c@ 8 <<              ( voltage_msb )
-   ds-bank-buf 1 + c@ or s16>s32    ( voltage )
-   ds-bank-buf 2 + c@ 8 <<          ( voltage current_msb )
-   ds-bank-buf 3 + c@ or s16>s32    ( voltage current )
-   ds-bank-buf 4 + c@ 8 <<          ( voltage current ACR_msb )
-   ds-bank-buf 5 + c@ or s16>s32    ( voltage current ACR )
-;
-
-: >sd.ddd  ( n -- formatted )
-   base @ >r  decimal
-   dup abs <# u# u# u# [char] . hold u# u#s swap sign u#>
-   r> base !
-;
-
-: >sd.dd  ( n -- formatted )
-   base @ >r  decimal
-   dup abs <# u# u# [char] . hold u# u#s swap sign u#>
-   r> base !
-;
-
-: bg-acr>mAh ( raw-value -- acr_in_mAh )
-   d# 625 ( mV ) * d# 15 ( mOhm ) /
-;
-
-: bg-V>V ( raw-value - V_in_mV )
-   d# 488 ( mV ) * 2* d# 100 / 5 >>
-;
-
-: bg-I>mA ( raw-value -- I_in_mA )
-   3 >>a
-   d# 15625 ( nV ) * d# 15 ( mOhm ) / d# 10 /
-;
-
-: bg-temp>degc ( raw-value -- temp_in_degc )
-   d# 125 * d# 10 / 5 >>
-;
-
 h# 90 buffer: logstr
-: >sd
-   <# "  " hold$ u#s u#>
-;
-
-: >sdx
-   <# "  " hold$ u#s " 0x" hold$ u#>
-;
 
 \ Read values directly rather than using the ec-cmd
 
@@ -685,35 +725,6 @@
       r> base !
 ;
 
-: .bg-acr ( raw_acr_in_s32 -- )
-   bg-acr>mAh >sd.dd type
-;
-
-: .bg-current ( raw_I_in_s32 -- )
-   bg-I>mA >sd.dd type
-;
-
-: .bg-volt ( raw_V_in_s32 -- )
-   bg-V>V >sd.ddd type
-;
-
-0 value bg-last-acr
-0 value bg-v_avg
-
-: bg-watch ( -- )
-   bg-acr@
-   begin
-      bg-charge-info@
-      dup to bg-last-acr
-      ." ACR:" .bg-acr ."  I:" .bg-current ."  V:"  .bg-volt
-      dup bg-last-acr swap - ."  Chg:" .bg-acr
-      cr
-      500 ms
-      key?
-   until
-   drop
-;
-
 : bat-debug
    begin
       bat-lfp-dataf@
@@ -737,7 +748,7 @@
 ;
 
 
-: bat-charge ( -- )
+: bat-force-charge ( -- )
    batman-init?
    bat-enable-charge
    bg-acr@
@@ -774,6 +785,22 @@
    h# 10 invert and ec-debugflag4 bat-b!
 ;
 
+: mppt-off h# 40 ec-cmd ;
+: mppt-on  h# 41 ec-cmd ;
+: mppt-pct 255 * 100 / h# 3f ec-cmd-b! ;
+
+: .mppt 
+   h# 3e ec-cmd-b@            ( pwr_limit )
+   h# 42 ec-cmd-b@            ( pwr_limit VA2 )
+    ." Vsa: " d# 14927 * d# 158 / >sd.ddd type ."  PWM: " . 
+;
+
+: watch-mppt ( -- )
+   begin  (cr .mppt kill-line  d# 500 ms  key?  until
+   key drop
+;
+
+
 dev /
 new-device
 " battery" device-name



More information about the openfirmware mailing list