summaryrefslogtreecommitdiffstats
path: root/boot-scr/boot.txt
blob: 71487643607fb32ed95ac2e2c5d15ee85d5f0d80 (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
#
# boot.scr
#
# Boot script for Beagle Hybrid / Panda Hybrid / GTA04
#
# Author: H. Nikolaus Schaller
# Copyright Golden Delicious Computers 2010-2012
# licensed under GPL 2.0
#
#
# NAND Flash addresses (@ 256 MByte/2 GBit)
#
# 0x0000 0000	0x0007 ffff	08 0000		512 KB	X-Loader (flash image) - note the loader must fit into 64k SRAM!
# 0x0008 0000	0x001c ffff	15 0000		1.3 MB	U-Boot (flash image)
# 0x001d 0000	0x0020 ffff	04 0000		256 KB	splash.rgb16z
# 0x0021 0000	0x0024 ffff	04 0000		256 KB	menu.rgb16z
# 0x0025 0000	0x0025 ffff	01 0000		64 KB	boot.scr
# 0x0026 0000	0x0027 ffff	02 0000		128 KB	U-Boot parameters written by saveenv
# 0x0028 0000	0x0067 ffff	40 0000		4 MB	Kernel (flash image loaded by nandboot)
# 0x0068 0000	0x0fff ffff			250 MB	(or more) file system (e.g. jffs)
#
# To flash into NAND from command line:
#
# 1. break into U-Boot command line
# 2. flash=yes
# 3. run bootcmd
#

VERSION=0123456789	# incremented by build script so that we re-initialize the boot environment or reflash x-loader and u-boot

echo "*** if you boot from NAND don-t worry about error messages when U-Boot tries to read a non-existing MMC ***"

status init
status set 8	# give fast feedback that U-Boot did start (red power led)

if test "${gta04}" != "${VERSION}"
	then

	# set up default environment
	# this setting boots from MMC if available and falls back to NAND
	# (except for MLO/X-Loader which is located depending on the AUX button)

	echo *** initializing GTA04 environment ***
	
	setenv bootdelay	1
	setenv mmcdev 		0
	setenv imgtempaddr	0x80800000	# address where we load compressed splash image
	setenv bootaddr 	0x81800000	# address where we load the boot script
	setenv loadaddr		0x82000000	# address where we load the kernel
	# setenv console	ttyS2,115200n8
	# for newer kernels with OMAP console (unfortunately U-Boot can't find out)
	setenv console		ttyO2,115200n8
	setenv defaultdisplay	lcd

	# load zipped/uncompressed image from mmc or nand wherever we find it
	setenv loadimg 'i2c dev 0; mmc rescan ${mmcdev}; if fatload mmc ${mmcdev} ${imgaddr} ${imgfile}.rgb16; then; elif fatload mmc ${mmcdev} ${imgtempaddr} ${imgfile}.rgb16z; then unzip ${imgtempaddr} ${imgaddr}; elif nand read ${imgtempaddr} ${imgnandaddr} 40000; then unzip ${imgtempaddr} ${imgaddr}; fi'
	setenv showimg 'run loadimg; lcm fb ${imgaddr};'

	# load kernel and boot script from mmc or nand wherever we find it

	setenv kernelloading 'status set 18'	# orange
	setenv kernelloaded 'status set 10'	# green

	setenv loadbootscript 'i2c dev 0; mmc rescan ${mmcdev}; if fatload mmc ${mmcdev} ${bootaddr} boot.scr; then echo did load bootscript from mmc; elif nand read ${bootaddr} 250000 10000; then echo did load bootscript from nand; fi'	
	setenv loadkernel 'run kernelloading; i2c dev 0; mmc rescan ${mmcdev}; if fatload mmc ${mmcdev} ${loadaddr} uImage; then run mmcargs; elif ext2load mmc 0:2 ${loadaddr} /boot/uImage; then run mmcargs; else nand read ${loadaddr} 280000 400000; run nandargs; fi; run kernelloaded'

	# set boot arguments
	setenv mmcargs 'setenv bootargs console=${console} mpurate=${mpurate} vram=${vram} omapfb.vram='0:8M,1:4M' omapfb.mode=dvi:${dvimode} omapfb.debug=y omapdss.def_disp=${defaultdisplay} root=${mmcroot} rootfstype=${mmcrootfstype}; echo using mmc rootfs; if fatload mmc ${mmcdev} ${imgtempaddr} bootargs.scr; then source ${imgtempaddr}; elif ext2load mmc 0:2 ${imgtempaddr} /boot/bootargs.scr; ; then source ${imgtempaddr}; fi'
	setenv mmcroot '/dev/mmcblk0p2 rw'
	setenv mmcrootfstype 'ext4,ext3,btrfs rootwait'

	setenv nandargs 'setenv bootargs console=${console} mpurate=${mpurate} vram=${vram} omapfb.vram='0:8M,1:4M' omapfb.mode=dvi:${dvimode} omapfb.debug=y omapdss.def_disp=${defaultdisplay} root=${nandroot} rootfstype=${nandrootfstype}; echo using nand rootfs'
	setenv nandroot '/dev/mtdblock4 rw'
	setenv nandrootfstype 'jffs2'

# as soon as we can use UBIFS, change this to
#	setenv nandroot 'ubi0:om-gta04-rootfs'
#	setenv nandrootfstype 'ubifs ubi.mtd=4,2048'

	# boot with kernel/rootfs from specified source (fallback to NAND for kernel; may call mmcargs twice)
	setenv mmcboot 'if run loadkernel; then run mmcargs; bootm ${loadaddr}; fi;'
	setenv nandboot 'run kernelloading; if nand read ${loadaddr} 280000 400000; then run nandargs; run kernelloaded; bootm ${loadaddr}; fi;'

	# run the boot script - and fall back to direct kernel boot
	setenv bootcmd 'if run loadbootscript; then run bootscript; elif run loadkernel; then bootm ${loadaddr}; fi;'
	setenv bootscript 'echo Running bootscript ...; source ${bootaddr}'

	# write script version number permanently (but only once)
	setenv gta04 "${VERSION}"
#	saveenv

	flash=yes
fi

echo *** initializing LCM ***
if lcm start || test "x${flash}" = "xyes"
then

	if test "x${flash}" != "xyes"
	then
		echo *** loading splash from MMC ***
		setenv imgaddr 80400000
		setenv imgfile splash
		setenv imgnandaddr 1d0000
		run showimg
	fi

	if test "x${flash}" = "xyes" || status check 1	# we want to flash or AUX button is (still) pressed
	then
		echo *** initializing TSC for boot menu ***
		tsc init
		while true
		do
			if test "x${flash}" != "xyes"
			then
				echo *** loading boot menu image ***
				setenv imgaddr 80600000
				setenv imgfile menu
				setenv imgnandaddr 210000
				run showimg

				tsc choose 2 3	# 2 columns 3 rows -> value 1 .. 6
				
				# restore boot image
				setenv imgaddr 80400000
				setenv imgfile splash
				setenv imgnandaddr 1d0000
				run showimg

			fi
			
			if tsc selection 1
			then
				echo *** LED mirror ***
				status mirror
			elif tsc selection 2
			then
				echo *** LED blink ***
				systest all
			elif tsc selection 3
			then 
				echo *** LCD boot ***
				setenv defaultdisplay lcd
				if run loadkernel; then bootm ${loadaddr}; fi
			elif tsc selection 4
			then
				echo *** DVI boot ***
				if run loadkernel
				then
					setenv bootdelay 10
					setenv defaultdisplay dvi	# this is not made persistent!
					setenv dvimode 1024x768MR-16@60
					lcm backlight 0
					lcm off
					lcm power 0
					bootm ${loadaddr}
				fi
			elif tsc selection 5
			then
				echo *** NAND boot ***
				run nandboot
			elif tsc selection 6
			then 
				echo *** - ***
				run mmcboot
## this was intended to be a demo
				while true
				do
				setenv imgfile img1
				run showimg
				sleep 3
				setenv imgfile img2
				run showimg
				sleep 3
				setenv imgfile img3
				run showimg
				sleep 3
				setenv imgfile img4
				run showimg
				sleep 3
				setenv imgfile img5
				run showimg
				sleep 3
				done
			elif tsc selection 7
			then 
				;
			elif test "x${flash}" = "xyes" || tsc selection 8
			then 
				echo *** NAND flash ***
				# note: MLO is configured to load U-Boot from MMC
				# while X-Loader is loading U-Boot from NAND

				status set 10
				i2c dev 0
				if fatload mmc 0 0x80200000 x-load.flash
				then
					status set 18
					echo *** flashing Xloader ***
#					nand unlock
					nandecc hw
					# write some copies
					nand erase 0 80000
					nand write 0x80200000 0 20000
					nand write 0x80200000 20000 20000
					nand write 0x80200000 40000 20000
					nand write 0x80200000 60000 20000
					echo *** Xloader flashed ***
				fi
				
				status set 10
				# the official u-boot partition goes from 0x80000 to 0x27ffff i.e. 2 MByte
				
				if fatload mmc 0 0x80300000 u-boot.bin
				then
					echo *** flashing U-Boot ***
					status set 18
					nandecc sw
					nand erase 80000 1e0000
					nand write 0x80300000 80000 150000
					echo *** write our environment ***
					saveenv

					# read&write compressed splash image to nand
					# there is just room for 614 kByte
					# since u-boot is approx 260 kByte

					status set 10
					if fatload mmc 0 0x80300000 splash.rgb16z
						then
						echo *** flashing splash ***
						status set 18
						nandecc sw
						nand write 0x80300000 1d0000 40000
						status set 10
					fi

					status set 10
					if fatload mmc 0 0x80300000 menu.rgb16z
						then
						echo *** flashing menu ***
						status set 18
						nandecc sw
						nand write 0x80300000 210000 40000
						status set 18
					fi

					status set 10
					if fatload mmc 0 0x80300000 boot.scr
						then
						echo *** flashing boot.scr ***
						status set 18
						nandecc sw
						nand write 0x80300000 250000 10000
					fi
					echo *** U-Boot flashed ***
				fi

if false # don't overwrite the kernel just because we have modified the boot script version
then
				status set 10
				if fatload mmc 0 0x80300000 uImage
				then
					echo *** flashing Kernel (max. 4 MByte) ***
					nandecc sw
					nand erase 280000 400000
					nand write 0x80300000 280000 400000
					status set 18
				fi
fi
				
				# can we flash a rootfs from MMC?
				# currently no
				# we would need jffs2 and tar/cp -R support

				status set 8
				flash=no	# don't flash again
				
				echo
				echo *********************************
				echo *** Flashing Done             ***
				echo *** Device will boot from MMC ***
				echo *********************************
				echo
				run mmcboot
				# if u-boot had a "reboot" command we should use it here...
			else
				echo *** Could not decode ***
				status blink
			fi
		done
	else	# default boot w/o menu
		echo *** booting Linux ***
		if run loadkernel
		then 
#			lcm backlight 0	# switch off before booting (?)
			printenv
			lcm power 0
			lcm off	# avoid wash-out
			bootm ${loadaddr}
		fi
	fi
else	# LCM did not init (e.g. we run without display)
	echo *** DVI boot ***
	if run loadkernel
	then
		setenv bootdelay 10
		setenv defaultdisplay dvi
		setenv dvimode 1024x768MR-16@60
		bootm ${loadaddr}
	fi
fi

echo *** Could not run ***
status blink