Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
d8d607d5
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
d8d607d5
编写于
2月 27, 2010
作者:
R
Ralf Baechle
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
MIPS: BCM63xx: Convert timer locks to raw spinlocks.
Signed-off-by:
N
Ralf Baechle
<
ralf@linux-mips.org
>
上级
c45ef44f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
17 addition
and
17 deletion
+17
-17
arch/mips/bcm63xx/timer.c
arch/mips/bcm63xx/timer.c
+17
-17
未找到文件。
arch/mips/bcm63xx/timer.c
浏览文件 @
d8d607d5
...
...
@@ -17,8 +17,8 @@
#include <bcm63xx_timer.h>
#include <bcm63xx_regs.h>
static
DEFINE_SPINLOCK
(
timer_reg_lock
);
static
DEFINE_SPINLOCK
(
timer_data_lock
);
static
DEFINE_
RAW_
SPINLOCK
(
timer_reg_lock
);
static
DEFINE_
RAW_
SPINLOCK
(
timer_data_lock
);
static
struct
clk
*
periph_clk
;
static
struct
timer_data
{
...
...
@@ -31,23 +31,23 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
u32
stat
;
int
i
;
spin_lock
(
&
timer_reg_lock
);
raw_
spin_lock
(
&
timer_reg_lock
);
stat
=
bcm_timer_readl
(
TIMER_IRQSTAT_REG
);
bcm_timer_writel
(
stat
,
TIMER_IRQSTAT_REG
);
spin_unlock
(
&
timer_reg_lock
);
raw_
spin_unlock
(
&
timer_reg_lock
);
for
(
i
=
0
;
i
<
BCM63XX_TIMER_COUNT
;
i
++
)
{
if
(
!
(
stat
&
TIMER_IRQSTAT_TIMER_CAUSE
(
i
)))
continue
;
spin_lock
(
&
timer_data_lock
);
raw_
spin_lock
(
&
timer_data_lock
);
if
(
!
timer_data
[
i
].
cb
)
{
spin_unlock
(
&
timer_data_lock
);
raw_
spin_unlock
(
&
timer_data_lock
);
continue
;
}
timer_data
[
i
].
cb
(
timer_data
[
i
].
data
);
spin_unlock
(
&
timer_data_lock
);
raw_
spin_unlock
(
&
timer_data_lock
);
}
return
IRQ_HANDLED
;
...
...
@@ -61,7 +61,7 @@ int bcm63xx_timer_enable(int id)
if
(
id
>=
BCM63XX_TIMER_COUNT
)
return
-
EINVAL
;
spin_lock_irqsave
(
&
timer_reg_lock
,
flags
);
raw_
spin_lock_irqsave
(
&
timer_reg_lock
,
flags
);
reg
=
bcm_timer_readl
(
TIMER_CTLx_REG
(
id
));
reg
|=
TIMER_CTL_ENABLE_MASK
;
...
...
@@ -71,7 +71,7 @@ int bcm63xx_timer_enable(int id)
reg
|=
TIMER_IRQSTAT_TIMER_IR_EN
(
id
);
bcm_timer_writel
(
reg
,
TIMER_IRQSTAT_REG
);
spin_unlock_irqrestore
(
&
timer_reg_lock
,
flags
);
raw_
spin_unlock_irqrestore
(
&
timer_reg_lock
,
flags
);
return
0
;
}
...
...
@@ -85,7 +85,7 @@ int bcm63xx_timer_disable(int id)
if
(
id
>=
BCM63XX_TIMER_COUNT
)
return
-
EINVAL
;
spin_lock_irqsave
(
&
timer_reg_lock
,
flags
);
raw_
spin_lock_irqsave
(
&
timer_reg_lock
,
flags
);
reg
=
bcm_timer_readl
(
TIMER_CTLx_REG
(
id
));
reg
&=
~
TIMER_CTL_ENABLE_MASK
;
...
...
@@ -95,7 +95,7 @@ int bcm63xx_timer_disable(int id)
reg
&=
~
TIMER_IRQSTAT_TIMER_IR_EN
(
id
);
bcm_timer_writel
(
reg
,
TIMER_IRQSTAT_REG
);
spin_unlock_irqrestore
(
&
timer_reg_lock
,
flags
);
raw_
spin_unlock_irqrestore
(
&
timer_reg_lock
,
flags
);
return
0
;
}
...
...
@@ -110,7 +110,7 @@ int bcm63xx_timer_register(int id, void (*callback)(void *data), void *data)
return
-
EINVAL
;
ret
=
0
;
spin_lock_irqsave
(
&
timer_data_lock
,
flags
);
raw_
spin_lock_irqsave
(
&
timer_data_lock
,
flags
);
if
(
timer_data
[
id
].
cb
)
{
ret
=
-
EBUSY
;
goto
out
;
...
...
@@ -120,7 +120,7 @@ int bcm63xx_timer_register(int id, void (*callback)(void *data), void *data)
timer_data
[
id
].
data
=
data
;
out:
spin_unlock_irqrestore
(
&
timer_data_lock
,
flags
);
raw_
spin_unlock_irqrestore
(
&
timer_data_lock
,
flags
);
return
ret
;
}
...
...
@@ -133,9 +133,9 @@ void bcm63xx_timer_unregister(int id)
if
(
id
>=
BCM63XX_TIMER_COUNT
)
return
;
spin_lock_irqsave
(
&
timer_data_lock
,
flags
);
raw_
spin_lock_irqsave
(
&
timer_data_lock
,
flags
);
timer_data
[
id
].
cb
=
NULL
;
spin_unlock_irqrestore
(
&
timer_data_lock
,
flags
);
raw_
spin_unlock_irqrestore
(
&
timer_data_lock
,
flags
);
}
EXPORT_SYMBOL
(
bcm63xx_timer_unregister
);
...
...
@@ -159,7 +159,7 @@ int bcm63xx_timer_set(int id, int monotonic, unsigned int countdown_us)
if
(
countdown
&
~
TIMER_CTL_COUNTDOWN_MASK
)
return
-
EINVAL
;
spin_lock_irqsave
(
&
timer_reg_lock
,
flags
);
raw_
spin_lock_irqsave
(
&
timer_reg_lock
,
flags
);
reg
=
bcm_timer_readl
(
TIMER_CTLx_REG
(
id
));
if
(
monotonic
)
...
...
@@ -171,7 +171,7 @@ int bcm63xx_timer_set(int id, int monotonic, unsigned int countdown_us)
reg
|=
countdown
;
bcm_timer_writel
(
reg
,
TIMER_CTLx_REG
(
id
));
spin_unlock_irqrestore
(
&
timer_reg_lock
,
flags
);
raw_
spin_unlock_irqrestore
(
&
timer_reg_lock
,
flags
);
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录