aboutsummaryrefslogtreecommitdiff
path: root/tcl/board/mini2440.cfg
blob: 277f61ff69b5e2e98458ea310dc7f52d81f45ac2 (plain)
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
#-------------------------------------------------------------------------
# Mini2440 Samsung s3c2440A Processor with 64MB DRAM, 64MB NAND, 2 MB N0R
# NOTE: Configured for NAND boot (switch S2 in NANDBOOT)
# 64 MB NAND (Samsung K9D1208V0M)
# B Findlay  08/09
#
#   ----------- Important notes to help you on your way ----------
# README:
#     NOR/NAND Boot Switch - I have not read the vivi source, but from
#     what I could tell from reading the registers it appears that vivi
#     loads itself into DRAM and then flips NFCONT (0x4E000004) bits
#     Mode (bit 0 = 1), and REG_nCE (bit 1 = 0) which maps the NAND
#     FLASH at the bottom 64MB of memory. This essentially takes the
#     NOR Flash out of the circuit so you can't trash it.
#
#     I adapted the samsung_s3c2440.cfg file which is why I did not
#     include "source [find target/samsung_s3c2440.cfg]".  I believe
#     the -work-area-phys 0x200000 is incorrect, but also had to pad
#     some additional resets.  I didn't modify it as if it is working
#     for someone, the work-area-phys is not used by most.
#
#     JTAG ADAPTER SPECIFIC
#     IMPORTANT! Any JTAG device that uses ADAPTIVE CLOCKING will likely
#     FAIL as the pin RTCK on the mini2440 10 pin JTAG Conn doesn't exist.
#     This is Pin 11 (RTCK) on 20 pin JTAG connector. Therefore it is
#     necessary to FORCE setting the clock. Normally this should be configured
#     in the openocd.cfg file, but was placed here as it can be a tough
#     problem to figure out.  THIS MAY NOT FIX YOUR PROBLEM.. I modified
#     the openOCD driver jlink.c and posted it here. It may eventually end
#     up changed in openOCD, but its a hack in the driver and really should
#     be in the jtag layer (core.c me thinks), but haven't done it yet. My
#     hack for jlink.c may be found here.
#
#     http://forum.sparkfun.com/viewtopic.php?t=16763&sid=946e65abdd3bab39cc7d90dee33ff135
#
#     Note: Also if you have a USB JTAG, you will need the USB library installed
#     on your system "libusb-dev" or the make of openocd will fail. I *think*
#     it's apt-get install libusb-dev.  When I made my config I only included
#     --enable-jlink and --enable-usbdevs
#
#     I HAVE NOT Tested this throughly, so there could still be problems.
#     But it should get you way ahead of the game from where I started.
#     If you find problems (and fixes) please post them to
#     openocd-development@lists.berlios.de and join the developers and
#     check in fixes to this and anything else you find.  I do not
#     provide support, but if you ask really nice and I see anything
#     obvious I will tell you.. mostly just dig, fix, and submit to openocd.
#
#     best!   brfindla@yahoo.com   Nashua, NH USA
#
#     Recommended resources:
#       - first two are the best Mini2440 resources anywhere
#       - maintained by buserror... thanks guy!
#
#       http://bliterness.blogspot.com/
#       http://code.google.com/p/mini2440/
#
#       others....
#
#       http://forum.sparkfun.com/viewforum.php?f=18
#       http://labs.kernelconcepts.de/Publications/Micro24401/
#       http://www.friendlyarm.net/home
#       http://www.amontec.com/jtag_pinout.shtml
#
#-------------------------------------------------------------------------
#
#
# Your openocd.cfg file should contain:
# source [find interface/<yourjtag>.cfg]
# source [find board/mini2440.cfg]
#
#
#
#-------------------------------------------------------------------------
# Target configuration for the Samsung 2440 system on chip
# Tested on a S3C2440 Evaluation board by keesj
# Processor : ARM920Tid(wb) rev 0 (v4l)
# Info: JTAG tap: s3c2440.cpu tap/device found: 0x0032409d
#  (Manufacturer: 0x04e, Part: 0x0324, Version: 0x0)
#-------------------------------------------------------------------------

