u-boot-brain/arch
Rasmus Villemoes 4b37a83dc4 powerpc: introduce CONFIG_CACHE_FLUSH_WATCHDOG_THRESHOLD
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>
2021-04-28 10:05:13 +02:00
..
arc lmb: move CONFIG_LMB in Kconfig 2021-04-22 14:09:45 -04:00
arm sunxi: DT: A64: Update devicetree files from Linux 5.12 2021-04-28 10:05:12 +02:00
m68k allow opting out of WATCHDOG_RESET() from timer interrupt 2021-04-28 10:05:13 +02:00
microblaze lmb: move CONFIG_LMB in Kconfig 2021-04-22 14:09:45 -04:00
mips mips: octeon: ebb7304: Add support for some I2C devices 2021-04-28 10:05:12 +02:00
nds32 lmb: move CONFIG_LMB in Kconfig 2021-04-22 14:09:45 -04:00
nios2 common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
powerpc powerpc: introduce CONFIG_CACHE_FLUSH_WATCHDOG_THRESHOLD 2021-04-28 10:05:13 +02:00
riscv lmb: move CONFIG_LMB in Kconfig 2021-04-22 14:09:45 -04:00
sandbox Merge tag 'ti-v2021.07-rc1' of https://source.denx.de/u-boot/custodians/u-boot-ti 2021-04-18 08:46:39 -04:00
sh lmb: move CONFIG_LMB in Kconfig 2021-04-22 14:09:45 -04:00
x86 lmb: move CONFIG_LMB in Kconfig 2021-04-22 14:09:45 -04:00
xtensa lmb: move CONFIG_LMB in Kconfig 2021-04-22 14:09:45 -04:00
.gitignore
Kconfig sandbox: enable IRQ using select for sandbox architecture 2021-04-20 07:31:35 -04:00
u-boot-elf.lds arch: Add explicit linker script for u-boot-elf 2020-04-03 11:52:55 -04:00