[openfirmware] [commit] r1965 - cpu/arm/mmp2

repository service svn at openfirmware.info
Fri Oct 8 08:34:38 CEST 2010


Author: wmb
Date: Fri Oct  8 08:34:38 2010
New Revision: 1965
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/1965

Log:
ARM MMP2 - mods to make it work when booted directly from NAND without an intermediate loader.

Added:
   cpu/arm/mmp2/fw.bth
   cpu/arm/mmp2/rawboot.fth
Modified:
   cpu/arm/mmp2/addrs.fth
   cpu/arm/mmp2/devices.fth
   cpu/arm/mmp2/mfpr.fth
   cpu/arm/mmp2/mmuon.fth
   cpu/arm/mmp2/ofw.bth
   cpu/arm/mmp2/twsi.fth

Modified: cpu/arm/mmp2/addrs.fth
==============================================================================
--- cpu/arm/mmp2/addrs.fth	Fri Oct  8 08:31:34 2010	(r1964)
+++ cpu/arm/mmp2/addrs.fth	Fri Oct  8 08:34:38 2010	(r1965)
@@ -11,7 +11,8 @@
 ' (memory?) to memory?
 
 \ OFW implementation choices
-h# 1fe0.0000 constant fw-pa
+\ h# 1fe0.0000 constant fw-pa
+0 constant fw-pa
 
 [ifdef] virtual-mode
 h# f700.0000 constant fw-virt-base
@@ -30,8 +31,7 @@
 h#  10.0000 constant heap-size
 heap-size constant initial-heap-size
 
-h# 4000 constant page-table-pa
-
+h# 40.0000 constant page-table-pa
 
 \ Defined by CPU core
 h# 1000 to pagesize

Modified: cpu/arm/mmp2/devices.fth
==============================================================================
--- cpu/arm/mmp2/devices.fth	Fri Oct  8 08:31:34 2010	(r1964)
+++ cpu/arm/mmp2/devices.fth	Fri Oct  8 08:34:38 2010	(r1965)
@@ -1,5 +1,15 @@
 fload ${BP}/dev/omap/diaguart.fth	\ OMAP UART
 h# d4018000 to uart-base		\ UART# base address on MMP2
+d# 26000000 to uart-clock-frequency
+defer init-clocks  ' noop to init-clocks
+: inituarts  ( -- )
+   init-clocks
+
+   h# 40 1 uart!          \ Marvell-specific UART Enable bit
+   3 3 uart!              \ 8 bits, no parity
+   7 2 uart!		  \ Clear and enable FIFOs
+   d# 38400 baud
+;
 
 fload ${BP}/forth/lib/sysuart.fth	\ Set console I/O vectors to UART
 
@@ -13,9 +23,16 @@
 : stand-init-io  ( -- )
    stand-init-io
    inituarts  install-uart-io
+   ." UART installed" cr
 ;
 warning on
 
+\ Create a pseudo-device that presents the dropin modules as a filesystem.
+fload ${BP}/ofw/fs/dropinfs.fth
+
+\ This devalias lets us say, for example, "dir rom:"
+devalias rom     /dropin-fs
+
 fload ${BP}/cpu/arm/mmp2/twsi.fth
 fload ${BP}/cpu/arm/mmp2/timer.fth
 fload ${BP}/cpu/arm/mmp2/mfpr.fth
@@ -27,6 +44,7 @@
    init-timers
    init-twsi
    power-on-dsi
+   power-on-sd
 ;
 stand-init:
    init-stuff
@@ -106,3 +124,5 @@
 
 devalias ext /sd/disk at 1
 
+fload ${BP}/dev/olpc/kb3700/spicmd.fth
+   

