[openfirmware] r1198 - cpu/x86/pc/olpc/via

svn at openfirmware.info svn at openfirmware.info
Thu May 14 10:55:20 CEST 2009


Author: wmb
Date: 2009-05-14 10:55:20 +0200 (Thu, 14 May 2009)
New Revision: 1198

Added:
   cpu/x86/pc/olpc/via/dramtiming.fth
Modified:
   cpu/x86/pc/olpc/via/demodram.fth
   cpu/x86/pc/olpc/via/ioinit.fth
   cpu/x86/pc/olpc/via/romreset.bth
Log:
Via - checkpoint with new timing computation code - not finished yet.










Modified: cpu/x86/pc/olpc/via/demodram.fth
===================================================================
--- cpu/x86/pc/olpc/via/demodram.fth	2009-05-14 08:19:39 UTC (rev 1197)
+++ cpu/x86/pc/olpc/via/demodram.fth	2009-05-14 08:55:20 UTC (rev 1198)
@@ -14,7 +14,8 @@
    \ Must use "CPU delay" to make sure VLINK is dis-connect
    0 7 devfunc  47 00 04 mreg  end-table  d# 20 wait-us
    0 3 devfunc  90 07 07 mreg  end-table  d# 20 wait-us  \ First set DRAM Freq to invalid
-   0 3 devfunc  90 07 04 mreg  end-table  d# 20 wait-us  \ 266 MHz
+\  0 3 devfunc  90 07 03 mreg  end-table  d# 20 wait-us  \ 200 MHz ATEST
+   0 3 devfunc  90 07 04 mreg  end-table  d# 20 wait-us  \ 266 MHz !ATEST
    0 3 devfunc  6b d0 c0 mreg  end-table  d# 20 wait-us  \ PLL Off
    0 3 devfunc  6b 00 10 mreg  end-table  d# 20 wait-us  \ PLL On
    0 3 devfunc  6b c0 00 mreg  end-table  \ Adjustments off
@@ -24,10 +25,45 @@
 
 \  TimingSetting.c
    0 3 devfunc
-   61 ff 55 mreg  \ Trfc, Trrd
-   62 ff 8a mreg  \ CL, Trp, Tras
-   63 ff 49 mreg  \ Twr, Twtr, Trtp
-   64 ff 66 mreg  \ Trp, Trcd
+[ifdef] phoenix-timings
+   61 ff 55 mreg  \ Trfc: 0x15+8 = 29 * 3.75 = 108.75 ns, Trrd: 01 -> 3T
+   62 ff 8a mreg  \ Tras: 8+5=13 *3.75=48.75, 8bank-timing constraint, CL 2+2=4
+   63 ff 49 mreg  \ Twr:2+2=4 *3.75=15, Trtp:1+2=3 *3.75=11.25, Twtr:1+2=3 *3.75=11.25
+   64 ff 66 mreg  \ Trp 5, Trcd 5 
+[then]
+[ifdef] coreboot-timings
+   61 ff 54 mreg  \ Trfc: 0x14+8 = 28 * 3.75 = 105.00 ns, Trrd: 01 -> 3T
+   62 ff 7a mreg  \ Tras: 7+5=12 *3.75=45.00, 8bank-timing constraint, CL 2+2=4
+   63 ff 40 mreg  \ Twr:2+2=4 *3.75=15, Trtp:0+2=2 *3.75=7.5, Twtr:0+2=2 *3.75=7.5
+   64 ff 44 mreg  \ Trp 2+2=4, Trcd 2+2=4
+[then]
+[ifdef] compute-timings
+\ The subtractions below (e.g. "2 -") account for the way that numbers are
+\ encoded in bit fields - e.g. 00b means 2T, 01b means 3T, etc.
+\ The shifts below (e.g. "6 <<") move the value into the correct bit position.
+
+   61 3f  Trfc ns>tck 8 -       mreg   \ Trfc: ceil(127.50/5) = 26   - 8 = 0x12
+   61 c0  Trrd ns>tck 2 - 6 <<  mreg   \ Trrd: ceil(  7.50/5) =  2   - 0 = 0x00
+
+\  61 ff 12 mreg  \ Trfc, Trrd  Trfc = 0x39+8 = 65  Trrd=4T ceil(7.5ns/5ns)
+
+   62 07  TCL  2 -              mreg   \ CL 3
+   62 08  08                    mreg   \ 8-bank timing constraint
+   62 f0  Tras ns>tck 5 - 4 <<  mreg   \ Tras: ceil( 40.00/5) = 8     - 5 = 0x03
+
+\  62 ff 3a mreg  \ CL, 8-bank constraint, Tras  Tras = 8T (3+5=8)
+
+   63 e0  Twr  ns>tck 2 - 5 <<  mreg   \ Twr:  ceil( 15.00/5) = 3     - 2 = 0x01
+   63 08  Trtp ns>tck 2 - 3 <<  mreg   \ Trtp: ceil(  7.00/5) = 2     - 2 = 0x00
+   63 03  Twtr ns>tck 2 -       mreg   \ Twtr: ceil( 10.00/5) = 2     - 2 = 0x00
+
+\  63 ff 20 mreg  \ Twr, Twtr, Trtp  Twr=3T (15ns/5), Twtr=2T (10/5)  Trtp=2T ceil(7.5/5)
+
+   64 0e  Trp  ns>tck 2 - 1 <<  mreg   \ Trp:  ceil( 15.00/5) = 3     - 2 = 0x01
+   64 e0  Trcd ns>tck 2 - 5 <<  mreg   \ Trcd: ceil( 15.00/5) = 3     - 2 = 0x01
+
+\  64 ff 22 mreg  \ Trp 3, Trcd 3
+[then]
    end-table
 
 \ DRDR_BL.c
