Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
2e8ebed6
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
You need to sign in or sign up before continuing.
提交
2e8ebed6
编写于
3月 13, 2018
作者:
W
Wim Van Sebroeck
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'v4.16-fixes'
上级
1462eecf
8c088370
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
33 addition
and
12 deletion
+33
-12
drivers/watchdog/aspeed_wdt.c
drivers/watchdog/aspeed_wdt.c
+6
-3
drivers/watchdog/dw_wdt.c
drivers/watchdog/dw_wdt.c
+24
-8
drivers/watchdog/sprd_wdt.c
drivers/watchdog/sprd_wdt.c
+3
-1
未找到文件。
drivers/watchdog/aspeed_wdt.c
浏览文件 @
2e8ebed6
...
@@ -232,11 +232,14 @@ static int aspeed_wdt_probe(struct platform_device *pdev)
...
@@ -232,11 +232,14 @@ static int aspeed_wdt_probe(struct platform_device *pdev)
wdt
->
ctrl
|=
WDT_CTRL_RESET_MODE_SOC
|
WDT_CTRL_RESET_SYSTEM
;
wdt
->
ctrl
|=
WDT_CTRL_RESET_MODE_SOC
|
WDT_CTRL_RESET_SYSTEM
;
}
else
{
}
else
{
if
(
!
strcmp
(
reset_type
,
"cpu"
))
if
(
!
strcmp
(
reset_type
,
"cpu"
))
wdt
->
ctrl
|=
WDT_CTRL_RESET_MODE_ARM_CPU
;
wdt
->
ctrl
|=
WDT_CTRL_RESET_MODE_ARM_CPU
|
WDT_CTRL_RESET_SYSTEM
;
else
if
(
!
strcmp
(
reset_type
,
"soc"
))
else
if
(
!
strcmp
(
reset_type
,
"soc"
))
wdt
->
ctrl
|=
WDT_CTRL_RESET_MODE_SOC
;
wdt
->
ctrl
|=
WDT_CTRL_RESET_MODE_SOC
|
WDT_CTRL_RESET_SYSTEM
;
else
if
(
!
strcmp
(
reset_type
,
"system"
))
else
if
(
!
strcmp
(
reset_type
,
"system"
))
wdt
->
ctrl
|=
WDT_CTRL_RESET_SYSTEM
;
wdt
->
ctrl
|=
WDT_CTRL_RESET_MODE_FULL_CHIP
|
WDT_CTRL_RESET_SYSTEM
;
else
if
(
strcmp
(
reset_type
,
"none"
))
else
if
(
strcmp
(
reset_type
,
"none"
))
return
-
EINVAL
;
return
-
EINVAL
;
}
}
...
...
drivers/watchdog/dw_wdt.c
浏览文件 @
2e8ebed6
...
@@ -34,6 +34,7 @@
...
@@ -34,6 +34,7 @@
#define WDOG_CONTROL_REG_OFFSET 0x00
#define WDOG_CONTROL_REG_OFFSET 0x00
#define WDOG_CONTROL_REG_WDT_EN_MASK 0x01
#define WDOG_CONTROL_REG_WDT_EN_MASK 0x01
#define WDOG_CONTROL_REG_RESP_MODE_MASK 0x02
#define WDOG_TIMEOUT_RANGE_REG_OFFSET 0x04
#define WDOG_TIMEOUT_RANGE_REG_OFFSET 0x04
#define WDOG_TIMEOUT_RANGE_TOPINIT_SHIFT 4
#define WDOG_TIMEOUT_RANGE_TOPINIT_SHIFT 4
#define WDOG_CURRENT_COUNT_REG_OFFSET 0x08
#define WDOG_CURRENT_COUNT_REG_OFFSET 0x08
...
@@ -56,6 +57,9 @@ struct dw_wdt {
...
@@ -56,6 +57,9 @@ struct dw_wdt {
unsigned
long
rate
;
unsigned
long
rate
;
struct
watchdog_device
wdd
;
struct
watchdog_device
wdd
;
struct
reset_control
*
rst
;
struct
reset_control
*
rst
;
/* Save/restore */
u32
control
;
u32
timeout
;
};
};
#define to_dw_wdt(wdd) container_of(wdd, struct dw_wdt, wdd)
#define to_dw_wdt(wdd) container_of(wdd, struct dw_wdt, wdd)
...
@@ -121,14 +125,23 @@ static int dw_wdt_set_timeout(struct watchdog_device *wdd, unsigned int top_s)
...
@@ -121,14 +125,23 @@ static int dw_wdt_set_timeout(struct watchdog_device *wdd, unsigned int top_s)
return
0
;
return
0
;
}
}
static
void
dw_wdt_arm_system_reset
(
struct
dw_wdt
*
dw_wdt
)
{
u32
val
=
readl
(
dw_wdt
->
regs
+
WDOG_CONTROL_REG_OFFSET
);
/* Disable interrupt mode; always perform system reset. */
val
&=
~
WDOG_CONTROL_REG_RESP_MODE_MASK
;
/* Enable watchdog. */
val
|=
WDOG_CONTROL_REG_WDT_EN_MASK
;
writel
(
val
,
dw_wdt
->
regs
+
WDOG_CONTROL_REG_OFFSET
);
}
static
int
dw_wdt_start
(
struct
watchdog_device
*
wdd
)
static
int
dw_wdt_start
(
struct
watchdog_device
*
wdd
)
{
{
struct
dw_wdt
*
dw_wdt
=
to_dw_wdt
(
wdd
);
struct
dw_wdt
*
dw_wdt
=
to_dw_wdt
(
wdd
);
dw_wdt_set_timeout
(
wdd
,
wdd
->
timeout
);
dw_wdt_set_timeout
(
wdd
,
wdd
->
timeout
);
dw_wdt_arm_system_reset
(
dw_wdt
);
writel
(
WDOG_CONTROL_REG_WDT_EN_MASK
,
dw_wdt
->
regs
+
WDOG_CONTROL_REG_OFFSET
);
return
0
;
return
0
;
}
}
...
@@ -152,16 +165,13 @@ static int dw_wdt_restart(struct watchdog_device *wdd,
...
@@ -152,16 +165,13 @@ static int dw_wdt_restart(struct watchdog_device *wdd,
unsigned
long
action
,
void
*
data
)
unsigned
long
action
,
void
*
data
)
{
{
struct
dw_wdt
*
dw_wdt
=
to_dw_wdt
(
wdd
);
struct
dw_wdt
*
dw_wdt
=
to_dw_wdt
(
wdd
);
u32
val
;
writel
(
0
,
dw_wdt
->
regs
+
WDOG_TIMEOUT_RANGE_REG_OFFSET
);
writel
(
0
,
dw_wdt
->
regs
+
WDOG_TIMEOUT_RANGE_REG_OFFSET
);
val
=
readl
(
dw_wdt
->
regs
+
WDOG_CONTROL_REG_OFFSET
);
if
(
dw_wdt_is_enabled
(
dw_wdt
))
if
(
val
&
WDOG_CONTROL_REG_WDT_EN_MASK
)
writel
(
WDOG_COUNTER_RESTART_KICK_VALUE
,
writel
(
WDOG_COUNTER_RESTART_KICK_VALUE
,
dw_wdt
->
regs
+
WDOG_COUNTER_RESTART_REG_OFFSET
);
dw_wdt
->
regs
+
WDOG_COUNTER_RESTART_REG_OFFSET
);
else
else
writel
(
WDOG_CONTROL_REG_WDT_EN_MASK
,
dw_wdt_arm_system_reset
(
dw_wdt
);
dw_wdt
->
regs
+
WDOG_CONTROL_REG_OFFSET
);
/* wait for reset to assert... */
/* wait for reset to assert... */
mdelay
(
500
);
mdelay
(
500
);
...
@@ -198,6 +208,9 @@ static int dw_wdt_suspend(struct device *dev)
...
@@ -198,6 +208,9 @@ static int dw_wdt_suspend(struct device *dev)
{
{
struct
dw_wdt
*
dw_wdt
=
dev_get_drvdata
(
dev
);
struct
dw_wdt
*
dw_wdt
=
dev_get_drvdata
(
dev
);
dw_wdt
->
control
=
readl
(
dw_wdt
->
regs
+
WDOG_CONTROL_REG_OFFSET
);
dw_wdt
->
timeout
=
readl
(
dw_wdt
->
regs
+
WDOG_TIMEOUT_RANGE_REG_OFFSET
);
clk_disable_unprepare
(
dw_wdt
->
clk
);
clk_disable_unprepare
(
dw_wdt
->
clk
);
return
0
;
return
0
;
...
@@ -211,6 +224,9 @@ static int dw_wdt_resume(struct device *dev)
...
@@ -211,6 +224,9 @@ static int dw_wdt_resume(struct device *dev)
if
(
err
)
if
(
err
)
return
err
;
return
err
;
writel
(
dw_wdt
->
timeout
,
dw_wdt
->
regs
+
WDOG_TIMEOUT_RANGE_REG_OFFSET
);
writel
(
dw_wdt
->
control
,
dw_wdt
->
regs
+
WDOG_CONTROL_REG_OFFSET
);
dw_wdt_ping
(
&
dw_wdt
->
wdd
);
dw_wdt_ping
(
&
dw_wdt
->
wdd
);
return
0
;
return
0
;
...
...
drivers/watchdog/sprd_wdt.c
浏览文件 @
2e8ebed6
...
@@ -154,8 +154,10 @@ static int sprd_wdt_enable(struct sprd_wdt *wdt)
...
@@ -154,8 +154,10 @@ static int sprd_wdt_enable(struct sprd_wdt *wdt)
if
(
ret
)
if
(
ret
)
return
ret
;
return
ret
;
ret
=
clk_prepare_enable
(
wdt
->
rtc_enable
);
ret
=
clk_prepare_enable
(
wdt
->
rtc_enable
);
if
(
ret
)
if
(
ret
)
{
clk_disable_unprepare
(
wdt
->
enable
);
return
ret
;
return
ret
;
}
sprd_wdt_unlock
(
wdt
->
base
);
sprd_wdt_unlock
(
wdt
->
base
);
val
=
readl_relaxed
(
wdt
->
base
+
SPRD_WDT_CTRL
);
val
=
readl_relaxed
(
wdt
->
base
+
SPRD_WDT_CTRL
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录