forked from mirrors/linux
		
	omap2_wd_timer_disable is declared in wdtimer.h and used by hwmod function pointers for usage, the header inclusion is necessary to ensure that the prototype and function remains consistent. omap_wdt_latency is passed as a pointer and does not need global scope Fixes sparse warnings: arch/arm/mach-omap2/devices.c:981:31: warning: symbol 'omap_wdt_latency' was not declared. Should it be static? arch/arm/mach-omap2/wd_timer.c:27:5: warning: symbol 'omap2_wd_timer_disable' was not declared. Should it be static? Signed-off-by: Nishanth Menon <nm@ti.com> Signed-off-by: Tony Lindgren <tony@atomide.com>
		
			
				
	
	
		
			56 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * OMAP2+ MPU WD_TIMER-specific code
 | 
						|
 *
 | 
						|
 * This program is free software; you can redistribute it and/or modify
 | 
						|
 * it under the terms of the GNU General Public License as published by
 | 
						|
 * the Free Software Foundation; either version 2 of the License, or
 | 
						|
 * (at your option) any later version.
 | 
						|
 */
 | 
						|
 | 
						|
#include <linux/kernel.h>
 | 
						|
#include <linux/io.h>
 | 
						|
#include <linux/err.h>
 | 
						|
 | 
						|
#include <plat/omap_hwmod.h>
 | 
						|
 | 
						|
#include "wd_timer.h"
 | 
						|
 | 
						|
/*
 | 
						|
 * In order to avoid any assumptions from bootloader regarding WDT
 | 
						|
 * settings, WDT module is reset during init. This enables the watchdog
 | 
						|
 * timer. Hence it is required to disable the watchdog after the WDT reset
 | 
						|
 * during init. Otherwise the system would reboot as per the default
 | 
						|
 * watchdog timer registers settings.
 | 
						|
 */
 | 
						|
#define OMAP_WDT_WPS		0x34
 | 
						|
#define OMAP_WDT_SPR		0x48
 | 
						|
 | 
						|
 | 
						|
int omap2_wd_timer_disable(struct omap_hwmod *oh)
 | 
						|
{
 | 
						|
	void __iomem *base;
 | 
						|
 | 
						|
	if (!oh) {
 | 
						|
		pr_err("%s: Could not look up wdtimer_hwmod\n", __func__);
 | 
						|
		return -EINVAL;
 | 
						|
	}
 | 
						|
 | 
						|
	base = omap_hwmod_get_mpu_rt_va(oh);
 | 
						|
	if (!base) {
 | 
						|
		pr_err("%s: Could not get the base address for %s\n",
 | 
						|
				oh->name, __func__);
 | 
						|
		return -EINVAL;
 | 
						|
	}
 | 
						|
 | 
						|
	/* sequence required to disable watchdog */
 | 
						|
	__raw_writel(0xAAAA, base + OMAP_WDT_SPR);
 | 
						|
	while (__raw_readl(base + OMAP_WDT_WPS) & 0x10)
 | 
						|
		cpu_relax();
 | 
						|
 | 
						|
	__raw_writel(0x5555, base + OMAP_WDT_SPR);
 | 
						|
	while (__raw_readl(base + OMAP_WDT_WPS) & 0x10)
 | 
						|
		cpu_relax();
 | 
						|
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 |