[openfirmware] [commit] r1987 - cpu/arm/marvell cpu/arm/mmp2 cpu/arm/olpc/1.75 cpu/arm/olpc/1.75/build dev/usb2/hcd dev/usb2/hcd/ehci dev/usb2/hcd/uhci
repository service
svn at openfirmware.info
Mon Oct 18 06:02:39 CEST 2010
Author: wmb
Date: Mon Oct 18 06:02:38 2010
New Revision: 1987
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/1987
Log:
Omnibus checkin of new and reorganized files for the OLPC ARM build, preparing for bringup.
Added:
cpu/arm/marvell/utmiphy.fth
cpu/arm/mmp2/boardgpio.fth
cpu/arm/mmp2/boardtwsi.fth
cpu/arm/mmp2/hwaddrs.fth
cpu/arm/mmp2/uart.fth
cpu/arm/olpc/1.75/boardgpio.fth
cpu/arm/olpc/1.75/build/Makefile
cpu/arm/olpc/1.75/devices.fth
cpu/arm/olpc/1.75/dram-forth.fth
cpu/arm/olpc/1.75/draminit.bth
cpu/arm/olpc/1.75/lcdcfg.fth
cpu/arm/olpc/1.75/sp.bth
dev/usb2/hcd/uhci/pci.fth
Modified:
cpu/arm/mmp2/addrs.fth
cpu/arm/mmp2/config.fth
cpu/arm/mmp2/devices.fth
cpu/arm/mmp2/dsi.fth
cpu/arm/mmp2/fw.bth
cpu/arm/mmp2/mfpr.fth
cpu/arm/mmp2/timer.fth
cpu/arm/mmp2/twsi.fth
cpu/arm/olpc/1.75/xo-dram.fth
dev/usb2/hcd/ehci/ehci.bth
dev/usb2/hcd/ehci/ehci.fth
dev/usb2/hcd/ehci/pci.fth
dev/usb2/hcd/ehci/probe.fth
dev/usb2/hcd/ehci/qhtd.fth
dev/usb2/hcd/hcd.fth
dev/usb2/hcd/uhci/uhci.bth
dev/usb2/hcd/uhci/uhci.fth
Added: cpu/arm/marvell/utmiphy.fth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ cpu/arm/marvell/utmiphy.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -0,0 +1,48 @@
+\ See license at end of file
+purpose: Init UTMI USB Phy in Marvell SoC
+
+h# d4207004 constant utmi-ctrl
+h# d4207008 constant utmi-pll
+h# d420700c constant utmi-tx
+h# d4207010 constant utmi-rx
+h# d4207014 constant utmi-ivref
+
+: regset ( mask adr -- ) tuck l@ or swap l! ;
+: regclr ( mask adr -- ) tuck l@ swap invert and swap l! ;
+
+: wait-cal ( spins -- )
+ 0 do
+ utmi-pll rl@ h# 0080.0000 and if unloop exit then
+ loop
+ ." PLL calibrate timeout" cr
+;
+: init-usb-phy ( -- )
+ \ Turn on the USB PHY power
+ h# 1010.0000 utmi-ctrl regset \ INPKT_DELAY_SOF, PU_REF
+ h# 2 utmi-ctrl regset \ PLL_PWR_UP
+ h# 1 utmi-ctrl regset \ PWR_UP
+
+ \ Configure the PLLs
+ h# 7e03.ffff utmi-pll regclr \ PLLCALI12, PLLVDD18, PLLVDD12, KVCO, ICP, FBDIV, REFDIV,
+ h# 7e01.aeeb utmi-pll regset \ 3 3 3 3 2 ee b
+
+ h# 00df.c000 utmi-tx regclr \ TXVDD12, CK60_PHSEL, IMPCAL_VTH
+ h# 00c9.4000 utmi-tx regset \ 3 4 5
+
+ h# 0001.80f0 utmi-rx regclr \ REG_SQ_LENGTH, RX_SQ_THRESH
+ h# 0001.000a utmi-rx regset \ 2 a
+
+ d# 10000 wait-cal
+
+ d# 200 us
+ h# 0020.0000 utmi-pll regset \ VCOCAL_START
+ d# 40 us
+ h# 0020.0000 utmi-pll regclr
+
+ d# 200 us
+ h# 0000.1000 utmi-tx regset \ REG_RCAL_START
+ d# 40 us
+ h# 0000.1000 utmi-tx regclr
+
+ d# 1000 wait-cal
+;
Modified: cpu/arm/mmp2/addrs.fth
==============================================================================
--- cpu/arm/mmp2/addrs.fth Mon Oct 18 05:25:53 2010 (r1986)
+++ cpu/arm/mmp2/addrs.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -38,15 +38,3 @@
d# 12 to pageshift
h# 10.0000 constant /section
h# 4000 constant /page-table
-
-\ Defined by MMP2 hardware
-h# d401.9000 constant gpio-base
-h# d405.1024 constant acgr-pa
-h# d401.5000 constant clock-unit-pa
-h# d405.0000 constant main-pmu-pa
-h# d428.2800 constant pmua-pa \ Application processor PMU register base
-h# d420.b800 constant dsi1-pa \ 4-lane controller
-h# d420.ba00 constant dsi2-pa \ 3-lane controller
-h# d420.b000 constant lcd-pa
-h# d401.4000 constant timer-pa
-
Added: cpu/arm/mmp2/boardgpio.fth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ cpu/arm/mmp2/boardgpio.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -0,0 +1,218 @@
+purpose: Board-specific setup details - pin assigments, etc.
+
+: set-camera-domain-voltage
+ aib-unlock
+ h# d401e80c l@ 4 or ( n ) \ Set 1.8V selector bit in AIB_GPIO2_IO
+ aib-unlock
+ h# d401e80c l!
+;
+
+: set-gpio-directions ( -- )
+ 3 h# 38 clock-unit-pa + l! \ Enable clocks in GPIO clock reset register
+
+ h# 000e.0000 gpio-base h# 0c + l! \ Bits 19, 18, 17
+ h# 0704.2000 gpio-base h# 10 + l! \ Bits 58,57,56,50 and 45
+\ h# 03ec.3e00 gpio-base h# 14 + l! \ Bits 89:85,83,82, and 77:73
+ h# 03ec.3200 gpio-base h# 14 + l! \ Bits 89:85,83,82, and 77:76 and 73 (leave 74 and 75 as input)
+
+ h# 0200.3c00 gpio-base h# 20 + l! \ Turn off LEDS (3c00) and turn on 5V (0200.0000)
+;
+
+create mfpr-table
+ 1 af, \ GPIO_00 - KP_MKIN[0]
+ 1 af, \ GPIO_01 - KP_MKOUT[0]
+ 1 af, \ GPIO_02 - KP_MKIN[1]
+ 1 af, \ GPIO_03 - KP_MKOUT[1]
+ 1 af, \ GPIO_04 - KP_MKIN[2]
+ 1 af, \ GPIO_05 - KP_MKOUT[2]
+ no-update, \ GPIO_06 - Not used
+ no-update, \ GPIO_07 - Not used
+ no-update, \ GPIO_08 - Not used
+ no-update, \ GPIO_09 - Not used
+ no-update, \ GPIO_10 - Not used
+ no-update, \ GPIO_11 - Not used
+ no-update, \ GPIO_12 - Not used
+ no-update, \ GPIO_13 - Not used
+ no-update, \ GPIO_14 - Not used
+ no-update, \ GPIO_15 - Not used
+ no-update, \ GPIO_16 - Not used
+ 0 af, \ GPIO_17 - BB_GPIO1 (use as GPIO out)
+ 0 af, \ GPIO_18 - BB_GPIO2 (use as GPIO out)
+ 0 af, \ GPIO_19 - BB_GPIO3 (use as GPIO out)
+ 0 af, \ GPIO_20 - ISP_INT (use as GPIO in)
+ 0 af, \ GPIO_21 - WIFI_GPIO2 (use as GPIO i/o)
+ 0 af, \ GPIO_22 - WIFI_GPIO3 (use as GPIO i/o)
+ 0 af, \ GPIO_23 - CODEC_INT (use as GPIO in)
+ 1 af, \ GPIO_24 - I2S_SYSCLK (Codec - HI-FI)
+ 1 af, \ GPIO_25 - SSPA2_SCLK (Codec - HI-FI)
+ 1 af, \ GPIO_26 - SSPA2_SFRM (Codec - HI-FI)
+ 1 af, \ GPIO_27 - SSPA2_TXD (Codec - HI-FI)
+ 1 af, \ GPIO_28 - SSPA2_RXD (Codec - HI-FI)
+ 1 af, \ GPIO_29 - UART1_RXD (Bluetooth)
+ 1 af, \ GPIO_30 - UART1_TXD (Bluetooth)
+ 1 af, \ GPIO_31 - UART1_CTS (Bluetooth)
+ 1 af, \ GPIO_32 - UART1_RTS (Bluetooth)
+ 0 af, \ GPIO_33 - SSPA2_CLK (Codec - LO-FI)
+ 0 af, \ GPIO_34 - SSPA2_FRM (Codec - LO-FI)
+ 0 af, \ GPIO_35 - SSPA2_TXD (Codec - LO-FI)
+ 0 af, \ GPIO_36 - SSPA2_RXD (Codec - LO-FI)
+ 1 af, \ GPIO_37 - MMC2_DAT<3>
+ 1 af, \ GPIO_38 - MMC2_DAT<2>
+ 1 af, \ GPIO_39 - MMC2_DAT<1>
+ 1 af, \ GPIO_40 - MMC2_DAT<0>
+ 1 af, \ GPIO_41 - MMC2_CMD
+ 1 af, \ GPIO_42 - MMC2_CLK
+ 1 af, \ GPIO_43 - TWSI2_SCL (for codec/noise/FM)
+ 1 af, \ GPIO_44 - TWSI2_SDA (for codec/noise/FM)
+ 0 af, \ GPIO_45 - WM8994_LDOEN (use as GPIO out)
+ 0 af, \ GPIO_46 - HDMI_DET (use as GPIO in)
+ 2 af, \ GPIO_47 - SSP2_CLK
+ 2 af, \ GPIO_48 - SSP2_FRM
+ 2 af, \ GPIO_49 - SSP2_RXD
+ 0 af, \ GPIO_50 - GPS_STBY (use as GPIO out)
+ 1 af, \ GPIO_51 - UART3_RXD (debug port)
+ 1 af, \ GPIO_52 - UART3_TXD (debug port)
+ 5 af, \ GPIO_53 - PWM3 (Keypad backlight)
+ 4 af, \ GPIO_54 - HDMI_CEC (MOVED to GPIO 113?)
+ 0 af, \ GPIO_55 - WIFI_GPIO0 (use as GPIO in)
+ 0 af, \ GPIO_56 - WIFI_GPIO1 (use as GPIO out)
+ 0 af, \ GPIO_57 - WIFI_PD_N (use as GPIO out)
+ 0 af, \ GPIO_58 - WIFI_RST_N (use as GPIO out)
+ 1 af, \ GPIO_59 - CCIC_IN<7>
+ 1 af, \ GPIO_60 - CCIC_IN<6>
+ 1 af, \ GPIO_61 - CCIC_IN<5>
+ 1 af, \ GPIO_62 - CCIC_IN<4>
+ 1 af, \ GPIO_63 - CCIC_IN<3>
+ 1 af, \ GPIO_64 - CCIC_IN<2>
+ 1 af, \ GPIO_65 - CCIC_IN<1>
+ 1 af, \ GPIO_66 - CCIC_IN<0>
+ 1 af, \ GPIO_67 - CAM_HSYNC
+ 1 af, \ GPIO_68 - CAM_VSYNC
+ 1 af, \ GPIO_69 - CAM_MCLK
+ 1 af, \ GPIO_70 - CAM_PCLK
+ 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)
+ 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)
+ 0 af, \ GPIO_83 - LCD_RST_N (use as GPIO out)
+ 0 af, \ GPIO_84 - USB_INT_N (use as GPIO in)
+ 0 af, \ GPIO_85 - USB_RST_N (use as GPIO out)
+ 0 af, \ GPIO_86 - USB_PWDN_N (use as GPIO out)
+ 0 af, \ GPIO_87 - USB_HUB_EN (use as GPIO out)
+ 0 af, \ GPIO_88 - USB_MMC_EN (use as GPIO out)
+ 0 af, \ GPIO_89 - 5V_Enable (use as GPIO out)
+ no-update, \ GPIO_90 - Not used
+ 0 af, \ GPIO_91 - ACC_INT (use as GPIO in)
+ 0 af, \ GPIO_92 - PROX1_INT (use as GPIO in)
+ no-update, \ GPIO_93 - Not used
+ 3 pull-dn, \ GPIO_94 - SPI_CLK
+ 3 pull-up, \ GPIO_95 - SPI_CSO
+ 3 pull-dn, \ GPIO_96 - SPI_SDA
+ 2 af, \ GPIO_97 - TWSI6_SCL (HDMI EDID)
+ 2 af, \ GPIO_98 - TWSI6_SDA (HDMI EDID)
+ 4 af, \ GPIO_99 - TWSI5_SCL (CAP TOUCH)
+ 4 af, \ GPIO_100 - TWSI5_SDA (CAP TOUCH)
+ 0 af, \ GPIO_101 - TSI_INT (use as GPIO in)
+ 0 af, \ GPIO_102 - USIM_UCLK
+ 0 af, \ GPIO_103 - USIM_UIO
+ 0 af, \ GPIO_104 - ND_IO[7]
+ 0 af, \ GPIO_105 - ND_IO[6]
+ 0 af, \ GPIO_106 - ND_IO[5]
+ 0 af, \ GPIO_107 - ND_IO[4]
+ 0 af, \ GPIO_108 - ND_IO[15]
+ 0 af, \ GPIO_109 - ND_IO[14]
+ 0 af, \ GPIO_110 - ND_IO[13]
+ 0 af, \ GPIO_111 - ND_IO[8] Use 2 af, for eMMC
+ 0 af, \ GPIO_112 - ND_RDY[0] Use 2 af, for eMMC
+ no-update, \ GPIO_113 - Not used
+ 1 af, \ GPIO_114 - M/N_CLK_OUT (G_CLK_OUT)
+ 0 af, \ GPIO_115 - GPIO_115 (i/o)
+ 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)
+ 0 af, \ GPIO_123 - MBFLT_N (use as GPIO in)
+ 1 af, \ GPIO_124 - MMC1_DAT[7]
+ 1 af, \ GPIO_125 - MMC1_DAT[6]
+ 0 pull-up, \ GPIO_126 - Board Rev ID bit 0
+ 0 pull-up, \ GPIO_127 - Board Rev ID bit 1
+ 0 pull-up, \ GPIO_128 - Board Rev ID bit 2
+ 1 af, \ GPIO_129 - MMC1_DAT[5]
+ 1 af, \ GPIO_130 - MMC1_DAT[4]
+ 1 af, \ GPIO_131 - MMC1_DAT[3]
+ 1 af, \ GPIO_132 - MMC1_DAT[2]
+ 1 af, \ GPIO_133 - MMC1_DAT[1]
+ 1 af, \ GPIO_134 - MMC1_DAT[0]
+ no-update, \ GPIO_135 - Not used
+ 1 af, \ GPIO_136 - MMC1_CMD
+ no-update, \ GPIO_137 - Not used
+ no-update, \ GPIO_138 - Not used
+ 1 af, \ GPIO_139 - MMC1_CLK
+ 1 af, \ GPIO_140 - MMC1_CD
+ 1 af, \ GPIO_141 - MMC1_WP
+ 0 af, \ GPIO_142 - USIM_RSTn
+ 0 af, \ GPIO_143 - ND_CS[0]
+ 0 af, \ GPIO_144 - ND_CS[1]
+ no-update, \ GPIO_145 - Not used
+ no-update, \ GPIO_146 - Not used
+ 0 af, \ GPIO_147 - ND_WE_N
+ 0 af, \ GPIO_148 - ND_RE_N
+ 0 af, \ GPIO_149 - ND_CLE
+ 0 af, \ GPIO_150 - ND_ALE
+ 2 af, \ GPIO_151 - MMC3_CLK
+ no-update, \ GPIO_152 - Not used
+ no-update, \ GPIO_153 - Not used
+ 0 af, \ GPIO_154 - SM_INT
+ 1 af, \ MMC3_RST_N (use as GPIO)
+ no-update, \ GPIO_156 - PRI_TDI (JTAG)
+ no-update, \ GPIO_157 - PRI_TDS (JTAG)
+ no-update, \ GPIO_158 - PRI_TDK (JTAG)
+ no-update, \ GPIO_159 - PRI_TDO (JTAG)
+ 0 af, \ GPIO_160 - ND_RDY[1]
+ 0 af, \ GPIO_161 - ND_IO[12]
+ 0 af, \ GPIO_162 - ND_IO[11] Use 2 af, for eMMC
+ 0 af, \ GPIO_163 - ND_IO[10] Use 2 af, for eMMC
+ 0 af, \ GPIO_164 - ND_IO[9] Use 2 af, for eMMC
+ 0 af, \ GPIO_165 - ND_IO[3] Use 2 af, for eMMC
+ 0 af, \ GPIO_166 - ND_IO[2] Use 2 af, for eMMC
+ 0 af, \ GPIO_167 - ND_IO[1] Use 2 af, for eMMC
+ 0 af, \ GPIO_168 - ND_IO[0] Use 2 af, for eMMC
+
+: init-mfprs
+ d# 169 0 do
+ mfpr-table i wa+ w@ ( code )
+ dup 8 = if ( code )
+ drop ( )
+ else ( code )
+ i af! ( )
+ then
+ loop
+;
+
+: gpios-for-nand ( -- )
+ h# c0 d# 111 af!
+ h# c0 d# 112 af!
+ d# 169 d# 162 do h# c0 i af! loop
+;
+: gpios-for-emmc ( -- )
+ h# c2 d# 111 af!
+ h# c2 d# 112 af!
+ d# 169 d# 162 do h# c2 i af! loop
+;
Added: cpu/arm/mmp2/boardtwsi.fth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ cpu/arm/mmp2/boardtwsi.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -0,0 +1,172 @@
+purpose: Board-specific details of TWSI-connected devices
+
+\ TWSI devices per channel:
+\ 1 MAX8925 PMIC MAIN 78, PMIC ADC 8e, PMIC RTC d0, MAX8649 c0
+\ 2 WM8994 Audio Codec 34, WM2000 Noise Canceler 74
+\ 3 m6M0 Camera ISP 3e, OV8810 Camera 6c
+\ 4 HMC5843 compass 3c, CM3623 ALS/PS 20+22+b0, BMA150 accelerometer 70
+\ 5 TC358762 MIPI bridge 16, TM-1210 or TM1414 touchscreen 40
+\ 6 HDMI DDC EDID a0
+
+: select-touch-panel ( -- ) h# 40 5 set-twsi-target ;
+: touch-panel-type ( -- n ) select-touch-panel h# bd twsi-b@ ;
+: get-tm1414-data ( -- x y finger-mask )
+ select-touch-panel ( )
+ h# 1a twsi-b@ ( low-y,low-x )
+ dup h# f and h# 18 twsi-b@ 4 lshift or ( low-y,low-x x )
+ swap 4 rshift h# f and h# 19 twsi-b@ 4 lshift or ( x y )
+ h# 15 twsi-b@ ( x y mask )
+;
+: touchpad@ ( -- x y finger-mask ) get-tm1414-data ;
+
+: get-tm1210-data ( -- x y reg7-flick-magnitude reg6-gesture reg0-finger-count )
+ 3 twsi-b@ 2 twsi-b@ bwjoin ( x )
+ 5 twsi-b@ 4 twsi-b@ bwjoin ( x y )
+
+ 7 twsi-b@
+ 6 twsi-b@
+ 0 twsi-b@
+;
+
+: compass@ ( -- x y z temp id )
+ h# 3c 4 set-twsi-target
+ 0 0 twsi-b! \ Config register A
+ h# 50 1 twsi-b! \ Config register B
+ 0 2 twsi-b! \ Mode register
+ 4 twsi-b@ 3 twsi-b@ bwjoin ( x )
+ 6 twsi-b@ 5 twsi-b@ bwjoin ( x y )
+ 8 twsi-b@ 7 twsi-b@ bwjoin ( x y z )
+ h# b twsi-b@ ( x y z temp )
+ h# a twsi-b@ 9 twsi-b@ bwjoin ( x y z temp id )
+;
+
+: select-pmic ( -- ) h# 78 1 set-twsi-target ;
+
+: accel-power-on ( -- ) \ LDO8 - vout is 36, ctl is 34
+ select-pmic
+ d# 3000 d# 750 - d# 50 / h# 36 twsi-b! \ want 3.0V
+ h# 1f h# 34 twsi-b!
+;
+: accel-power-off ( -- ) \ LDO8 - vout is 36, ctl is 34
+ select-pmic
+ h# 1e h# 34 twsi-b!
+;
+: accel@ ( -- x y z temp id )
+ h# 70 4 set-twsi-target
+
+ 2 twsi-b@ 6 rshift ( x-low )
+ 3 twsi-b@ 2 lshift or ( x )
+
+ 4 twsi-b@ 6 rshift ( x y-low )
+ 5 twsi-b@ 2 lshift or ( x y )
+
+ 6 twsi-b@ 6 rshift ( x y z-low )
+ 7 twsi-b@ 2 lshift or ( x y z )
+
+ 8 twsi-b@ 0 twsi-b@ ( x y z temp id )
+;
+
+: init-pals ( -- )
+ h# b0 4 set-twsi-target \ Set PS parameters address
+ 0 1 twsi-write \ clear interrupt settings
+
+ h# 22 4 set-twsi-target \ Device init address
+ h# 10 1 twsi-write \ Init device
+
+ h# 20 4 set-twsi-target \ Ambient Light Sensor address
+ 2 1 twsi-write \ Enable ALS in most sensitive mode, 16-bit data
+;
+: als@ ( -- n )
+ h# 22 4 set-twsi-target \ Ambient Light Sensor LSB address
+ 0 1 twsi-get ( low )
+ h# 20 4 set-twsi-target \ Ambient Light Sensor MSB address
+ 0 1 twsi-get bwjoin ( n )
+;
+
+: proximity@ ( -- byte )
+ h# b0 4 set-twsi-target \ Proximity Sensor address
+ 0 1 twsi-get ( byte )
+;
+
+: lcd-backlight! ( b.intensity -- )
+ select-pmic ( b.intensity )
+ dup if ( b.intensity )
+ h# 85 twsi-b! ( )
+ h# 84 twsi-b@ 1 or h# 84 twsi-b! \ Turn on first LED string
+ else ( 0 )
+ drop ( )
+ h# 84 twsi-b@ 1 invert and h# 84 twsi-b! \ Turn off first LED string
+ then
+;
+
+: keypad-backlight! ( b.intensity -- )
+ select-pmic ( b.intensity )
+ dup if ( b.intensity )
+ h# 85 twsi-b! ( )
+ h# 84 twsi-b@ 3 or h# 84 twsi-b! \ Turn on both LED strings
+ else ( )
+ h# 84 twsi-b@ 3 invert and h# 84 twsi-b! \ Turn off both LED strings
+ then
+;
+
+: power-on-dsi ( -- )
+ select-pmic
+
+ h# 16 h# 22 twsi-b! \ 1.2 volts for LDO3
+ h# 1f h# 20 twsi-b! \ LDO3 enable
+
+ h# 16 h# 16 twsi-b! \ 1.2 volts for LDO17
+ h# 1f h# 14 twsi-b! \ LDO17 enable
+
+ h# 1f h# 34 twsi-b! \ LDO8 enable
+
+ d# 10 ms
+;
+
+: bcd> ( bcd -- binary )
+ dup h# f and swap 4 rshift d# 10 * +
+;
+: twsi-bcd@ ( reg# -- binary ) twsi-b@ bcd> ;
+: get-rtc ( -- )
+ h# d0 1 set-twsi-target
+
+\ 3 twsi-b@ ( dow )
+\
+
+ 0 twsi-bcd@ ( sec )
+ 1 twsi-bcd@ ( sec min )
+ 2 twsi-bcd@ ( sec min hr )
+ 4 twsi-bcd@ ( sec min hr day )
+ 5 twsi-bcd@ ( sec min hr day mon )
+ 6 twsi-bcd@ d# 2000 + ( sec min hr day yr )
+;
+
+: core-voltage! ( mv -- )
+ h# c0 1 set-twsi-target \ MAX8649 power management IC
+
+ d# 750 umax d# 1350 umin \ Clipped voltage
+ d# 750 - d# 10 / ( offset-in-mv/10 )
+ h# 80 or ( code )
+ 2 twsi-b!
+;
+: core-voltage@ ( -- mv )
+ h# c0 1 set-twsi-target \ MAX8649 power management IC
+ 2 twsi-b@ ( code )
+ h# 7f and ( offset-mv/10 )
+ d# 10 * ( offset-mv )
+ d# 750 +
+;
+: .core-voltage ( -- ) core-voltage@ .d ;
+
+: 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!
+;
Modified: cpu/arm/mmp2/config.fth
==============================================================================
--- cpu/arm/mmp2/config.fth Mon Oct 18 05:25:53 2010 (r1986)
+++ cpu/arm/mmp2/config.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -1,3 +1,4 @@
create debug-startup
fload ${BP}/cpu/arm/mmp2/addrs.fth
+fload ${BP}/cpu/arm/mmp2/hwaddrs.fth
Modified: cpu/arm/mmp2/devices.fth
==============================================================================
--- cpu/arm/mmp2/devices.fth Mon Oct 18 05:25:53 2010 (r1986)
+++ cpu/arm/mmp2/devices.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -46,6 +46,10 @@
fload ${BP}/cpu/arm/mmp2/timer.fth
fload ${BP}/cpu/arm/mmp2/twsi.fth
fload ${BP}/cpu/arm/mmp2/mfpr.fth
+fload ${BP}/cpu/arm/mmp2/gpio.fth
+
+fload ${BP}/cpu/arm/mmp2/boardtwsi.fth
+fload ${BP}/cpu/arm/mmp2/boardgpio.fth
: init-stuff
set-camera-domain-voltage
acgr-clocks-on
@@ -60,31 +64,12 @@
init-stuff
;
-fload ${BP}/cpu/arm/mmp2/gpio.fth
fload ${BP}/cpu/arm/mmp2/irq.fth
fload ${BP}/cpu/arm/mmp2/watchdog.fth \ reset-all using watchdog timer
-0 0 " d4018000" " /" begin-package
- " uart" name
- h# d4018000 h# 20 reg
-
- : write ( adr len -- actual )
- 0 max tuck ( actual adr actual )
- bounds ?do i c@ uemit loop ( actual )
- ;
- : read ( adr len -- actual )
- 0= if drop 0 exit then
- ukey? if ( adr )
- ukey swap c! 1 ( actual )
- else ( adr )
- drop -2 ( -2 )
- then
- ;
- : open ( -- okay? ) true ;
- : close ( -- ) ;
- : install-abort ;
- : remove-abort ;
+0 0 " d4018000" " /" begin-package \ UART3
+ fload ${BP}/cpu/arm/mmp2/uart.fth
end-package
devalias com1 /uart
: com1 " com1" ;
@@ -135,6 +120,26 @@
fload ${BP}/dev/olpc/kb3700/spicmd.fth
+0 0 " d4208000" " /" begin-package
+ h# 200 constant /regs
+ my-address my-space /regs reg
+ : my-map-in ( len -- adr )
+ my-space swap " map-in" $call-parent h# 100 + ( adr )
+ 3 over h# a8 + rl! ( adr ) \ Force host mode
+ ;
+ : my-map-out ( adr len -- ) swap h# 100 - swap " map-out" $call-parent ;
+ false constant has-dbgp-regs?
+ false constant needs-dummy-qh?
+ false constant grab-controller
+ fload ${BP}/dev/usb2/hcd/ehci/loadpkg.fth
+end-package
+
+: usb-power-on ( -- ) d# 82 gpio-set ; \ 1 instead of 82 for XO
+
+fload ${BP}/cpu/arm/marvell/utmiphy.fth
+stand-init: Init USB Phy
+ init-usb-phy
+;
\ LICENSE_BEGIN
\ Copyright (c) 2010 FirmWorks
Modified: cpu/arm/mmp2/dsi.fth
==============================================================================
--- cpu/arm/mmp2/dsi.fth Mon Oct 18 05:25:53 2010 (r1986)
+++ cpu/arm/mmp2/dsi.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -45,7 +45,7 @@
2 ms
d# 83 gpio-clr 1 ms d# 83 gpio-set 1 ms \ LCD_RST_N line resets DSI bridge
- 5 set-address h# 16 set-slave \ TWSI address of TC358762 MIPI DSI bridge
+ h# 16 5 set-twsi-target \ TWSI address of TC358762 MIPI DSI bridge
\ Data Reg#.......
0 h# 047c dsi-twsi! \ Turn off sleep mode
2 ms
@@ -142,7 +142,7 @@
: .dsi ( index -- ) dup 3 u.r space dsi-twsi@ 8 u.r cr ;
: .dsiw ( index -- ) dup 3 u.r space dsi-twsi-w@ 8 u.r cr ;
: dump-dsi ( -- )
- 5 set-address 16 set-slave
+ 16 5 set-twsi-target
47c .dsi
210 .dsi
470 .dsi
Modified: cpu/arm/mmp2/fw.bth
==============================================================================
--- cpu/arm/mmp2/fw.bth Mon Oct 18 05:25:53 2010 (r1986)
+++ cpu/arm/mmp2/fw.bth Mon Oct 18 06:02:38 2010 (r1987)
@@ -215,7 +215,6 @@
true to stand-init-debug?
: protect-fw ( -- ) ;
-: usb-power-on ( -- ) ;
hex
: i-key-wait ( ms -- pressed? )
@@ -236,7 +235,6 @@
standalone? if
disable-interrupts
-[ifdef] notdef
d# 1000
i-key-wait if
\ protect-fw
@@ -244,7 +242,6 @@
then
\ Turn on USB power here to overlap the time with other startup actions
usb-power-on
-[then]
then
;
warning !
Added: cpu/arm/mmp2/hwaddrs.fth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ cpu/arm/mmp2/hwaddrs.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -0,0 +1,11 @@
+\ Defined by MMP2 hardware
+h# d401.9000 constant gpio-base
+h# d405.1024 constant acgr-pa
+h# d401.5000 constant clock-unit-pa
+h# d405.0000 constant main-pmu-pa
+h# d428.2800 constant pmua-pa \ Application processor PMU register base
+h# d420.b800 constant dsi1-pa \ 4-lane controller
+h# d420.ba00 constant dsi2-pa \ 3-lane controller
+h# d420.b000 constant lcd-pa
+h# d401.4000 constant timer-pa
+
Modified: cpu/arm/mmp2/mfpr.fth
==============================================================================
--- cpu/arm/mmp2/mfpr.fth Mon Oct 18 05:25:53 2010 (r1986)
+++ cpu/arm/mmp2/mfpr.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -1,26 +1,12 @@
+purpose: Pin multiplexing for ARMADA 610 chip (no board details)
+
: aib-unlock
h# baba h# d4015068 l! \ Unlock sequence
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
- aib-unlock
- h# d401e80c l!
-;
: acgr-clocks-on ( -- )
h# 0818.F33C acgr-pa l! \ Turn on all clocks
;
-: set-gpio-directions ( -- )
- 3 h# 38 clock-unit-pa + l! \ Enable clocks in GPIO clock reset register
-
- h# 000e.0000 gpio-base h# 0c + l! \ Bits 19, 18, 17
- h# 0704.2000 gpio-base h# 10 + l! \ Bits 58,57,56,50 and 45
-\ h# 03ec.3e00 gpio-base h# 14 + l! \ Bits 89:85,83,82, and 77:73
- h# 03ec.3200 gpio-base h# 14 + l! \ Bits 89:85,83,82, and 77:76 and 73 (leave 74 and 75 as input)
-
- h# 0200.3c00 gpio-base h# 20 + l! \ Turn off LEDS (3c00) and turn on 5V (0200.0000)
-;
hex
create mfpr-offsets \ GPIOs
@@ -60,211 +46,8 @@
;
: no-update, ( -- ) 8 w, ; \ 8 is a reserved bit; the code skips these
+: af@ ( gpio# -- function# ) gpio>mfpr l@ ;
+: af! ( function# gpio# -- ) gpio>mfpr l! ;
: af, ( n -- ) h# c0 + w, ;
: pull-up, ( n -- ) h# c0c0 + w, ;
: pull-dn, ( n -- ) h# a0c0 + w, ;
-
-create mfpr-table
- 1 af, \ GPIO_00 - KP_MKIN[0]
- 1 af, \ GPIO_01 - KP_MKOUT[0]
- 1 af, \ GPIO_02 - KP_MKIN[1]
- 1 af, \ GPIO_03 - KP_MKOUT[1]
- 1 af, \ GPIO_04 - KP_MKIN[2]
- 1 af, \ GPIO_05 - KP_MKOUT[2]
- no-update, \ GPIO_06 - Not used
- no-update, \ GPIO_07 - Not used
- no-update, \ GPIO_08 - Not used
- no-update, \ GPIO_09 - Not used
- no-update, \ GPIO_10 - Not used
- no-update, \ GPIO_11 - Not used
- no-update, \ GPIO_12 - Not used
- no-update, \ GPIO_13 - Not used
- no-update, \ GPIO_14 - Not used
- no-update, \ GPIO_15 - Not used
- no-update, \ GPIO_16 - Not used
- 0 af, \ GPIO_17 - BB_GPIO1 (use as GPIO out)
- 0 af, \ GPIO_18 - BB_GPIO2 (use as GPIO out)
- 0 af, \ GPIO_19 - BB_GPIO3 (use as GPIO out)
- 0 af, \ GPIO_20 - ISP_INT (use as GPIO in)
- 0 af, \ GPIO_21 - WIFI_GPIO2 (use as GPIO i/o)
- 0 af, \ GPIO_22 - WIFI_GPIO3 (use as GPIO i/o)
- 0 af, \ GPIO_23 - CODEC_INT (use as GPIO in)
- 1 af, \ GPIO_24 - I2S_SYSCLK (Codec - HI-FI)
- 1 af, \ GPIO_25 - SSPA2_SCLK (Codec - HI-FI)
- 1 af, \ GPIO_26 - SSPA2_SFRM (Codec - HI-FI)
- 1 af, \ GPIO_27 - SSPA2_TXD (Codec - HI-FI)
- 1 af, \ GPIO_28 - SSPA2_RXD (Codec - HI-FI)
- 1 af, \ GPIO_29 - UART1_RXD (Bluetooth)
- 1 af, \ GPIO_30 - UART1_TXD (Bluetooth)
- 1 af, \ GPIO_31 - UART1_CTS (Bluetooth)
-\
- 1 af, \ GPIO_32 - UART1_RTS (Bluetooth)
- 0 af, \ GPIO_33 - SSPA2_CLK (Codec - LO-FI)
- 0 af, \ GPIO_34 - SSPA2_FRM (Codec - LO-FI)
- 0 af, \ GPIO_35 - SSPA2_TXD (Codec - LO-FI)
- 0 af, \ GPIO_36 - SSPA2_RXD (Codec - LO-FI)
- 1 af, \ GPIO_37 - MMC2_DAT<3>
- 1 af, \ GPIO_38 - MMC2_DAT<2>
- 1 af, \ GPIO_39 - MMC2_DAT<1>
- 1 af, \ GPIO_40 - MMC2_DAT<0>
- 1 af, \ GPIO_41 - MMC2_CMD
- 1 af, \ GPIO_42 - MMC2_CLK
- 1 af, \ GPIO_43 - TWSI2_SCL (for codec/noise/FM)
- 1 af, \ GPIO_44 - TWSI2_SDA (for codec/noise/FM)
- 0 af, \ GPIO_45 - WM8994_LDOEN (use as GPIO out)
- 0 af, \ GPIO_46 - HDMI_DET (use as GPIO in)
- 2 af, \ GPIO_47 - SSP2_CLK
- 2 af, \ GPIO_48 - SSP2_FRM
- 2 af, \ GPIO_49 - SSP2_RXD
- 0 af, \ GPIO_50 - GPS_STBY (use as GPIO out)
- 1 af, \ GPIO_51 - UART3_RXD (debug port)
- 1 af, \ GPIO_52 - UART3_TXD (debug port)
- 5 af, \ GPIO_53 - PWM3 (Keypad backlight)
- 4 af, \ GPIO_54 - HDMI_CEC (MOVED to GPIO 113?)
- 0 af, \ GPIO_55 - WIFI_GPIO0 (use as GPIO in)
- 0 af, \ GPIO_56 - WIFI_GPIO1 (use as GPIO out)
- 0 af, \ GPIO_57 - WIFI_PD_N (use as GPIO out)
- 0 af, \ GPIO_58 - WIFI_RST_N (use as GPIO out)
- 1 af, \ GPIO_59 - CCIC_IN<7>
- 1 af, \ GPIO_60 - CCIC_IN<6>
- 1 af, \ GPIO_61 - CCIC_IN<5>
- 1 af, \ GPIO_62 - CCIC_IN<4>
- 1 af, \ GPIO_63 - CCIC_IN<3>
-\
- 1 af, \ GPIO_64 - CCIC_IN<2>
- 1 af, \ GPIO_65 - CCIC_IN<1>
- 1 af, \ GPIO_66 - CCIC_IN<0>
- 1 af, \ GPIO_67 - CAM_HSYNC
- 1 af, \ GPIO_68 - CAM_VSYNC
- 1 af, \ GPIO_69 - CAM_MCLK
- 1 af, \ GPIO_70 - CAM_PCLK
- 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)
- 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)
- 0 af, \ GPIO_83 - LCD_RST_N (use as GPIO out)
- 0 af, \ GPIO_84 - USB_INT_N (use as GPIO in)
- 0 af, \ GPIO_85 - USB_RST_N (use as GPIO out)
- 0 af, \ GPIO_86 - USB_PWDN_N (use as GPIO out)
- 0 af, \ GPIO_87 - USB_HUB_EN (use as GPIO out)
- 0 af, \ GPIO_88 - USB_MMC_EN (use as GPIO out)
- 0 af, \ GPIO_89 - 5V_Enable (use as GPIO out)
- no-update, \ GPIO_90 - Not used
- 0 af, \ GPIO_91 - ACC_INT (use as GPIO in)
- 0 af, \ GPIO_92 - PROX1_INT (use as GPIO in)
- no-update, \ GPIO_93 - Not used
- 3 pull-dn, \ GPIO_94 - SPI_CLK
- 3 pull-up, \ GPIO_95 - SPI_CSO
-\
- 3 pull-dn, \ GPIO_96 - SPI_SDA
- 2 af, \ GPIO_97 - TWSI6_SCL (HDMI EDID)
- 2 af, \ GPIO_98 - TWSI6_SDA (HDMI EDID)
- 4 af, \ GPIO_99 - TWSI5_SCL (CAP TOUCH)
- 4 af, \ GPIO_100 - TWSI5_SDA (CAP TOUCH)
- 0 af, \ GPIO_101 - TSI_INT (use as GPIO in)
- 0 af, \ GPIO_102 - USIM_UCLK
- 0 af, \ GPIO_103 - USIM_UIO
- 0 af, \ GPIO_104 - ND_IO[7]
- 0 af, \ GPIO_105 - ND_IO[6]
- 0 af, \ GPIO_106 - ND_IO[5]
- 0 af, \ GPIO_107 - ND_IO[4]
- 0 af, \ GPIO_108 - ND_IO[15]
- 0 af, \ GPIO_109 - ND_IO[14]
- 0 af, \ GPIO_110 - ND_IO[13]
- 0 af, \ GPIO_111 - ND_IO[8] Use 2 af, for eMMC
- 0 af, \ GPIO_112 - ND_RDY[0] Use 2 af, for eMMC
- no-update, \ GPIO_113 - Not used
- 1 af, \ GPIO_114 - M/N_CLK_OUT (G_CLK_OUT)
- 0 af, \ GPIO_115 - GPIO_115 (i/o)
- 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)
- 0 af, \ GPIO_123 - MBFLT_N (use as GPIO in)
- 1 af, \ GPIO_124 - MMC1_DAT[7]
- 1 af, \ GPIO_125 - MMC1_DAT[6]
- 0 pull-up, \ GPIO_126 - Board Rev ID bit 0
- 0 pull-up, \ GPIO_127 - Board Rev ID bit 1
-\
- 0 pull-up, \ GPIO_128 - Board Rev ID bit 2
- 1 af, \ GPIO_129 - MMC1_DAT[5]
- 1 af, \ GPIO_130 - MMC1_DAT[4]
- 1 af, \ GPIO_131 - MMC1_DAT[3]
- 1 af, \ GPIO_132 - MMC1_DAT[2]
- 1 af, \ GPIO_133 - MMC1_DAT[1]
- 1 af, \ GPIO_134 - MMC1_DAT[0]
- no-update, \ GPIO_135 - Not used
- 1 af, \ GPIO_136 - MMC1_CMD
- no-update, \ GPIO_137 - Not used
- no-update, \ GPIO_138 - Not used
- 1 af, \ GPIO_139 - MMC1_CLK
- 1 af, \ GPIO_140 - MMC1_CD
- 1 af, \ GPIO_141 - MMC1_WP
- 0 af, \ GPIO_142 - USIM_RSTn
- 0 af, \ GPIO_143 - ND_CS[0]
- 0 af, \ GPIO_144 - ND_CS[1]
- no-update, \ GPIO_145 - Not used
- no-update, \ GPIO_146 - Not used
- 0 af, \ GPIO_147 - ND_WE_N
- 0 af, \ GPIO_148 - ND_RE_N
- 0 af, \ GPIO_149 - ND_CLE
- 0 af, \ GPIO_150 - ND_ALE
- 2 af, \ GPIO_151 - MMC3_CLK
- no-update, \ GPIO_152 - Not used
- no-update, \ GPIO_153 - Not used
- 0 af, \ GPIO_154 - SM_INT
- 1 af, \ MMC3_RST_N (use as GPIO)
- no-update, \ GPIO_156 - PRI_TDI (JTAG)
- no-update, \ GPIO_157 - PRI_TDS (JTAG)
- no-update, \ GPIO_158 - PRI_TDK (JTAG)
- no-update, \ GPIO_159 - PRI_TDO (JTAG)
-\
- 0 af, \ GPIO_160 - ND_RDY[1]
- 0 af, \ GPIO_161 - ND_IO[12]
- 0 af, \ GPIO_162 - ND_IO[11] Use 2 af, for eMMC
- 0 af, \ GPIO_163 - ND_IO[10] Use 2 af, for eMMC
- 0 af, \ GPIO_164 - ND_IO[9] Use 2 af, for eMMC
- 0 af, \ GPIO_165 - ND_IO[3] Use 2 af, for eMMC
- 0 af, \ GPIO_166 - ND_IO[2] Use 2 af, for eMMC
- 0 af, \ GPIO_167 - ND_IO[1] Use 2 af, for eMMC
- 0 af, \ GPIO_168 - ND_IO[0] Use 2 af, for eMMC
-
-: init-mfprs
- d# 169 0 do
- mfpr-table i wa+ w@ ( code )
- dup 8 = if ( code )
- drop ( )
- else ( code )
- i gpio>mfpr l! ( )
- then
- loop
-;
-
-: af! ( function# gpio# -- ) gpio>mfpr l! ;
-: gpios-for-nand ( -- )
- h# c0 d# 111 af!
- h# c0 d# 112 af!
- d# 169 d# 162 do h# c0 i af! loop
-;
-: gpios-for-emmc ( -- )
- h# c2 d# 111 af!
- h# c2 d# 112 af!
- d# 169 d# 162 do h# c2 i af! loop
-;
Modified: cpu/arm/mmp2/timer.fth
==============================================================================
--- cpu/arm/mmp2/timer.fth Mon Oct 18 05:25:53 2010 (r1986)
+++ cpu/arm/mmp2/timer.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -21,7 +21,7 @@
7 h# 84 timer!
;
-
+[ifdef] arm-assembler
code timer0@ ( -- n ) \ 6.5 MHz
psh tos,sp
set r1,0xD4014000
@@ -48,6 +48,11 @@
mov r0,r0
ldr tos,[r1,#0x30]
c;
+[else]
+: timer0@ ( -- n ) 1 h# d40140a4 l! h# d4014028 l@ ;
+: timer1@ ( -- n ) 1 h# d40140a8 l! h# d401402c l@ ;
+: timer2@ ( -- n ) 1 h# d40140ac l! h# d4014030 l@ ;
+[then]
: timer0-status@ ( -- n ) h# d4014034 l@ ;
: timer1-status@ ( -- n ) h# d4014038 l@ ;
Modified: cpu/arm/mmp2/twsi.fth
==============================================================================
--- cpu/arm/mmp2/twsi.fth Mon Oct 18 05:25:53 2010 (r1986)
+++ cpu/arm/mmp2/twsi.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -23,20 +23,14 @@
create clock-offsets
h# 04 c, h# 08 c, h# 0c c, h# 10 c, h# 7c c, h# 80 c,
-create slave-addresses \ per channel
-h# 78 c, \ 1 MAX8925 PMIC MAIN 78, PMIC ADC 8e, PMIC RTC d0, MAX8649 c0
-h# 34 c, \ 2 WM8994 Audio Codec 34, WM2000 Noise Canceler 74
-h# 3e c, \ 3 m6M0 Camera ISP 3e, OV8810 Camera 6c
-h# 3c c, \ 4 HMC5843 compass 3c, CM3623 ALS/PS 20+22+b0, BMA150 accelerometer 70
-h# 16 c, \ 5 TC358762 MIPI bridge 16, TM-1210 or TM1414 touchscreen 40
-h# a0 c, \ 6 HDMI DDC EDID a0
-
-: set-slave ( n -- ) to slave-address ;
-: set-address ( n -- ) \ Channel numbers range from 1 to 6
+: set-twsi-channel ( channel -- )
1-
- channel-bases over na+ @ to chip ( n )
- dup clock-offsets + c@ clock-unit-pa + to clock-reg ( n )
- slave-addresses + c@ set-slave
+ channel-bases over na+ @ to chip ( channel )
+ clock-offsets + c@ clock-unit-pa + to clock-reg ( )
+;
+: set-twsi-target ( slave channel -- ) \ Channel numbers range from 1 to 6
+ set-twsi-channel
+ to slave-address
;
\ Bit defines
@@ -56,7 +50,7 @@
bbu_ICR_IUE bbu_ICR_SCLE or constant iue+scle
: init-twsi-channel ( channel# -- )
- set-address
+ set-twsi-channel
7 clock-reg l! 3 clock-reg l! \ Set then clear reset bit
1 us
iue+scle bbu_ICR_UR or cr! \ Reset the unit
@@ -64,6 +58,9 @@
0 sar! \ Set host slave address
0 cr! \ Disable interrupts
;
+: init-twsi ( -- )
+ 7 1 do i init-twsi-channel loop
+;
: twsi-run ( extra-flags -- )
iue+scle or bbu_ICR_TB or cr! ( )
@@ -140,186 +137,3 @@
: twsi-b@ ( reg -- byte ) 1 1 twsi-get ;
: twsi-b! ( byte reg -- ) 2 twsi-write ;
-
-: select-touch-panel ( -- )
- 5 set-address
- h# 40 set-slave
-;
-: touch-panel-type ( -- n )
- select-touch-panel
- h# bd twsi-b@
-;
-: get-tm1414-data ( -- x y finger-mask )
- select-touch-panel ( )
- h# 1a twsi-b@ ( low-y,low-x )
- dup h# f and h# 18 twsi-b@ 4 lshift or ( low-y,low-x x )
- swap 4 rshift h# f and h# 19 twsi-b@ 4 lshift or ( x y )
- h# 15 twsi-b@ ( x y mask )
-;
-: touchpad@ ( -- x y finger-mask ) get-tm1414-data ;
-
-: get-tm1210-data ( -- x y reg7-flick-magnitude reg6-gesture reg0-finger-count )
- 3 twsi-b@ 2 twsi-b@ bwjoin ( x )
- 5 twsi-b@ 4 twsi-b@ bwjoin ( x y )
-
- 7 twsi-b@
- 6 twsi-b@
- 0 twsi-b@
-;
-
-: select-compass ( -- )
- 4 set-address
- h# 3c set-slave
-;
-
-: compass@ ( -- x y z temp id )
- select-compass
- 0 0 twsi-b! \ Config register A
- h# 50 1 twsi-b! \ Config register B
- 0 2 twsi-b! \ Mode register
- 4 twsi-b@ 3 twsi-b@ bwjoin ( x )
- 6 twsi-b@ 5 twsi-b@ bwjoin ( x y )
- 8 twsi-b@ 7 twsi-b@ bwjoin ( x y z )
- h# b twsi-b@ ( x y z temp )
- h# a twsi-b@ 9 twsi-b@ bwjoin ( x y z temp id )
-;
-
-: select-pmic ( -- ) 1 set-address h# 78 set-slave ;
-
-: accel-power-on ( -- ) \ LDO8 - vout is 36, ctl is 34
- select-pmic
- d# 3000 d# 750 - d# 50 / h# 36 twsi-b! \ want 3.0V
- h# 1f h# 34 twsi-b!
-;
-: accel-power-off ( -- ) \ LDO8 - vout is 36, ctl is 34
- select-pmic
- h# 1e h# 34 twsi-b!
-;
-: accel@ ( -- x y z temp id )
- 4 set-address
- h# 70 set-slave
-
- 2 twsi-b@ 6 rshift ( x-low )
- 3 twsi-b@ 2 lshift or ( x )
-
- 4 twsi-b@ 6 rshift ( x y-low )
- 5 twsi-b@ 2 lshift or ( x y )
-
- 6 twsi-b@ 6 rshift ( x y z-low )
- 7 twsi-b@ 2 lshift or ( x y z )
-
- 8 twsi-b@ 0 twsi-b@ ( x y z temp id )
-;
-
-: init-pals ( -- )
- 4 set-address
-
- h# b0 set-slave \ Set PS parameters address
- 0 1 twsi-write \ clear interrupt settings
-
- h# 22 set-slave \ Device init address
- h# 10 1 twsi-write \ Init device
-
- h# 20 set-slave \ Ambient Light Sensor address
- 2 1 twsi-write \ Enable ALS in most sensitive mode, 16-bit data
-;
-: als@ ( -- n )
- 4 set-address
- h# 22 set-slave \ Ambient Light Sensor LSB address
- 0 1 twsi-get ( low )
- h# 20 set-slave \ Ambient Light Sensor MSB address
- 0 1 twsi-get bwjoin ( n )
-;
-
-: proximity@ ( -- byte )
- 4 set-address
- h# b0 set-slave \ Proximity Sensor address
- 0 1 twsi-get ( byte )
-;
-
-: lcd-backlight! ( b.intensity -- )
- select-pmic ( b.intensity )
- dup if ( b.intensity )
- h# 85 twsi-b! ( )
- h# 84 twsi-b@ 1 or h# 84 twsi-b! \ Turn on first LED string
- else ( 0 )
- drop ( )
- h# 84 twsi-b@ 1 invert and h# 84 twsi-b! \ Turn off first LED string
- then
-;
-
-: keypad-backlight! ( b.intensity -- )
- select-pmic ( b.intensity )
- dup if ( b.intensity )
- h# 85 twsi-b! ( )
- h# 84 twsi-b@ 3 or h# 84 twsi-b! \ Turn on both LED strings
- else ( )
- h# 84 twsi-b@ 3 invert and h# 84 twsi-b! \ Turn off both LED strings
- then
-;
-
-: init-twsi ( -- )
- 7 1 do i init-twsi-channel loop
-;
-: power-on-dsi ( -- )
- select-pmic
-
- h# 16 h# 22 twsi-b! \ 1.2 volts for LDO3
- h# 1f h# 20 twsi-b! \ LDO3 enable
-
- h# 16 h# 16 twsi-b! \ 1.2 volts for LDO17
- h# 1f h# 14 twsi-b! \ LDO17 enable
-
- h# 1f h# 34 twsi-b! \ LDO8 enable
-
- d# 10 ms
-;
-
-: bcd> ( bcd -- binary )
- dup h# f and swap 4 rshift d# 10 * +
-;
-: twsi-bcd@ ( reg# -- binary ) twsi-b@ bcd> ;
-: get-rtc ( -- )
- 1 set-address
- h# d0 set-slave
-
-\ 3 twsi-b@ ( dow )
-\
-
- 0 twsi-bcd@ ( sec )
- 1 twsi-bcd@ ( sec min )
- 2 twsi-bcd@ ( sec min hr )
- 4 twsi-bcd@ ( sec min hr day )
- 5 twsi-bcd@ ( sec min hr day mon )
- 6 twsi-bcd@ d# 2000 + ( sec min hr day yr )
-;
-
-: core-voltage! ( mv -- )
- 1 set-address h# c0 set-slave \ MAX8649 power management IC
-
- d# 750 umax d# 1350 umin \ Clipped voltage
- d# 750 - d# 10 / ( offset-in-mv/10 )
- h# 80 or ( code )
- 2 twsi-b!
-;
-: core-voltage@ ( -- mv )
- 1 set-address h# c0 set-slave \ MAX8649 power management IC
- 2 twsi-b@ ( code )
- h# 7f and ( offset-mv/10 )
- d# 10 * ( offset-mv )
- d# 750 +
-;
-: .core-voltage ( -- ) core-voltage@ .d ;
-
-: 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!
-;
Added: cpu/arm/mmp2/uart.fth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ cpu/arm/mmp2/uart.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -0,0 +1,19 @@
+ " uart" name
+ my-space h# 20 reg
+
+ : write ( adr len -- actual )
+ 0 max tuck ( actual adr actual )
+ bounds ?do i c@ uemit loop ( actual )
+ ;
+ : read ( adr len -- actual )
+ 0= if drop 0 exit then
+ ukey? if ( adr )
+ ukey swap c! 1 ( actual )
+ else ( adr )
+ drop -2 ( -2 )
+ then
+ ;
+ : open ( -- okay? ) true ;
+ : close ( -- ) ;
+ : install-abort ;
+ : remove-abort ;
Added: cpu/arm/olpc/1.75/boardgpio.fth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ cpu/arm/olpc/1.75/boardgpio.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -0,0 +1,236 @@
+purpose: Board-specific setup details - pin assigments, etc.
+
+: set-camera-domain-voltage
+ aib-unlock
+ h# d401e80c l@ 4 or ( n ) \ Set 1.8V selector bit in AIB_GPIO2_IO
+ aib-unlock
+ h# d401e80c l!
+;
+
+: set-gpio-directions ( -- )
+ 3 h# 38 clock-unit-pa + l! \ Enable clocks in GPIO clock reset register
+
+ d# 01 gpio-dir-out \ EN_USB_PWR
+ d# 04 gpio-dir-out \ COMPASS_SCL
+ d# 08 gpio-dir-out \ AUDIO_RESET#
+ d# 10 gpio-dir-out \ LED_STORAGE
+ d# 11 gpio-dir-out \ VID2
+ d# 33 gpio-dir-out \ EN_MSD_PWR
+ d# 34 gpio-dir-out \ EN_WLAN_PWR
+ d# 35 gpio-dir-out \ EN_SD_PWR
+ d# 57 gpio-dir-out \ WLAN_PD#
+ d# 58 gpio-dir-out \ WLAN_RESET#
+ d# 73 gpio-dir-out \ CAM_RST
+
+ d# 125 gpio-dir-out \ EC_SPI_ACK
+ d# 145 gpio-dir-out \ EN_CAM_PWR
+ d# 146 gpio-dir-out \ HUB_RESET#
+ d# 151 gpio-dir-out \ DCONLOAD
+ d# 151 gpio-dir-out \ EC_SPI_CMD
+
+ d# 162 gpio-dir-out \ DCON_SCL
+ d# 163 gpio-dir-out \ DCON_SDA
+;
+
+create mfpr-table
+ no-update, \ GPIO_00 - Not connected (TP57)
+ 0 af, \ GPIO_01 - EN_USB_PWR
+ no-update, \ GPIO_02 - Not connected (TP54)
+ no-update, \ GPIO_03 - Not connected (TP53)
+ 0 af, \ GPIO_04 - COMPASS_SCL (bitbang)
+ 0 af, \ GPIO_05 - COMPASS_SDA (bitbang)
+ 0 af, \ GPIO_06 - G_SENSOR_INT
+ 0 af, \ GPIO_07 - AUDIO_IRQ#
+ 0 af, \ GPIO_08 - AUDIO_RESET#
+ 0 af, \ GPIO_09 - COMPASS_INT
+ 0 af, \ GPIO_10 - LED_STORAGE
+ 0 af, \ GPIO_11 - VID2
+ no-update, \ GPIO_12 - Not connected (TP52)
+ no-update, \ GPIO_13 - Not connected (TP116)
+ no-update, \ GPIO_14 - Not connected (TP64)
+ no-update, \ GPIO_15 - Not connected (TP55)
+ 0 af, \ GPIO_16 - KEY_IN_1
+ 0 af, \ GPIO_17 - KEY_IN_2
+ 0 af, \ GPIO_18 - KEY_IN_3
+ 0 af, \ GPIO_19 - KEY_IN_4
+ 0 af, \ GPIO_20 - KEY_IN_5
+ no-update, \ GPIO_21 - Not connected (TP63)
+ no-update, \ GPIO_22 - Not connected (TP118)
+ no-update, \ GPIO_23 - Not connected (TP61)
+ 1 af, \ GPIO_24 - I2S_SYSCLK (Codec)
+ 1 af, \ GPIO_25 - I2S_BITCLK (Codec)
+ 1 af, \ GPIO_26 - I2S_SYNC (Codec)
+ 1 af, \ GPIO_27 - I2S_DATA_OUT (Codec)
+ 1 af, \ GPIO_28 - I2S_DATA_IN (Codec)
+ 1 af, \ GPIO_29 - UART1_RXD (debug board)
+ 1 af, \ GPIO_30 - UART1_TXD (debug board)
+ 0 af, \ GPIO_31 - SD_CD# (via GPIO)
+ no-update, \ GPIO_32 - Not connected (TP58)
+ 0 af, \ GPIO_33 - EN_MSD_PWR
+ 0 af, \ GPIO_34 - EN_WLAN_PWR
+ 0 af, \ GPIO_35 - EN_SD_PWR
+ no-update, \ GPIO_36 - Not connected (TP115)
+ 1 af, \ GPIO_37 - SDDA_D3
+ 1 af, \ GPIO_38 - SDDA_D2
+ 1 af, \ GPIO_39 - SDDA_D1
+ 1 af, \ GPIO_40 - SDDA_D0
+ 1 af, \ GPIO_41 - SDDA_CMD
+ 1 af, \ GPIO_42 - SDDA_CLK
+ 3 af, \ GPIO_43 - SPI_MISO (SSP1) (OFW Boot FLASH)
+ 3 af, \ GPIO_44 - SPI_MOSI
+ 3 af, \ GPIO_45 - SPI_CLK
+ 3 af, \ GPIO_46 - SPI_FRM
+ 3 af, \ GPIO_47 - G_SENSOR_SDL (TWSI6)
+ 3 af, \ GPIO_48 - G_SENSOR_SDA
+ no-update, \ GPIO_49 - Not connected (TP62)
+ no-update, \ GPIO_50 - Not connected (TP114)
+ no-update, \ GPIO_51 - Not connected (TP59)
+ no-update, \ GPIO_52 - Not connected (TP113)
+ 2 af, \ GPIO_53 - RTC_SCK (TWSI2) if R124 populated
+ 2 af, \ GPIO_54 - RTC_SDA (TWSI2) if R125 populated
+\ no-update, \ GPIO_53 - Not connected if nopop R124 to use TWSI6 for RTC
+\ no-update, \ GPIO_54 - Not connected if nopop R125 to use TWSI6 for RTC
+ no-update, \ GPIO_55 - Not connected (TP51)
+ no-update, \ GPIO_56 - Not connected (TP60)
+ 0 af, \ GPIO_57 - WLAN_PD#
+ 0 af, \ GPIO_58 - WLAN_RESET#
+
+ 1 af, \ GPIO_59 - PIXDATA7
+ 1 af, \ GPIO_60 - PIXDATA6
+ 1 af, \ GPIO_61 - PIXDATA5
+ 1 af, \ GPIO_62 - PIXDATA4
+ 1 af, \ GPIO_63 - PIXDATA3
+ 1 af, \ GPIO_64 - PIXDATA2
+ 1 af, \ GPIO_65 - PIXDATA1
+ 1 af, \ GPIO_66 - PIXDATA0
+ 1 af, \ GPIO_67 - CAM_HSYNC
+ 1 af, \ GPIO_68 - CAM_VSYNC
+ 1 af, \ GPIO_69 - PIXMCLK
+ 1 af, \ GPIO_70 - PIXCLK
+
+ 1 af, \ GPIO_71 - EC_SCL (TWSI3)
+ 1 af, \ GPIO_72 - EC_SDA
+ 0 af, \ GPIO_73 - CAM_RST (use as GPIO out)
+
+ 1 af, \ GPIO_74 - GFVSYNC
+ 1 af, \ GPIO_75 - GFHSYNC
+ 1 af, \ GPIO_76 - GFDOTCLK
+ 1 af, \ GPIO_77 - GF_LDE
+ 1 af, \ GPIO_78 - GFRDATA0
+ 1 af, \ GPIO_79 - GFRDATA1
+ 1 af, \ GPIO_80 - GFRDATA2
+ 1 af, \ GPIO_81 - GFRDATA3
+ 1 af, \ GPIO_82 - GFRDATA4
+ 1 af, \ GPIO_83 - GFRDATA5
+ 1 af, \ GPIO_84 - GFGDATA0
+ 1 af, \ GPIO_85 - GFGDATA1
+ 1 af, \ GPIO_86 - GFGDATA2
+ 1 af, \ GPIO_87 - GFGDATA3
+ 1 af, \ GPIO_88 - GFGDATA4
+ 1 af, \ GPIO_89 - GFGDATA5
+ 1 af, \ GPIO_90 - GFBDATA0
+ 1 af, \ GPIO_91 - GFBDATA1
+ 1 af, \ GPIO_92 - GFBDATA2
+ 1 af, \ GPIO_93 - GFBDATA3
+ 1 af, \ GPIO_94 - GFBDATA4
+ 1 af, \ GPIO_95 - GFBDATA5
+
+ no-update, \ GPIO_96 - Not connected (TP112)
+
+ no-update, \ GPIO_97 - Not connected (R100 nopop) if we use TWSI2 for RTC
+ no-update, \ GPIO_98 - Not connected (R106 nopop) if we use TWSI2 for RTC
+\ 2 af, \ GPIO_97 - RTC_SCK (TWSI6) if R100 populated
+\ 2 af, \ GPIO_98 - RTC_SDA (TWSI6) if R106 populated
+
+ 0 af, \ GPIO_99 - TOUCH_SCR_INT
+ 0 af, \ GPIO_100 - DCONSTAT0
+ 0 af, \ GPIO_101 - DCONSTAT1
+
+ no-update, \ GPIO_102 - (USIM_CLK) - Not connected (TP48)
+ no-update, \ GPIO_103 - (USIM_IO) - Not connected (TP50)
+
+ 0 af, \ GPIO_104 - ND_IO[7]
+ 0 af, \ GPIO_105 - ND_IO[6]
+ 0 af, \ GPIO_106 - ND_IO[5]
+ 0 af, \ GPIO_107 - ND_IO[4]
+
+ 1 af, \ GPIO_108 - CAM_SDL - Use as GPIO, bitbang
+ 1 af, \ GPIO_109 - CAM_SDA - Use as GPIO, bitbang
+
+ 1 af, \ GPIO_110 - (ND_IO[13]) - Not connected (TP43)
+ 1 af, \ GPIO_111 - (ND_IO[8]) - Not connected (TP108)
+ 0 af, \ GPIO_112 - ND_RDY[0]
+ 3 af, \ GPIO_113 - (SM_RDY) - MSD_CMD
+ 1 af, \ GPIO_114 - G_CLK_OUT - Not connected (TP93)
+
+ 4 af, \ GPIO_115 - UART3_TXD (J4)
+ 4 af, \ GPIO_116 - UART3_RXD (J4)
+ 3 af, \ GPIO_117 - UART4_RXD - Not connected (TP117)
+ 3 af, \ GPIO_118 - UART4_TXD - Not connected (TP56)
+ 3 af, \ GPIO_119 - SDI_CLK (SSP3)
+ 3 af, \ GPIO_120 - SDI_CS#
+ 3 af, \ GPIO_121 - SDI_MOSI
+ 3 af, \ GPIO_122 - SDI_MISO
+
+ 3 af, \ GPIO_123 - 32 KHz_CLK_OUT - Not connected (TP92)
+
+ 0 af, \ GPIO_124 - DCONIRQ
+ 0 af, \ GPIO_125 - EC_SPI_ACK
+
+ 3 af, \ GPIO_126 - MSD_DATA2
+ 3 af, \ GPIO_127 - MSD_DATA0
+ 0 af, \ GPIO_128 - EB_MODE#
+ 0 af, \ GPIO_129 - LID_SW#
+ 3 af, \ GPIO_130 - MSD_DATA3
+ 1 af, \ GPIO_131 - SD_DATA3
+ 1 af, \ GPIO_132 - SD_DATA2
+ 1 af, \ GPIO_133 - SD_DATA1
+ 1 af, \ GPIO_134 - SD_DATA0
+ 3 af, \ GPIO_135 - MSD_DATA1
+ 1 af, \ GPIO_136 - SD_CMD
+ no-update, \ GPIO_137 - Not connected (TP111)
+ 3 af, \ GPIO_138 - MSD_CLK
+ 1 af, \ GPIO_139 - SD_CLK
+ no-update, \ GPIO_140 - Not connected if R130 is nopop
+\ 1 af, \ GPIO_140 - (SD_CD# if R130 is populated)
+ 1 af, \ GPIO_141 - SD_WP
+
+ no-update, \ GPIO_142 - (USIM_RSTn) - Not connected (TP49)
+ 0 af, \ GPIO_143 - ND_CS0#
+ 0 af, \ GPIO_144 - ND_CS1#
+ 1 af, \ GPIO_145 - EN_CAM_PWR
+ 1 af, \ GPIO_146 - HUB_RESET#
+
+ 0 af, \ GPIO_147 - ND_WE_N
+ 0 af, \ GPIO_148 - ND_RE_N
+ 0 af, \ GPIO_149 - ND_CLE
+ 0 af, \ GPIO_150 - ND_ALE
+ 1 af, \ GPIO_151 - DCONLOAD
+ 1 af, \ GPIO_152 - (SM_BELn) - Not connected (TP40)
+ 1 af, \ GPIO_153 - (SM_BEHn) - Not connected (TP105)
+ 0 af, \ GPIO_154 - (SM_INT) - EC_IRQ#
+ 1 af, \ GPIO_155 - (EXT_DMA_REQ0) - EC_SPI_CMD
+ no-update, \ GPIO_156 - PRI_TDI (JTAG)
+ no-update, \ GPIO_157 - PRI_TDS (JTAG)
+ no-update, \ GPIO_158 - PRI_TDK (JTAG)
+ no-update, \ GPIO_159 - PRI_TDO (JTAG)
+ 0 af, \ GPIO_160 - ND_RDY[1]
+ 1 af, \ GPIO_161 - ND_IO[12] - Not connected (TP 44)
+ 1 af, \ GPIO_162 - (ND_IO[11]) - DCON_SCL
+ 1 af, \ GPIO_163 - (ND_IO[10]) - DCON_SDA
+ 1 af, \ GPIO_164 - (ND_IO[9]) - Not connected (TP106)
+ 0 af, \ GPIO_165 - ND_IO[3]
+ 0 af, \ GPIO_166 - ND_IO[2]
+ 0 af, \ GPIO_167 - ND_IO[1]
+ 0 af, \ GPIO_168 - ND_IO[0]
+
+: init-mfprs
+ d# 169 0 do
+ mfpr-table i wa+ w@ ( code )
+ dup 8 = if ( code )
+ drop ( )
+ else ( code )
+ i af! ( )
+ then
+ loop
+;
Added: cpu/arm/olpc/1.75/build/Makefile
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ cpu/arm/olpc/1.75/build/Makefile Mon Oct 18 06:02:38 2010 (r1987)
@@ -0,0 +1,64 @@
+ROMNAME=ofw
+
+BASEDIR= `(cd ../../../../..; pwd;)`
+
+OS := $(shell uname)
+HOSTCPU= $(shell ${BASEDIR}/forth/lib/hostcpu.sh)
+HOSTDIR= ../../../../${HOSTCPU}/${OS}
+BUILDSH= ${BASEDIR}/forth/lib/build.sh
+
+TAGFILES= ../../../build/*.tag *.tag
+CLIENTDIR=../../../../../clients
+CLIENTPROGS=
+
+all: ${ROMNAME}.rom tags
+
+${ROMNAME}.tag: ${ROMNAME}.rom
+
+tags: ${ROMNAME}.tag
+ @${BASEDIR}/forth/lib/toctags ${BASEDIR} ${TAGFILES}
+
+${ROMNAME}.rom: FORCE build ${CLIENTPROGS} ${HOSTDIR}/forth
+ ./build $@
+
+${HOSTDIR}/forth:
+ @make -C ${HOSTDIR} forth
+
+../../build/inflate.bin:
+ @make -C ../../build inflate.bin
+
+build:
+ @ln -sf ${BUILDSH} build
+
+clean:
+ rm -f *.dic *.log headers *~ *.elf *.di *.img builton.fth build *.rom *.version tags *.tag
+
+clean-all: clean
+ @make -C ../../build clean
+ @make -C ${HOSTDIR} clean
+
+.PHONY: FORCE clean all clean-all
+
+# LICENSE_BEGIN
+# Copyright (c) 2009 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
Added: cpu/arm/olpc/1.75/devices.fth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ cpu/arm/olpc/1.75/devices.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -0,0 +1,175 @@
+fload ${BP}/dev/omap/diaguart.fth \ OMAP UART
+h# d4030000 to uart-base \ UART# base address on MMP2
+d# 26000000 to uart-clock-frequency
+
+: 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# d401502c l! \ APBC_UART1_CLK_RST - VCTCXO, functional and APB clock on (26 mhz)
+ h# 13 h# d4015034 l! \ APBC_UART3_CLK_RST - VCTCXO, functional and APB clock on (26 mhz)
+ h# c1 h# d401e0c8 l! \ GPIO29 = af1 for UART1 RXD
+ h# c1 h# d401e0cc l! \ GPIO30 = af1 for UART1 TXD
+ h# c4 h# d401e260 l! \ GPIO115 = af4 for UART3 RXD
+ h# c4 h# d401e264 l! \ GPIO116 = af4 for UART3 TXD
+ h# 1b h# d4282854 l! \ SD0 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
+
+0 value keyboard-ih
+0 value screen-ih
+
+fload ${BP}/ofw/core/muxdev.fth \ I/O collection/distribution device
+
+\ Install the simple UART driver from the standalone I/O init chain
+warning off
+: 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/timer.fth
+fload ${BP}/cpu/arm/mmp2/twsi.fth
+fload ${BP}/cpu/arm/mmp2/mfpr.fth
+fload ${BP}/cpu/arm/mmp2/gpio.fth
+
+fload ${BP}/cpu/arm/olpc/1.75/boardtwsi.fth
+fload ${BP}/cpu/arm/olpc/1.75/boardgpio.fth
+: init-stuff
+ set-camera-domain-voltage
+ acgr-clocks-on
+ init-mfprs
+ set-gpio-directions
+ init-timers
+ init-twsi
+ power-on-dsi
+ power-on-sd
+;
+stand-init:
+ init-stuff
+;
+
+fload ${BP}/cpu/arm/mmp2/irq.fth
+
+fload ${BP}/cpu/arm/mmp2/watchdog.fth \ reset-all using watchdog timer
+
+0 0 " d4030000" " /" begin-package \ UART1
+ fload ${BP}/cpu/arm/mmp2/uart.fth
+end-package
+devalias com1 /uart
+: com1 " com1" ;
+' com1 is fallback-device
+
+0 0 " d4018000" " /" begin-package \ UART3
+ fload ${BP}/cpu/arm/mmp2/uart.fth
+end-package
+devalias com2 /uart
+: com2 " com2" ;
+
+0 0 " d420b000" " /" begin-package
+ " display" name
+ fload ${BP}/cpu/arm/olpc/1.75/lcdcfg.fth
+\ fload ${BP}/cpu/arm/mmp2/dsi.fth
+
+ fload ${BP}/cpu/arm/mmp2/lcd.fth
+ : display-on
+ init-lcd
+ fb-pa hdisp vdisp * >bytes h# ff fill
+ ;
+ : map-frame-buffer ( -- )
+ fb-pa to frame-buffer-adr
+ ;
+ " display" device-type
+ " ISO8859-1" encode-string " character-set" property
+ 0 0 encode-bytes " iso6429-1983-colors" property
+
+ : display-install ( -- )
+ display-on
+ default-font set-font
+ map-frame-buffer
+ width height ( width height )
+ over char-width / over char-height / ( width height rows cols )
+ /scanline depth fb-install ( )
+ ;
+
+ : display-remove ( -- ) ;
+ : display-selftest ( -- failed? ) false ;
+
+ ' display-install is-install
+ ' display-remove is-remove
+ ' display-selftest is-selftest
+end-package
+devalias screen /display
+
+devalias keyboard /keyboard
+
+fload ${BP}/ofw/termemu/cp881-16.fth
+
+fload ${BP}/cpu/arm/mmp2/sdhcimmp2.fth
+
+devalias ext /sd/disk at 1
+
+fload ${BP}/dev/olpc/kb3700/spicmd.fth
+
+0 0 " d4208000" " /" begin-package \ USB Host Controller
+ h# 200 constant /regs
+ my-address my-space /regs reg
+ : my-map-in ( len -- adr )
+ my-space swap " map-in" $call-parent h# 100 + ( adr )
+ 3 over h# a8 + rl! ( adr ) \ Force host mode
+ ;
+ : my-map-out ( adr len -- ) swap h# 100 - swap " map-out" $call-parent ;
+ false constant has-dbgp-regs?
+ false constant needs-dummy-qh?
+ false constant grab-controller
+ fload ${BP}/dev/usb2/hcd/ehci/loadpkg.fth
+end-package
+
+: usb-power-on ( -- ) d# 82 gpio-set ; \ 1 instead of 82 for XO
+
+fload ${BP}/cpu/arm/marvell/utmiphy.fth
+stand-init: Init USB Phy
+ init-usb-phy
+;
+
+\ 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
Added: cpu/arm/olpc/1.75/dram-forth.fth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ cpu/arm/olpc/1.75/dram-forth.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -0,0 +1,57 @@
+\ Generate an XDB (Marvell Extreme Debugger) script from DRAM setup info
+
+0 value this-reg-xt
+0 value this-reg-adr
+0 value this-reg-value
+: note-mem-reg ( apf -- )
+ dup body> to this-reg-xt
+ @ +mem-ctrl to this-reg-adr
+ 0 to this-reg-value
+;
+' note-mem-reg to do-mem-reg
+
+: (do-bits) ( value start #bits -- )
+ drop lshift this-reg-value or to this-reg-value
+;
+' (do-bits) to do-bits
+
+: .xl ( n -- )
+ push-hex
+ <# u# u# u# u# u# u# u# u# u#> 2dup type
+ pop-base
+;
+: xdb-outbits ( -- )
+ 3 spaces
+ this-reg-value .xl
+ space
+ this-reg-adr .xl
+ ." l! \ "
+ this-reg-xt >name name>string type
+ cr
+;
+' xdb-outbits to outbits
+
+: show-auto-cal ( -- )
+;
+
+: wait-dram-init ( -- )
+ cr
+ ." begin h# d00001b0 l@ 1 and until" cr
+ cr
+;
+
+: wait-tzqinit ( -- ) ;
+
+: do-dummy-reads ( -- )
+ ." d# 131 0 do 0 l@ drop loop \ dummy reads" cr
+;
+
+: show-dll-delay ( -- )
+ ." ."" DLL_DELAY from PHY_CTRL_14: "" d0000240 l@ 8 rshift h# ff and .x cr" cr
+;
+: start-dram-init ( -- )
+ ." : init-dram" cr
+;
+: end-dram-init ( -- )
+ ." ;" cr
+;
Added: cpu/arm/olpc/1.75/draminit.bth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ cpu/arm/olpc/1.75/draminit.bth Mon Oct 18 06:02:38 2010 (r1987)
@@ -0,0 +1,9 @@
+purpose: Build Open Firmware for Marvell MMP2
+\ See license at end of file
+
+command: &builder &this
+build-now
+
+fload ../dram.fth
+fload ../dram-forth.fth
+fload ../xo-dram.fth
Added: cpu/arm/olpc/1.75/lcdcfg.fth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ cpu/arm/olpc/1.75/lcdcfg.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -0,0 +1,24 @@
+d# 4 value hsync
+d# 1200 value hdisp
+d# 1456 value htotal .( HTOTAL ???) cr
+d# 212 value hbp
+
+d# 4 value vsync
+d# 800 value vdisp
+d# 845 value vtotal .( VTOTAL ???) cr
+d# 31 value vbp
+
+: hfp ( -- n ) htotal hdisp - hsync - hbp - ;
+: vfp ( -- n ) vtotal vdisp - vsync - vbp - ;
+
+2 constant #lanes
+3 constant bytes/pixel
+d# 24 constant bpp
+
+: >bytes ( pixels -- chunks ) bytes/pixel * ;
+: >chunks ( pixels -- chunks ) >bytes #lanes / ;
+
+alias width hdisp
+alias height vdisp
+alias depth bpp
+width >bytes constant /scanline
Added: cpu/arm/olpc/1.75/sp.bth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ cpu/arm/olpc/1.75/sp.bth Mon Oct 18 06:02:38 2010 (r1987)
@@ -0,0 +1,397 @@
+purpose: Load file for ARM Forth kernel
+\ See license at end of file
+
+command: &builder &this
+build-now
+
+[ifndef] arm-assembler \ Make sure we have the ARM assembler
+only forth also definitions
+
+fload ${BP}/forth/lib/bitops.fth
+\needs set-relocation-bit defer set-relocation-bit \ keep init-assem happy
+
+\ only forth also meta also definitions
+
+fload ${BP}/cpu/arm/assem.fth
+fload ${BP}/cpu/arm/code.fth
+
+[then]
+: assembler ( -- ) arm-assembler ;
+: setreg \ reg value ( -- )
+ safe-parse-word $hnumber abort" Bad number"
+ safe-parse-word $hnumber abort" Bad number"
+ swap
+ " set r1,``" evaluate
+ " set r0,``" evaluate
+ " str r0,[r1]" evaluate
+;
+: getreg \ reg ( -- )
+ safe-parse-word $hnumber abort" Bad number"
+ " set r1,``" evaluate
+ " ldr r0,[r1]" evaluate
+;
+: putreg \ reg ( -- )
+ " str r0,[r1]" evaluate
+;
+: bitset \ reg ( -- )
+ safe-parse-word $hnumber abort" Bad number"
+ " orr r0,r0,``" evaluate
+;
+: bitclr \ reg ( -- )
+ safe-parse-word $hnumber abort" Bad number"
+ " bic r0,r0,``" evaluate
+;
+
+label unreset
+ \ From jasper.c
+ setreg d4051024 ffffffff \ PMUM_CGR_PJ - Clocks on
+
+ setreg D42828dc 1FFFF \ PMUA_GLB_CLK_CTRL - Enable CLK66 to APB, PLL2/12/6/3/16/8/4/2/1, PLL1/12/6/3/16/8/4
+
+ setreg D4015064 07 \ AIB clock
+ setreg D4015064 03 \ AIB clock
+
+ setreg D401502c 13 \ UART1 clk - 26 MHz
+ setreg D4015034 13 \ UART3 clk - 26 MHz
+
+ getreg D401E160 \ G_CLK_REQ
+ bitset 4000 \ Enable pullup
+ putreg
+
+ setreg D4015000 83 \ APBC_RTC_CLK_RST - Enable RTC clock and power
+
+ setreg D4015024 05 \ APBC_TIMERS1_CLK_RST - Reset
+ setreg D4015024 33 \ APBC_TIMERS1_CLK_RST - Enable Timers at 26 MHz
+
+ getreg d4282c08 \ SCU_PJ4_CPU_CONF
+ bitset 40 \ Bit 6 - bypass clock gate
+ bitset 200 \ Bit 9 - allow CPU in WFI to be woken up by Multi-ICE as well as by interrupt
+ bitset 2000 \ Bit 13 - disable MMU translation abort for L2 cache
+ bitset 4000 \ Bit 14 - bypass clock gate in L2 cache
+ bitset 80000 \ Bit 19 - L2 Cache burst 8 enable
+ bitclr 800000 \ Bit 23 - use slow queue for CPU to DDR access
+ putreg
+
+ \ Now change the frequency
+ \ from freq_ll.S
+
+ set r4, 0xd0000000 \ DMEM base address
+ set r5, 0xd4050000 \ PMUM base address
+ set r6, 0xd4282800 \ PMUA base address
+
+ set r7, 0xffffffff \ All clocks ON
+ str r7, [r5, #0x0024] \ PMUM_CGR_SP
+ set r7, 0x00061808 \ Reserved bits, but supposed to "allow freq"
+ str r7, [r6, #0x88] \ PMUA_DEBUG
+
+ \ change to PLL1/2 first, start-up operation point
+ set r7, 0x00000000
+ str r7, [r5, #0x8]
+ set r7, 0x08fd96d9
+ str r7, [r6, #0x00]
+ set r7, 0x78fd96d9
+ str r7, [r6, #0x04]
+
+ \ select PLL2 frequency, 520MHz
+ set r7, 0x08600322 \ Bandgap+charge pump+VCO loading+regulator defaults, 486.3-528.55 PLL2 (bits 10:6)
+ str r7, [r5, #0x0414] \ PMUM_PLL2_CTRL1
+ set r7, 0x00FFFE00 \ refclk divisor and feedback divisors at max, software controls activation
+ str r7, [r5, #0x0034] \ PMUM_PLL2_CTRL2
+ set r7, 0x0021da00 \ refclk divisor=4, feedback divisor=0x76=118, software controls activation
+ str r7, [r5, #0x0034] \ PMUM_PLL2_CTRL1
+ set r7, 0x0021db00 \ same plus enable
+ str r7, [r5, #0x0034] \ PMUM_PLL2_CTRL2
+ set r7, 0x28600322 \ same as above plus release PLL loop filter
+ str r7, [r5, #0x0414] \ PMUM_PLL2_CTRL1
+ \ select clock source, PJ4-PLL1, SP-PLL1/2, AXI/DDR-PLL1
+ set r7, 0x20800000 \ PLL1 > PJ4 (bits 31:29), PLL1/2 > SP (bits 28:26), PLL1 > AXI&DDR (bits 25:23)
+ str r7, [r5, #0x0008] \ PMUM_FCCR
+ \ divider setting and frequency change request, core-800, ddr-400, axi-200
+ set r7, 0x08fd8248 \ speed change voting, ACLK:3, DCLK:0, BACLK1:1, PCLK:0
+ str r7, [r6, #0x00] \ PMUA_CC_SP
+ set r7, 0x78fd8248 \ etc - hard to decipher
+ str r7, [r6, #0x04] \ PMUA_CC_PJ
+
+ \ DDR recalibration after frequency change
+ \ CONFIG_DECODE_ADDR
+ set r7, 0xD0004D56
+ str r7, [r4, #0x010]
+
+ \ This is for Elpida DDR2 512M
+ \ MMAP
+ set r7, 0x000C0001
+ str r7, [r4, #0x100]
+ set r7, 0x100C0001
+ str r7, [r4, #0x110]
+
+ \ CONFIG_TYPE
+ set r7, 0x00006420
+ str r7, [r4, #0x020]
+ set r7, 0x00006420
+ str r7, [r4, #0x030]
+ set r7, 0x00000000
+ str r7, [r4, #0xB40]
+ set r7, 0x00000000
+ str r7, [r4, #0xB50]
+
+ \ TIMING
+ set r7, 0x4CDA00C5
+ str r7, [r4, #0x050]
+ set r7, 0x94860342
+ str r7, [r4, #0x060]
+ set r7, 0x2000381B
+ str r7, [r4, #0x190]
+ set r7, 0x3023009D
+ str r7, [r4, #0x1C0]
+ set r7, 0x00110142
+ str r7, [r4, #0x650]
+ set r7, 0x02424190
+ str r7, [r4, #0x660]
+ \ End of Elpida-specific stuff
+
+ \ CTRL
+ set r7, 0x00005000
+ str r7, [r4, #0x080]
+ set r7, 0x00080010
+ str r7, [r4, #0x090]
+ set r7, 0xC0000000
+ str r7, [r4, #0x0F0]
+ set r7, 0x20C08115
+ str r7, [r4, #0x1A0]
+ set r7, 0x01010101
+ str r7, [r4, #0x280]
+ set r7, 0x00000000
+ str r7, [r4, #0x760]
+ set r7, 0x03000000
+ str r7, [r4, #0x770]
+ set r7, 0x00000133
+ str r7, [r4, #0x780]
+ set r7, 0x01010101
+ str r7, [r4, #0x7B0]
+ set r7, 0x0000000F
+ str r7, [r4, #0x7D0]
+ set r7, 0x00000000
+ str r7, [r4, #0x7E0]
+
+ \ MCB
+ set r7, 0x00000000
+ str r7, [r4, #0x540]
+ set r7, 0x00000001
+ str r7, [r4, #0x570]
+ set r7, 0x00000000
+ str r7, [r4, #0x580]
+ set r7, 0x00000000
+ str r7, [r4, #0x590]
+ set r7, 0x00000000
+ str r7, [r4, #0x5A0]
+ set r7, 0x00000000
+ str r7, [r4, #0x5B0]
+
+ \ WRITE_PROTECTION
+ set r7, 0x00000000
+ str r7, [r4, #0x180]
+
+ \ __PHY Deskew PLL config and PHY initialization
+ set r7, 0x00000000
+ str r7, [r4, #0x210]
+ set r7, 0x80000000
+ str r7, [r4, #0x240]
+
+ \ DLL reset, Need this after any DCLK freq change
+ set r8, 0x20000000
+ ldr r7, [r4, #0x240]
+ orr r7, r7, r8
+ str r7, [r4, #0x240]
+ set r8, 0xdFFFFFFF
+ ldr r7, [r4, #0x240]
+ and r7, r7, r8
+ str r7, [r4, #0x240]
+
+ \ Pad drive strength auto calibration
+ set r8, 0x00110000
+ ldr r7, [r4, #0x200]
+ orr r7, r7, r8
+ str r7, [r4, #0x200]
+ ldr r7, [r4, #0x240]
+ set r8, 0xFFFeFFFF
+ ldr r7, [r4, #0x200]
+ and r7, r7, r8
+ str r7, [r4, #0x200]
+
+ \ Elpida DDR2 512M-specific
+ set r7, 0x20004444
+ str r7, [r4, #0x140]
+ set r7, 0x13300559
+ str r7, [r4, #0x1D0]
+ set r7, 0x03300990
+ str r7, [r4, #0x1E0]
+ set r7, 0x00000077
+ str r7, [r4, #0x1F0]
+ \ End of Elpida-specific
+
+ set r7, 0x20000088
+ str r7, [r4, #0x230]
+ set r7, 0x00000080
+ str r7, [r4, #0xE10]
+ set r7, 0x00000080
+ str r7, [r4, #0xE20]
+ set r7, 0x00000080
+ str r7, [r4, #0xE30]
+
+ set r7, 0x00000000
+ str r7, [r4, #0xE40]
+ set r7, 0x00000000
+ str r7, [r4, #0xE50]
+
+ \ initialize LPDDR2
+ set r7, 0x03000001
+ str r7, [r4, #0x120]
+ ldr r7, [r4, #0x1B0]
+ set r7, 0x0302003F
+ str r7, [r4, #0x410]
+ set r7, 0x01001000
+ str r7, [r4, #0x120]
+ set r7, 0x02001000
+ str r7, [r4, #0x120]
+ set r7, 0x03020001
+ str r7, [r4, #0x410]
+ set r7, 0x03020002
+ str r7, [r4, #0x410]
+ set r7, 0x03020003
+ str r7, [r4, #0x410]
+
+\ End of frequency change
+
+ setreg d4282110 0 \ Release global IRQ0 mask
+
+ setreg d4283894 11000008 \ DFI chip select timing configuration for CS1
+
+ setreg d428290c 600 \ Power up audio module
+ setreg d428290c 610 \ and enable peripheral clock
+ setreg d428290c 710 \ and disable isolation
+ setreg d428290c 712 \ and release reset
+
+ setreg d4050040 d0080040 \ I2S0 SYSCLK_EN, PLL1/2, denom=0x10, numerator=0x40
+ setreg d4050044 d0040040 \ I2S0 SYSCLK_EN, PLL1/2, denom=0x08, numerator=0x40
+
+ setreg d42a0c3c 10800 \ Undocumented register in SSPA
+ setreg d42a0c34 211921 \ Undocumented register in SSPA
+
+ setreg d428285c 08 \ Enable AXI clock to USB
+ setreg d428285c 09 \ and release from reset
+
+ setreg d42828f8 18 \ Enable HSIC1 SPH Controller Clock and AXI Clock
+ setreg d42828f8 1b \ and release from reset
+
+ setreg d42828fc 18 \ Undocumented, probably another USB HSIC
+ setreg d42828fc 1b \ Undocumented ..
+
+ setreg d4282900 18 \ Enable FSIC SPH Controller Clock and AXI Clock
+ setreg d4282900 1b \ and release from reset
+
+ setreg d4282848 08 \ Enable AXI clock to IRE
+ setreg d4282848 09 \ and release from reset
+
+ setreg D4015004 03 \ Enable TWSI1 clk
+ \ Delay 99999
+
+ setreg d4282854 1b \ Enable SDHC0 clk
+ setreg d42828e8 1b \ Enable SDHC3 clk
+
+ getreg d42828a4 \ Vmeta
+ bitset 400 \ Module powered up
+ bitclr 200 \ Inputs isolated
+ putreg
+ bitset 008 \ AXI clock enabled
+ putreg
+ bitset 001 \ AXI released from reset
+ putreg
+ bitset 010 \ Peripheral clock enabled
+ putreg
+ bitset 002 \ Peripheral released from reset
+ putreg
+ bitset 020 \ PLL2/3
+ putreg
+ bitset 004 \ Reserved
+ putreg
+ bitset 100 \ Isolation disabled
+ putreg
+ bitclr 240 \ Input isolation disabled, (bit 6 is part of the clock select field)
+ putreg
+ \ Whew, that was tedious
+
+ setreg d428284c 08 \ PMUA_DISPLAY1_CLK_RES_CTL - AXI Clk enabled
+ setreg d428284c 09 \ plus AXI released from reset
+ setreg d428284c 19 \ plus peripheral clock enabled
+ setreg d428284c 1b \ plus peripheral released from reset
+
+ setreg d4015038 03 \ Use 32 kHz clock input (bit 1 reserved)
+
+\ mrc p15,0,r0,c1,c0,2
+\ orr r0,r0,#0xf \ Enable MMX
+\ mcr p15,0,r0,c1,c0,2
+
+\ Allow access of performance counters (PMU) from user space
+\ mov r0, #0x1
+\ mrc p15, 0, r0, c9, c14, 0
+\ orr r0, r0, #0x1
+\ mcr p15, 0, r0, c9, c14, 0
+
+\ Ensure branch prediction is enabled - BPU (Default)
+\ mrc p15, 0, r0, c1, c0, 0
+\ orr r0, r0, #0x800
+\ mcr p15, 0, r0, c1, c0, 0
+
+\ setreg d4015064 03 \ AIB clock, redundant with above
+
+\ //BU_REG_WRITE( SMC_CSDFICFGX, 0x51890009 ); // SMC_CSDFICFG0
+\ //BU_REG_WRITE( SMC_CSADRMAPX, 0x10000F00 ); // SMC_CSADRMAP0
+\ //BU_REG_WRITE(0xd4283824, 0xC6CFF2C9 );
+\ setreg d4283894 11000008 \ DFI, redundant with above
+
+\ setreg d4015000 83 \ RTC, redundant with above
+ setreg d4015074 03 \ MPMU, clocks on
+ setreg d4282864 09 \ DMA enabled and release from reset
+ setreg d4282860 b8 \ NAND FLASH PLL1/8 + ECC PLL1/4, AXI clock enabled
+ setreg d4282860 bf \ plus ECC&controller&AXI released from reset
+
+\ Finally, release the reset for the main CPU
+
+ set r0,0xd4050020
+ ldr r1,[r0]
+ bic r1,r1,#2
+ str r1,[r0]
+
+ begin
+ mcr p15,0,r0,cr7,cr0,4 \ Wait For Interrupt
+ again
+
+end-code
+
+writing sp.img
+ unreset here over - ofd @ fputs
+ofd @ fclose
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2008 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/olpc/1.75/xo-dram.fth
==============================================================================
--- cpu/arm/olpc/1.75/xo-dram.fth Mon Oct 18 05:25:53 2010 (r1986)
+++ cpu/arm/olpc/1.75/xo-dram.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -73,6 +73,8 @@
\ tCKSRE max(5nCK, 10ns)
\ tCKSRX max(5nCK, 10ns)
+start-dram-init
+
mmap0
h# 0000.0000 d# 23 rshift start-addr
h# 4000.0000 log2 d# 16 - area-length
@@ -554,3 +556,5 @@
do-dummy-reads
show-dll-delay
+
+end-dram-init
Modified: dev/usb2/hcd/ehci/ehci.bth
==============================================================================
--- dev/usb2/hcd/ehci/ehci.bth Mon Oct 18 05:25:53 2010 (r1986)
+++ dev/usb2/hcd/ehci/ehci.bth Mon Oct 18 06:02:38 2010 (r1987)
@@ -11,6 +11,7 @@
" ehci" encode-string " device_type" property
+fload ${BP}/dev/usb2/hcd/ehci/pci.fth
fload ${BP}/dev/usb2/hcd/ehci/loadpkg.fth
end0
Modified: dev/usb2/hcd/ehci/ehci.fth
==============================================================================
--- dev/usb2/hcd/ehci/ehci.fth Mon Oct 18 05:25:53 2010 (r1986)
+++ dev/usb2/hcd/ehci/ehci.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -12,24 +12,11 @@
0 value ehci-reg
0 value op-reg-offset
-h# 100 constant /regs
-
-\ Configuration space registers
-my-address my-space encode-phys
- 0 encode-int encode+ 0 encode-int encode+
-\ EHCI operational registers
-0 0 my-space 0200.0010 + encode-phys encode+
- 0 encode-int encode+ /regs encode-int encode+
-" reg" property
-
: map-regs ( -- )
- 4 my-w@ h# 16 or 4 my-w! \ memory write and invalidate, bus master, mem
- 0 0 my-space h# 0200.0010 + /regs map-in to ehci-reg
+ /regs my-map-in to ehci-reg
;
: unmap-regs ( -- )
- \ Don't disable because somebody else might be using the controller.
- \ 4 my-w@ 7 invert and 4 my-w!
- ehci-reg /regs map-out 0 to ehci-reg
+ ehci-reg /regs my-map-out 0 to ehci-reg
;
: ehci-reg@ ( idx -- data ) ehci-reg + rl@ ;
@@ -101,23 +88,14 @@
0 value dbgp-offset
0 value dbgp-bar
-: find-dbgp-regs ( -- )
- h# 34 my-l@ ( capability-ptr )
- begin dup while ( cap-offset )
- dup my-b@ h# 0a = if ( cfg-adr )
- 2+ my-w@ ( dbgp-ptr )
- dup h# 1fff and to dbgp-offset ( )
- d# 13 rshift 7 and 1- /l* h# 10 + to dbgp-bar
- exit
- then ( cfg-adr )
- 1+ my-b@ ( cap-offset' )
- repeat ( cap-offset )
- drop
-;
: debug-port-active? ( -- flag )
hcsparams@ h# f0.0000 and 0= if false exit then
- find-dbgp-regs
- dbgp-offset 0= if false exit then
+ has-dbgp-regs? if ( offset bar )
+ to dbgp-bar to dbgp-offset
+ else ( )
+ false exit
+ then
+
\ We should take dbgp-bar into account, but for now we
\ just assume it's the same BAR as for the main registers.
dbgp-offset ehci-reg@
Modified: dev/usb2/hcd/ehci/pci.fth
==============================================================================
--- dev/usb2/hcd/ehci/pci.fth Mon Oct 18 05:25:53 2010 (r1986)
+++ dev/usb2/hcd/ehci/pci.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -1,16 +1,67 @@
+h# 100 constant /regs
+
\ Configuration space registers
my-address my-space encode-phys
0 encode-int encode+ 0 encode-int encode+
+
\ EHCI operational registers
0 0 my-space 0200.0010 + encode-phys encode+
-0 encode-int encode+ h# 100 encode-int encode+
+0 encode-int encode+ /regs encode-int encode+
" reg" property
+: my-b@ ( offset -- b ) my-space + " config-b@" $call-parent ;
+: my-b! ( b offset -- ) my-space + " config-b!" $call-parent ;
+
+: my-w@ ( offset -- w ) my-space + " config-w@" $call-parent ;
+: my-w! ( w offset -- ) my-space + " config-w!" $call-parent ;
+
+: my-l@ ( offset -- l ) my-space + " config-l@" $call-parent ;
+: my-l! ( l offset -- ) my-space + " config-l!" $call-parent ;
+
: my-map-in ( len -- adr )
>r 0 0 my-space h# 0200.0010 + r> " map-in" $call-parent
4 my-w@ h# 16 or 4 my-w! \ Set MWI, bus mastering, and mem enable
;
: my-map-out ( adr len -- )
- 4 my-w@ 7 invert and 4 my-w!
+ \ Don't disable because somebody else might be using the controller.
+ \ 4 my-w@ 7 invert and 4 my-w!
" map-out" $call-parent
;
+
+: has-dbgp-regs? ( -- false | offset bar true)
+ h# 34 my-l@ ( capability-ptr )
+ begin dup while ( cap-offset )
+ dup my-b@ h# 0a = if ( cfg-adr )
+ 2+ my-w@ ( dbgp-ptr )
+ dup h# 1fff and ( offset )
+ d# 13 rshift 7 and 1- /l* h# 10 + ( offset bar )
+ true ( offset bar true )
+ exit
+ then ( cfg-adr )
+ 1+ my-b@ ( cap-offset' )
+ repeat ( cap-offset )
+ drop false ( false )
+;
+: needs-dummy-qh? ( -- flag ) 0 my-w@ h# 1106 ( VIA ) = ;
+: grab-controller ( -- error? )
+ hccparams@ 8 rshift h# ff and dup if ( config-adr )
+ dup my-l@ h# 10001 = if ( config-adr )
+ h# 100.0000 over my-l! ( config-adr ) \ Ask for it
+ true ( config-adr error? )
+ d# 100 0 do ( config-adr error? )
+ over my-l@ h# 101.0000 and h# 100.0000 = if
+ \ Turn off SMIs in Legacy Support Extended CSR
+ h# e000.0000 h# 6c my-l! ( config-adr error? )
+ 0 my-l@ h# 27cc8086 = if
+ h# ffff.0000 h# 70 my-l! \ Clear EHCI Intel special SMIs
+ then
+ 0= leave ( config-adr error?' )
+ then ( config-adr error? )
+ d# 10 ms ( config-adr error? )
+ loop ( config-adr error? )
+ nip exit
+ then ( config-adr )
+ then ( config-adr )
+ drop ( )
+ false
+;
Modified: dev/usb2/hcd/ehci/probe.fth
==============================================================================
--- dev/usb2/hcd/ehci/probe.fth Mon Oct 18 05:25:53 2010 (r1986)
+++ dev/usb2/hcd/ehci/probe.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -51,29 +51,6 @@
dup portsc@ swap portsc! ( ) \ Clear connection change bit
;
-: grab-controller ( -- error? )
- hccparams@ 8 rshift h# ff and dup if ( config-adr )
- dup my-l@ h# 10001 = if ( config-adr )
- h# 100.0000 over my-l! ( config-adr ) \ Ask for it
- true ( config-adr error? )
- d# 100 0 do ( config-adr error? )
- over my-l@ h# 101.0000 and h# 100.0000 = if
- \ Turn off SMIs in Legacy Support Extended CSR
- h# e000.0000 h# 6c my-l! ( config-adr error? )
- 0 my-l@ h# 27cc8086 = if
- h# ffff.0000 h# 70 my-l! \ Clear EHCI Intel special SMIs
- then
- 0= leave ( config-adr error?' )
- then ( config-adr error? )
- d# 10 ms ( config-adr error? )
- loop ( config-adr error? )
- nip exit
- then ( config-adr )
- then ( config-adr )
- drop ( )
- false
-;
-
: probe-setup ( -- )
\ Set active-package so device nodes can be added and removed
my-self ihandle>phandle push-package
Modified: dev/usb2/hcd/ehci/qhtd.fth
==============================================================================
--- dev/usb2/hcd/ehci/qhtd.fth Mon Oct 18 05:25:53 2010 (r1986)
+++ dev/usb2/hcd/ehci/qhtd.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -633,8 +633,9 @@
dummy-qh ?dup if free-qh 0 to dummy-qh then
;
+
: ?alloc-dummy-qh ( -- )
- 0 my-w@ h# 1106 ( VIA ) = if alloc-dummy-qh then
+ needs-dummy-qh? if alloc-dummy-qh then
;
\ The words this calls are written so they can be called again
Modified: dev/usb2/hcd/hcd.fth
==============================================================================
--- dev/usb2/hcd/hcd.fth Mon Oct 18 05:25:53 2010 (r1986)
+++ dev/usb2/hcd/hcd.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -58,18 +58,6 @@
\ Common routines
\ ---------------------------------------------------------------------------
-: my-b@ ( offset -- b ) my-space + " config-b@" $call-parent ;
-: my-b! ( b offset -- ) my-space + " config-b!" $call-parent ;
-
-: my-w@ ( offset -- w ) my-space + " config-w@" $call-parent ;
-: my-w! ( w offset -- ) my-space + " config-w!" $call-parent ;
-
-: my-l@ ( offset -- l ) my-space + " config-l@" $call-parent ;
-: my-l! ( l offset -- ) my-space + " config-l!" $call-parent ;
-
-: map-in ( phys.lo,md,hi len -- vaddr ) " map-in" $call-parent ;
-: map-out ( vaddr size -- ) " map-out" $call-parent ;
-
\ XXX Room for improvement: keep tab of hcd-map-in's to improve performance.
: hcd-map-in ( virt size -- phys ) false dma-map-in ;
: hcd-map-out ( virt phys size -- ) dma-map-out ;
Added: dev/usb2/hcd/uhci/pci.fth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dev/usb2/hcd/uhci/pci.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -0,0 +1,32 @@
+h# 400 constant /regs
+
+\ Configuration space registers
+my-address my-space encode-phys
+ 0 encode-int encode+ 0 encode-int encode+
+\ UHCI operational registers
+0 0 my-space 0100.0020 + encode-phys encode+
+ 0 encode-int encode+ h# 400 encode-int encode+
+" reg" property
+
+: my-b@ ( offset -- b ) my-space + " config-b@" $call-parent ;
+: my-b! ( b offset -- ) my-space + " config-b!" $call-parent ;
+
+: my-w@ ( offset -- w ) my-space + " config-w@" $call-parent ;
+: my-w! ( w offset -- ) my-space + " config-w!" $call-parent ;
+
+: my-l@ ( offset -- l ) my-space + " config-l@" $call-parent ;
+: my-l! ( l offset -- ) my-space + " config-l!" $call-parent ;
+
+: my-map-in ( len -- adr )
+ >r
+ 0 0 my-space h# 0100.0020 + r> " map-in" $call-parent ( adr )
+ 4 my-w@ h# 17 or 4 my-w! ( adr )
+;
+: my-map-out ( adr len -- )
+ 4 my-w@ 7 invert and 4 my-w! ( adr len )
+ " map-out" $call-parent ( )
+;
+
+: ?disable-smis ( -- )
+ 0 my-l@ h# 27c88086 = if h# af00 h# 80 my-w! then
+;
Modified: dev/usb2/hcd/uhci/uhci.bth
==============================================================================
--- dev/usb2/hcd/uhci/uhci.bth Mon Oct 18 05:25:53 2010 (r1986)
+++ dev/usb2/hcd/uhci/uhci.bth Mon Oct 18 06:02:38 2010 (r1987)
@@ -11,6 +11,7 @@
" uhci" encode-string " device_type" property
+fload ${BP}/dev/usb2/hcd/uhci/pci.fth
fload ${BP}/dev/usb2/hcd/uhci/loadpkg.fth
end0
Modified: dev/usb2/hcd/uhci/uhci.fth
==============================================================================
--- dev/usb2/hcd/uhci/uhci.fth Mon Oct 18 05:25:53 2010 (r1986)
+++ dev/usb2/hcd/uhci/uhci.fth Mon Oct 18 06:02:38 2010 (r1987)
@@ -10,24 +10,10 @@
0 value open-count
0 value uhci-reg
-h# 400 constant /regs
-
-\ Configuration space registers
-my-address my-space encode-phys
- 0 encode-int encode+ 0 encode-int encode+
-\ UHCI operational registers
-0 0 my-space 0100.0020 + encode-phys encode+
- 0 encode-int encode+ /regs encode-int encode+
-" reg" property
-
-: map-regs ( -- )
- 4 my-w@ h# 17 or 4 my-w!
- 0 0 my-space h# 0100.0020 + /regs map-in to uhci-reg
-;
+: map-regs ( -- ) /regs my-map-in to uhci-reg ;
: unmap-regs ( -- )
- 4 my-w@ 7 invert and 4 my-w!
- uhci-reg /regs map-out 0 to uhci-reg
+ uhci-reg /regs my-map-out 0 to uhci-reg
;
: uhci-b@ ( idx -- data ) uhci-reg + rb@ ;
@@ -52,10 +38,6 @@
: portsc@ ( port -- data ) 2* 10 + uhci-w@ ;
: portsc! ( data port -- ) 2* 10 + uhci-w! ;
-: ?disable-smis ( -- )
- 0 my-l@ h# 27c88086 = if h# af00 h# 80 my-w! then
-;
-
: reset-usb ( -- )
uhci-reg dup 0= if map-regs then
4 usbcmd! \ Global reset
More information about the openfirmware
mailing list