if { [info exists CHIPNAME] } {
   set  _CHIPNAME $CHIPNAME
} else {
   set  _CHIPNAME s3c2440
}

if { [info exists ENDIAN] } {
   set  _ENDIAN $ENDIAN
} else {
  # this defaults to a bigendian
   set  _ENDIAN little
}

if { [info exists CPUTAPID ] } {
   set _CPUTAPID $CPUTAPID
} else {
  # force an error till we get a good number
   set _CPUTAPID 0x0032409d
}

#jtag scan chain
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0x0f -expected-id $_CPUTAPID

set _TARGETNAME [format "%s.cpu" $_CHIPNAME]
target create $_TARGETNAME arm920t -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm920t
$_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x40000000  -work-area-size 0x4000 -work-area-backup 1

#reset configuration
jtag_nsrst_delay 100
jtag_ntrst_delay 100
reset_config trst_and_srst

#-------------------------------------------------------------------------
# JTAG ADAPTER SPECIFIC
# IMPORTANT! See README at top of this file.
#-------------------------------------------------------------------------

    jtag_khz 12000
    jtag interface

#-------------------------------------------------------------------------
# GDB Setup
#-------------------------------------------------------------------------

    gdb_breakpoint_override hard

#------------------------------------------------
# ARM SPECIFIC
#------------------------------------------------

    targets
  #  arm7_9 dcc_downloads enable
  #  arm7_9 fast_memory_access enable


    nand device s3c2440 0

    jtag_nsrst_delay 100
    jtag_ntrst_delay 100
    reset_config trst_and_srst
    init

    echo " "
    echo "-------------------------------------------"
    echo "--- login with - telnet localhost 4444  ---"
    echo "--- then type help_2440                 ---"
    echo "-------------------------------------------"
    echo " "



#------------------------------------------------
# Processor Initialialization
# Note: Processor writes can only occur when
# the state is in SYSTEM. When you call init_2440
# one of the first lines will tell you what state
# you are in. If a linux image is booting
# when you run this, it will not work
# a vivi boot loader will run with this just
# fine. The reg values were obtained by a combination
# of figuring them out fromt the manual, and looking
# at post vivi values with the debugger. Don't
# place too much faith in them, but seem to work.
#------------------------------------------------

proc init_2440 { } {

    halt
    s3c2440.cpu curstate

    #-----------------------------------------------
    # Set Processor Clocks - mini2440 xtal=12mHz
    # we set main clock for 405mHZ
    # we set the USB Clock for 48mHz
    # OM2 OM3 pulled to ground so main clock and
    # usb clock are off 12mHz xtal
    #-----------------------------------------------

    arm920t mww_phys 0x4C000014 0x00000005 #  Clock Divider control Reg
    arm920t mww_phys 0x4C000000 0xFFFFFFFF #  LOCKTIME count register
    arm920t mww_phys 0x4C000008 0x00038022 #  UPPLCON  USB clock config Reg
    arm920t mww_phys 0x4C000004 0x0007F021 #  MPPLCON  Proc clock config Reg

    #-----------------------------------------------
    # Configure Memory controller
    # BWSCON configures all banks, NAND, NOR, DRAM
    # DRAM - 64MB - 32 bit bus, uses BANKCON6 BANKCON7
    #-----------------------------------------------

    arm920t mww_phys 0x48000000 0x22111112 #  BWSCON - Bank and Bus Width
    arm920t mww_phys 0x48000010 0x00001112 #  BANKCON4 - ?
    arm920t mww_phys 0x4800001c 0x00018009 #  BANKCON6 - DRAM
    arm920t mww_phys 0x48000020 0x00018009 #  BANKCON7 - DRAM
    arm920t mww_phys 0x48000024 0x008E04EB #  REFRESH  - DRAM
    arm920t mww_phys 0x48000028 0x000000B2 #  BANKSIZE - DRAM
    arm920t mww_phys 0x4800002C 0x00000030 #  MRSRB6 - DRAM
    arm920t mww_phys 0x48000030 0x00000030 #  MRSRB7 - DRAM

    #-----------------------------------------------
    # Now port configuration for enables for memory
    # and other stuff.
    #-----------------------------------------------

    arm920t mww_phys 0x56000000	0x007FFFFF #  GPACON

    arm920t mww_phys 0x56000010	0x00295559 #  GPBCON
    arm920t mww_phys 0x56000018	0x000003FF #  GPBUP (PULLUP ENABLE)
    arm920t mww_phys 0x56000014	0x000007C2 #  GPBDAT

    arm920t mww_phys 0x56000020	0xAAAAA6AA #  GPCCON
    arm920t mww_phys 0x56000028	0x0000FFFF #  GPCUP
    arm920t mww_phys 0x56000024	0x00000020 #  GPCDAT

    arm920t mww_phys 0x56000030	0xAAAAAAAA #  GPDCON
    arm920t mww_phys 0x56000038	0x0000FFFF #  GPDUP

    arm920t mww_phys 0x56000040	0xAAAAAAAA #  GPECON
    arm920t mww_phys 0x56000048	0x0000FFFF #  GPEUP

    arm920t mww_phys 0x56000050	0x00001555 #  GPFCON
    arm920t mww_phys 0x56000058	0x0000007F #  GPFUP
    arm920t mww_phys 0x56000054	0x00000000 #  GPFDAT

    arm920t mww_phys 0x56000060	0x00150114 #  GPGCON
    arm920t mww_phys 0x56000068	0x0000007F #  GPGUP

    arm920t mww_phys 0x56000070	0x0015AAAA #  GPHCON
    arm920t mww_phys 0x56000078	0x000003FF #  GPGUP

}



