u-boot/arch
Patrick Delaunay 7e8471cae5 arm: stm32mp: activate data cache in SPL and before relocation
Activate the data cache in SPL and in U-Boot before relocation.

In arch_cpu_init(), the function early_enable_caches() sets the early
TLB, early_tlb[] located .init section, and set cacheable:
- for SPL, all the SYSRAM
- for U-Boot, all the DDR

After relocation, the function enable_caches() (called by board_r)
reconfigures the MMU with new TLB location (reserved in
board_f.c::reserve_mmu) and re-enable the data cache.

This patch allows to reduce the execution time, particularly
- for the device tree parsing in U-Boot pre-reloc stage
  (dm_extended_scan_fd =>dm_scan_fdt)
- in I2C timing computation in SPL (stm32_i2c_choose_solution())

For example, the result on STM32MP157C-DK2 board is:
   1,6s gain for trusted boot chain with TF-A
   2,2s gain for basic boot chain with SPL

For information, as TLB is added in .data section, the binary size
increased and the SPL load time by ROM code increased (30ms on DK2).

But early malloc can't be used for TLB because arch_cpu_init()
is executed before the early poll initialization done in spl_common_init()
called by spl_early_init() So it too late for this use case.
And if I initialize the MMU and the cache after this function it is
too late, as dm_init_and_scan and fdt parsing is also called in
spl_common_init().

And .BSS can be used in board_init_f(): only stack and global can use
before BSS init done in board_init_r().

So .data is the better solution without hardcoded location but if you
have size issue for SPL you can deactivate cache for SPL only
(with CONFIG_SPL_SYS_DCACHE_OFF).

Reviewed-by: Patrice Chotard <patrice.chotard@st.com>
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
2020-05-14 09:02:12 +02:00
..
arc ARC: AXS10x: cleanup kconfig 2020-04-27 15:04:42 +03:00
arm arm: stm32mp: activate data cache in SPL and before relocation 2020-05-14 09:02:12 +02:00
m68k kconfig / kbuild: Re-sync with Linux 4.19 2020-04-10 11:18:32 -04:00
microblaze Kconfig: Remove redundant variable sets 2020-03-16 16:42:50 -04:00
mips mips: Add support for SoM "VoCore2". 2020-04-27 20:30:14 +02:00
nds32 dma-mapping: move dma_map_(un)single() to <linux/dma-mapping.h> 2020-02-19 21:27:30 +08:00
nios2 common: Move hang() to the same header as panic() 2020-01-24 23:06:49 +05:30
powerpc powerpc: dts: p1010: add i2c node 2020-05-04 09:12:37 +05:30
riscv sifive: fu540: Enable spi-nor flash support 2020-04-30 22:34:20 +05:30
sandbox test: dm: update test for open-drain/open-source emulation in gpio-uclass 2020-05-11 15:12:56 +02:00
sh dma-mapping: add <asm/dma-mapping.h> for all architectures 2020-02-20 15:09:54 +08:00
x86 x86: coreboot: Allow building an SPL image 2020-05-04 15:28:28 +08:00
xtensa dma-mapping: add <asm/dma-mapping.h> for all architectures 2020-02-20 15:09:54 +08:00
.gitignore
Kconfig sandbox: implement ft_board_setup() 2020-04-16 08:07:58 -06:00
u-boot-elf.lds arch: Add explicit linker script for u-boot-elf 2020-04-03 11:52:55 -04:00