1 # SPDX-License-Identifier: GPL-2.0-or-later
4 # - There are a combination of Cortex-A57s, Cortex-A53s, Cortex-A55, Cortex-R7
5 # and Cortex-M33 for each SOC
6 # - Each SOC can boot through the Cortex-A5x cores
8 # Supported RZ/G2 SOCs and their cores:
9 # RZ/G2H: Cortex-A57 x4, Cortex-A53 x4, Cortex-R7
10 # RZ/G2M: Cortex-A57 x2, Cortex-A53 x4, Cortex-R7
11 # RZ/G2N: Cortex-A57 x2, Cortex-R7
12 # RZ/G2E: Cortex-A53 x2, Cortex-R7
13 # RZ/G2L: Cortex-A55 x2, Cortex-M33
14 # RZ/G2LC: Cortex-A55 x2, Cortex-M33
15 # RZ/G2UL: Cortex-A55 x1, Cortex-M33
18 # There are 2 configuration options:
19 # SOC: Selects the supported SOC. (Default 'G2L')
20 # BOOT_CORE: Selects the booting core. 'CA57', 'CA53' or 'CA55'
23 reset_config trst_and_srst srst_gates_jtag
25 adapter srst delay 500
27 if { [info exists SOC] } {
39 # Set configuration for each SOC and the default 'BOOT_CORE'
42 set _CHIPNAME r8a774ex
50 set _CHIPNAME r8a774ax
58 set _CHIPNAME r8a774bx
66 set _CHIPNAME r8a774c0
74 set _CHIPNAME r9a07g044l
81 set _CHIPNAME r9a07g044c
88 set _CHIPNAME r9a07g043u
95 error "'$_soc' is invalid!"
99 # If configured, override the default 'CHIPNAME'
100 if { [info exists CHIPNAME] } {
101 set _CHIPNAME $CHIPNAME
104 # If configured, override the default 'BOOT_CORE'
105 if { [info exists BOOT_CORE] } {
106 set _boot_core $BOOT_CORE
109 if { [info exists DAP_TAPID] } {
110 set _DAP_TAPID $DAP_TAPID
112 set _DAP_TAPID 0x6ba00477
115 echo "\t$_soc - $_num_ca57 CA57(s), $_num_ca55 CA55(s), $_num_ca53 CA53(s), $_num_cr7 CR7(s), \
117 echo "\tBoot Core - $_boot_core\n"
119 set _DAPNAME $_CHIPNAME.dap
123 jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_DAP_TAPID \
125 dap create $_DAPNAME -chain-position $_CHIPNAME.cpu
126 echo "$_CHIPNAME.cpu"
128 set CA57_DBGBASE {0x80410000 0x80510000 0x80610000 0x80710000}
129 set CA57_CTIBASE {0x80420000 0x80520000 0x80620000 0x80720000}
130 set CA55_DBGBASE {0x10E10000 0x10F10000}
131 set CA55_CTIBASE {0x10E20000 0x10F20000}
132 set CA53_DBGBASE {0x80C10000 0x80D10000 0x80E10000 0x80F10000}
133 set CA53_CTIBASE {0x80C20000 0x80D20000 0x80E20000 0x80F20000}
134 set CR7_DBGBASE 0x80910000
135 set CR7_CTIBASE 0x80918000
136 set CM33_DBGBASE 0xE000E000
137 set CM33_CTIBASE 0xE0042000
141 proc setup_a5x {core_name dbgbase ctibase num boot} {
142 for { set _core 0 } { $_core < $num } { incr _core } {
143 set _TARGETNAME $::_CHIPNAME.$core_name.$_core
144 set _CTINAME $_TARGETNAME.cti
145 cti create $_CTINAME -dap $::_DAPNAME -ap-num $::_ap_num \
146 -baseaddr [lindex $ctibase $_core]
147 target create $_TARGETNAME aarch64 -dap $::_DAPNAME \
148 -ap-num $::_ap_num -dbgbase [lindex $dbgbase $_core] -cti $_CTINAME
149 if { $_core > 0 || $boot == 0 } {
150 $_TARGETNAME configure -defer-examine
152 set ::smp_targets "$::smp_targets $_TARGETNAME"
156 proc setup_cr7 {dbgbase ctibase} {
157 set _TARGETNAME $::_CHIPNAME.r7
158 set _CTINAME $_TARGETNAME.cti
159 cti create $_CTINAME -dap $::_DAPNAME -ap-num 1 -baseaddr $ctibase
160 target create $_TARGETNAME cortex_r4 -dap $::_DAPNAME \
161 -ap-num 1 -dbgbase $dbgbase -defer-examine
164 proc setup_cm33 {dbgbase ctibase} {
165 set _TARGETNAME $::_CHIPNAME.m33
166 set _CTINAME $_TARGETNAME.cti
167 cti create $_CTINAME -dap $::_DAPNAME -ap-num 2 -baseaddr $ctibase
168 target create $_TARGETNAME cortex_m -dap $::_DAPNAME \
169 -ap-num 2 -dbgbase $dbgbase -defer-examine
172 # Organize target list based on the boot core
173 if { $_boot_core == "CA57" } {
174 setup_a5x a57 $CA57_DBGBASE $CA57_CTIBASE $_num_ca57 1
175 setup_a5x a53 $CA53_DBGBASE $CA53_CTIBASE $_num_ca53 0
176 setup_cr7 $CR7_DBGBASE $CR7_CTIBASE
177 } elseif { $_boot_core == "CA53" } {
178 setup_a5x a53 $CA53_DBGBASE $CA53_CTIBASE $_num_ca53 1
179 setup_a5x a57 $CA57_DBGBASE $CA57_CTIBASE $_num_ca57 0
180 setup_cr7 $CR7_DBGBASE $CR7_CTIBASE
181 } elseif { $_boot_core == "CA55" } {
182 setup_a5x a55 $CA55_DBGBASE $CA55_CTIBASE $_num_ca55 1
183 setup_cm33 $CM33_DBGBASE $CM33_CTIBASE
185 echo "SMP targets:$smp_targets"
186 eval "target smp $smp_targets"
188 if { $_soc == "G2L" || $_soc == "G2LC" || $_soc == "G2UL" } {
189 target create $_CHIPNAME.axi_ap mem_ap -dap $_DAPNAME -ap-num 1
192 proc init_reset {mode} {
193 # Assert both resets: equivalent to a power-on reset
194 adapter assert trst assert srst
196 # Deassert TRST to begin TAP communication
197 adapter deassert trst assert srst
199 # TAP should now be responsive, validate the scan-chain