proc flash_config { } {

    #-----------------------------------------
    # Finish Flash Configuration
    #-----------------------------------------

    halt

    #flash configuration (K9D1208V0M: 512Mbit, x8, 3.3V, Mode: Normal, 1st gen)
    nand probe 0
    nand list
}

proc flash_uboot { } {

	# flash the u-Boot binary and reboot into it
	init_2440
	flash_config
	nand erase 0 0x0 0x40000
	nand write 0 /tftpboot/u-boot-nand512.bin 0 oob_softecc_kw
	resume
}


proc load_uboot { } {
        echo " "
        echo " "
        echo "----------------------------------------------------------"
        echo "---- Load U-Boot into RAM and execute it.              ---"
        echo "---- NOTE: loads, partially runs, and hangs            ---"
        echo "---- U-Boot is fine, this image runs from vivi.        ---"
        echo "---- I burned u-boot into NAND so I didn't finish      ---"
        echo "---- debugging it. I am leaving this here as it is     ---"
        echo "---- part of the way there if you want to fix it.      ---"
        echo "----                                                   ---"
        echo "---- mini2440 U-boot here:                             ---"
        echo "---- http://repo.or.cz/w/u-boot-openmoko/mini2440.git  ---"
        echo "---- Also this:                                        ---"
        echo "---- http://code.google.com/p/mini2440/wiki/MiniBringup --"
        echo "----------------------------------------------------------"

	init_2440
	echo "Loading /tftpboot/u-boot-nand512.bin"
	load_image /tftpboot/u-boot-nand512.bin 0x33f80000 bin
	echo "Verifying image...."
	verify_image /tftpboot/u-boot-nand512.bin 0x33f80000 bin
	echo "jumping to u-boot"
        #bp 0x33f80068 4 hw
        reg 0 0
        reg 1 0
        reg 2 0
        reg 3 0
        reg 4 0x33f80000
      	resume 0x33f80000
}

       # this may help a little bit debugging the load_uboot
proc s {} {
        step
        reg
        armv4_5 disassemble 0x33F80068 0x10
}

proc help_2440 {} {
    echo " "
    echo " "
    echo "-----------------------------------------------------------"
    echo "---- The following mini2440 funcs are supported        ----"
    echo "----   init_2440 - initialize clocks, DRAM, IO         ----"
    echo "----   flash_config - configures nand flash            ----"
    echo "----   load_uboot - loads uboot into ram               ----"
    echo "----   flash_uboot - flashes uboot to nand (untested)  ----"
    echo "----   help_2440 - this help display                   ----"
    echo "-----------------------------------------------------------"
    echo " "
    echo " "
}


#----------------------------------------------------------------------------
#----------------------------------- END ------------------------------------
#----------------------------------------------------------------------------