summaryrefslogtreecommitdiffstats
path: root/Documentation/boards/imx/zii-imx8mq-dev/openocd.cfg
blob: fa25348757afb147e2f8fae17e07910ec3a0f0e3 (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
#
# Board configuration file for the Zodiac RDU3 boards
#

interface ftdi
ftdi_vid_pid 0x0403 0x6011

ftdi_layout_init 0x0038 0x003b
ftdi_layout_signal nSRST -data 0x0010
ftdi_layout_signal LED -data 0x0020

# select JTAG
transport select jtag

reset_config srst_only srst_push_pull connect_deassert_srst

# set a slow default JTAG clock, can be overridden later
adapter_khz 1000

# delay after SRST goes inactive
adapter_nsrst_delay 70

# board has an i.MX8MQ with 4 Cortex-A53 cores
set CHIPNAME imx8mq
set CHIPCORES 4

# source SoC configuration
source [find target/imx8m.cfg]
source [find mem_helper.tcl]

proc ddr_init { } {
	echo "Bootstrap: Initializing DDR"
	#
	# We use the same start address as is configured in our i.MX boot
	# header (address originally taken from U-Boot).
	#
	set IMX8MQ_TCM_BASE_ADDR	0x007e1000
	set IMX8MQ_TCM_MAX_SIZE	0x3f000
	#
	# Header word at offset 0x28 is not used on AArch64 and is just
	# filled with placeholder value 0xffff_ffff, see
	# arch/arm/include/asm/barebox-arm-head.h for more details
	#
	set RDU3_TCM_MAIC_LOCATION	[expr $IMX8MQ_TCM_BASE_ADDR + 0x28]
	set RDU3_TCM_MAGIC_REQUEST	0xdeadbeef
	set RDU3_TCM_MAGIC_REPLY	0xbaadf00d

	echo "Bootstrap: Uploading DDR helper"

	halt
	load_image images/start_zii_imx8mq_dev.pblb \
		$IMX8MQ_TCM_BASE_ADDR \
		bin \
		$IMX8MQ_TCM_BASE_ADDR \
		$IMX8MQ_TCM_MAX_SIZE

	echo "Bootstrap: Running DDR helper"

	mww phys $RDU3_TCM_MAIC_LOCATION $RDU3_TCM_MAGIC_REQUEST
	resume $IMX8MQ_TCM_BASE_ADDR

	echo "Bootstrap: Waiting for DDR helper to finish"

	if {[catch {wait_halt} errmsg] ||
	    [mrw $RDU3_TCM_MAIC_LOCATION] != $RDU3_TCM_MAGIC_REPLY} {
		echo "Bootstrap: DDR initialization FAILED"
	} else {
		echo "Bootstrap: DDR is ready"
	}
}

proc start_barebox {} {
	#
	# We have to place our image at MX8M_ATF_BL33_BASE_ADDR in order
	# to be able to initialize ATF firmware since that's where it
	# expects entry point to BL33 would be
	#
	set MX8M_ATF_BL33_BASE_ADDR	0x40200000
	echo "Bootstrap: Loading Barebox"
	load_image images/start_zii_imx8mq_dev.pblb $MX8M_ATF_BL33_BASE_ADDR bin
	echo [format "Bootstrap: Jumping to 0x%08x" $MX8M_ATF_BL33_BASE_ADDR]
	resume $MX8M_ATF_BL33_BASE_ADDR
}

proc board_init { } {
	ddr_init
}

${_TARGETNAME}.0 configure -event reset-init { board_init }