Could someone suggest a way to change the boot value of a control register (e.g. ACTLR)? It seems like i'd want to do it in bl31:bl31_arch_setup(), but does each CPU go through bl31 or just the boot CPU? If I was just interested in the A7s is there a way to only boot them?
Thanks,
Ali
The SCC General Purpose Register 1 (SCC GPR1) can be used to determine the boot CPUs. The layout of SCC GPR1 is as follows:
0 - Crypto Disable
1 - CFGTE
2 - CFGEE
3 - Boot Map Enable (default = 0)
4 - A53-0
5 - A53-1
6 - A53-2
7 - A53-3
8 - A57-0
9 - A57-1
10 - Reserved
11 - Reserved
[15:12] - Primary CPU selection. Index values 0 through 5, following
the order of cores above.
To set the Cortex-A57 as the boot cluster and Cortex-A57_0 as the primary CPU you will need to set bit 3 to enable the boot map, set bits 8,9 to select the A57s and finally setting [15:12] to 0x4 so that Cortex-A57_0 is considered the primary CPU. You will need to add the following SCC entry to the 'board.txt' file located in "E:\SITE1\HBI0262B":
SCC: 0x0F4 0x00004308 ;
This will determine what CPUs are brought out of reset by the SCP. This said, the AP Trusted firmware was hardcoded to use Cortex-A53_0 as the primary CPU.
To change the primary CPU in the AP Trusted Firmware, the PRIMARY_CPU entry in 'plat/juno/platform.h' will need to be altered. Steps describing how to re-build the AP Trusted firmware can be found on the 'Juno Software Guide ' page.
Regarding where system configurations such as setting the ACTLR should be performed, we would recommend either cpu_reset_handler() in BL1 or it can be done in bl31_arch_setup().
Thanks Luke!
I have a few more questions. If I only want to boot the the A53 cores then I'd write the following?
SCC: 0x0F4 0x000000F0
Does bl31_arch_setup() get called for each core, or just the boot core?
Thanks again,