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 }
|