Added: cpu/arm/mmp2/fw.bth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/mmp2/fw.bth	Fri Oct  8 08:34:38 2010	(r1965)
@@ -0,0 +1,525 @@
+purpose: Build Open Firmware for Marvell MMP2
+\ See license at end of file
+
+dictionary: ${BP}/cpu/arm/build/basefw.dic
+command: &armforth &dictionary &this
+build-now
+
+" fw.tag" r/w create-file drop  tag-file !
+
+hex
+\ ' $report-name is include-hook
+' noop is include-hook
+
+fload ${BP}/cpu/arm/mmp2/config.fth
+
+: headerless ;  : headers  ;  : headerless0 ;
+
+' (quit) to quit
+
+: \Tags [compile] \  ; immediate
+: \NotTags [compile] \  ; immediate
+
+: RAMbase  ( -- adr )  fw-virt-base  ;
+: RAMtop  ( -- adr )  RAMbase /fw-ram +  ;
+
+def-load-base ' load-base set-config-int-default
+
+\ use-movable-vector-base  \ Marvell CPU core has a movable vector base
+
+true ' fcode-debug? set-config-int-default
+\ false  ' auto-boot?    set-config-int-default
+
+
+
+[ifdef] serial-console
+" com1" ' output-device set-config-string-default
+" com1" ' input-device set-config-string-default
+[then]
+
+
+fload ${BP}/cpu/arm/mmp2/rootnode.fth	\ Root node mapping - physical mode
+dev /
+   " Marvell,Bonnell" model
+   " Marvell,Armada 610" encode-string  " architecture" property
+\ The clock frequency of the root bus may be irrelevant, since the bus is internal to the SOC
+\    d# 1,000,000,000 " clock-frequency" integer-property
+device-end
+
+: (cpu-arch  ( -- adr len )
+   " architecture" ['] root-node  get-package-property  drop
+   get-encoded-string
+;
+' (cpu-arch to cpu-arch
+
+\ Memory management services
+[ifdef] virtual-mode
+fload ${BP}/ofw/core/clntmem1.fth	\ client services for memory
+[else]
+fload ${BP}/ofw/core/clntphy1.fth	\ client services for memory
+: >physical  ( va -- pa )
+   dup fw-virt-base - fw-virt-size u<  if   ( va )
+      fw-virt-base -  fw-pa +
+   then
+;
+[then]
+fload ${BP}/ofw/core/memlist.fth	\ Resource list common routines
+fload ${BP}/ofw/core/showlist.fth	\ Linked list display tool
+fload ${BP}/ofw/core/allocph1.fth	\ S Physical memory allocator
+fload ${BP}/ofw/core/availpm.fth	\ Available memory list
+
+fload ${BP}/cpu/arm/mmp2/probemem.fth	\ Memory probing
+
+stand-init: Probing memory
+   " probe" memory-node @ $call-method
+;
+
+[ifdef] virtual-mode
+fload ${BP}/cpu/arm/loadvmem.fth	\ /mmu node
+stand-init: MMU
+   " /mmu" open-dev mmu-node !
+;
+fload ${BP}/ofw/core/initdict.fth	\ Dynamic dictionary allocation
+fload ${BP}/arch/arm/loadarea.fth	\ Allocate and map program load area
+[else]
+fload ${BP}/cpu/arm/mmp2/mmuon.fth
+[then]
+
+\ XXX should be elsewhere
+dev /client-services
+: chain  ( len args entry size virt -- )
+   release                                       ( len args entry )
+   h# 8000 alloc-mem h# 8000 +  (init-program)   ( len args )
+   to r1  to r2
+   go
+;
+device-end
+
+fload ${BP}/cpu/arm/crc32.fth		\ Assembly language Zip CRC calculation
+fload ${BP}/forth/lib/crc32.fth		\ High-level portion of CRC calculation
+
+[ifdef] resident-packages
+
+\needs unix-seconds>  fload ${BP}/ofw/fs/unixtime.fth	\ Unix time calculation
+support-package: ext2-file-system
+   fload ${BP}/ofw/fs/ext2fs/ext2fs.fth	\ Linux file system
+end-support-package
+
+[ifdef] jffs2-support
+\needs unix-seconds>  fload ${BP}/ofw/fs/unixtime.fth	\ Unix time calculation
+support-package: jffs2-file-system
+   fload ${BP}/ofw/fs/jffs2/jffs2.fth	\ Journaling flash file system 2
+end-support-package
+[then]
+
+support-package: zip-file-system
+   fload ${BP}/ofw/fs/zipfs.fth		\ Zip file system
+end-support-package
+[then]
+
+fload ${BP}/ofw/core/osfile.fth		\ For testing
+
+\ Load file format handlers
+
+: call32 ;
+
+fload ${BP}/ofw/core/allocsym.fth    \ Allocate memory for symbol table
+fload ${BP}/ofw/core/symcif.fth
+fload ${BP}/ofw/core/symdebug.fth
+: release-load-area  ( boundary-adr -- )  drop  ;
+
+[ifdef] use-elf
+fload ${BP}/ofw/elf/elf.fth
+fload ${BP}/ofw/elf/elfdebug.fth
+[ifdef] virtual-mode
+\ Depends on the assumption that physical memory is mapped 1:1 already
+: (elf-map-in) ( va size -- )  0 mem-claim  drop  ;
+[else]
+: (elf-map-in)  ( va size -- )  2drop  ;
+[then]
+' (elf-map-in) is elf-map-in
+[then]
+
+\ Reboot and re-entry code
+fload ${BP}/ofw/core/reboot.fth		\ Restart the client program
+fload ${BP}/ofw/core/reenter.fth	\ Various entries into Forth
+
+headerless
+[ifdef] virtual-mode
+: (initial-heap)  ( -- adr len )  sp0 @ ps-size -  dict-limit  tuck -  ;
+[else]
+   \ : (initial-heap)  ( -- adr len )  RAMtop heap-size  ;
+: (initial-heap)  ( -- adr len )  limit heap-size  ;
+[then]
+' (initial-heap) is initial-heap
+headers
+
+" /openprom" find-device
+   " FirmWorks,3.0" encode-string " model" property
+device-end
+
+[ifdef] virtual-mode
+fload ${BP}/cpu/arm/mmusetup.fth	\ Initial values for MMU lists
+[then]
+
+: background-rgb  ( -- r g b )  h# ff h# ff h# ff  ;
+
+fload ${BP}/cpu/arm/mmp2/devices.fth
+
+[ifndef] virtual-mode
+warning off
+: stand-init-io
+   stand-init-io
+   ." Going fast" cr
+   go-fast         \ From mmuon.fth
+   ." Gone fast" cr
+;
+warning on
+[then]
+
+true ' local-mac-address? set-config-int-default
+[ifdef] resident-packages
+support-package: nfs
+   fload ${BP}/ofw/fs/nfs/loadpkg.fth
+end-support-package
+
+[then]
+devalias nfs net//obp-tftp:last//nfs
+
+fload ${BP}/cpu/arm/linux.fth
+h# 20.0000 to linux-params  \ The Jasper Linux kernel fails unless the params are between 0x20.0000 and 0x20.4000
+d# 2382 to arm-linux-machine-type  \ Marvell Jasper
+
+\ Add a tag describing the linear frame buffer
+: mmp-fb-tag,  ( -- )
+   8 tag-l,
+   h# 54410008 tag-l, \ ATAG_VIDEOLFB
+   d# 800 tag-w,      \ Width
+   d# 480 tag-w,      \ Height
+   d#  24 tag-w,      \ Depth
+   d# 800 3 * tag-w,  \ Pitch
+   fb-pa      tag-l,  \ Base address
+   d# 800 3 *  d# 480 *  tag-l,  \ Total size - perhaps could be larger
+   8     tag-b,       \ Red size
+   d#  0 tag-b,       \ Red position
+   8     tag-b,       \ Green size
+   d#  8 tag-b,       \ Green position
+   8     tag-b,       \ Blue size
+   d# 16 tag-b,       \ Blue position
+   0     tag-b,       \ Rsvd size
+   d# 24 tag-b,       \ Rsvd position
+;
+\ ' mmp-fb-tag, to fb-tag,
+
+\ fload ${BP}/cpu/arm/mmp2/usb.fth
+
+\ false to stand-init-debug?
+true to stand-init-debug?
+
+: protect-fw  ( -- )  ;
+: usb-power-on  ( -- )  ;
+
+hex
+: i-key-wait  ( ms -- pressed? )
+   cr ." Type 'i' to interrupt stand-init sequence" cr   ( ms )
+   0  do
+      ukey?  if
+         ukey upc ascii I  =  if  true unloop exit  then
+      then
+      1 ms
+   loop
+   false
+;
+
+warning @  warning off 
+: init
+\ initial-heap add-memory
+   init
+
+   standalone?  if
+      disable-interrupts
+hex
+      here . cr
+      limit . cr
+      initial-heap . . cr
+      vector-base . cr
+[ifdef] notdef
+      d# 1000
+      i-key-wait  if
+\        protect-fw
+         ." Interacting" cr  hex interact
+      then
+      \ Turn on USB power here to overlap the time with other startup actions
+      usb-power-on
+[then]
+   then
+;
+warning !
+[then]
+
+: (.firmware)  ( -- )
+   ." Open Firmware  "  .built  cr
+   ." Copyright 2010 FirmWorks  All Rights Reserved" cr
+;
+' (.firmware) to .firmware
+
+fload ${BP}/ofw/gui/bmptools.fth
+fload ${BP}/dev/null.fth
+fload ${BP}/ofw/core/bailout.fth
+
+\ GUI
+false value gui-safeboot?
+
+: 2tuck  ( d1 d2 -- d2 d1 d2 )  2swap 2over  ;
+: user-ok  "ok"  ;  \ This is supposed to check for authorization
+true value user-mode?
+
+fload ${BP}/ofw/gui/loadmenu.fth
+\ fload ${BP}/ofw/gui/insticon.fth
+
+\ Uninstall the diag menu from the general user interface vector
+\ so exiting from emacs doesn't invoke the diag menu.
+' quit to user-interface
+
+: screen-#lines  ( -- n )
+   screen-ih 0=  if  default-#lines exit  then
+   screen-ih  package( #lines )package
+;
+' screen-#lines to lines/page
+
+true value text-on?
+: text-off  ( -- )
+   text-on?  if
+      screen-ih remove-output
+      false to text-on?
+   then
+;
+: text-on   ( -- )
+   text-on? 0=  if
+      screen-ih add-output
+      cursor-on
+      true to text-on?
+   then
+;
+
+fload ${BP}/cpu/x86/pc/olpc/help.fth
+
+[ifdef] notyet
+fload ${BP}/cpu/x86/pc/olpc/gamekeys.fth
+
+: emacs  ( -- )
+   false to already-go?
+   boot-getline to boot-file   " rom:emacs" $boot
+;
+
+fload ${BP}/ofw/gui/ofpong.fth
+fload ${BP}/cpu/x86/pc/olpc/life.fth
+[then]
+
+" u:\boot\olpc.fth ext:\boot\olpc.fth int:\boot\olpc.fth ext:\zimage /prober /usb/ethernet /usb/wlan"
+   ' boot-device  set-config-string-default
+
+\needs ramdisk  " " d# 128 config-string ramdisk
+" "   ' boot-file      set-config-string-default   \ Let the boot script set the cmdline
+
+\ Eliminate 4 second delay in install console for the case where
+\ there is no keyboard.  The delay is unnecessary because the screen
+\ does not go blank when the device is closed.
+patch drop ms install-console
+
+alias reboot bye
+
+alias crcgen drop  ( crc byte -- crc' )
+
+\ Dictionary growth size for the ARM Image Format header
+\ 1 section   before origin  section table
+h# 10.0000      h# 8000 -      h# 4000 -      dictionary-size !
+
+fload ${BP}/cpu/arm/saverom.fth  \ Save the dictionary for standalone startup
+
+fload ${BP}/forth/lib/selstr.fth
+
+fload ${BP}/ofw/inet/loadtcp.fth
+
+support-package: http
+   fload ${BP}/ofw/inet/http.fth	\ HTTP client
+end-support-package
+
+[ifdef] notyet
+fload ${BP}/cpu/x86/pc/olpc/memtest.fth
+[then]
+
+[ifdef] notyet
+fload ${BP}/ofw/wifi/wifi-cfg.fth
+support-package: supplicant
+fload ${BP}/ofw/wifi/loadpkg.fth
+end-support-package
+
+: ofw-ssids  ( -- $ )  " OFWSSID"  ;
+' ofw-ssids to default-ssids
+[then]
+
+fload ${BP}/ofw/inet/sntp.fth
+: olpc-ntp-servers  ( -- )
+   " DHCP time 172.18.0.1 0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org"
+;
+' olpc-ntp-servers to ntp-servers
+: ntp-time&date  ( -- s m h d m y )
+   ntp-timestamp  abort" Can't contact NTP server"
+   ntp>time&date
+;
+: .clock  ( -- )
+   time&date .date space .time  ."  UTC" cr
+;
+: ntp-set-clock  ( -- )
+   ntp-time&date  " set-time"  clock-node @ $call-method
+   .clock
+;
+
+[ifdef] use-ppp
+fload ${BP}/ofw/ppp/loadppp.fth
+[then]
+
+" dhcp" ' ip-address  set-config-string-default
+
+[ifdef] notyet
+: c1-idle  ( -- )  interrupts-enabled?  if  halt  then  ;
+' c1-idle to stdin-idle
+[then]
+
+fload ${BP}/ofw/core/countdwn.fth	\ Startup countdown
+
+: console-start  ( -- )
+   install-mux-io
+\  cursor-off
+   true to text-on?
+
+   " //null" open-dev to null-ih  \ For text-off state
+;
+
+: interpreter-init  ( -- )
+   hex
+   warning on
+   only forth also definitions
+
+\   install-alarm
+
+   page-mode
+   #line off
+
+\   .built cr
+;
+
+[ifdef] notyet
+: ?games  ( -- )
+   rocker-right game-key?  if
+      protect-fw
+      time&date 5drop 1 and  if
+         ['] pong guarded
+      else
+         ['] life-demo guarded
+      then
+      power-off
+   then
+;
+: ?diags  ( -- )
+   rocker-left game-key?  if
+      protect-fw
+      text-on  " test-all" ['] eval guarded
+      ." Tests complete - powering off" cr  d# 5000 ms  power-off
+   then
+;
+
+: ?scan-nand  ( -- )
+   rocker-up game-key?  if
+      protect-fw  text-on  ['] scan-nand guarded
+   then
+;
+: ?fs-update  ( -- )
+   button-check button-x or  button-o or  button-square or   ( mask )
+   game-key-mask =  if  protect-fw try-fs-update  then
+;
+[then]
+
+: startup  ( -- )
+   standalone?  0=  if  exit  then
+
+\  block-exceptions
+   no-page
+
+   console-start
+
+[ifdef] notyet
+   read-game-keys
+[then]
+
+\  text-off
+
+   " probe-" do-drop-in
+
+[ifdef] notyet
+   sound
+   ?games
+[then]
+
+   ['] false to interrupt-auto-boot?
+[ifdef] probe-usb
+   probe-usb
+   report-disk
+   report-keyboard
+[then]
+   " probe+" do-drop-in
+
+   interpreter-init
+[ifdef] notyet
+   ?scan-nand
+   ?diags
+   ?fs-update
+[then]
+\  unblock-exceptions
+   ['] (interrupt-auto-boot?) to interrupt-auto-boot?
+\  ?usb-keyboard
+   auto-banner?  if  banner  then
+
+   auto-boot
+
+   cr cr
+
+   quit
+;
+
+\ This helps with TeraTerm, which sends ESC-O as the arrow key prefix
+also hidden also keys-forth definitions
+warning @  warning off
+: esc-o  key lastchar !  [""] esc-[ do-command  ;
+warning !
+previous previous definitions
+
+tag-file @ fclose  tag-file off
+
+.( --- Saving fw.dic ...)
+" fw.dic" $save-forth cr
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2010 FirmWorks
+\ 
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\ 
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\ 
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END

Modified: cpu/arm/mmp2/mfpr.fth
==============================================================================
--- cpu/arm/mmp2/mfpr.fth	Fri Oct  8 08:31:34 2010	(r1964)
+++ cpu/arm/mmp2/mfpr.fth	Fri Oct  8 08:34:38 2010	(r1965)
@@ -1,9 +1,11 @@
-: set-camera-domain-voltage
+: aib-unlock  
    h# baba h# d4015068 l!  \ Unlock sequence
-   h# ec10 h# d401506c l!
+   h# eb10 h# d401506c l!
+;
+: set-camera-domain-voltage
+   aib-unlock
    h# d401e80c l@  4 or   ( n )  \ Set 1.8V selector bit in AIB_GPIO2_IO
-   h# baba h# d4015068 l!  \ Unlock sequence
-   h# ec10 h# d401506c l!
+   aib-unlock
    h# d401e80c l!
 ;
 : acgr-clocks-on  ( -- )
@@ -138,12 +140,18 @@
    1 af,      \ GPIO_71 - TWSI3_SCL    (for CAM)
    1 af,      \ GPIO_72 - TWSI3_CLK    (for CAM)
    0 af,      \ GPIO_73 - CCIC_RST_N   (use as GPIO out)
-   0 af,      \ GPIO_74 - LED - ORANGE (use as GPIO out)  LCD VSYNC
-   0 af,      \ GPIO_75 - LED - BLUE   (use as GPIO out)  LCD HSYNV
-   0 af,      \ GPIO_76 - LED - RED    (use as GPIO out)  LCD PCLK
-   0 af,      \ GPIO_77 - LED - GREEN  (use as GPIO out)
-   5 af,      \ GPIO_78 - SSP4_CLK
-   5 af,      \ GPIO_79 - SSP4_FRM
+\    0 af,      \ GPIO_74 - LED - ORANGE (use as GPIO out)  LCD VSYNC
+\    0 af,      \ GPIO_75 - LED - BLUE   (use as GPIO out)  LCD HSYNV
+\    0 af,      \ GPIO_76 - LED - RED    (use as GPIO out)  LCD PCLK
+\    0 af,      \ GPIO_77 - LED - GREEN  (use as GPIO out)
+   4 af,      \ GPIO_74 - SSP3_CLK - EC_SPI
+   4 af,      \ GPIO_75 - SSP3_FRM - EC_SPI
+   4 af,      \ GPIO_76 - SSP3_TXD - EC_SPI
+   4 af,      \ GPIO_77 - SSP3_RXD - EC_SPI
+\    5 af,      \ GPIO_78 - SSP4_CLK
+\    5 af,      \ GPIO_79 - SSP4_FRM
+   0 af,      \ GPIO_78 - EC_SPI CMD
+   0 af,      \ GPIO_79 - EC_SPI ACK
    5 af,      \ GPIO_80 - SSP4_SDA
    0 af,      \ GPIO_81 - VBUS_FLT_N   (use as GPIO  in)
    0 af,      \ GPIO_82 - VBUS_EN      (use as GPIO out)
@@ -184,10 +192,10 @@
    0 af,      \ GPIO_116 - GPIO_116 (i/o)
    0 af,      \ GPIO_117 - GPIO_117 (i/o)
    0 af,      \ GPIO_118 - GPIO_118 (i/o)
-   0 af,      \ GPIO_119 - GPIO_119 (i/o)
-   0 af,      \ GPIO_120 - GPIO_120 (i/o)
-   0 af,      \ GPIO_121 - GPIO_121 (i/o)
-   0 af,      \ GPIO_122 - GPIO_122 (i/o)
+   3 af,      \ GPIO_119 - GPIO_119 (i/o)
+   3 af,      \ GPIO_120 - GPIO_120 (i/o)
+   3 af,      \ GPIO_121 - GPIO_121 (i/o)
+   3 af,      \ GPIO_122 - GPIO_122 (i/o)
    0 af,      \ GPIO_123 - MBFLT_N    (use as GPIO  in)
    1 af,      \ GPIO_124 - MMC1_DAT[7]
    1 af,      \ GPIO_125 - MMC1_DAT[6]

Modified: cpu/arm/mmp2/mmuon.fth
==============================================================================
--- cpu/arm/mmp2/mmuon.fth	Fri Oct  8 08:31:34 2010	(r1964)
+++ cpu/arm/mmp2/mmuon.fth	Fri Oct  8 08:34:38 2010	(r1965)
@@ -24,7 +24,7 @@
 
 : ofw-sections  ( -- )
    h# 0000.0000  h# c0e  over  fb-pa        map-sections  \ Cache and write bufferable
-   fw-pa         h# c0e  over  /fw-ram      map-sections  \ Cache and write bufferable
+\  fw-pa         h# c0e  over  /fw-ram      map-sections  \ Cache and write bufferable
    fb-pa         h# c06  over  fb-size      map-sections  \ Write bufferable
    h# d400.0000  h# c02  over  h# 0040.0000 map-sections  \ I/O - no caching or buffering
 ;

Modified: cpu/arm/mmp2/ofw.bth
==============================================================================
--- cpu/arm/mmp2/ofw.bth	Fri Oct  8 08:31:34 2010	(r1964)
+++ cpu/arm/mmp2/ofw.bth	Fri Oct  8 08:34:38 2010	(r1965)
@@ -1,503 +1,22 @@
 purpose: Build Open Firmware for Marvell MMP2
 \ See license at end of file
 
-dictionary: ${BP}/cpu/arm/build/basefw.dic
+dictionary: ${BP}/cpu/arm/mmp2/build/fw.dic
 command: &armforth &dictionary &this
 build-now
 
-" fw.tag" r/w create-file drop  tag-file !
-
-hex
-\ ' $report-name is include-hook
-' noop is include-hook
-
-fload ${BP}/cpu/arm/mmp2/config.fth
-
-: headerless ;  : headers  ;  : headerless0 ;
-
-' (quit) to quit
-
-: \Tags [compile] \  ; immediate
-: \NotTags [compile] \  ; immediate
-
-: RAMbase  ( -- adr )  fw-virt-base  ;
-: RAMtop  ( -- adr )  RAMbase /fw-ram +  ;
-
-def-load-base ' load-base set-config-int-default
-
-use-movable-vector-base  \ Marvell CPU core has a movable vector base
-
-true ' fcode-debug? set-config-int-default
-\ false  ' auto-boot?    set-config-int-default
-
-
-
-[ifdef] serial-console
-" com1" ' output-device set-config-string-default
-" com1" ' input-device set-config-string-default
-[then]
-
-
-fload ${BP}/cpu/arm/mmp2/rootnode.fth	\ Root node mapping - physical mode
-dev /
-   " Marvell,Bonnell" model
-   " Marvell,Armada 610" encode-string  " architecture" property
-\ The clock frequency of the root bus may be irrelevant, since the bus is internal to the SOC
-\    d# 1,000,000,000 " clock-frequency" integer-property
-device-end
-
-: (cpu-arch  ( -- adr len )
-   " architecture" ['] root-node  get-package-property  drop
-   get-encoded-string
-;
-' (cpu-arch to cpu-arch
-
-\ Memory management services
-[ifdef] virtual-mode
-fload ${BP}/ofw/core/clntmem1.fth	\ client services for memory
-[else]
-fload ${BP}/ofw/core/clntphy1.fth	\ client services for memory
-: >physical  ( va -- pa )
-   dup fw-virt-base - fw-virt-size u<  if   ( va )
-      fw-virt-base -  fw-pa +
-   then
-;
-[then]
-fload ${BP}/ofw/core/memlist.fth	\ Resource list common routines
-fload ${BP}/ofw/core/showlist.fth	\ Linked list display tool
-fload ${BP}/ofw/core/allocph1.fth	\ S Physical memory allocator
-fload ${BP}/ofw/core/availpm.fth	\ Available memory list
-
-fload ${BP}/cpu/arm/mmp2/probemem.fth	\ Memory probing
-
-stand-init: Probing memory
-   " probe" memory-node @ $call-method
-;
-
-[ifdef] virtual-mode
-fload ${BP}/cpu/arm/loadvmem.fth	\ /mmu node
-stand-init: MMU
-   " /mmu" open-dev mmu-node !
-;
-fload ${BP}/ofw/core/initdict.fth	\ Dynamic dictionary allocation
-fload ${BP}/arch/arm/loadarea.fth	\ Allocate and map program load area
-[else]
-fload ${BP}/cpu/arm/mmp2/mmuon.fth
-[then]
-
-\ XXX should be elsewhere
-dev /client-services
-: chain  ( len args entry size virt -- )
-   release                                       ( len args entry )
-   h# 8000 alloc-mem h# 8000 +  (init-program)   ( len args )
-   to r1  to r2
-   go
+: (init-clocks)
+   -1    h# d4051024 l!   \ PMUM_CGR_PJ - everything on
+   h# 07 h# d4015064 l!   \ APBC_AIB_CLK_RST - reset, functional and APB clock on
+   h# 03 h# d4015064 l!   \ APBC_AIB_CLK_RST - release reset, functional and APB clock on
+   h# 13 h# d4015034 l!   \ APBC_UART3_CLK_RST - VCTCXO, functional and APB clock on (26 mhz)
+   h# c1 h# d401e120 l!   \ GPIO51 = af1 for UART3 RXD
+   h# c1 h# d401e124 l!   \ GPIO52 = af1 for UART3 TXD
+   h# 1b h# d4282854 l!   \ SD0 clocks
 ;
-device-end
-
-fload ${BP}/cpu/arm/crc32.fth		\ Assembly language Zip CRC calculation
-fload ${BP}/forth/lib/crc32.fth		\ High-level portion of CRC calculation
-
-[ifdef] resident-packages
-
-\needs unix-seconds>  fload ${BP}/ofw/fs/unixtime.fth	\ Unix time calculation
-support-package: ext2-file-system
-   fload ${BP}/ofw/fs/ext2fs/ext2fs.fth	\ Linux file system
-end-support-package
-
-[ifdef] jffs2-support
-\needs unix-seconds>  fload ${BP}/ofw/fs/unixtime.fth	\ Unix time calculation
-support-package: jffs2-file-system
-   fload ${BP}/ofw/fs/jffs2/jffs2.fth	\ Journaling flash file system 2
-end-support-package
-[then]
-
-support-package: zip-file-system
-   fload ${BP}/ofw/fs/zipfs.fth		\ Zip file system
-end-support-package
-
-support-package: dropin-file-system
-   fload ${BP}/ofw/fs/dropinfs.fth	\ Dropin file system
-end-support-package
-[then]
-
-fload ${BP}/ofw/core/osfile.fth		\ For testing
-
-\ Load file format handlers
-
-: call32 ;
-
-fload ${BP}/ofw/core/allocsym.fth    \ Allocate memory for symbol table
-fload ${BP}/ofw/core/symcif.fth
-fload ${BP}/ofw/core/symdebug.fth
-: release-load-area  ( boundary-adr -- )  drop  ;
-
-[ifdef] use-elf
-fload ${BP}/ofw/elf/elf.fth
-fload ${BP}/ofw/elf/elfdebug.fth
-[ifdef] virtual-mode
-\ Depends on the assumption that physical memory is mapped 1:1 already
-: (elf-map-in) ( va size -- )  0 mem-claim  drop  ;
-[else]
-: (elf-map-in)  ( va size -- )  2drop  ;
-[then]
-' (elf-map-in) is elf-map-in
-[then]
-
-\ Reboot and re-entry code
-fload ${BP}/ofw/core/reboot.fth		\ Restart the client program
-fload ${BP}/ofw/core/reenter.fth	\ Various entries into Forth
-
-headerless
-[ifdef] virtual-mode
-: (initial-heap)  ( -- adr len )  sp0 @ ps-size -  dict-limit  tuck -  ;
-[else]
-   \ : (initial-heap)  ( -- adr len )  RAMtop heap-size  ;
-: (initial-heap)  ( -- adr len )  limit heap-size  ;
-[then]
-' (initial-heap) is initial-heap
-headers
-
-" /openprom" find-device
-   " FirmWorks,3.0" encode-string " model" property
-device-end
-
-[ifdef] virtual-mode
-fload ${BP}/cpu/arm/mmusetup.fth	\ Initial values for MMU lists
-[then]
-
-: background-rgb  ( -- r g b )  h# ff h# ff h# ff  ;
-
-fload ${BP}/cpu/arm/mmp2/devices.fth
-
-[ifndef] virtual-mode
-warning off
-: stand-init-io
-   stand-init-io
-   go-fast         \ From mmuon.fth
-;
-warning on
-[then]
-
-true ' local-mac-address? set-config-int-default
-[ifdef] resident-packages
-support-package: nfs
-   fload ${BP}/ofw/fs/nfs/loadpkg.fth
-end-support-package
-
-[then]
-devalias nfs net//obp-tftp:last//nfs
-
-fload ${BP}/cpu/arm/linux.fth
-h# 20.0000 to linux-params  \ The Jasper Linux kernel fails unless the params are between 0x20.0000 and 0x20.4000
-d# 2382 to arm-linux-machine-type  \ Marvell Jasper
-
-\ Add a tag describing the linear frame buffer
-: mmp-fb-tag,  ( -- )
-   8 tag-l,
-   h# 54410008 tag-l, \ ATAG_VIDEOLFB
-   d# 800 tag-w,      \ Width
-   d# 480 tag-w,      \ Height
-   d#  24 tag-w,      \ Depth
-   d# 800 3 * tag-w,  \ Pitch
-   fb-pa      tag-l,  \ Base address
-   d# 800 3 *  d# 480 *  tag-l,  \ Total size - perhaps could be larger
-   8     tag-b,       \ Red size
-   d#  0 tag-b,       \ Red position
-   8     tag-b,       \ Green size
-   d#  8 tag-b,       \ Green position
-   8     tag-b,       \ Blue size
-   d# 16 tag-b,       \ Blue position
-   0     tag-b,       \ Rsvd size
-   d# 24 tag-b,       \ Rsvd position
-;
-\ ' mmp-fb-tag, to fb-tag,
-
-\ fload ${BP}/cpu/arm/mmp2/usb.fth
-
-false to stand-init-debug?
-\ true to stand-init-debug?
-
-: protect-fw  ( -- )  ;
-: usb-power-on  ( -- )  ;
-
-hex
-: i-key-wait  ( ms -- pressed? )
-   cr ." Type 'i' to interrupt stand-init sequence" cr   ( ms )
-   0  do
-      ukey?  if
-         ukey upc ascii I  =  if  true unloop exit  then
-      then
-      1 ms
-   loop
-   false
-;
-
-warning @  warning off 
-: init
-\ initial-heap add-memory
-   init
-
-   standalone?  if
-      disable-interrupts
-[ifdef] notdef
-      d# 1000
-      i-key-wait  if
-\        protect-fw
-         ." Interacting" cr  hex interact
-      then
-      \ Turn on USB power here to overlap the time with other startup actions
-      usb-power-on
-[then]
-   then
-;
-warning !
-[then]
-
-: (.firmware)  ( -- )
-   ." Open Firmware  "  .built  cr
-   ." Copyright 2010 FirmWorks  All Rights Reserved" cr
-;
-' (.firmware) to .firmware
-
-fload ${BP}/ofw/gui/bmptools.fth
-fload ${BP}/dev/null.fth
-fload ${BP}/ofw/core/bailout.fth
-
-\ GUI
-false value gui-safeboot?
-
-: 2tuck  ( d1 d2 -- d2 d1 d2 )  2swap 2over  ;
-: user-ok  "ok"  ;  \ This is supposed to check for authorization
-true value user-mode?
-
-fload ${BP}/ofw/gui/loadmenu.fth
-\ fload ${BP}/ofw/gui/insticon.fth
-
-\ Uninstall the diag menu from the general user interface vector
-\ so exiting from emacs doesn't invoke the diag menu.
-' quit to user-interface
-
-: screen-#lines  ( -- n )
-   screen-ih 0=  if  default-#lines exit  then
-   screen-ih  package( #lines )package
-;
-' screen-#lines to lines/page
-
-true value text-on?
-: text-off  ( -- )
-   text-on?  if
-      screen-ih remove-output
-      false to text-on?
-   then
-;
-: text-on   ( -- )
-   text-on? 0=  if
-      screen-ih add-output
-      cursor-on
-      true to text-on?
-   then
-;
-
-fload ${BP}/cpu/x86/pc/olpc/help.fth
-
-[ifdef] notyet
-fload ${BP}/cpu/x86/pc/olpc/gamekeys.fth
-
-: emacs  ( -- )
-   false to already-go?
-   boot-getline to boot-file   " rom:emacs" $boot
-;
-
-fload ${BP}/ofw/gui/ofpong.fth
-fload ${BP}/cpu/x86/pc/olpc/life.fth
-[then]
-
-" u:\boot\olpc.fth ext:\boot\olpc.fth int:\boot\olpc.fth ext:\zimage /prober /usb/ethernet /usb/wlan"
-   ' boot-device  set-config-string-default
-
-\needs ramdisk  " " d# 128 config-string ramdisk
-" "   ' boot-file      set-config-string-default   \ Let the boot script set the cmdline
-
-\ Eliminate 4 second delay in install console for the case where
-\ there is no keyboard.  The delay is unnecessary because the screen
-\ does not go blank when the device is closed.
-patch drop ms install-console
-
-alias reboot bye
-
-alias crcgen drop  ( crc byte -- crc' )
-
-\ Dictionary growth size for the ARM Image Format header
-\ 1 section   before origin  section table
-h# 10.0000      h# 8000 -      h# 4000 -      dictionary-size !
-
-fload ${BP}/cpu/arm/saverom.fth  \ Save the dictionary for standalone startup
-
-fload ${BP}/forth/lib/selstr.fth
-
-fload ${BP}/ofw/inet/loadtcp.fth
-
-support-package: http
-   fload ${BP}/ofw/inet/http.fth	\ HTTP client
-end-support-package
-
-[ifdef] notyet
-fload ${BP}/cpu/x86/pc/olpc/memtest.fth
-[then]
-
-[ifdef] notyet
-fload ${BP}/ofw/wifi/wifi-cfg.fth
-support-package: supplicant
-fload ${BP}/ofw/wifi/loadpkg.fth
-end-support-package
-
-: ofw-ssids  ( -- $ )  " OFWSSID"  ;
-' ofw-ssids to default-ssids
-[then]
-
-fload ${BP}/ofw/inet/sntp.fth
-: olpc-ntp-servers  ( -- )
-   " DHCP time 172.18.0.1 0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org"
-;
-' olpc-ntp-servers to ntp-servers
-: ntp-time&date  ( -- s m h d m y )
-   ntp-timestamp  abort" Can't contact NTP server"
-   ntp>time&date
-;
-: .clock  ( -- )
-   time&date .date space .time  ."  UTC" cr
-;
-: ntp-set-clock  ( -- )
-   ntp-time&date  " set-time"  clock-node @ $call-method
-   .clock
-;
-
-[ifdef] use-ppp
-fload ${BP}/ofw/ppp/loadppp.fth
-[then]
-
-" dhcp" ' ip-address  set-config-string-default
-
-[ifdef] notyet
-: c1-idle  ( -- )  interrupts-enabled?  if  halt  then  ;
-' c1-idle to stdin-idle
-[then]
-
-fload ${BP}/ofw/core/countdwn.fth	\ Startup countdown
-
-: console-start  ( -- )
-   install-mux-io
-\  cursor-off
-   true to text-on?
-
-   " //null" open-dev to null-ih  \ For text-off state
-;
-
-: interpreter-init  ( -- )
-   hex
-   warning on
-   only forth also definitions
-
-\   install-alarm
-
-   page-mode
-   #line off
-
-\   .built cr
-;
-
-[ifdef] notyet
-: ?games  ( -- )
-   rocker-right game-key?  if
-      protect-fw
-      time&date 5drop 1 and  if
-         ['] pong guarded
-      else
-         ['] life-demo guarded
-      then
-      power-off
-   then
-;
-: ?diags  ( -- )
-   rocker-left game-key?  if
-      protect-fw
-      text-on  " test-all" ['] eval guarded
-      ." Tests complete - powering off" cr  d# 5000 ms  power-off
-   then
-;
-
-: ?scan-nand  ( -- )
-   rocker-up game-key?  if
-      protect-fw  text-on  ['] scan-nand guarded
-   then
-;
-: ?fs-update  ( -- )
-   button-check button-x or  button-o or  button-square or   ( mask )
-   game-key-mask =  if  protect-fw try-fs-update  then
-;
-[then]
-
-: startup  ( -- )
-   standalone?  0=  if  exit  then
-
-\  block-exceptions
-   no-page
-
-   console-start
-
-[ifdef] notyet
-   read-game-keys
-[then]
-
-\  text-off
-
-   " probe-" do-drop-in
-
-[ifdef] notyet
-   sound
-   ?games
-[then]
-
-   ['] false to interrupt-auto-boot?
-[ifdef] probe-usb
-   probe-usb
-   report-disk
-   report-keyboard
-[then]
-   " probe+" do-drop-in
-
-   interpreter-init
-[ifdef] notyet
-   ?scan-nand
-   ?diags
-   ?fs-update
-[then]
-\  unblock-exceptions
-   ['] (interrupt-auto-boot?) to interrupt-auto-boot?
-\  ?usb-keyboard
-   auto-banner?  if  banner  then
-
-   auto-boot
-
-   cr cr
-
-   quit
-;
-
-\ This helps with TeraTerm, which sends ESC-O as the arrow key prefix
-also hidden also keys-forth definitions
-warning @  warning off
-: esc-o  key lastchar !  [""] esc-[ do-command  ;
-warning !
-previous previous definitions
-
-tag-file @ fclose  tag-file off
-
-.( --- Saving fw.dic ...)
-" fw.dic" $save-forth cr
+' (init-clocks) to init-clocks
 
-fload ${BP}/cpu/arm/mmp2/boot.fth
+fload ${BP}/cpu/arm/mmp2/rawboot.fth
 
 .( --- Saving ofw.rom --- )  cr " ofw.rom" $save-rom
 

Added: cpu/arm/mmp2/rawboot.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/mmp2/rawboot.fth	Fri Oct  8 08:34:38 2010	(r1965)
@@ -0,0 +1,18 @@
+\ This is some glue code to convert the machine setup that QEMU gives us
+\ to the setup that start-forth (see arm/boot.fth) wants.
+\ We get here via a call instruction at origin+8, which is inserted below
+
+code stand-cold-code    ( r0: 0  r1: board-id  r2: &kernel-args  lr: &aif_header+8c )
+   here  origin 8 +  put-call  \ Insert call instruction
+
+   \ Put the arguments in safe registers
+   sub   r6,lr,#0x8c        \ r6 points to header (lr set by code at origin)
+   mov   r7,#0              \ r7: functions
+   add   r8,r6,`/fw-ram`    \ r8: memtop - 2MiB above load address
+                            \ r9 is up
+   mov   r10,#0             \ r10: argc
+   mov   r11,r2             \ r11: argv (kernel args)
+   mov   r12,`initial-heap-size`  \ r12: initial-heap-size
+
+   b     'code start-forth  \ Branch to the generic startup code
+end-code

Modified: cpu/arm/mmp2/twsi.fth
==============================================================================
--- cpu/arm/mmp2/twsi.fth	Fri Oct  8 08:31:34 2010	(r1964)
+++ cpu/arm/mmp2/twsi.fth	Fri Oct  8 08:34:38 2010	(r1965)
@@ -314,3 +314,12 @@
 : vibrate-on  ( -- )  select-pmic  h# 1f h# 3c twsi-b!  ;  \ LDO10
 : vibrate-off  ( -- )  select-pmic  h# 1e h# 3c twsi-b!  ;
 
+: power-on-sd ( -- )
+   select-pmic
+   h# 29 h# 42 twsi-b!
+   h# 1f h# 40 twsi-b!
+;
+: power-off-sd  ( -- )
+   select-pmic
+   h# 1e h# 40 twsi-b!
+;



More information about the openfirmware mailing list