Author: wmb Date: 2009-05-13 00:57:45 +0200 (Wed, 13 May 2009) New Revision: 1180
Added: cpu/x86/pc/olpc/via/startcpuspeed.fth dev/ide/idehier.bth dev/ide/pciintf.fth Modified: cpu/x86/pc/biosload/fw.bth cpu/x86/pc/olpc/via/addrs.fth cpu/x86/pc/olpc/via/devices.fth cpu/x86/pc/olpc/via/fw.bth cpu/x86/pc/olpc/via/ioinit.fth cpu/x86/pc/olpc/via/olpc.bth cpu/x86/pc/olpc/via/probemem.fth cpu/x86/pc/olpc/via/romreset.bth cpu/x86/pc/olpc/via/romstart.bth cpu/x86/pc/olpc/via/versions.fth cpu/x86/pc/rootnode.fth Log: OLPC VIA version - checkpoint with, among other things, support for SD wireless.
Modified: cpu/x86/pc/biosload/fw.bth =================================================================== --- cpu/x86/pc/biosload/fw.bth 2009-05-12 22:53:43 UTC (rev 1179) +++ cpu/x86/pc/biosload/fw.bth 2009-05-12 22:57:45 UTC (rev 1180) @@ -369,11 +369,6 @@ \ Also try " console=/dev/ttyS0,9600 console=/dev/tty0" in boot-file [then]
-\ XXX delete me -\ [ifdef] linux-support -\ fload ${BP}/cpu/x86/pc/biosload/linux.fth -\ [then] - fload ${BP}/cpu/x86/pc/biosload/vmdoor.fth \ VMware interfaces
fload ${BP}/cpu/x86/pc/biosload/intelfb.fth \ Intel frame buffer setup
Modified: cpu/x86/pc/olpc/via/addrs.fth =================================================================== --- cpu/x86/pc/olpc/via/addrs.fth 2009-05-12 22:53:43 UTC (rev 1179) +++ cpu/x86/pc/olpc/via/addrs.fth 2009-05-12 22:57:45 UTC (rev 1180) @@ -20,7 +20,6 @@
h# 1bc0.0000 value fw-pa \ Changed in probemem.fth h# 20.0000 constant /fw-ram -h# 40.0000 constant /fw-area [then]
h# 100.0000 constant def-load-base \ Convenient for initrd @@ -33,8 +32,9 @@
h# 18.0000 constant heap-size
-h# 900.0000 constant dma-size -fw-pa dma-size - constant dma-base +h# 20.0000 constant /dma-extra \ In case the firmware region isn't enough +/fw-ram /dma-extra + constant dma-size \ We let the DMA area overlap the FW area +fw-pa /dma-extra - constant dma-base
h# f.0000 constant suspend-base \ In the DOS hole h# f.0008 constant resume-entry @@ -56,8 +56,8 @@ h# fed4.0000 constant wdt-mmio-base h# fee0.0000 constant apic-mmio-base
-h# 4000 constant acpi-io-base -h# 4100 constant smbus-io-base +h# 400 constant acpi-io-base +h# 500 constant smbus-io-base
h# e0000 constant rsdp-adr h# e0040 constant rsdt-adr
Modified: cpu/x86/pc/olpc/via/devices.fth =================================================================== --- cpu/x86/pc/olpc/via/devices.fth 2009-05-12 22:53:43 UTC (rev 1179) +++ cpu/x86/pc/olpc/via/devices.fth 2009-05-12 22:57:45 UTC (rev 1180) @@ -34,7 +34,7 @@ warning @ warning off : stand-init-io ( -- ) stand-init-io -\ acpi-calibrate-tsc + acpi-calibrate-tsc d# 800 to us-factor d# 800000 to ms-factor ; warning !
Modified: cpu/x86/pc/olpc/via/fw.bth =================================================================== --- cpu/x86/pc/olpc/via/fw.bth 2009-05-12 22:53:43 UTC (rev 1179) +++ cpu/x86/pc/olpc/via/fw.bth 2009-05-12 22:57:45 UTC (rev 1180) @@ -105,14 +105,17 @@ fload ${BP}/cpu/x86/pc/isaio.fth fload ${BP}/dev/pci/configm1.fth \ Generic PCI configuration access
-fload ${BP}/cpu/x86/pc/olpc/via/probemem.fth \ Memory probing - [ifdef] virtual-mode fload ${BP}/cpu/x86/loadvmem.fth \ /mmu node
stand-init: MMU " /mmu" open-dev mmu-node ! ; +[then] + +fload ${BP}/cpu/x86/pc/olpc/via/probemem.fth \ Memory probing + +[ifdef] virtual-mode fload ${BP}/cpu/x86/pc/initdict.fth \ Dynamic dictionary allocation [then]
Modified: cpu/x86/pc/olpc/via/ioinit.fth =================================================================== --- cpu/x86/pc/olpc/via/ioinit.fth 2009-05-12 22:53:43 UTC (rev 1179) +++ cpu/x86/pc/olpc/via/ioinit.fth 2009-05-12 22:57:45 UTC (rev 1180) @@ -31,7 +31,8 @@ \ Additional Power Management Setup not in coreboot 0 2 devfunc 76 08 08 mreg \ AGTL Power down buffers in S3 - 92 ff 40 mreg \ ACPI IO Base address +\ 92 ff 00 mreg \ ACPI IO Base address +\ 93 ff 04 mreg \ ACPI IO Base address end-table
0 4 devfunc @@ -62,7 +63,7 @@
d# 12 0 devfunc \ SDIO tuning 44 01 01 mreg \ Enable backdoor - 8b 05 01 mreg \ Do not report 1.8V support +\ 8b 05 01 mreg \ Do not report 1.8V support 8c c3 03 mreg \ Falling edge trigger for Slots 1 and 2 data in high speed 8e ff 7e mreg \ Delay host clock for Slots 1, 2, 3 by 4.8 nS 8f 09 01 mreg \ Falling edge trigger on slot 3 output clock under high speed @@ -79,7 +80,8 @@ 4b ff 20 mreg \ Drive0 timing 4c f0 60 mreg \ Address setup time 52 df 0e mreg \ Ultra dma wait strobe timing - 53 df c6 mreg \ Ultra DMA mode control +\ 53 df c6 mreg \ Ultra DMA mode control + 53 df 06 mreg \ Ultra DMA mode control c4 1d 18 mreg \ Config 1 \ d4 ac 24 mreg \ Config 3 d4 bc 34 mreg \ Config 3 - 10 res be like Phx
Modified: cpu/x86/pc/olpc/via/olpc.bth =================================================================== --- cpu/x86/pc/olpc/via/olpc.bth 2009-05-12 22:53:43 UTC (rev 1179) +++ cpu/x86/pc/olpc/via/olpc.bth 2009-05-12 22:57:45 UTC (rev 1180) @@ -8,8 +8,9 @@ in: ${BP}/cpu/x86/pc/olpc/via/build/rmstart.img in: ${BP}/cpu/x86/pc/olpc/via/build/paging.di in: ${BP}/cpu/x86/pc/olpc/via/build/fw.dic -in: ${BP}/dev/mmc/sdhci/build/sdhci.fc +in: ${BP}/dev/mmc/sdhci/build/sdhci2.fc in: ${BP}/dev/mmc/sdhci/build/sdmmc.fc +in: ${BP}/dev/mmc/sdhci/mv8686/build/mv8686.fc in: ${BP}/dev/usb2/hcd/ohci/build/ohci.fc in: ${BP}/dev/usb2/hcd/ehci/build/ehci.fc in: ${BP}/dev/usb2/device/hub/build/hub.fc @@ -22,7 +23,8 @@ in: ${BP}/clients/emacs/x86/emacs in: ${BP}/cpu/x86/pc/olpc/via/build/verify.img in: ${BP}/dev/pci/build/pcibridg.fc -in: ${BP}/dev/ide/build/leghier.fc +in: ${BP}/dev/ide/build/idehier.fc +\ in: ${BP}/dev/ide/build/leghier.fc \ in: ${BP}/cpu/x86/pc/olpc/via/build/camera.fc \ in: ${BP}/cpu/x86/pc/olpc/via/build/dsdt.aml \ in: ${BP}/cpu/x86/pc/olpc/via/build/mcastnand.bin @@ -87,9 +89,11 @@ \ " mrv8686.bin" " mrv8686.bin" $add-deflated-dropin
" ${BP}/dev/pci/build/pcibridg.fc" " class060400" $add-deflated-dropin - " ${BP}/dev/ide/build/leghier.fc" " class01018a" $add-deflated-dropin - " ${BP}/dev/mmc/sdhci/build/sdhci.fc" " class080501" $add-deflated-dropin +\ " ${BP}/dev/ide/build/leghier.fc" " class01018a" $add-deflated-dropin + " ${BP}/dev/ide/build/idehier.fc" " class01018a" $add-deflated-dropin + " ${BP}/dev/mmc/sdhci/build/sdhci2.fc" " class080501" $add-deflated-dropin " ${BP}/dev/mmc/sdhci/build/sdmmc.fc" " sdmmc" $add-deflated-dropin + " ${BP}/dev/mmc/sdhci/mv8686/build/mv8686.fc" " mv8686" $add-deflated-dropin " builton.fth" " probe-" $add-dropin
" ${BP}/clients/emacs/x86/emacs" " emacs" $add-deflated-dropin
Modified: cpu/x86/pc/olpc/via/probemem.fth =================================================================== --- cpu/x86/pc/olpc/via/probemem.fth 2009-05-12 22:53:43 UTC (rev 1179) +++ cpu/x86/pc/olpc/via/probemem.fth 2009-05-12 22:57:45 UTC (rev 1180) @@ -37,8 +37,9 @@ : release-range ( start-adr end-adr -- ) over - release ;
: probe ( -- ) -[ifdef] relocated-fw - system-ram /fw-area - to fw-pa +[ifdef] virtual-mode + origin >physical to fw-pa + fw-pa /dma-extra - to dma-base [then]
0 total-ram reg \ Report extant memory
Modified: cpu/x86/pc/olpc/via/romreset.bth =================================================================== --- cpu/x86/pc/olpc/via/romreset.bth 2009-05-12 22:53:43 UTC (rev 1179) +++ cpu/x86/pc/olpc/via/romreset.bth 2009-05-12 22:57:45 UTC (rev 1180) @@ -105,9 +105,9 @@
1 [if] \ This turns an OS reboot into a real cold start - from coreboot - 4001 8888 config-ww \ Set ACPI base address + acpi-io-base 1 + 8888 config-ww \ Set ACPI base address 8c 8881 config-wb \ Enable ACPI regs, 32-bit PM timer, guard RTC against power glitches - 4004 port-rw \ Get APCI Status register + acpi-io-base 4 + port-rw \ Get APCI Status register d# 10 # ax shr 7 # ax and 1 # ax cmp <> if \ Not a wakeup from S3 380 config-rb ax ax or 0<> if \ C-page shadowing not on yet 6 cf9 port-wb \ Force a full system reset @@ -135,6 +135,7 @@ \ e2 2e port-wb 7 2f port-wb
fload ${BP}/cpu/x86/pc/olpc/via/startmemtop.fth + fload ${BP}/cpu/x86/pc/olpc/via/startcpuspeed.fth
h# 1f port80 char r report
Modified: cpu/x86/pc/olpc/via/romstart.bth =================================================================== --- cpu/x86/pc/olpc/via/romstart.bth 2009-05-12 22:53:43 UTC (rev 1179) +++ cpu/x86/pc/olpc/via/romstart.bth 2009-05-12 22:57:45 UTC (rev 1180) @@ -64,7 +64,7 @@ fload ${BP}/cpu/x86/pc/olpc/via/startmtrrinit.fth fload ${BP}/cpu/x86/pc/olpc/via/ioinit.fth
-1 [if] +0 [if] 0 3 devfunc 86 c4 84 mreg \ Enable top SMM memory (04) of size 4 MB (80 in c0 field) end-table @@ -75,6 +75,7 @@ [then]
fload ${BP}/cpu/x86/pc/olpc/via/startmemtop.fth + fload ${BP}/cpu/x86/pc/olpc/via/startcpuspeed.fth
h# 1f port80 char r report
Added: cpu/x86/pc/olpc/via/startcpuspeed.fth =================================================================== --- cpu/x86/pc/olpc/via/startcpuspeed.fth (rev 0) +++ cpu/x86/pc/olpc/via/startcpuspeed.fth 2009-05-12 22:57:45 UTC (rev 1180) @@ -0,0 +1,5 @@ + h# 10000 h# 1a0 bitset-msr \ Enable performance state changes + h# 198 rmsr \ Get performance state info - min.max in %edx, current in %eax + ax ax xor op: dx ax mov \ MSR.low for new performance state - from max field in %edx + dx dx xor \ MSR.high = 0 + h# 199 wmsr \ We should start going faster now
Modified: cpu/x86/pc/olpc/via/versions.fth =================================================================== --- cpu/x86/pc/olpc/via/versions.fth 2009-05-12 22:53:43 UTC (rev 1179) +++ cpu/x86/pc/olpc/via/versions.fth 2009-05-12 22:57:45 UTC (rev 1180) @@ -2,7 +2,7 @@
\ The overall firmware revision macro: FW_MAJOR A -macro: FW_MINOR 01 +macro: FW_MINOR 02a
\ The EC microcode macro: EC_VERSION e34
Modified: cpu/x86/pc/rootnode.fth =================================================================== --- cpu/x86/pc/rootnode.fth 2009-05-12 22:53:43 UTC (rev 1179) +++ cpu/x86/pc/rootnode.fth 2009-05-12 22:57:45 UTC (rev 1180) @@ -51,14 +51,16 @@ [then] ;
-dma-base dup dma-size + 2constant dma-range +: dma-range ( -- start end ) dma-base dup dma-size + ;
+0 [if] \ This is fairly useless since the DMA ranges can be dynamic \ We hereby establish the convention that the implied "#address-cells" \ for the (nonexistent) parent of the root node is 0, so the parent \ address portion of the ranges property is empty. 0 0 encode-bytes dma-base encode-int encode+ dma-size encode-int encode+ " dma-ranges" property +[then]
\ x86 caches are coherent h# 3 constant dma-map-mode \ Cacheable
Added: dev/ide/idehier.bth =================================================================== --- dev/ide/idehier.bth (rev 0) +++ dev/ide/idehier.bth 2009-05-12 22:57:45 UTC (rev 1180) @@ -0,0 +1,35 @@ +purpose: Load file for IDE driver FCode + +\ This version of the load file uses the following configuration: +\ IDE controller on PCI bus +\ Supports 4 drives (primary/secondary * master/slave) +\ IDE controller accessed via dynamically-assigned PCI addresses +\ DMA support present and enabled +\ Two-level hierarchy, i.e. pci-ide/ide@1/disk@1 +\ This is the version that works with MacOS + +command: &tokenize &this +in: ${BP}/dev/ide/build/node.fc +build-now + +silent on + +begin-tokenizing idehier.fc + +FCode-version2 + +: $, ( adr len -- ) here over allot swap move ; +create node-fcode +fload node.hex + +fload ${BP}/dev/ide/pciintf.fth +fload ${BP}/dev/ide/generic.fth +fload ${BP}/dev/ide/twolevel.fth +fload ${BP}/dev/ide/dmaide.fth +\ To disable DMA, use the following line; do not omit the dmaide.fth +\ file from the load, because it contains not only DMA code but also +\ a workaround for the Winbond chip's PIO bug. +\ pio +end0 + +end-tokenizing
Added: dev/ide/pciintf.fth =================================================================== --- dev/ide/pciintf.fth (rev 0) +++ dev/ide/pciintf.fth 2009-05-12 22:57:45 UTC (rev 1180) @@ -0,0 +1,53 @@ +purpose: PCI IDE controller in native mode +copyright: Copyright 1997 Firmworks All Rights Reserved + +\ Use PCI IDE controller into native mode + +: int+ ( adr len n -- adr' len' ) encode-int encode+ ; + +\ This device has five base registers, used as follows: +\ base maps +\ 10 1f0-1f7 +\ 14 3f6 +\ 18 170-177 +\ 1c 376 +\ 20 bus mastering regs + +my-address my-space encode-phys 0 int+ 0 int+ +my-address my-space h# 100.0010 + encode-phys encode+ 0 int+ 8 int+ +my-address my-space h# 100.0014 + encode-phys encode+ 0 int+ 4 int+ +my-address my-space h# 100.0018 + encode-phys encode+ 0 int+ 8 int+ +my-address my-space h# 100.001c + encode-phys encode+ 0 int+ 4 int+ +my-address my-space h# 100.0020 + encode-phys encode+ 0 int+ h# 10 int+ + +\ The base address register at offset 24 exists only on Symphony Labs/Winbond +\ parts. Listing it on other devices can cause address assignment failures. +\ my-address my-space h# 100.0024 + encode-phys encode+ 0 int+ h# 10 int+ + +" reg" property + +: +map-in ( offset size -- virt ) + >r my-address rot my-space + r> " map-in" $call-parent +; +: map-out ( virt size -- ) " map-out" $call-parent ; + +\ Map the device into virtual address space +: (map) ( -- base1 dor1 base2 dor2 ) + my-space 9 + dup " config-b@" $call-parent + 05 or swap " config-b!" $call-parent \ Native mode + + h# 100.0010 8 +map-in + h# 100.0014 4 +map-in 2 + + h# 100.0018 8 +map-in + h# 100.001c 4 +map-in 2 + + + my-space 4 + dup " config-w@" $call-parent + 1 or swap " config-w!" $call-parent \ Enable +; +\ Release the mapping resources used by the device +: (unmap) ( base1 dor1 base2 dor2 -- ) + my-space 4 + dup " config-w@" $call-parent + 1 invert and swap " config-w!" $call-parent \ Disable + + 2 - 4 map-out 8 map-out 2 - 4 map-out 8 map-out +;
openfirmware@openfirmware.info