summaryrefslogtreecommitdiffstats
path: root/Documentation/boards/imx/zii-imx8mq-dev/openocd.cfg
blob: 31f94227e61a1d61e5960b8496b5f8b1b5529cfa (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
interface ftdi
ftdi_vid_pid 0x0403 0x6011

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

# Board has a standard ARM-20 JTAG connector with
# nSRST available.
reset_config srst_only srst_push_pull connect_deassert_srst

# select JTAG
transport select jtag

# 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 { } {
     #
     # 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 "==== 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 "==== Running DDR helper ===="

     mww phys $RDU3_TCM_MAIC_LOCATION $RDU3_TCM_MAGIC_REQUEST
     resume $IMX8MQ_TCM_BASE_ADDR

     echo "==== Waiting for DDR helper to finish ===="

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

proc start_barebox {} {
     #
     # We have to place our image at MX8MQ_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 MX8MQ_ATF_BL33_BASE_ADDR	0x40200000

     echo "==== Starting Barebox ===="
     load_image images/start_zii_imx8mq_dev.pblb $MX8MQ_ATF_BL33_BASE_ADDR bin
     resume $MX8MQ_ATF_BL33_BASE_ADDR
}

# proc board_init { } {
# 	ddr_init
# }

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