diff options
| author | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-03-16 23:35:25 +0000 | 
|---|---|---|
| committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-03-16 23:35:25 +0000 | 
| commit | 1f0090a1eaa1b750a2fc5c99c91b790d5322a1fd (patch) | |
| tree | c685060f260410e6704c9dfd457ed8c347141f1d /arch/arm/mm/cache-l2x0.c | |
| parent | 2472f3c8d8fc18b25b2cf1574c036e238187c0ff (diff) | |
| parent | 10a8c3839810ac9af1aec836d61b92e7a879f5fa (diff) | |
Merge branch 'misc' into devel
Conflicts:
	arch/arm/Kconfig
Diffstat (limited to 'arch/arm/mm/cache-l2x0.c')
| -rw-r--r-- | arch/arm/mm/cache-l2x0.c | 32 | 
1 files changed, 18 insertions, 14 deletions
| diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c index f2ce38e085d2..ef59099a5463 100644 --- a/arch/arm/mm/cache-l2x0.c +++ b/arch/arm/mm/cache-l2x0.c @@ -73,18 +73,24 @@ static inline void l2x0_inv_line(unsigned long addr)  	writel_relaxed(addr, base + L2X0_INV_LINE_PA);  } -#ifdef CONFIG_PL310_ERRATA_588369 -static void debug_writel(unsigned long val) -{ -	extern void omap_smc1(u32 fn, u32 arg); +#if defined(CONFIG_PL310_ERRATA_588369) || defined(CONFIG_PL310_ERRATA_727915) -	/* -	 * Texas Instrument secure monitor api to modify the -	 * PL310 Debug Control Register. -	 */ -	omap_smc1(0x100, val); +#define debug_writel(val)	outer_cache.set_debug(val) + +static void l2x0_set_debug(unsigned long val) +{ +	writel_relaxed(val, l2x0_base + L2X0_DEBUG_CTRL);  } +#else +/* Optimised out for non-errata case */ +static inline void debug_writel(unsigned long val) +{ +} + +#define l2x0_set_debug	NULL +#endif +#ifdef CONFIG_PL310_ERRATA_588369  static inline void l2x0_flush_line(unsigned long addr)  {  	void __iomem *base = l2x0_base; @@ -97,11 +103,6 @@ static inline void l2x0_flush_line(unsigned long addr)  }  #else -/* Optimised out for non-errata case */ -static inline void debug_writel(unsigned long val) -{ -} -  static inline void l2x0_flush_line(unsigned long addr)  {  	void __iomem *base = l2x0_base; @@ -125,9 +126,11 @@ static void l2x0_flush_all(void)  	/* clean all ways */  	spin_lock_irqsave(&l2x0_lock, flags); +	debug_writel(0x03);  	writel_relaxed(l2x0_way_mask, l2x0_base + L2X0_CLEAN_INV_WAY);  	cache_wait_way(l2x0_base + L2X0_CLEAN_INV_WAY, l2x0_way_mask);  	cache_sync(); +	debug_writel(0x00);  	spin_unlock_irqrestore(&l2x0_lock, flags);  } @@ -335,6 +338,7 @@ void __init l2x0_init(void __iomem *base, __u32 aux_val, __u32 aux_mask)  	outer_cache.flush_all = l2x0_flush_all;  	outer_cache.inv_all = l2x0_inv_all;  	outer_cache.disable = l2x0_disable; +	outer_cache.set_debug = l2x0_set_debug;  	printk(KERN_INFO "%s cache controller enabled\n", type);  	printk(KERN_INFO "l2x0: %d ways, CACHE_ID 0x%08x, AUX_CTRL 0x%08x, Cache size: %d B\n", | 
