mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-13 00:03:26 +09:00
![Rasmus Villemoes](/assets/img/avatar_default.png)
When flush_cache() is called during boot on our ~7M kernel image, the hundreds of thousands of WATCHDOG_RESET calls end up adding significantly to boottime. Flushing a single cache line doesn't take many microseconds, so doing these calls for every cache line is complete overkill. The generic watchdog_reset() provided by wdt-uclass.c actually contains some rate-limiting logic that should in theory mitigate this, but alas, that rate-limiting must be disabled on powerpc because of its get_timer() implementation - get_timer() works just fine until interrupts are disabled, but it just so happens that the "big" flush_cache() call happens in the part of bootm where interrupts are indeed disabled. [1] [2] [3] I have checked with objdump that the generated code doesn't change when this option is left at its default value of 0: gcc is smart enough to see that the ">=" comparison is tautologically true, hence all assignments to "flushed" are eliminated as dead stores. On our board, setting the option to something like 65536 ends up reducing total boottime by about 0.8 seconds. [1] https://patchwork.ozlabs.org/project/uboot/patch/20200605111657.28773-1-rasmus.villemoes@prevas.dk/ [2] https://lists.denx.de/pipermail/u-boot/2021-April/446906.html [3] https://lists.denx.de/pipermail/u-boot/2021-April/447280.html Reviewed-by: Stefan Roese <sr@denx.de> Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
55 lines
1005 B
Plaintext
55 lines
1005 B
Plaintext
menu "PowerPC architecture"
|
|
depends on PPC
|
|
|
|
config SYS_ARCH
|
|
default "powerpc"
|
|
|
|
choice
|
|
prompt "CPU select"
|
|
optional
|
|
|
|
config MPC83xx
|
|
bool "MPC83xx"
|
|
select CREATE_ARCH_SYMLINK
|
|
select SYS_FSL_HAS_SEC
|
|
select SYS_FSL_SEC_BE
|
|
select SYS_FSL_SEC_COMPAT_2
|
|
|
|
config MPC85xx
|
|
bool "MPC85xx"
|
|
select CREATE_ARCH_SYMLINK
|
|
select SYS_FSL_DDR
|
|
select SYS_FSL_DDR_BE
|
|
select BINMAN if OF_SEPARATE
|
|
imply CMD_HASH
|
|
imply CMD_IRQ
|
|
imply USB_EHCI_HCD if USB
|
|
|
|
config MPC86xx
|
|
bool "MPC86xx"
|
|
select SYS_FSL_DDR
|
|
select SYS_FSL_DDR_BE
|
|
imply CMD_REGINFO
|
|
|
|
config MPC8xx
|
|
bool "MPC8xx"
|
|
select BOARD_EARLY_INIT_F
|
|
imply CMD_REGINFO
|
|
imply WDT_MPC8xx
|
|
|
|
endchoice
|
|
|
|
config HIGH_BATS
|
|
bool "Enable high BAT registers"
|
|
help
|
|
Enable BATs (block address translation registers) 4-7 on machines
|
|
that support them.
|
|
|
|
source "arch/powerpc/cpu/mpc83xx/Kconfig"
|
|
source "arch/powerpc/cpu/mpc85xx/Kconfig"
|
|
source "arch/powerpc/cpu/mpc86xx/Kconfig"
|
|
source "arch/powerpc/cpu/mpc8xx/Kconfig"
|
|
source "arch/powerpc/lib/Kconfig"
|
|
|
|
endmenu
|