@@ -154,6 +190,7 @@
 
    h# 11 port80
 
+forth  #ranks 2 >=  assembler  [if]
    0 3 devfunc
    40 ff 00 mreg \ Rank 1 top back to 0 to work on other ranks
 
@@ -164,14 +201,15 @@
    end-table
 
    DDRinit #) call
+[then]
 
+forth  #ranks 3 >=  assembler  [if]
    0 3 devfunc
    41 ff 00 mreg \ Rank 1 top back to 0 to work on other ranks
    end-table
 
    h# 14 port80
 
-0 [if] \ This is for a DIMM in the other socket
    0 3 devfunc
    54 ff 00 mreg \ Disable ranks 0,1
    55 ff a0 mreg \ Enable Rank 2
@@ -183,6 +221,11 @@
 
    0 3 devfunc
    42 ff 00 mreg \ Rank 2 top back to 0 to work on other ranks
+   end-table
+[then]
+
+forth  #ranks 4 >=  assembler  [if]
+   0 3 devfunc
    54 ff 00 mreg \ Disable ranks 0,1
    55 ff 0b mreg \ Enable Rank 3
    43 ff 10 mreg \ Rank 3 top
@@ -197,7 +240,8 @@
 [then]
 
    0 3 devfunc
-   69 03 03 mreg \ Reinstate page optimizations (03) - FF #ranks
+   69 03 03 mreg \ Reinstate page optimizations (03) - FF #ranks !ATEST
+\  69 c3 c3 mreg \ Reinstate page optimizations (03) - FF #ranks  ATEST 8-bank interleave
 
 \ RankMap.c
 \  DRAMBankInterleave
@@ -205,29 +249,37 @@
    87 ff 00 mreg \ Channel B #banks or some such - FF BA  
 \ SizingMATypeM
 
-   50 ff 20 mreg \ MA Map type - ranks 0/1 type 1 - 2 bank bits, 10 column bits
+   50 ff 20 mreg \ MA Map type - ranks 0/1 type 1 - 2 bank bits, 10 column bits !ATEST
+\  50 ff a1 mreg \ 1T Command Rate, RMA Map type - ranks 0/1 type 5 - 3 bank bits, 14 row bits, 10 col bits ATEST
    51 ff 60 mreg \ "Reserved"
    52 ff 33 mreg \ Bank interleave on A17, A18, and
-   53 ff 3f mreg \ A19 (but BA2 off because 4 banks), Rank interleave on A20 and A21
+   53 ff 3f mreg \ A19 (but BA2 off because 4 banks), Rank interleave on A20 and A21  !ATEST
+\  53 ff bf mreg \ BA2 on (80), A19, Rank interleave on A20 and A21   ATEST
                  \ Different interleave bits might improve performance on some workloads
 
-   54 ff 89 mreg \ Rank map A 0/1
+   54 ff 89 mreg \ Rank map A 0/1   !ATEST
+\  54 ff 80 mreg \ Rank map A 0/1    ATEST  Rank 0 only
    55 ff 00 mreg \ Rank map A 2/3
    56 ff 00 mreg \ Rank map B ?
    57 ff 00 mreg \ Rank map B ?
 
-   40 ff 04 mreg \ Rank top 0
-   41 ff 08 mreg \ Rank top 1
+   40 ff 04 mreg \ Rank top 0 !ATEST
+\  40 ff 10 mreg \ Rank top 0  ATEST  1 GiB
+   41 ff 08 mreg \ Rank top 1 !ATEST
+\  41 ff 00 mreg \ Rank top 1  ATEST
+
    42 ff 00 mreg \ Rank top 2
    43 ff 00 mreg \ Rank top 3
 
    48 ff 00 mreg \ Rank base 0
