mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 14:21:47 +00:00
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