sh: hwblk: Kill off remaining bits of hwblk API.
Now that everything has been migrated, kill off the remaining infrastructure bits. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
This commit is contained in:
		
							parent
							
								
									ec20a81562
								
							
						
					
					
						commit
						cfc806a7ee
					
				| @ -1,74 +0,0 @@ | ||||
| #ifndef __ASM_SH_HWBLK_H | ||||
| #define __ASM_SH_HWBLK_H | ||||
| 
 | ||||
| #include <asm/clock.h> | ||||
| #include <asm/io.h> | ||||
| 
 | ||||
| #define HWBLK_CNT_USAGE 0 | ||||
| #define HWBLK_CNT_IDLE 1 | ||||
| #define HWBLK_CNT_DEVICES 2 | ||||
| #define HWBLK_CNT_NR 3 | ||||
| 
 | ||||
| #define HWBLK_AREA_FLAG_PARENT (1 << 0) /* valid parent */ | ||||
| 
 | ||||
| #define HWBLK_AREA(_flags, _parent)		\ | ||||
| {						\ | ||||
| 	.flags = _flags,			\ | ||||
| 	.parent = _parent,			\ | ||||
| } | ||||
| 
 | ||||
| struct hwblk_area { | ||||
| 	int cnt[HWBLK_CNT_NR]; | ||||
| 	unsigned char parent; | ||||
| 	unsigned char flags; | ||||
| }; | ||||
| 
 | ||||
| #define HWBLK(_mstp, _bit, _area)		\ | ||||
| {						\ | ||||
| 	.mstp = (void __iomem *)_mstp,		\ | ||||
| 	.bit = _bit,				\ | ||||
| 	.area = _area,				\ | ||||
| } | ||||
| 
 | ||||
| struct hwblk { | ||||
| 	void __iomem *mstp; | ||||
| 	unsigned char bit; | ||||
| 	unsigned char area; | ||||
| 	int cnt[HWBLK_CNT_NR]; | ||||
| }; | ||||
| 
 | ||||
| struct hwblk_info { | ||||
| 	struct hwblk_area *areas; | ||||
| 	int nr_areas; | ||||
| 	struct hwblk *hwblks; | ||||
| 	int nr_hwblks; | ||||
| }; | ||||
| 
 | ||||
| #if !defined(CONFIG_CPU_SUBTYPE_SH7722) && \ | ||||
|     !defined(CONFIG_CPU_SUBTYPE_SH7723) && \ | ||||
|     !defined(CONFIG_CPU_SUBTYPE_SH7724) | ||||
| /* Should be defined by processor-specific code */ | ||||
| int arch_hwblk_init(void); | ||||
| 
 | ||||
| int hwblk_register(struct hwblk_info *info); | ||||
| int hwblk_init(void); | ||||
| 
 | ||||
| void hwblk_enable(struct hwblk_info *info, int hwblk); | ||||
| void hwblk_disable(struct hwblk_info *info, int hwblk); | ||||
| 
 | ||||
| void hwblk_cnt_inc(struct hwblk_info *info, int hwblk, int cnt); | ||||
| void hwblk_cnt_dec(struct hwblk_info *info, int hwblk, int cnt); | ||||
| 
 | ||||
| /* allow clocks to enable and disable hardware blocks */ | ||||
| #define SH_HWBLK_CLK(_hwblk, _parent, _flags)	\ | ||||
| [_hwblk] = {					\ | ||||
| 	.parent		= _parent,		\ | ||||
| 	.arch_flags	= _hwblk,		\ | ||||
| 	.flags		= _flags,		\ | ||||
| } | ||||
| 
 | ||||
| int sh_hwblk_clk_register(struct clk *clks, int nr); | ||||
| #else | ||||
| #define hwblk_init() 0 | ||||
| #endif | ||||
| #endif /* __ASM_SH_HWBLK_H */ | ||||
| @ -19,6 +19,3 @@ obj-$(CONFIG_SH_ADC)		+= adc.o | ||||
| obj-$(CONFIG_SH_CLK_CPG_LEGACY)	+= clock-cpg.o | ||||
| 
 | ||||
