[openfirmware] r1458 - cpu/x86/pc/olpc/via dev/mmc/sdhci dev/olpc/dcon
svn at openfirmware.info
svn at openfirmware.info
Wed Nov 4 11:02:54 CET 2009
Author: wmb
Date: 2009-11-04 12:02:54 +0100 (Wed, 04 Nov 2009)
New Revision: 1458
Modified:
cpu/x86/pc/olpc/via/versions.fth
dev/mmc/sdhci/sdhcixo.bth
dev/olpc/dcon/viadcon.fth
Log:
OLPC trac 9489 - implement SD port reassignments and DCONINT GPIO
change for B3 build.
Modified: cpu/x86/pc/olpc/via/versions.fth
===================================================================
--- cpu/x86/pc/olpc/via/versions.fth 2009-11-03 22:12:32 UTC (rev 1457)
+++ cpu/x86/pc/olpc/via/versions.fth 2009-11-04 11:02:54 UTC (rev 1458)
@@ -2,7 +2,7 @@
\ The overall firmware revision
macro: FW_MAJOR A
-macro: FW_MINOR 15
+macro: FW_MINOR 15b
\ The EC microcode
macro: EC_VERSION 1_9_14
Modified: dev/mmc/sdhci/sdhcixo.bth
===================================================================
--- dev/mmc/sdhci/sdhcixo.bth 2009-11-03 22:12:32 UTC (rev 1457)
+++ dev/mmc/sdhci/sdhcixo.bth 2009-11-04 11:02:54 UTC (rev 1458)
@@ -13,7 +13,10 @@
init
: populate-children ( -- )
- " atest?" evaluate if
+ " board-revision" evaluate ( boardrev )
+
+ dup h# d10 < if \ A1 and A2
+ drop
new-device
2 encode-int " reg" property
" sdmmc" " $load-driver" eval drop
@@ -23,24 +26,49 @@
1 encode-int " reg" property
" mv8686" " $load-driver" eval drop
finish-device
- else
+ exit
+ then
+
+ dup h# d28 >= if \ B3 and greater
+ drop
+
new-device
1 encode-int " reg" property
" sdmmc" " $load-driver" eval drop
- " internal" " slot-name" string-property
+ " external" " slot-name" string-property
finish-device
new-device
2 encode-int " reg" property
- " sdmmc" " $load-driver" eval drop
- " external" " slot-name" string-property
+ " mv8686" " $load-driver" eval drop
finish-device
new-device
3 encode-int " reg" property
- " mv8686" " $load-driver" eval drop
+ " sdmmc" " $load-driver" eval drop
+ " internal" " slot-name" string-property
finish-device
then
+
+ \ B1,B2
+ drop
+
+ new-device
+ 1 encode-int " reg" property
+ " sdmmc" " $load-driver" eval drop
+ " internal" " slot-name" string-property
+ finish-device
+
+ new-device
+ 2 encode-int " reg" property
+ " sdmmc" " $load-driver" eval drop
+ " external" " slot-name" string-property
+ finish-device
+
+ new-device
+ 3 encode-int " reg" property
+ " mv8686" " $load-driver" eval drop
+ finish-device
;
populate-children
Modified: dev/olpc/dcon/viadcon.fth
===================================================================
--- dev/olpc/dcon/viadcon.fth 2009-11-03 22:12:32 UTC (rev 1457)
+++ dev/olpc/dcon/viadcon.fth 2009-11-04 11:02:54 UTC (rev 1458)
@@ -28,10 +28,12 @@
\ h# 4000 constant DM_DEBUG
\ h# 8000 constant DM_SELFTEST
+: b3+? ( -- flag ) board-revision h# d28 >= ;
+
\ Enable SMBALRT# IRQ as DCON IRQ
-: dcon-enable-irq ( -- ) 8 8 smb-reg! ;
+: dcon-enable-irq ( -- ) b3+? if exit then 8 8 smb-reg! ;
\ Disable SMBALRT# IRQ as DCON IRQ; leaving it enabled causes spurious S3 wakeups
-: dcon-disable-irq ( -- ) 0 8 smb-reg! ;
+: dcon-disable-irq ( -- ) b3+? if exit then 0 8 smb-reg! ;
: dcon-load ( -- )
atest? if
@@ -49,8 +51,8 @@
;
: dcon-blnk? ( -- flag ) h# 4a acpi-b@ 4 and 0<> ;
: dcon-stat@ ( -- n ) h# 4b acpi-b@ 3 and ;
-: dcon-irq? ( -- flag ) 1 smb-reg@ h# 20 and 0<> ;
-: dcon-clr-irq ( -- ) h# 20 1 smb-reg! ;
+: dcon-irq? ( -- flag ) b3+? if 4a acpi-b@ h# 40 else 1 smb-reg@ h# 20 then and 0<> ;
+: dcon-clr-irq ( -- ) b3+? if exit then h# 20 1 smb-reg! ;
\ DCONSTAT values: 0 SCANINT 1 SCANINT_DCON 2 DISPLAYLOAD 3 MISSED
@@ -72,15 +74,16 @@
: wait-dcon-mode ( -- )
dcon-enable-irq
- d# 100 ms-factor * tsc@ drop + ( end-time )
+ 8 acpi-l@ d# 357,955 + ( end-time ) \ 100 ms timeout
begin ( end-time )
dcon-irq? if
dcon-disable-irq
dcon-stat@ dcon-clr-irq 2 = if \ DCONSTAT=10
drop exit
then
+ dcon-enable-irq
then
- dup tsc@ drop - 0< ( end-time reached? )
+ dup 8 acpi-l@ - 0< ( end-time reached? )
until ( end-time )
drop
dcon-disable-irq
@@ -195,46 +198,6 @@
1 set-source \ Unfreeze image
;
-0 [if]
-dconstat dconblnk or dconirq or constant in-gpios
-dconload constant out-gpios
-
-: dcon-gpio-init ( -- )
- out-gpios in-gpios wljoin OUT_EN gpio!
- in-gpios out-gpios wljoin IN_EN gpio!
-
- dconirq >set INV_EN gpio!
-
- dconirq dconblnk or ( events )
-
-\ Linux doesn't want me to turn these on
-\ dup >set EVNT_EN gpio!
-\ dup >set IN_FLTR_EN gpio! \ Enable counter for GPIO7 (DCONIRQ)
-\ dup >clr EVNTCNT_EN gpio!
-\ d# 12 gpio-base h# f7 + rb! \ GPIO_FE7_SEL
-\ dup >clr h# 44 gpio! \ NEGEDGE_EN
-
-\ 0 gpio-base h# d8 + rw! \ GPIO_FLTR7_AMNT
-
- h# e0 gpio@ h# 0fff.ffff and h# 2000.0000 or h# e0 gpio! \ p512 Map X
- h# e4 gpio@ h# fff0.ffff and h# 0000.0000 or h# e4 gpio! \ p511 Map Y
-
-[ifdef] dcon-interrupts
- h# 5140.0023 rdmsr ( lo hi ) drop ( lo )
- h# ff0f.fffff and h# 0050.0000 or 0 wrmsrl \ p 381 unrestricted Z
- 0 h# 4d0 pc! \ IRQs 0-7 edge sensitive
-[then]
-
- ( events )
- dup >set IN_EN gpio!
- >set h# 4c gpio! \ GPIOL_NEGEDGE_STS - clear detected edges
-
- dcon-load
-
- \ ['] dcon-interrupt 5 request_irq
-;
-[then]
-
0 value dcon-found?
d# 440 8 / constant dcon-flag
More information about the openfirmware
mailing list