-   49 ff 04 mreg \ Rank base 1
+   49 ff 04 mreg \ Rank base 1 !ATEST
+\  49 ff 00 mreg \ Rank base 1  ATEST
    4a ff 00 mreg \ Rank base 2
    4b ff 00 mreg \ Rank base 3
    end-table
 
-   20 8f60 config-wb                    \ DRAM Bank 7 ending address - controls DMA upstream
+   20 8f60 config-wb                    \ DRAM Bank 7 ending address - controls DMA upstream !ATEST
+\  40 8f60 config-wb                    \ DRAM Bank 7 ending address - controls DMA upstream  ATEST
    0388 config-rb  ax bx mov  0385 config-setup  bx ax mov  al dx out  \ Copy Low Top from RO reg 88 to reg 85
    0388 config-rb  ax bx mov  8fe5 config-setup  bx ax mov  al dx out  \ Copy Low Top from RO reg 88 to SB Low Top e5
 
@@ -261,7 +313,8 @@
 
 \ FinalSetting.c
 \  RefreshCounter
-   6a ff 86 mreg \ Refresh interval - FF frequency
+   6a ff 86 mreg \ Refresh interval - FF frequency !ATEST
+\  6a ff ca mreg \ Refresh interval - FF frequency  ATEST
 
 \  DRAMRegFinalValue
     60 00 d0 mreg \ Fast turn-around

Added: cpu/x86/pc/olpc/via/dramtiming.fth
===================================================================
--- cpu/x86/pc/olpc/via/dramtiming.fth	                        (rev 0)
+++ cpu/x86/pc/olpc/via/dramtiming.fth	2009-05-14 08:55:20 UTC (rev 1198)
@@ -0,0 +1,40 @@
+d#   5.00 value Tck
+\ Compute ceil(ns/tck)
+: ns>tck  ( ns -- tck )  Tck + 1-  Tck /  ;
+
+
+[ifdef] xo-board
+\ DDR-400 timings for HY5PS1G4831C
+d#   5.00 to Tck
+
+d# 127.50 constant Trfc
+d#   7.50 constant Trrd
+d#      3 constant TCL
+d#  40.00 constant Tras
+d#  15.00 constant Twr
+d#   7.50 constant Trtp
+d#  10.00 constant Twtr
+d#  15.00 constant Trp
+d#  15.00 constant Trcd
+
+1 constant #ranks
+8 constant #banks
+[then]
+
+[ifdef] demo-board
+\ DDR-533 timings for Micron MT8HTF6464HDY DIMM
+d#   3.75 to Tck
+
+d# 105.00 constant Trfc
+d#  10.00 constant Trrd
+d#      4 constant TCL
+d#  45.00 constant Tras
+d#  15.00 constant Twr
+d#   7.50 constant Trtp
+d#   7.00 constant Twtr
+d#  15.00 constant Trp
+d#  15.00 constant Trcd
+
+2 constant #ranks
+4 constant #banks
+[then]

Modified: cpu/x86/pc/olpc/via/ioinit.fth
===================================================================
--- cpu/x86/pc/olpc/via/ioinit.fth	2009-05-14 08:19:39 UTC (rev 1197)
+++ cpu/x86/pc/olpc/via/ioinit.fth	2009-05-14 08:55:20 UTC (rev 1198)
@@ -179,8 +179,8 @@
    bc ff 00 mreg  \ SPI MMIO Base Address 15:8  (address is fed30000)
    bd ff d3 mreg  \ SPI MMIO Base Address 23:16
    be ff fe mreg  \ SPI MMIO Base Address 31:24
-   d0 f0 00 mreg  \ SMBUS IO Base Address low (port is 4100)
-   d1 ff 41 mreg  \ SMBUS IO Base Address high
+   d0 f0 00 mreg  \ SMBUS IO Base Address low (port is 0500)
+   d1 ff 05 mreg  \ SMBUS IO Base Address high
    d2 0f 01 mreg  \ Enable SMBUS and set other characteristics
    e2 80 80 mreg  \ Inhibit C4 during USB isochronous transaction
    e4 ff a0 mreg  \ Enable short C3/C4 (80), select various multi-function pins

Modified: cpu/x86/pc/olpc/via/romreset.bth
===================================================================
--- cpu/x86/pc/olpc/via/romreset.bth	2009-05-14 08:19:39 UTC (rev 1197)
+++ cpu/x86/pc/olpc/via/romreset.bth	2009-05-14 08:55:20 UTC (rev 1198)
@@ -56,6 +56,8 @@
 
 fload ${BP}/cpu/x86/pc/olpc/via/startmacros.fth  \ Via-oriented startup macros
 
+fload ${BP}/cpu/x86/pc/olpc/via/dramtiming.fth
+
 start-assembling
 
 hex




More information about the openfirmware mailing list