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