watchdog: Move watchdog_dev to data section (BSS may not be cleared)
This patch moves all instances of static "watchdog_dev" declarations to the "data" section. This may be needed, as the BSS may not be cleared in the early U-Boot phase, where watchdog_reset() is already beeing called. This may result in incorrect pointer access, as the check to "!watchdog_dev" in watchdog_reset() may not be true and the function may continue to run. Signed-off-by: Stefan Roese <sr@denx.de> Cc: Heiko Schocher <hs@denx.de> Cc: Tom Rini <trini@konsulko.com> Cc: Michal Simek <michal.simek@xilinx.com> Cc: "Marek Behún" <marek.behun@nic.cz> Cc: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> Tested-by: Michal Simek <michal.simek@xilinx.com> (on zcu100) Reviewed-by: Michal Simek <michal.simek@xilinx.com>
This commit is contained in:
parent
afbc31948a
commit
ccd063e981
@ -70,7 +70,7 @@ int print_cpuinfo(void)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_WATCHDOG
|
||||
static struct udevice *watchdog_dev;
|
||||
static struct udevice *watchdog_dev __attribute__((section(".data"))) = NULL;
|
||||
|
||||
/* Called by macro WATCHDOG_RESET */
|
||||
void watchdog_reset(void)
|
||||
|
@ -120,7 +120,7 @@ int board_fix_fdt(void *blob)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_WDT_ARMADA_37XX
|
||||
static struct udevice *watchdog_dev;
|
||||
static struct udevice *watchdog_dev __attribute__((section(".data"))) = NULL;
|
||||
|
||||
void watchdog_reset(void)
|
||||
{
|
||||
|
@ -365,7 +365,7 @@ static bool disable_mcu_watchdog(void)
|
||||
#endif
|
||||
|
||||
#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT_ORION)
|
||||
static struct udevice *watchdog_dev = NULL;
|
||||
static struct udevice *watchdog_dev __attribute__((section(".data"))) = NULL;
|
||||
#endif
|
||||
|
||||
int board_init(void)
|
||||
|
@ -25,7 +25,7 @@
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT)
|
||||
static struct udevice *watchdog_dev;
|
||||
static struct udevice *watchdog_dev __attribute__((section(".data"))) = NULL;
|
||||
#endif /* !CONFIG_SPL_BUILD && CONFIG_WDT */
|
||||
|
||||
ulong ram_base;
|
||||
|
@ -19,17 +19,12 @@
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT)
|
||||
static struct udevice *watchdog_dev;
|
||||
static struct udevice *watchdog_dev __attribute__((section(".data"))) = NULL;
|
||||
#endif
|
||||
|
||||
#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_BOARD_EARLY_INIT_F)
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
# if defined(CONFIG_WDT)
|
||||
/* bss is not cleared at time when watchdog_reset() is called */
|
||||
watchdog_dev = NULL;
|
||||
# endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
@ -25,7 +25,7 @@
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT)
|
||||
static struct udevice *watchdog_dev;
|
||||
static struct udevice *watchdog_dev __attribute__((section(".data"))) = NULL;
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_ZYNQMPPL) && \
|
||||
@ -322,11 +322,6 @@ int board_early_init_f(void)
|
||||
ret = psu_init();
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_WDT) && !defined(CONFIG_SPL_BUILD)
|
||||
/* bss is not cleared at time when watchdog_reset() is called */
|
||||
watchdog_dev = NULL;
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user