Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18799911 authored by Vaibhav Hiremath's avatar Vaibhav Hiremath Committed by Tony Lindgren
Browse files

ARM: OMAP1: Add checks for possible error condition in timer_init



On OMAP1, omap_32k_timer_init() function always returns "true",
irrespective of whether error occurred while initializing 32k sync
counter as a kernel clocksource or not and execution will never
fallback to mpu_timer clocksource init code.

This patch adds check for return value from function
omap_init_clocksource_32k(), and fallback to omap_mpu_timer_init()
in case of failure/error from omap_init_clocksource_32k().

Signed-off-by: default avatarVaibhav Hiremath <hvaibhav@ti.com>
Acked-by: default avatarKevin Hilman <khilman@ti.com>
Tested-by: default avatarKevin Hilman <khilman@ti.com>
Cc: Paul Walmsley <paul@pwsan.com>
Cc: Benoit Cousson <b-cousson@ti.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent bfd17879
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -57,7 +57,14 @@ void omap1_init_irq(void);
void omap1_restart(char, const char *);

extern struct sys_timer omap1_timer;
extern bool omap_32k_timer_init(void);
#ifdef CONFIG_OMAP_32K_TIMER
extern int omap_32k_timer_init(void);
#else
static inline int __init omap_32k_timer_init(void)
{
	return -ENODEV;
}
#endif
extern void __init omap_init_consistent_dma_size(void);

#endif /* __ARCH_ARM_MACH_OMAP1_COMMON_H */
+1 −15
Original line number Diff line number Diff line
@@ -232,20 +232,6 @@ static inline void omap_mpu_timer_init(void)
}
#endif	/* CONFIG_OMAP_MPU_TIMER */

static inline int omap_32k_timer_usable(void)
{
	int res = false;

	if (cpu_is_omap730() || cpu_is_omap15xx())
		return res;

#ifdef CONFIG_OMAP_32K_TIMER
	res = omap_32k_timer_init();
#endif

	return res;
}

/*
 * ---------------------------------------------------------------------------
 * Timer initialization
@@ -253,7 +239,7 @@ static inline int omap_32k_timer_usable(void)
 */
static void __init omap1_timer_init(void)
{
	if (!omap_32k_timer_usable())
	if (omap_32k_timer_init() != 0)
		omap_mpu_timer_init();
}

+9 −4
Original line number Diff line number Diff line
@@ -182,10 +182,15 @@ static __init void omap_init_32k_timer(void)
 * Timer initialization
 * ---------------------------------------------------------------------------
 */
bool __init omap_32k_timer_init(void)
int __init omap_32k_timer_init(void)
{
	omap_init_clocksource_32k();
	int ret = -ENODEV;

	if (cpu_is_omap16xx())
		ret = omap_init_clocksource_32k();

	if (!ret)
		omap_init_32k_timer();

	return true;
	return ret;
}