Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | /* * (C) Copyright 2008 * Mark Jonas <mark.jonas@de.bosch.com> * * (C) Copyright 2007 * Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com> * * board/mpr2/lowlevel_init.S * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */ .global lowlevel_init .text .align 2 lowlevel_init: /* * Set frequency multipliers and dividers in FRQCR. */ mov.l WTCSR_A,r1 mov.l WTCSR_D,r0 mov.w r0,@r1 mov.l WTCNT_A,r1 mov.l WTCNT_D,r0 mov.w r0,@r1 mov.l FRQCR_A,r1 mov.l FRQCR_D,r0 mov.w r0,@r1 /* * Setup CS0 (Flash). */ mov.l CS0BCR_A, r1 mov.l CS0BCR_D, r0 mov.l r0, @r1 mov.l CS0WCR_A, r1 mov.l CS0WCR_D, r0 mov.l r0, @r1 /* * Setup CS3 (SDRAM). */ mov.l CS3BCR_A, r1 mov.l CS3BCR_D, r0 mov.l r0, @r1 mov.l CS3WCR_A, r1 mov.l CS3WCR_D, r0 mov.l r0, @r1 mov.l SDCR_A, r1 mov.l SDCR_D1, r0 mov.l r0, @r1 mov.l RTCSR_A, r1 mov.l RTCSR_D, r0 mov.l r0, @r1 mov.l RTCNT_A, r1 mov.l RTCNT_D, r0 mov.l r0, @r1 mov.l RTCOR_A, r1 mov.l RTCOR_D, r0 mov.l r0, @r1 mov.l SDCR_A, r1 mov.l SDCR_D2, r0 mov.l r0, @r1 mov.l SDMR3_A, r1 mov.l SDMR3_D, r0 add r0, r1 mov #0, r0 mov.w r0, @r1 rts nop .align 4 /* * Configuration for MPR2 A.3 through A.7 */ /* * PLL Settings */ FRQCR_D: .long 0x1103 /* I:B:P=8:4:2 */ WTCNT_D: .long 0x5A00 /* start counting at zero */ WTCSR_D: .long 0xA507 /* divide by 4096 */ /* * Spansion S29GL256N11 @ 48 MHz */ CS0BCR_D: .long 0x12490400 /* 1 idle cycle inserted, normal space, 16 bit */ CS0WCR_D: .long 0x00000340 /* tSW=0.5ck, 6 wait cycles, NO external wait, tHW=0.5ck */ /* * Samsung K4S511632B-UL75 @ 48 MHz * Micron MT48LC32M16A2-75 @ 48 MHz */ CS3BCR_D: .long 0x10004400 /* CS3BCR = 0x10004400, minimum idle cycles, SDRAM, 16 bit */ CS3WCR_D: .long 0x00000091 /* tRP=1ck, tRCD=1ck, CL=2, tRWL=2ck, tRC=4ck */ SDCR_D1: .long 0x00000012 /* no refresh, 13 rows, 10 cols, NO bank active mode */ SDCR_D2: .long 0x00000812 /* refresh */ RTCSR_D: .long 0xA55A0008 /* 1/4, once */ RTCNT_D: .long 0xA55A005D /* count 93 */ RTCOR_D: .long 0xa55a005d /* count 93 */ SDMR3_D: .long 0x440 /* mode register CL2, burst read and SINGLE WRITE */ /* * Registers */ FRQCR_A: .long 0xA415FF80 WTCNT_A: .long 0xA415FF84 WTCSR_A: .long 0xA415FF86 #define BSC_BASE 0xA4FD0000 CS0BCR_A: .long BSC_BASE + 0x04 CS3BCR_A: .long BSC_BASE + 0x0C CS0WCR_A: .long BSC_BASE + 0x24 CS3WCR_A: .long BSC_BASE + 0x2C SDCR_A: .long BSC_BASE + 0x44 RTCSR_A: .long BSC_BASE + 0x48 RTCNT_A: .long BSC_BASE + 0x4C RTCOR_A: .long BSC_BASE + 0x50 SDMR3_A: .long BSC_BASE + 0x5000 |