Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
7f585bbf
K
Kernel
项目概览
openeuler
/
Kernel
大约 1 年 前同步成功
通知
5
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7f585bbf
编写于
4月 03, 2013
作者:
T
Tony Lindgren
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'omap-timer-for-v3.10' of
git://github.com/jonhunter/linux
into omap-for-v3.10/timer
Conflicts: arch/arm/mach-omap2/timer.c
上级
43231b5b
4615943c
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
66 addition
and
65 deletion
+66
-65
arch/arm/mach-omap2/board-cm-t3517.c
arch/arm/mach-omap2/board-cm-t3517.c
+1
-1
arch/arm/mach-omap2/board-generic.c
arch/arm/mach-omap2/board-generic.c
+1
-1
arch/arm/mach-omap2/common.h
arch/arm/mach-omap2/common.h
+1
-2
arch/arm/mach-omap2/timer.c
arch/arm/mach-omap2/timer.c
+63
-61
未找到文件。
arch/arm/mach-omap2/board-cm-t3517.c
浏览文件 @
7f585bbf
...
...
@@ -324,6 +324,6 @@ MACHINE_START(CM_T3517, "Compulab CM-T3517")
.
handle_irq
=
omap3_intc_handle_irq
,
.
init_machine
=
cm_t3517_init
,
.
init_late
=
am35xx_init_late
,
.
init_time
=
omap3_gp
_gp
timer_timer_init
,
.
init_time
=
omap3_gptimer_timer_init
,
.
restart
=
omap3xxx_restart
,
MACHINE_END
arch/arm/mach-omap2/board-generic.c
浏览文件 @
7f585bbf
...
...
@@ -140,7 +140,7 @@ DT_MACHINE_START(AM33XX_DT, "Generic AM33XX (Flattened Device Tree)")
.
init_irq
=
omap_intc_of_init
,
.
handle_irq
=
omap3_intc_handle_irq
,
.
init_machine
=
omap_generic_init
,
.
init_time
=
omap3_
am33xx_
gptimer_timer_init
,
.
init_time
=
omap3_gptimer_timer_init
,
.
dt_compat
=
am33xx_boards_compat
,
.
restart
=
am33xx_restart
,
MACHINE_END
...
...
arch/arm/mach-omap2/common.h
浏览文件 @
7f585bbf
...
...
@@ -82,8 +82,7 @@ extern void omap2_init_common_infrastructure(void);
extern
void
omap2_sync32k_timer_init
(
void
);
extern
void
omap3_sync32k_timer_init
(
void
);
extern
void
omap3_secure_sync32k_timer_init
(
void
);
extern
void
omap3_gp_gptimer_timer_init
(
void
);
extern
void
omap3_am33xx_gptimer_timer_init
(
void
);
extern
void
omap3_gptimer_timer_init
(
void
);
extern
void
omap4_local_timer_init
(
void
);
extern
void
omap5_realtime_timer_init
(
void
);
...
...
arch/arm/mach-omap2/timer.c
浏览文件 @
7f585bbf
...
...
@@ -57,16 +57,6 @@
#include "common.h"
#include "powerdomain.h"
/* Parent clocks, eventually these will come from the clock framework */
#define OMAP2_MPU_SOURCE "sys_ck"
#define OMAP3_MPU_SOURCE OMAP2_MPU_SOURCE
#define OMAP4_MPU_SOURCE "sys_clkin_ck"
#define OMAP5_MPU_SOURCE "sys_clkin"
#define OMAP2_32K_SOURCE "func_32k_ck"
#define OMAP3_32K_SOURCE "omap_32k_fck"
#define OMAP4_32K_SOURCE "sys_32k_ck"
#define REALTIME_COUNTER_BASE 0x48243200
#define INCREMENTER_NUMERATOR_OFFSET 0x10
#define INCREMENTER_DENUMERATOR_RELOAD_OFFSET 0x14
...
...
@@ -130,7 +120,6 @@ static void omap2_gp_timer_set_mode(enum clock_event_mode mode,
}
static
struct
clock_event_device
clockevent_gpt
=
{
.
name
=
"gp_timer"
,
.
features
=
CLOCK_EVT_FEAT_PERIODIC
|
CLOCK_EVT_FEAT_ONESHOT
,
.
rating
=
300
,
.
set_next_event
=
omap2_gp_timer_set_next_event
,
...
...
@@ -171,6 +160,12 @@ static struct device_node * __init omap_get_timer_dt(struct of_device_id *match,
if
(
property
&&
!
of_get_property
(
np
,
property
,
NULL
))
continue
;
if
(
!
property
&&
(
of_get_property
(
np
,
"ti,timer-alwon"
,
NULL
)
||
of_get_property
(
np
,
"ti,timer-dsp"
,
NULL
)
||
of_get_property
(
np
,
"ti,timer-pwm"
,
NULL
)
||
of_get_property
(
np
,
"ti,timer-secure"
,
NULL
)))
continue
;
of_add_property
(
np
,
&
device_disabled
);
return
np
;
}
...
...
@@ -215,16 +210,17 @@ static u32 __init omap_dm_timer_get_errata(void)
}
static
int
__init
omap_dm_timer_init_one
(
struct
omap_dm_timer
*
timer
,
int
gptimer_id
,
const
char
*
fck_source
,
const
char
*
property
,
int
posted
)
const
char
*
fck_source
,
const
char
*
property
,
const
char
**
timer_name
,
int
posted
)
{
char
name
[
10
];
/* 10 = sizeof("gptXX_Xck0") */
const
char
*
oh_name
;
struct
device_node
*
np
;
struct
omap_hwmod
*
oh
;
struct
resource
irq
,
mem
;
struct
clk
*
src
;
int
r
=
0
;
if
(
of_have_populated_dt
())
{
...
...
@@ -244,10 +240,10 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
of_node_put
(
np
);
}
else
{
if
(
omap_dm_timer_reserve_systimer
(
gptimer_
id
))
if
(
omap_dm_timer_reserve_systimer
(
timer
->
id
))
return
-
ENODEV
;
sprintf
(
name
,
"timer%d"
,
gptimer_
id
);
sprintf
(
name
,
"timer%d"
,
timer
->
id
);
oh_name
=
name
;
}
...
...
@@ -255,6 +251,8 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
if
(
!
oh
)
return
-
ENODEV
;
*
timer_name
=
oh
->
name
;
if
(
!
of_have_populated_dt
())
{
r
=
omap_hwmod_get_resource_byname
(
oh
,
IORESOURCE_IRQ
,
NULL
,
&
irq
);
...
...
@@ -277,24 +275,24 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
/* After the dmtimer is using hwmod these clocks won't be needed */
timer
->
fclk
=
clk_get
(
NULL
,
omap_hwmod_get_main_clk
(
oh
));
if
(
IS_ERR
(
timer
->
fclk
))
return
-
ENODEV
;
return
PTR_ERR
(
timer
->
fclk
)
;
/* FIXME: Need to remove hard-coded test on timer ID */
if
(
gptimer_id
!=
12
)
{
struct
clk
*
src
;
src
=
clk_get
(
NULL
,
fck_source
);
if
(
IS_ERR
(
src
))
{
r
=
-
EINVAL
;
}
else
{
r
=
clk_set_parent
(
timer
->
fclk
,
src
);
if
(
r
<
0
)
pr_warn
(
"%s: %s cannot set source
\n
"
,
__func__
,
oh
->
name
);
src
=
clk_get
(
NULL
,
fck_source
);
if
(
IS_ERR
(
src
))
return
PTR_ERR
(
src
);
if
(
clk_get_parent
(
timer
->
fclk
)
!=
src
)
{
r
=
clk_set_parent
(
timer
->
fclk
,
src
);
if
(
r
<
0
)
{
pr_warn
(
"%s: %s cannot set source
\n
"
,
__func__
,
oh
->
name
);
clk_put
(
src
);
return
r
;
}
}
clk_put
(
src
);
omap_hwmod_setup_one
(
oh_name
);
omap_hwmod_enable
(
oh
);
__omap_dm_timer_init_regs
(
timer
);
...
...
@@ -318,6 +316,7 @@ static void __init omap2_gp_clockevent_init(int gptimer_id,
{
int
res
;
clkev
.
id
=
gptimer_id
;
clkev
.
errata
=
omap_dm_timer_get_errata
();
/*
...
...
@@ -327,8 +326,8 @@ static void __init omap2_gp_clockevent_init(int gptimer_id,
*/
__omap_dm_timer_override_errata
(
&
clkev
,
OMAP_TIMER_ERRATA_I103_I767
);
res
=
omap_dm_timer_init_one
(
&
clkev
,
gptimer_id
,
fck_source
,
property
,
OMAP_TIMER_POSTED
);
res
=
omap_dm_timer_init_one
(
&
clkev
,
fck_source
,
property
,
&
clockevent_gpt
.
name
,
OMAP_TIMER_POSTED
);
BUG_ON
(
res
);
omap2_gp_timer_irq
.
dev_id
=
&
clkev
;
...
...
@@ -342,8 +341,8 @@ static void __init omap2_gp_clockevent_init(int gptimer_id,
3
,
/* Timer internal resynch latency */
0xffffffff
);
pr_info
(
"OMAP clockevent source:
GPTIMER%d at %lu Hz
\n
"
,
gptimer_id
,
clkev
.
rate
);
pr_info
(
"OMAP clockevent source:
%s at %lu Hz
\n
"
,
clockevent_gpt
.
name
,
clkev
.
rate
);
}
/* Clocksource code */
...
...
@@ -360,7 +359,6 @@ static cycle_t clocksource_read_cycles(struct clocksource *cs)
}
static
struct
clocksource
clocksource_gpt
=
{
.
name
=
"gp_timer"
,
.
rating
=
300
,
.
read
=
clocksource_read_cycles
,
.
mask
=
CLOCKSOURCE_MASK
(
32
),
...
...
@@ -443,13 +441,16 @@ static int __init __maybe_unused omap2_sync32k_clocksource_init(void)
}
static
void
__init
omap2_gptimer_clocksource_init
(
int
gptimer_id
,
const
char
*
fck_source
)
const
char
*
fck_source
,
const
char
*
property
)
{
int
res
;
clksrc
.
id
=
gptimer_id
;
clksrc
.
errata
=
omap_dm_timer_get_errata
();
res
=
omap_dm_timer_init_one
(
&
clksrc
,
gptimer_id
,
fck_source
,
NULL
,
res
=
omap_dm_timer_init_one
(
&
clksrc
,
fck_source
,
property
,
&
clocksource_gpt
.
name
,
OMAP_TIMER_NONPOSTED
);
BUG_ON
(
res
);
...
...
@@ -462,8 +463,8 @@ static void __init omap2_gptimer_clocksource_init(int gptimer_id,
pr_err
(
"Could not register clocksource %s
\n
"
,
clocksource_gpt
.
name
);
else
pr_info
(
"OMAP clocksource:
GPTIMER%d
at %lu Hz
\n
"
,
gptimer_id
,
clksrc
.
rate
);
pr_info
(
"OMAP clocksource:
%s
at %lu Hz
\n
"
,
clocksource_gpt
.
name
,
clksrc
.
rate
);
}
#ifdef CONFIG_SOC_HAS_REALTIME_COUNTER
...
...
@@ -488,7 +489,7 @@ static void __init realtime_counter_init(void)
pr_err
(
"%s: ioremap failed
\n
"
,
__func__
);
return
;
}
sys_clk
=
clk_get
(
NULL
,
OMAP5_MPU_SOURCE
);
sys_clk
=
clk_get
(
NULL
,
"sys_clkin"
);
if
(
IS_ERR
(
sys_clk
))
{
pr_err
(
"%s: failed to get system clock handle
\n
"
,
__func__
);
iounmap
(
base
);
...
...
@@ -545,49 +546,52 @@ static inline void __init realtime_counter_init(void)
#endif
#define OMAP_SYS_GP_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop, \
clksrc_nr, clksrc_src
)
\
clksrc_nr, clksrc_src
, clksrc_prop)
\
void __init omap##name##_gptimer_timer_init(void) \
{ \
omap_dmtimer_init(); \
omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \
omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src); \
omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src, \
clksrc_prop); \
}
#define OMAP_SYS_32K_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop, \
clksrc_nr, clksrc_src
)
\
clksrc_nr, clksrc_src
, clksrc_prop)
\
void __init omap##name##_sync32k_timer_init(void) \
{ \
omap_dmtimer_init(); \
omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \
/* Enable the use of clocksource="gp_timer" kernel parameter */
\
if (use_gptimer_clksrc) \
omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src);\
omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src, \
clksrc_prop); \
else \
omap2_sync32k_clocksource_init(); \
}
#ifdef CONFIG_ARCH_OMAP2
OMAP_SYS_32K_TIMER_INIT
(
2
,
1
,
OMAP2_32K_SOURCE
,
"ti,timer-alwon"
,
2
,
OMAP2_MPU_SOURCE
);
OMAP_SYS_32K_TIMER_INIT
(
2
,
1
,
"timer_32k_ck"
,
"ti,timer-alwon"
,
2
,
"timer_sys_ck"
,
NULL
);
#endif
/* CONFIG_ARCH_OMAP2 */
#ifdef CONFIG_ARCH_OMAP3
OMAP_SYS_32K_TIMER_INIT
(
3
,
1
,
OMAP3_32K_SOURCE
,
"ti,timer-alwon"
,
2
,
OMAP3_MPU_SOURCE
);
OMAP_SYS_32K_TIMER_INIT
(
3
_secure
,
12
,
OMAP3_32K_SOURCE
,
"ti,timer-secure"
,
2
,
OMAP3_MPU_SOURCE
);
OMAP_SYS_GP_TIMER_INIT
(
3
_gp
,
1
,
OMAP3_MPU_SOURCE
,
"ti,timer-alwon"
,
2
,
OMAP3_MPU_SOURCE
);
OMAP_SYS_32K_TIMER_INIT
(
3
,
1
,
"timer_32k_ck"
,
"ti,timer-alwon"
,
2
,
"timer_sys_ck"
,
NULL
);
OMAP_SYS_32K_TIMER_INIT
(
3
_secure
,
12
,
"secure_32k_fck"
,
"ti,timer-secure"
,
2
,
"timer_sys_ck"
,
NULL
);
#endif
/* CONFIG_ARCH_OMAP3 */
#ifdef CONFIG_SOC_AM33XX
OMAP_SYS_GP_TIMER_INIT
(
3
_am33xx
,
1
,
OMAP4_MPU_SOURCE
,
"ti,timer-alwon"
,
2
,
OMAP4_MPU_SOURCE
);
#endif
/* CONFIG_SOC_AM33XX */
#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX)
OMAP_SYS_GP_TIMER_INIT
(
3
,
2
,
"timer_sys_ck"
,
NULL
,
1
,
"timer_sys_ck"
,
"ti,timer-alwon"
);
#endif
#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5)
static
OMAP_SYS_32K_TIMER_INIT
(
4
,
1
,
"timer_32k_ck"
,
"ti,timer-alwon"
,
2
,
"sys_clkin_ck"
,
NULL
);
#endif
#ifdef CONFIG_ARCH_OMAP4
OMAP_SYS_32K_TIMER_INIT
(
4
,
1
,
OMAP4_32K_SOURCE
,
"ti,timer-alwon"
,
2
,
OMAP4_MPU_SOURCE
);
#ifdef CONFIG_LOCAL_TIMERS
static
DEFINE_TWD_LOCAL_TIMER
(
twd_local_timer
,
OMAP44XX_LOCAL_TWD_BASE
,
29
);
void
__init
omap4_local_timer_init
(
void
)
...
...
@@ -616,13 +620,11 @@ void __init omap4_local_timer_init(void)
#endif
/* CONFIG_ARCH_OMAP4 */
#ifdef CONFIG_SOC_OMAP5
OMAP_SYS_32K_TIMER_INIT
(
5
,
1
,
OMAP4_32K_SOURCE
,
"ti,timer-alwon"
,
2
,
OMAP5_MPU_SOURCE
);
void
__init
omap5_realtime_timer_init
(
void
)
{
int
err
;
omap
5
_sync32k_timer_init
();
omap
4
_sync32k_timer_init
();
realtime_counter_init
();
err
=
arch_timer_of_register
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录