| obj-y	+= irq/ init.o clock.o fpu.o proc.o | ||||
| ifneq ($(CONFIG_CPU_SUBTYPE_SH7722)$(CONFIG_CPU_SUBTYPE_SH7723)$(CONFIG_CPU_SUBTYPE_SH7724),y) | ||||
| obj-y	+= hwblk.o | ||||
| endif | ||||
|  | ||||
| @ -1,154 +0,0 @@ | ||||
| #include <linux/clk.h> | ||||
| #include <linux/compiler.h> | ||||
| #include <linux/io.h> | ||||
| #include <linux/spinlock.h> | ||||
| #include <asm/suspend.h> | ||||
| #include <asm/hwblk.h> | ||||
| #include <asm/clock.h> | ||||
| 
 | ||||
| static DEFINE_SPINLOCK(hwblk_lock); | ||||
| 
 | ||||
| static void hwblk_area_mod_cnt(struct hwblk_info *info, | ||||
| 			       int area, int counter, int value, int goal) | ||||
| { | ||||
| 	struct hwblk_area *hap = info->areas + area; | ||||
| 
 | ||||
| 	hap->cnt[counter] += value; | ||||
| 
 | ||||
| 	if (hap->cnt[counter] != goal) | ||||
| 		return; | ||||
| 
 | ||||
| 	if (hap->flags & HWBLK_AREA_FLAG_PARENT) | ||||
| 		hwblk_area_mod_cnt(info, hap->parent, counter, value, goal); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| static int __hwblk_mod_cnt(struct hwblk_info *info, int hwblk, | ||||
| 			  int counter, int value, int goal) | ||||
| { | ||||
| 	struct hwblk *hp = info->hwblks + hwblk; | ||||
| 
 | ||||
| 	hp->cnt[counter] += value; | ||||
| 	if (hp->cnt[counter] == goal) | ||||
| 		hwblk_area_mod_cnt(info, hp->area, counter, value, goal); | ||||
| 
 | ||||
| 	return hp->cnt[counter]; | ||||
| } | ||||
| 
 | ||||
| static void hwblk_mod_cnt(struct hwblk_info *info, int hwblk, | ||||
| 			  int counter, int value, int goal) | ||||
| { | ||||
| 	unsigned long flags; | ||||
| 
 | ||||
| 	spin_lock_irqsave(&hwblk_lock, flags); | ||||
| 	__hwblk_mod_cnt(info, hwblk, counter, value, goal); | ||||
| 	spin_unlock_irqrestore(&hwblk_lock, flags); | ||||
| } | ||||
| 
 | ||||
| void hwblk_cnt_inc(struct hwblk_info *info, int hwblk, int counter) | ||||
| { | ||||
| 	hwblk_mod_cnt(info, hwblk, counter, 1, 1); | ||||
| } | ||||
| 
 | ||||
| void hwblk_cnt_dec(struct hwblk_info *info, int hwblk, int counter) | ||||
| { | ||||
| 	hwblk_mod_cnt(info, hwblk, counter, -1, 0); | ||||
| } | ||||
| 
 | ||||
| void hwblk_enable(struct hwblk_info *info, int hwblk) | ||||
| { | ||||
| 	struct hwblk *hp = info->hwblks + hwblk; | ||||
| 	unsigned long tmp; | ||||
| 	unsigned long flags; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	spin_lock_irqsave(&hwblk_lock, flags); | ||||
| 
 | ||||
| 	ret = __hwblk_mod_cnt(info, hwblk, HWBLK_CNT_USAGE, 1, 1); | ||||
| 	if (ret == 1) { | ||||
| 		tmp = __raw_readl(hp->mstp); | ||||
| 		tmp &= ~(1 << hp->bit); | ||||
| 		__raw_writel(tmp, hp->mstp); | ||||
| 	} | ||||
| 
 | ||||
| 	spin_unlock_irqrestore(&hwblk_lock, flags); | ||||
| } | ||||
| 
 | ||||
| void hwblk_disable(struct hwblk_info *info, int hwblk) | ||||
| { | ||||
| 	struct hwblk *hp = info->hwblks + hwblk; | ||||
| 	unsigned long tmp; | ||||
| 	unsigned long flags; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	spin_lock_irqsave(&hwblk_lock, flags); | ||||
| 
 | ||||
| 	ret = __hwblk_mod_cnt(info, hwblk, HWBLK_CNT_USAGE, -1, 0); | ||||
| 	if (ret == 0) { | ||||
| 		tmp = __raw_readl(hp->mstp); | ||||
| 		tmp |= 1 << hp->bit; | ||||
| 		__raw_writel(tmp, hp->mstp); | ||||
| 	} | ||||
| 
 | ||||
| 	spin_unlock_irqrestore(&hwblk_lock, flags); | ||||
| } | ||||
| 
 | ||||
| struct hwblk_info *hwblk_info; | ||||
| 
 | ||||
| int __init hwblk_register(struct hwblk_info *info) | ||||
| { | ||||
| 	hwblk_info = info; | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| int __init __weak arch_hwblk_init(void) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| int __init hwblk_init(void) | ||||
| { | ||||
| 	return arch_hwblk_init(); | ||||
| } | ||||
| 
 | ||||
| /* allow clocks to enable and disable hardware blocks */ | ||||
| static int sh_hwblk_clk_enable(struct clk *clk) | ||||
| { | ||||
| 	if (!hwblk_info) | ||||
| 		return -ENOENT; | ||||
| 
 | ||||
| 	hwblk_enable(hwblk_info, clk->arch_flags); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static void sh_hwblk_clk_disable(struct clk *clk) | ||||
| { | ||||
| 	if (hwblk_info) | ||||
| 		hwblk_disable(hwblk_info, clk->arch_flags); | ||||
| } | ||||
| 
 | ||||
| static struct clk_ops sh_hwblk_clk_ops = { | ||||
| 	.enable		= sh_hwblk_clk_enable, | ||||
| 	.disable	= sh_hwblk_clk_disable, | ||||
| 	.recalc		= followparent_recalc, | ||||
| }; | ||||
| 
 | ||||
| int __init sh_hwblk_clk_register(struct clk *clks, int nr) | ||||
| { | ||||
| 	struct clk *clkp; | ||||
| 	int ret = 0; | ||||
| 	int k; | ||||
| 
 | ||||
| 	for (k = 0; !ret && (k < nr); k++) { | ||||
| 		clkp = clks + k; | ||||
| 
 | ||||
| 		/* skip over clocks using hwblk 0 (HWBLK_UNKNOWN) */ | ||||
| 		if (!clkp->arch_flags) | ||||
| 			continue; | ||||
| 
 | ||||
| 		clkp->ops = &sh_hwblk_clk_ops; | ||||
| 		ret |= clk_register(clkp); | ||||
| 	} | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| @ -21,7 +21,6 @@ | ||||
| #include <linux/smp.h> | ||||
| #include <linux/rtc.h> | ||||
| #include <asm/clock.h> | ||||
| #include <asm/hwblk.h> | ||||
| #include <asm/rtc.h> | ||||
| 
 | ||||
| /* Dummy RTC ops */ | ||||
| @ -110,7 +109,6 @@ void __init time_init(void) | ||||
| 	if (board_time_init) | ||||
| 		board_time_init(); | ||||
| 
 | ||||
| 	hwblk_init(); | ||||
| 	clk_init(); | ||||
| 
 | ||||
| 	late_time_init = sh_late_time_init; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user