Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
332acd9e
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
332acd9e
编写于
6月 29, 2011
作者:
T
Tony Lindgren
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'devel-timer' into devel-cleanup
上级
bafe2721
0f622e8c
变更
59
隐藏空白更改
内联
并排
Showing
59 changed file
with
749 addition
and
404 deletion
+749
-404
arch/arm/mach-omap1/board-ams-delta.c
arch/arm/mach-omap1/board-ams-delta.c
+2
-2
arch/arm/mach-omap1/board-fsample.c
arch/arm/mach-omap1/board-fsample.c
+2
-2
arch/arm/mach-omap1/board-generic.c
arch/arm/mach-omap1/board-generic.c
+2
-2
arch/arm/mach-omap1/board-h2.c
arch/arm/mach-omap1/board-h2.c
+2
-2
arch/arm/mach-omap1/board-h3.c
arch/arm/mach-omap1/board-h3.c
+2
-2
arch/arm/mach-omap1/board-htcherald.c
arch/arm/mach-omap1/board-htcherald.c
+2
-2
arch/arm/mach-omap1/board-innovator.c
arch/arm/mach-omap1/board-innovator.c
+2
-2
arch/arm/mach-omap1/board-nokia770.c
arch/arm/mach-omap1/board-nokia770.c
+2
-2
arch/arm/mach-omap1/board-osk.c
arch/arm/mach-omap1/board-osk.c
+2
-2
arch/arm/mach-omap1/board-palmte.c
arch/arm/mach-omap1/board-palmte.c
+2
-2
arch/arm/mach-omap1/board-palmtt.c
arch/arm/mach-omap1/board-palmtt.c
+2
-2
arch/arm/mach-omap1/board-palmz71.c
arch/arm/mach-omap1/board-palmz71.c
+2
-2
arch/arm/mach-omap1/board-perseus2.c
arch/arm/mach-omap1/board-perseus2.c
+2
-2
arch/arm/mach-omap1/board-sx1.c
arch/arm/mach-omap1/board-sx1.c
+2
-2
arch/arm/mach-omap1/board-voiceblue.c
arch/arm/mach-omap1/board-voiceblue.c
+2
-2
arch/arm/mach-omap1/irq.c
arch/arm/mach-omap1/irq.c
+1
-1
arch/arm/mach-omap1/time.c
arch/arm/mach-omap1/time.c
+3
-3
arch/arm/mach-omap1/timer32k.c
arch/arm/mach-omap1/timer32k.c
+0
-4
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/Makefile
+1
-1
arch/arm/mach-omap2/board-2430sdp.c
arch/arm/mach-omap2/board-2430sdp.c
+2
-2
arch/arm/mach-omap2/board-3430sdp.c
arch/arm/mach-omap2/board-3430sdp.c
+2
-2
arch/arm/mach-omap2/board-3630sdp.c
arch/arm/mach-omap2/board-3630sdp.c
+2
-2
arch/arm/mach-omap2/board-4430sdp.c
arch/arm/mach-omap2/board-4430sdp.c
+1
-5
arch/arm/mach-omap2/board-am3517crane.c
arch/arm/mach-omap2/board-am3517crane.c
+2
-2
arch/arm/mach-omap2/board-am3517evm.c
arch/arm/mach-omap2/board-am3517evm.c
+2
-2
arch/arm/mach-omap2/board-apollon.c
arch/arm/mach-omap2/board-apollon.c
+2
-2
arch/arm/mach-omap2/board-cm-t35.c
arch/arm/mach-omap2/board-cm-t35.c
+2
-2
arch/arm/mach-omap2/board-cm-t3517.c
arch/arm/mach-omap2/board-cm-t3517.c
+2
-2
arch/arm/mach-omap2/board-devkit8000.c
arch/arm/mach-omap2/board-devkit8000.c
+2
-6
arch/arm/mach-omap2/board-generic.c
arch/arm/mach-omap2/board-generic.c
+2
-2
arch/arm/mach-omap2/board-h4.c
arch/arm/mach-omap2/board-h4.c
+2
-2
arch/arm/mach-omap2/board-igep0020.c
arch/arm/mach-omap2/board-igep0020.c
+4
-4
arch/arm/mach-omap2/board-ldp.c
arch/arm/mach-omap2/board-ldp.c
+2
-2
arch/arm/mach-omap2/board-n8x0.c
arch/arm/mach-omap2/board-n8x0.c
+6
-6
arch/arm/mach-omap2/board-omap3beagle.c
arch/arm/mach-omap2/board-omap3beagle.c
+2
-6
arch/arm/mach-omap2/board-omap3evm.c
arch/arm/mach-omap2/board-omap3evm.c
+2
-2
arch/arm/mach-omap2/board-omap3logic.c
arch/arm/mach-omap2/board-omap3logic.c
+4
-5
arch/arm/mach-omap2/board-omap3pandora.c
arch/arm/mach-omap2/board-omap3pandora.c
+2
-2
arch/arm/mach-omap2/board-omap3stalker.c
arch/arm/mach-omap2/board-omap3stalker.c
+2
-6
arch/arm/mach-omap2/board-omap3touchbook.c
arch/arm/mach-omap2/board-omap3touchbook.c
+2
-6
arch/arm/mach-omap2/board-omap4panda.c
arch/arm/mach-omap2/board-omap4panda.c
+1
-2
arch/arm/mach-omap2/board-overo.c
arch/arm/mach-omap2/board-overo.c
+2
-2
arch/arm/mach-omap2/board-rm680.c
arch/arm/mach-omap2/board-rm680.c
+2
-2
arch/arm/mach-omap2/board-rx51.c
arch/arm/mach-omap2/board-rx51.c
+2
-2
arch/arm/mach-omap2/board-ti8168evm.c
arch/arm/mach-omap2/board-ti8168evm.c
+2
-7
arch/arm/mach-omap2/board-zoom.c
arch/arm/mach-omap2/board-zoom.c
+4
-4
arch/arm/mach-omap2/io.c
arch/arm/mach-omap2/io.c
+1
-16
arch/arm/mach-omap2/irq.c
arch/arm/mach-omap2/irq.c
+21
-11
arch/arm/mach-omap2/omap4-common.c
arch/arm/mach-omap2/omap4-common.c
+5
-5
arch/arm/mach-omap2/pm-debug.c
arch/arm/mach-omap2/pm-debug.c
+0
-28
arch/arm/mach-omap2/pm.h
arch/arm/mach-omap2/pm.h
+0
-6
arch/arm/mach-omap2/pm34xx.c
arch/arm/mach-omap2/pm34xx.c
+0
-4
arch/arm/mach-omap2/timer-gp.h
arch/arm/mach-omap2/timer-gp.h
+0
-16
arch/arm/mach-omap2/timer.c
arch/arm/mach-omap2/timer.c
+342
-0
arch/arm/plat-omap/counter_32k.c
arch/arm/plat-omap/counter_32k.c
+1
-1
arch/arm/plat-omap/dmtimer.c
arch/arm/plat-omap/dmtimer.c
+26
-183
arch/arm/plat-omap/include/plat/common.h
arch/arm/plat-omap/include/plat/common.h
+5
-1
arch/arm/plat-omap/include/plat/dmtimer.h
arch/arm/plat-omap/include/plat/dmtimer.h
+246
-4
arch/arm/plat-omap/include/plat/irqs.h
arch/arm/plat-omap/include/plat/irqs.h
+5
-1
未找到文件。
arch/arm/mach-omap1/board-ams-delta.c
浏览文件 @
332acd9e
...
...
@@ -138,7 +138,7 @@ void ams_delta_latch2_write(u16 mask, u16 value)
static
void
__init
ams_delta_init_irq
(
void
)
{
omap1_init_common_hw
();
omap_init_irq
();
omap
1
_init_irq
();
}
static
struct
map_desc
ams_delta_io_desc
[]
__initdata
=
{
...
...
@@ -391,7 +391,7 @@ MACHINE_START(AMS_DELTA, "Amstrad E3 (Delta)")
.
reserve
=
omap_reserve
,
.
init_irq
=
ams_delta_init_irq
,
.
init_machine
=
ams_delta_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
1
_timer
,
MACHINE_END
EXPORT_SYMBOL
(
ams_delta_latch1_write
);
...
...
arch/arm/mach-omap1/board-fsample.c
浏览文件 @
332acd9e
...
...
@@ -329,7 +329,7 @@ static void __init omap_fsample_init(void)
static
void
__init
omap_fsample_init_irq
(
void
)
{
omap1_init_common_hw
();
omap_init_irq
();
omap
1
_init_irq
();
}
/* Only FPGA needs to be mapped here. All others are done with ioremap */
...
...
@@ -394,5 +394,5 @@ MACHINE_START(OMAP_FSAMPLE, "OMAP730 F-Sample")
.
reserve
=
omap_reserve
,
.
init_irq
=
omap_fsample_init_irq
,
.
init_machine
=
omap_fsample_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
1
_timer
,
MACHINE_END
arch/arm/mach-omap1/board-generic.c
浏览文件 @
332acd9e
...
...
@@ -31,7 +31,7 @@
static
void
__init
omap_generic_init_irq
(
void
)
{
omap1_init_common_hw
();
omap_init_irq
();
omap
1
_init_irq
();
}
/* assume no Mini-AB port */
...
...
@@ -99,5 +99,5 @@ MACHINE_START(OMAP_GENERIC, "Generic OMAP1510/1610/1710")
.
reserve
=
omap_reserve
,
.
init_irq
=
omap_generic_init_irq
,
.
init_machine
=
omap_generic_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
1
_timer
,
MACHINE_END
arch/arm/mach-omap1/board-h2.c
浏览文件 @
332acd9e
...
...
@@ -376,7 +376,7 @@ static struct i2c_board_info __initdata h2_i2c_board_info[] = {
static
void
__init
h2_init_irq
(
void
)
{
omap1_init_common_hw
();
omap_init_irq
();
omap
1
_init_irq
();
}
static
struct
omap_usb_config
h2_usb_config
__initdata
=
{
...
...
@@ -466,5 +466,5 @@ MACHINE_START(OMAP_H2, "TI-H2")
.
reserve
=
omap_reserve
,
.
init_irq
=
h2_init_irq
,
.
init_machine
=
h2_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
1
_timer
,
MACHINE_END
arch/arm/mach-omap1/board-h3.c
浏览文件 @
332acd9e
...
...
@@ -439,7 +439,7 @@ static void __init h3_init(void)
static
void
__init
h3_init_irq
(
void
)
{
omap1_init_common_hw
();
omap_init_irq
();
omap
1
_init_irq
();
}
static
void
__init
h3_map_io
(
void
)
...
...
@@ -454,5 +454,5 @@ MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board")
.
reserve
=
omap_reserve
,
.
init_irq
=
h3_init_irq
,
.
init_machine
=
h3_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
1
_timer
,
MACHINE_END
arch/arm/mach-omap1/board-htcherald.c
浏览文件 @
332acd9e
...
...
@@ -605,7 +605,7 @@ static void __init htcherald_init_irq(void)
{
printk
(
KERN_INFO
"htcherald_init_irq.
\n
"
);
omap1_init_common_hw
();
omap_init_irq
();
omap
1
_init_irq
();
}
MACHINE_START
(
HERALD
,
"HTC Herald"
)
...
...
@@ -616,5 +616,5 @@ MACHINE_START(HERALD, "HTC Herald")
.
reserve
=
omap_reserve
,
.
init_irq
=
htcherald_init_irq
,
.
init_machine
=
htcherald_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
1
_timer
,
MACHINE_END
arch/arm/mach-omap1/board-innovator.c
浏览文件 @
332acd9e
...
...
@@ -292,7 +292,7 @@ static void __init innovator_init_smc91x(void)
static
void
__init
innovator_init_irq
(
void
)
{
omap1_init_common_hw
();
omap_init_irq
();
omap
1
_init_irq
();
}
#ifdef CONFIG_ARCH_OMAP15XX
...
...
@@ -464,5 +464,5 @@ MACHINE_START(OMAP_INNOVATOR, "TI-Innovator")
.
reserve
=
omap_reserve
,
.
init_irq
=
innovator_init_irq
,
.
init_machine
=
innovator_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
1
_timer
,
MACHINE_END
arch/arm/mach-omap1/board-nokia770.c
浏览文件 @
332acd9e
...
...
@@ -51,7 +51,7 @@ static void __init omap_nokia770_init_irq(void)
omap_writew
((
omap_readw
(
0xfffb5004
)
&
~
2
),
0xfffb5004
);
omap1_init_common_hw
();
omap_init_irq
();
omap
1
_init_irq
();
}
static
const
unsigned
int
nokia770_keymap
[]
=
{
...
...
@@ -269,5 +269,5 @@ MACHINE_START(NOKIA770, "Nokia 770")
.
reserve
=
omap_reserve
,
.
init_irq
=
omap_nokia770_init_irq
,
.
init_machine
=
omap_nokia770_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
1
_timer
,
MACHINE_END
arch/arm/mach-omap1/board-osk.c
浏览文件 @
332acd9e
...
...
@@ -282,7 +282,7 @@ static void __init osk_init_cf(void)
static
void
__init
osk_init_irq
(
void
)
{
omap1_init_common_hw
();
omap_init_irq
();
omap
1
_init_irq
();
}
static
struct
omap_usb_config
osk_usb_config
__initdata
=
{
...
...
@@ -588,5 +588,5 @@ MACHINE_START(OMAP_OSK, "TI-OSK")
.
reserve
=
omap_reserve
,
.
init_irq
=
osk_init_irq
,
.
init_machine
=
osk_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
1
_timer
,
MACHINE_END
arch/arm/mach-omap1/board-palmte.c
浏览文件 @
332acd9e
...
...
@@ -62,7 +62,7 @@
static
void
__init
omap_palmte_init_irq
(
void
)
{
omap1_init_common_hw
();
omap_init_irq
();
omap
1
_init_irq
();
}
static
const
unsigned
int
palmte_keymap
[]
=
{
...
...
@@ -280,5 +280,5 @@ MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E")
.
reserve
=
omap_reserve
,
.
init_irq
=
omap_palmte_init_irq
,
.
init_machine
=
omap_palmte_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
1
_timer
,
MACHINE_END
arch/arm/mach-omap1/board-palmtt.c
浏览文件 @
332acd9e
...
...
@@ -266,7 +266,7 @@ static struct spi_board_info __initdata palmtt_boardinfo[] = {
static
void
__init
omap_palmtt_init_irq
(
void
)
{
omap1_init_common_hw
();
omap_init_irq
();
omap
1
_init_irq
();
}
static
struct
omap_usb_config
palmtt_usb_config
__initdata
=
{
...
...
@@ -326,5 +326,5 @@ MACHINE_START(OMAP_PALMTT, "OMAP1510 based Palm Tungsten|T")
.
reserve
=
omap_reserve
,
.
init_irq
=
omap_palmtt_init_irq
,
.
init_machine
=
omap_palmtt_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
1
_timer
,
MACHINE_END
arch/arm/mach-omap1/board-palmz71.c
浏览文件 @
332acd9e
...
...
@@ -61,7 +61,7 @@ static void __init
omap_palmz71_init_irq
(
void
)
{
omap1_init_common_hw
();
omap_init_irq
();
omap
1
_init_irq
();
}
static
const
unsigned
int
palmz71_keymap
[]
=
{
...
...
@@ -346,5 +346,5 @@ MACHINE_START(OMAP_PALMZ71, "OMAP310 based Palm Zire71")
.
reserve
=
omap_reserve
,
.
init_irq
=
omap_palmz71_init_irq
,
.
init_machine
=
omap_palmz71_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
1
_timer
,
MACHINE_END
arch/arm/mach-omap1/board-perseus2.c
浏览文件 @
332acd9e
...
...
@@ -297,7 +297,7 @@ static void __init omap_perseus2_init(void)
static
void
__init
omap_perseus2_init_irq
(
void
)
{
omap1_init_common_hw
();
omap_init_irq
();
omap
1
_init_irq
();
}
/* Only FPGA needs to be mapped here. All others are done with ioremap */
static
struct
map_desc
omap_perseus2_io_desc
[]
__initdata
=
{
...
...
@@ -355,5 +355,5 @@ MACHINE_START(OMAP_PERSEUS2, "OMAP730 Perseus2")
.
reserve
=
omap_reserve
,
.
init_irq
=
omap_perseus2_init_irq
,
.
init_machine
=
omap_perseus2_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
1
_timer
,
MACHINE_END
arch/arm/mach-omap1/board-sx1.c
浏览文件 @
332acd9e
...
...
@@ -411,7 +411,7 @@ static void __init omap_sx1_init(void)
static
void
__init
omap_sx1_init_irq
(
void
)
{
omap1_init_common_hw
();
omap_init_irq
();
omap
1
_init_irq
();
}
/*----------------------------------------*/
...
...
@@ -426,5 +426,5 @@ MACHINE_START(SX1, "OMAP310 based Siemens SX1")
.
reserve
=
omap_reserve
,
.
init_irq
=
omap_sx1_init_irq
,
.
init_machine
=
omap_sx1_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
1
_timer
,
MACHINE_END
arch/arm/mach-omap1/board-voiceblue.c
浏览文件 @
332acd9e
...
...
@@ -162,7 +162,7 @@ static struct omap_board_config_kernel voiceblue_config[] = {
static
void
__init
voiceblue_init_irq
(
void
)
{
omap1_init_common_hw
();
omap_init_irq
();
omap
1
_init_irq
();
}
static
void
__init
voiceblue_map_io
(
void
)
...
...
@@ -306,5 +306,5 @@ MACHINE_START(VOICEBLUE, "VoiceBlue OMAP5910")
.
reserve
=
omap_reserve
,
.
init_irq
=
voiceblue_init_irq
,
.
init_machine
=
voiceblue_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
1
_timer
,
MACHINE_END
arch/arm/mach-omap1/irq.c
浏览文件 @
332acd9e
...
...
@@ -175,7 +175,7 @@ static struct irq_chip omap_irq_chip = {
.
irq_set_wake
=
omap_wake_irq
,
};
void
__init
omap_init_irq
(
void
)
void
__init
omap
1
_init_irq
(
void
)
{
int
i
,
j
;
...
...
arch/arm/mach-omap1/time.c
浏览文件 @
332acd9e
...
...
@@ -297,7 +297,7 @@ static inline int omap_32k_timer_usable(void)
* Timer initialization
* ---------------------------------------------------------------------------
*/
static
void
__init
omap_timer_init
(
void
)
static
void
__init
omap
1
_timer_init
(
void
)
{
if
(
omap_32k_timer_usable
())
{
preferred_sched_clock_init
(
1
);
...
...
@@ -307,6 +307,6 @@ static void __init omap_timer_init(void)
}
}
struct
sys_timer
omap_timer
=
{
.
init
=
omap_timer_init
,
struct
sys_timer
omap
1
_timer
=
{
.
init
=
omap
1
_timer_init
,
};
arch/arm/mach-omap1/timer32k.c
浏览文件 @
332acd9e
...
...
@@ -183,10 +183,6 @@ static __init void omap_init_32k_timer(void)
bool
__init
omap_32k_timer_init
(
void
)
{
omap_init_clocksource_32k
();
#ifdef CONFIG_OMAP_DM_TIMER
omap_dm_timer_init
();
#endif
omap_init_32k_timer
();
return
true
;
...
...
arch/arm/mach-omap2/Makefile
浏览文件 @
332acd9e
...
...
@@ -3,7 +3,7 @@
#
# Common support
obj-y
:=
id.o io.o control.o mux.o devices.o serial.o gpmc.o timer
-gp
.o pm.o
\
obj-y
:=
id.o io.o control.o mux.o devices.o serial.o gpmc.o timer.o pm.o
\
common.o gpio.o dma.o wd_timer.o
omap-2-3-common
=
irq.o sdrc.o
...
...
arch/arm/mach-omap2/board-2430sdp.c
浏览文件 @
332acd9e
...
...
@@ -260,7 +260,7 @@ MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board")
.
reserve
=
omap_reserve
,
.
map_io
=
omap_2430sdp_map_io
,
.
init_early
=
omap_2430sdp_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
2
_init_irq
,
.
init_machine
=
omap_2430sdp_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
2
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-3430sdp.c
浏览文件 @
332acd9e
...
...
@@ -804,7 +804,7 @@ MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board")
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
omap_3430sdp_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
omap_3430sdp_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-3630sdp.c
浏览文件 @
332acd9e
...
...
@@ -219,7 +219,7 @@ MACHINE_START(OMAP_3630SDP, "OMAP 3630SDP board")
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
omap_sdp_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
omap_sdp_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-4430sdp.c
浏览文件 @
332acd9e
...
...
@@ -40,7 +40,6 @@
#include "mux.h"
#include "hsmmc.h"
#include "timer-gp.h"
#include "control.h"
#include "common-board-devices.h"
...
...
@@ -295,9 +294,6 @@ static void __init omap_4430sdp_init_early(void)
{
omap2_init_common_infrastructure
();
omap2_init_common_devices
(
NULL
,
NULL
);
#ifdef CONFIG_OMAP_32K_TIMER
omap2_gp_clockevent_set_gptimer
(
1
);
#endif
}
static
struct
omap_musb_board_data
musb_board_data
=
{
...
...
@@ -768,5 +764,5 @@ MACHINE_START(OMAP_4430SDP, "OMAP4430 4430SDP board")
.
init_early
=
omap_4430sdp_init_early
,
.
init_irq
=
gic_init_irq
,
.
init_machine
=
omap_4430sdp_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
4
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-am3517crane.c
浏览文件 @
332acd9e
...
...
@@ -104,7 +104,7 @@ MACHINE_START(CRANEBOARD, "AM3517/05 CRANEBOARD")
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
am3517_crane_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
am3517_crane_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-am3517evm.c
浏览文件 @
332acd9e
...
...
@@ -494,7 +494,7 @@ MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM")
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
am3517_evm_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
am3517_evm_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-apollon.c
浏览文件 @
332acd9e
...
...
@@ -354,7 +354,7 @@ MACHINE_START(OMAP_APOLLON, "OMAP24xx Apollon")
.
reserve
=
omap_reserve
,
.
map_io
=
omap_apollon_map_io
,
.
init_early
=
omap_apollon_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
2
_init_irq
,
.
init_machine
=
omap_apollon_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
2
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-cm-t35.c
浏览文件 @
332acd9e
...
...
@@ -642,7 +642,7 @@ MACHINE_START(CM_T35, "Compulab CM-T35")
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
cm_t35_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
cm_t35_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-cm-t3517.c
浏览文件 @
332acd9e
...
...
@@ -303,7 +303,7 @@ MACHINE_START(CM_T3517, "Compulab CM-T3517")
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
cm_t3517_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
cm_t3517_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-devkit8000.c
浏览文件 @
332acd9e
...
...
@@ -58,7 +58,6 @@
#include "mux.h"
#include "hsmmc.h"
#include "timer-gp.h"
#include "common-board-devices.h"
#define OMAP_DM9000_GPIO_IRQ 25
...
...
@@ -440,10 +439,7 @@ static void __init devkit8000_init_early(void)
static
void
__init
devkit8000_init_irq
(
void
)
{
omap_init_irq
();
#ifdef CONFIG_OMAP_32K_TIMER
omap2_gp_clockevent_set_gptimer
(
12
);
#endif
omap3_init_irq
();
}
#define OMAP_DM9000_BASE 0x2c000000
...
...
@@ -709,5 +705,5 @@ MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000")
.
init_early
=
devkit8000_init_early
,
.
init_irq
=
devkit8000_init_irq
,
.
init_machine
=
devkit8000_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3_secure
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-generic.c
浏览文件 @
332acd9e
...
...
@@ -70,7 +70,7 @@ MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx")
.
reserve
=
omap_reserve
,
.
map_io
=
omap_generic_map_io
,
.
init_early
=
omap_generic_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
2
_init_irq
,
.
init_machine
=
omap_generic_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-h4.c
浏览文件 @
332acd9e
...
...
@@ -298,7 +298,7 @@ static void __init omap_h4_init_early(void)
static
void
__init
omap_h4_init_irq
(
void
)
{
omap_init_irq
();
omap
2
_init_irq
();
}
static
struct
at24_platform_data
m24c01
=
{
...
...
@@ -388,5 +388,5 @@ MACHINE_START(OMAP_H4, "OMAP2420 H4 board")
.
init_early
=
omap_h4_init_early
,
.
init_irq
=
omap_h4_init_irq
,
.
init_machine
=
omap_h4_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
2
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-igep0020.c
浏览文件 @
332acd9e
...
...
@@ -706,9 +706,9 @@ MACHINE_START(IGEP0020, "IGEP v2 board")
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
igep_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
igep_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
MACHINE_START
(
IGEP0030
,
"IGEP OMAP3 module"
)
...
...
@@ -716,7 +716,7 @@ MACHINE_START(IGEP0030, "IGEP OMAP3 module")
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
igep_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
igep_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-ldp.c
浏览文件 @
332acd9e
...
...
@@ -348,7 +348,7 @@ MACHINE_START(OMAP_LDP, "OMAP LDP board")
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
omap_ldp_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
omap_ldp_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-n8x0.c
浏览文件 @
332acd9e
...
...
@@ -699,9 +699,9 @@ MACHINE_START(NOKIA_N800, "Nokia N800")
.
reserve
=
omap_reserve
,
.
map_io
=
n8x0_map_io
,
.
init_early
=
n8x0_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
2
_init_irq
,
.
init_machine
=
n8x0_init_machine
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
2
_timer
,
MACHINE_END
MACHINE_START
(
NOKIA_N810
,
"Nokia N810"
)
...
...
@@ -709,9 +709,9 @@ MACHINE_START(NOKIA_N810, "Nokia N810")
.
reserve
=
omap_reserve
,
.
map_io
=
n8x0_map_io
,
.
init_early
=
n8x0_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
2
_init_irq
,
.
init_machine
=
n8x0_init_machine
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
2
_timer
,
MACHINE_END
MACHINE_START
(
NOKIA_N810_WIMAX
,
"Nokia N810 WiMAX"
)
...
...
@@ -719,7 +719,7 @@ MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX")
.
reserve
=
omap_reserve
,
.
map_io
=
n8x0_map_io
,
.
init_early
=
n8x0_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
2
_init_irq
,
.
init_machine
=
n8x0_init_machine
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
2
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-omap3beagle.c
浏览文件 @
332acd9e
...
...
@@ -50,7 +50,6 @@
#include "mux.h"
#include "hsmmc.h"
#include "timer-gp.h"
#include "pm.h"
#include "common-board-devices.h"
...
...
@@ -483,10 +482,7 @@ static void __init omap3_beagle_init_early(void)
static
void
__init
omap3_beagle_init_irq
(
void
)
{
omap_init_irq
();
#ifdef CONFIG_OMAP_32K_TIMER
omap2_gp_clockevent_set_gptimer
(
12
);
#endif
omap3_init_irq
();
}
static
struct
platform_device
*
omap3_beagle_devices
[]
__initdata
=
{
...
...
@@ -596,5 +592,5 @@ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
.
init_early
=
omap3_beagle_init_early
,
.
init_irq
=
omap3_beagle_init_irq
,
.
init_machine
=
omap3_beagle_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3_secure
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-omap3evm.c
浏览文件 @
332acd9e
...
...
@@ -739,7 +739,7 @@ MACHINE_START(OMAP3EVM, "OMAP3 EVM")
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
omap3_evm_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
omap3_evm_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-omap3logic.c
浏览文件 @
332acd9e
...
...
@@ -35,7 +35,6 @@
#include "mux.h"
#include "hsmmc.h"
#include "timer-gp.h"
#include "control.h"
#include "common-board-devices.h"
...
...
@@ -213,16 +212,16 @@ MACHINE_START(OMAP3_TORPEDO, "Logic OMAP3 Torpedo board")
.
boot_params
=
0x80000100
,
.
map_io
=
omap3_map_io
,
.
init_early
=
omap3logic_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
omap3logic_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
MACHINE_START
(
OMAP3530_LV_SOM
,
"OMAP Logic 3530 LV SOM board"
)
.
boot_params
=
0x80000100
,
.
map_io
=
omap3_map_io
,
.
init_early
=
omap3logic_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
omap3logic_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-omap3pandora.c
浏览文件 @
332acd9e
...
...
@@ -649,7 +649,7 @@ MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console")
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
omap3pandora_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
omap3pandora_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-omap3stalker.c
浏览文件 @
332acd9e
...
...
@@ -52,7 +52,6 @@
#include "sdram-micron-mt46h32m32lf-6.h"
#include "mux.h"
#include "hsmmc.h"
#include "timer-gp.h"
#include "common-board-devices.h"
#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
...
...
@@ -491,10 +490,7 @@ static void __init omap3_stalker_init_early(void)
static
void
__init
omap3_stalker_init_irq
(
void
)
{
omap_init_irq
();
#ifdef CONFIG_OMAP_32K_TIMER
omap2_gp_clockevent_set_gptimer
(
12
);
#endif
omap3_init_irq
();
}
static
struct
platform_device
*
omap3_stalker_devices
[]
__initdata
=
{
...
...
@@ -557,5 +553,5 @@ MACHINE_START(SBC3530, "OMAP3 STALKER")
.
init_early
=
omap3_stalker_init_early
,
.
init_irq
=
omap3_stalker_init_irq
,
.
init_machine
=
omap3_stalker_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3_secure
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-omap3touchbook.c
浏览文件 @
332acd9e
...
...
@@ -51,7 +51,6 @@
#include "mux.h"
#include "hsmmc.h"
#include "timer-gp.h"
#include "common-board-devices.h"
#include <asm/setup.h>
...
...
@@ -371,10 +370,7 @@ static void __init omap3_touchbook_init_early(void)
static
void
__init
omap3_touchbook_init_irq
(
void
)
{
omap_init_irq
();
#ifdef CONFIG_OMAP_32K_TIMER
omap2_gp_clockevent_set_gptimer
(
12
);
#endif
omap3_init_irq
();
}
static
struct
platform_device
*
omap3_touchbook_devices
[]
__initdata
=
{
...
...
@@ -449,5 +445,5 @@ MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board")
.
init_early
=
omap3_touchbook_init_early
,
.
init_irq
=
omap3_touchbook_init_irq
,
.
init_machine
=
omap3_touchbook_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3_secure
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-omap4panda.c
浏览文件 @
332acd9e
...
...
@@ -41,7 +41,6 @@
#include <plat/usb.h>
#include <plat/mmc.h>
#include <video/omap-panel-generic-dpi.h>
#include "timer-gp.h"
#include "hsmmc.h"
#include "control.h"
...
...
@@ -712,5 +711,5 @@ MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board")
.
init_early
=
omap4_panda_init_early
,
.
init_irq
=
gic_init_irq
,
.
init_machine
=
omap4_panda_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
4
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-overo.c
浏览文件 @
332acd9e
...
...
@@ -615,7 +615,7 @@ MACHINE_START(OVERO, "Gumstix Overo")
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
overo_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
overo_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-rm680.c
浏览文件 @
332acd9e
...
...
@@ -163,7 +163,7 @@ MACHINE_START(NOKIA_RM680, "Nokia RM-680 board")
.
reserve
=
omap_reserve
,
.
map_io
=
rm680_map_io
,
.
init_early
=
rm680_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
rm680_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-rx51.c
浏览文件 @
332acd9e
...
...
@@ -160,7 +160,7 @@ MACHINE_START(NOKIA_RX51, "Nokia RX-51 board")
.
reserve
=
rx51_reserve
,
.
map_io
=
rx51_map_io
,
.
init_early
=
rx51_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
rx51_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/board-ti8168evm.c
浏览文件 @
332acd9e
...
...
@@ -33,11 +33,6 @@ static void __init ti8168_init_early(void)
omap2_init_common_devices
(
NULL
,
NULL
);
}
static
void
__init
ti8168_evm_init_irq
(
void
)
{
omap_init_irq
();
}
static
void
__init
ti8168_evm_init
(
void
)
{
omap_serial_init
();
...
...
@@ -56,7 +51,7 @@ MACHINE_START(TI8168EVM, "ti8168evm")
.
boot_params
=
0x80000100
,
.
map_io
=
ti8168_evm_map_io
,
.
init_early
=
ti8168_init_early
,
.
init_irq
=
ti816
8_evm
_init_irq
,
.
timer
=
&
omap_timer
,
.
init_irq
=
ti816
x
_init_irq
,
.
timer
=
&
omap
3
_timer
,
.
init_machine
=
ti8168_evm_init
,
MACHINE_END
arch/arm/mach-omap2/board-zoom.c
浏览文件 @
332acd9e
...
...
@@ -137,9 +137,9 @@ MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board")
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
omap_zoom_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
omap_zoom_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
MACHINE_START
(
OMAP_ZOOM3
,
"OMAP Zoom3 board"
)
...
...
@@ -147,7 +147,7 @@ MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board")
.
reserve
=
omap_reserve
,
.
map_io
=
omap3_map_io
,
.
init_early
=
omap_zoom_init_early
,
.
init_irq
=
omap_init_irq
,
.
init_irq
=
omap
3
_init_irq
,
.
init_machine
=
omap_zoom_init
,
.
timer
=
&
omap_timer
,
.
timer
=
&
omap
3
_timer
,
MACHINE_END
arch/arm/mach-omap2/io.c
浏览文件 @
332acd9e
...
...
@@ -333,23 +333,9 @@ static int _set_hwmod_postsetup_state(struct omap_hwmod *oh, void *data)
return
omap_hwmod_set_postsetup_state
(
oh
,
*
(
u8
*
)
data
);
}
/* See irq.c, omap4-common.c and entry-macro.S */
void
__iomem
*
omap_irq_base
;
/*
* Initialize asm_irq_base for entry-macro.S
*/
static
inline
void
omap_irq_base_init
(
void
)
{
if
(
cpu_is_omap24xx
())
omap_irq_base
=
OMAP2_L4_IO_ADDRESS
(
OMAP24XX_IC_BASE
);
else
if
(
cpu_is_omap34xx
())
omap_irq_base
=
OMAP2_L4_IO_ADDRESS
(
OMAP34XX_IC_BASE
);
else
if
(
cpu_is_omap44xx
())
omap_irq_base
=
OMAP2_L4_IO_ADDRESS
(
OMAP44XX_GIC_CPU_BASE
);
else
pr_err
(
"Could not initialize omap_irq_base
\n
"
);
}
void
__init
omap2_init_common_infrastructure
(
void
)
{
u8
postsetup_state
;
...
...
@@ -422,7 +408,6 @@ void __init omap2_init_common_devices(struct omap_sdrc_params *sdrc_cs0,
_omap2_init_reprogram_sdrc
();
}
omap_irq_base_init
();
}
/*
...
...
arch/arm/mach-omap2/irq.c
浏览文件 @
332acd9e
...
...
@@ -141,25 +141,20 @@ omap_alloc_gc(void __iomem *base, unsigned int irq_start, unsigned int num)
IRQ_NOREQUEST
|
IRQ_NOPROBE
,
0
);
}
void
__init
omap_init_irq
(
void
)
static
void
__init
omap_init_irq
(
u32
base
,
int
nr_irqs
)
{
unsigned
long
nr_of_irqs
=
0
;
unsigned
int
nr_banks
=
0
;
int
i
,
j
;
omap_irq_base
=
ioremap
(
base
,
SZ_4K
);
if
(
WARN_ON
(
!
omap_irq_base
))
return
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
irq_banks
);
i
++
)
{
unsigned
long
base
=
0
;
struct
omap_irq_bank
*
bank
=
irq_banks
+
i
;
if
(
cpu_is_omap24xx
())
base
=
OMAP24XX_IC_BASE
;
else
if
(
cpu_is_omap34xx
())
base
=
OMAP34XX_IC_BASE
;
BUG_ON
(
!
base
);
if
(
cpu_is_ti816x
())
bank
->
nr_irqs
=
128
;
bank
->
nr_irqs
=
nr_irqs
;
/* Static mapping, never released */
bank
->
base_reg
=
ioremap
(
base
,
SZ_4K
);
...
...
@@ -181,6 +176,21 @@ void __init omap_init_irq(void)
nr_of_irqs
,
nr_banks
,
nr_banks
>
1
?
"s"
:
""
);
}
void
__init
omap2_init_irq
(
void
)
{
omap_init_irq
(
OMAP24XX_IC_BASE
,
96
);
}
void
__init
omap3_init_irq
(
void
)
{
omap_init_irq
(
OMAP34XX_IC_BASE
,
96
);
}
void
__init
ti816x_init_irq
(
void
)
{
omap_init_irq
(
OMAP34XX_IC_BASE
,
128
);
}
#ifdef CONFIG_ARCH_OMAP3
static
struct
omap3_intc_regs
intc_context
[
ARRAY_SIZE
(
irq_banks
)];
...
...
arch/arm/mach-omap2/omap4-common.c
浏览文件 @
332acd9e
...
...
@@ -19,6 +19,8 @@
#include <asm/hardware/gic.h>
#include <asm/hardware/cache-l2x0.h>
#include <plat/irqs.h>
#include <mach/hardware.h>
#include <mach/omap4-common.h>
...
...
@@ -31,17 +33,15 @@ void __iomem *gic_dist_base_addr;
void
__init
gic_init_irq
(
void
)
{
void
__iomem
*
gic_cpu_base
;
/* Static mapping, never released */
gic_dist_base_addr
=
ioremap
(
OMAP44XX_GIC_DIST_BASE
,
SZ_4K
);
BUG_ON
(
!
gic_dist_base_addr
);
/* Static mapping, never released */
gic_cpu
_base
=
ioremap
(
OMAP44XX_GIC_CPU_BASE
,
SZ_512
);
BUG_ON
(
!
gic_cpu
_base
);
omap_irq
_base
=
ioremap
(
OMAP44XX_GIC_CPU_BASE
,
SZ_512
);
BUG_ON
(
!
omap_irq
_base
);
gic_init
(
0
,
29
,
gic_dist_base_addr
,
gic_cpu
_base
);
gic_init
(
0
,
29
,
gic_dist_base_addr
,
omap_irq
_base
);
}
#ifdef CONFIG_CACHE_L2X0
...
...
arch/arm/mach-omap2/pm-debug.c
浏览文件 @
332acd9e
...
...
@@ -31,7 +31,6 @@
#include <plat/board.h>
#include "powerdomain.h"
#include "clockdomain.h"
#include <plat/dmtimer.h>
#include <plat/omap-pm.h>
#include "cm2xxx_3xxx.h"
...
...
@@ -41,8 +40,6 @@
int
omap2_pm_debug
;
u32
enable_off_mode
;
u32
sleep_while_idle
;
u32
wakeup_timer_seconds
;
u32
wakeup_timer_milliseconds
;
#define DUMP_PRM_MOD_REG(mod, reg) \
regs[reg_count].name = #mod "." #reg; \
...
...
@@ -162,23 +159,6 @@ void omap2_pm_dump(int mode, int resume, unsigned int us)
printk
(
KERN_INFO
"%-20s: 0x%08x
\n
"
,
regs
[
i
].
name
,
regs
[
i
].
val
);
}
void
omap2_pm_wakeup_on_timer
(
u32
seconds
,
u32
milliseconds
)
{
u32
tick_rate
,
cycles
;
if
(
!
seconds
&&
!
milliseconds
)
return
;
tick_rate
=
clk_get_rate
(
omap_dm_timer_get_fclk
(
gptimer_wakeup
));
cycles
=
tick_rate
*
seconds
+
tick_rate
*
milliseconds
/
1000
;
omap_dm_timer_stop
(
gptimer_wakeup
);
omap_dm_timer_set_load_start
(
gptimer_wakeup
,
0
,
0xffffffff
-
cycles
);
pr_info
(
"PM: Resume timer in %u.%03u secs"
" (%d ticks at %d ticks/sec.)
\n
"
,
seconds
,
milliseconds
,
cycles
,
tick_rate
);
}
#ifdef CONFIG_DEBUG_FS
#include <linux/debugfs.h>
#include <linux/seq_file.h>
...
...
@@ -576,9 +556,6 @@ static int option_set(void *data, u64 val)
{
u32
*
option
=
data
;
if
(
option
==
&
wakeup_timer_milliseconds
&&
val
>=
1000
)
return
-
EINVAL
;
*
option
=
val
;
if
(
option
==
&
enable_off_mode
)
{
...
...
@@ -641,11 +618,6 @@ static int __init pm_dbg_init(void)
&
enable_off_mode
,
&
pm_dbg_option_fops
);
(
void
)
debugfs_create_file
(
"sleep_while_idle"
,
S_IRUGO
|
S_IWUSR
,
d
,
&
sleep_while_idle
,
&
pm_dbg_option_fops
);
(
void
)
debugfs_create_file
(
"wakeup_timer_seconds"
,
S_IRUGO
|
S_IWUSR
,
d
,
&
wakeup_timer_seconds
,
&
pm_dbg_option_fops
);
(
void
)
debugfs_create_file
(
"wakeup_timer_milliseconds"
,
S_IRUGO
|
S_IWUSR
,
d
,
&
wakeup_timer_milliseconds
,
&
pm_dbg_option_fops
);
pm_dbg_init_done
=
1
;
return
0
;
...
...
arch/arm/mach-omap2/pm.h
浏览文件 @
332acd9e
...
...
@@ -60,19 +60,13 @@ inline void omap3_pm_init_cpuidle(struct cpuidle_params *cpuidle_board_params)
extern
int
omap3_pm_get_suspend_state
(
struct
powerdomain
*
pwrdm
);
extern
int
omap3_pm_set_suspend_state
(
struct
powerdomain
*
pwrdm
,
int
state
);
extern
u32
wakeup_timer_seconds
;
extern
u32
wakeup_timer_milliseconds
;
extern
struct
omap_dm_timer
*
gptimer_wakeup
;
#ifdef CONFIG_PM_DEBUG
extern
void
omap2_pm_dump
(
int
mode
,
int
resume
,
unsigned
int
us
);
extern
void
omap2_pm_wakeup_on_timer
(
u32
seconds
,
u32
milliseconds
);
extern
int
omap2_pm_debug
;
extern
u32
enable_off_mode
;
extern
u32
sleep_while_idle
;
#else
#define omap2_pm_dump(mode, resume, us) do {} while (0);
#define omap2_pm_wakeup_on_timer(seconds, milliseconds) do {} while (0);
#define omap2_pm_debug 0
#define enable_off_mode 0
#define sleep_while_idle 0
...
...
arch/arm/mach-omap2/pm34xx.c
浏览文件 @
332acd9e
...
...
@@ -534,10 +534,6 @@ static int omap3_pm_suspend(void)
struct
power_state
*
pwrst
;
int
state
,
ret
=
0
;
if
(
wakeup_timer_seconds
||
wakeup_timer_milliseconds
)
omap2_pm_wakeup_on_timer
(
wakeup_timer_seconds
,
wakeup_timer_milliseconds
);
/* Read current next_pwrsts */
list_for_each_entry
(
pwrst
,
&
pwrst_list
,
node
)
pwrst
->
saved_state
=
pwrdm_read_next_pwrst
(
pwrst
->
pwrdm
);
...
...
arch/arm/mach-omap2/timer-gp.h
已删除
100644 → 0
浏览文件 @
bafe2721
/*
* OMAP2/3 GPTIMER support.headers
*
* Copyright (C) 2009 Nokia Corporation
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*/
#ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_TIMER_GP_H
#define __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_TIMER_GP_H
extern
int
__init
omap2_gp_clockevent_set_gptimer
(
u8
id
);
#endif
arch/arm/mach-omap2/timer
-gp
.c
→
arch/arm/mach-omap2/timer.c
浏览文件 @
332acd9e
/*
* linux/arch/arm/mach-omap2/timer
-gp
.c
* linux/arch/arm/mach-omap2/timer.c
*
* OMAP2 GP timer support.
*
...
...
@@ -43,24 +43,42 @@
#include <plat/common.h>
#include <plat/omap_hwmod.h>
#include "timer-gp.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 OMAP2_32K_SOURCE "func_32k_ck"
#define OMAP3_32K_SOURCE "omap_32k_fck"
#define OMAP4_32K_SOURCE "sys_32k_ck"
#ifdef CONFIG_OMAP_32K_TIMER
#define OMAP2_CLKEV_SOURCE OMAP2_32K_SOURCE
#define OMAP3_CLKEV_SOURCE OMAP3_32K_SOURCE
#define OMAP4_CLKEV_SOURCE OMAP4_32K_SOURCE
#define OMAP3_SECURE_TIMER 12
#else
#define OMAP2_CLKEV_SOURCE OMAP2_MPU_SOURCE
#define OMAP3_CLKEV_SOURCE OMAP3_MPU_SOURCE
#define OMAP4_CLKEV_SOURCE OMAP4_MPU_SOURCE
#define OMAP3_SECURE_TIMER 1
#endif
/* MAX_GPTIMER_ID: number of GPTIMERs on the chip */
#define MAX_GPTIMER_ID 12
static
struct
omap_dm_timer
*
gptimer
;
u32
sys_timer_reserved
;
/* Clockevent code */
static
struct
omap_dm_timer
clkev
;
static
struct
clock_event_device
clockevent_gpt
;
static
u8
__initdata
gptimer_id
=
1
;
static
u8
__initdata
inited
;
struct
omap_dm_timer
*
gptimer_wakeup
;
static
irqreturn_t
omap2_gp_timer_interrupt
(
int
irq
,
void
*
dev_id
)
{
struct
omap_dm_timer
*
gpt
=
(
struct
omap_dm_timer
*
)
dev_id
;
struct
clock_event_device
*
evt
=
&
clockevent_gpt
;
omap_dm_timer_write_status
(
gpt
,
OMAP_TIMER_INT_OVERFLOW
);
__omap_dm_timer_write_status
(
clkev
.
io_base
,
OMAP_TIMER_INT_OVERFLOW
);
evt
->
event_handler
(
evt
);
return
IRQ_HANDLED
;
...
...
@@ -75,7 +93,8 @@ static struct irqaction omap2_gp_timer_irq = {
static
int
omap2_gp_timer_set_next_event
(
unsigned
long
cycles
,
struct
clock_event_device
*
evt
)
{
omap_dm_timer_set_load_start
(
gptimer
,
0
,
0xffffffff
-
cycles
);
__omap_dm_timer_load_start
(
clkev
.
io_base
,
OMAP_TIMER_CTRL_ST
,
0xffffffff
-
cycles
,
1
);
return
0
;
}
...
...
@@ -85,13 +104,18 @@ static void omap2_gp_timer_set_mode(enum clock_event_mode mode,
{
u32
period
;
omap_dm_timer_stop
(
gptimer
);
__omap_dm_timer_stop
(
clkev
.
io_base
,
1
,
clkev
.
rate
);
switch
(
mode
)
{
case
CLOCK_EVT_MODE_PERIODIC
:
period
=
clk
_get_rate
(
omap_dm_timer_get_fclk
(
gptimer
))
/
HZ
;
period
=
clk
ev
.
rate
/
HZ
;
period
-=
1
;
omap_dm_timer_set_load_start
(
gptimer
,
1
,
0xffffffff
-
period
);
/* Looks like we need to first set the load value separately */
__omap_dm_timer_write
(
clkev
.
io_base
,
OMAP_TIMER_LOAD_REG
,
0xffffffff
-
period
,
1
);
__omap_dm_timer_load_start
(
clkev
.
io_base
,
OMAP_TIMER_CTRL_AR
|
OMAP_TIMER_CTRL_ST
,
0xffffffff
-
period
,
1
);
break
;
case
CLOCK_EVT_MODE_ONESHOT
:
break
;
...
...
@@ -110,63 +134,85 @@ static struct clock_event_device clockevent_gpt = {
.
set_mode
=
omap2_gp_timer_set_mode
,
};
/**
* omap2_gp_clockevent_set_gptimer - set which GPTIMER is used for clockevents
* @id: GPTIMER to use (1..MAX_GPTIMER_ID)
*
* Define the GPTIMER that the system should use for the tick timer.
* Meant to be called from board-*.c files in the event that GPTIMER1, the
* default, is unsuitable. Returns -EINVAL on error or 0 on success.
*/
int
__init
omap2_gp_clockevent_set_gptimer
(
u8
id
)
static
int
__init
omap_dm_timer_init_one
(
struct
omap_dm_timer
*
timer
,
int
gptimer_id
,
const
char
*
fck_source
)
{
if
(
id
<
1
||
id
>
MAX_GPTIMER_ID
)
return
-
EINVAL
;
BUG_ON
(
inited
);
char
name
[
10
];
/* 10 = sizeof("gptXX_Xck0") */
struct
omap_hwmod
*
oh
;
size_t
size
;
int
res
=
0
;
sprintf
(
name
,
"timer%d"
,
gptimer_id
);
omap_hwmod_setup_one
(
name
);
oh
=
omap_hwmod_lookup
(
name
);
if
(
!
oh
)
return
-
ENODEV
;
timer
->
irq
=
oh
->
mpu_irqs
[
0
].
irq
;
timer
->
phys_base
=
oh
->
slaves
[
0
]
->
addr
->
pa_start
;
size
=
oh
->
slaves
[
0
]
->
addr
->
pa_end
-
timer
->
phys_base
;
/* Static mapping, never released */
timer
->
io_base
=
ioremap
(
timer
->
phys_base
,
size
);
if
(
!
timer
->
io_base
)
return
-
ENXIO
;
/* After the dmtimer is using hwmod these clocks won't be needed */
sprintf
(
name
,
"gpt%d_fck"
,
gptimer_id
);
timer
->
fclk
=
clk_get
(
NULL
,
name
);
if
(
IS_ERR
(
timer
->
fclk
))
return
-
ENODEV
;
sprintf
(
name
,
"gpt%d_ick"
,
gptimer_id
);
timer
->
iclk
=
clk_get
(
NULL
,
name
);
if
(
IS_ERR
(
timer
->
iclk
))
{
clk_put
(
timer
->
fclk
);
return
-
ENODEV
;
}
gptimer_id
=
id
;
omap_hwmod_enable
(
oh
)
;
return
0
;
}
sys_timer_reserved
|=
(
1
<<
(
gptimer_id
-
1
));
static
void
__init
omap2_gp_clockevent_init
(
void
)
{
u32
tick_rate
;
int
src
;
char
clockevent_hwmod_name
[
8
];
/* 8 = sizeof("timerXX0") */
if
(
gptimer_id
!=
12
)
{
struct
clk
*
src
;
inited
=
1
;
src
=
clk_get
(
NULL
,
fck_source
);
if
(
IS_ERR
(
src
))
{
res
=
-
EINVAL
;
}
else
{
res
=
__omap_dm_timer_set_source
(
timer
->
fclk
,
src
);
if
(
IS_ERR_VALUE
(
res
))
pr_warning
(
"%s: timer%i cannot set source
\n
"
,
__func__
,
gptimer_id
);
clk_put
(
src
);
}
}
__omap_dm_timer_reset
(
timer
->
io_base
,
1
,
1
);
timer
->
posted
=
1
;
sprintf
(
clockevent_hwmod_name
,
"timer%d"
,
gptimer_id
);
omap_hwmod_setup_one
(
clockevent_hwmod_name
);
timer
->
rate
=
clk_get_rate
(
timer
->
fclk
);
gptimer
=
omap_dm_timer_request_specific
(
gptimer_id
);
BUG_ON
(
gptimer
==
NULL
);
gptimer_wakeup
=
gptimer
;
timer
->
reserved
=
1
;
#if defined(CONFIG_OMAP_32K_TIMER)
src
=
OMAP_TIMER_SRC_32_KHZ
;
#else
src
=
OMAP_TIMER_SRC_SYS_CLK
;
WARN
(
gptimer_id
==
12
,
"WARNING: GPTIMER12 can only use the "
"secure 32KiHz clock source
\n
"
);
#endif
return
res
;
}
if
(
gptimer_id
!=
12
)
WARN
(
IS_ERR_VALUE
(
omap_dm_timer_set_source
(
gptimer
,
src
)),
"timer-gp: omap_dm_timer_set_source() failed
\n
"
);
static
void
__init
omap2_gp_clockevent_init
(
int
gptimer_id
,
const
char
*
fck_source
)
{
int
res
;
tick_rate
=
clk_get_rate
(
omap_dm_timer_get_fclk
(
gptimer
));
res
=
omap_dm_timer_init_one
(
&
clkev
,
gptimer_id
,
fck_source
);
BUG_ON
(
res
);
pr_info
(
"OMAP clockevent source: GPTIMER%d at %u Hz
\n
"
,
gptimer_id
,
tick_rate
);
omap2_gp_timer_irq
.
dev_id
=
(
void
*
)
&
clkev
;
setup_irq
(
clkev
.
irq
,
&
omap2_gp_timer_irq
);
omap2_gp_timer_irq
.
dev_id
=
(
void
*
)
gptimer
;
setup_irq
(
omap_dm_timer_get_irq
(
gptimer
),
&
omap2_gp_timer_irq
);
omap_dm_timer_set_int_enable
(
gptimer
,
OMAP_TIMER_INT_OVERFLOW
);
__omap_dm_timer_int_enable
(
clkev
.
io_base
,
OMAP_TIMER_INT_OVERFLOW
);
clockevent_gpt
.
mult
=
div_sc
(
tick_
rate
,
NSEC_PER_SEC
,
clockevent_gpt
.
mult
=
div_sc
(
clkev
.
rate
,
NSEC_PER_SEC
,
clockevent_gpt
.
shift
);
clockevent_gpt
.
max_delta_ns
=
clockevent_delta2ns
(
0xffffffff
,
&
clockevent_gpt
);
...
...
@@ -176,31 +222,36 @@ static void __init omap2_gp_clockevent_init(void)
clockevent_gpt
.
cpumask
=
cpumask_of
(
0
);
clockevents_register_device
(
&
clockevent_gpt
);
pr_info
(
"OMAP clockevent source: GPTIMER%d at %lu Hz
\n
"
,
gptimer_id
,
clkev
.
rate
);
}
/* Clocksource code */
#ifdef CONFIG_OMAP_32K_TIMER
/*
/*
* When 32k-timer is enabled, don't use GPTimer for clocksource
* instead, just leave default clocksource which uses the 32k
* sync counter. See clocksource setup in plat-omap/counter_32k.c
*/
static
void
__init
omap2_gp_clocksource_init
(
void
)
static
void
__init
omap2_gp_clocksource_init
(
int
unused
,
const
char
*
dummy
)
{
omap_init_clocksource_32k
();
}
#else
static
struct
omap_dm_timer
clksrc
;
/*
* clocksource
*/
static
DEFINE_CLOCK_DATA
(
cd
);
static
struct
omap_dm_timer
*
gpt_clocksource
;
static
cycle_t
clocksource_read_cycles
(
struct
clocksource
*
cs
)
{
return
(
cycle_t
)
omap_dm_timer_read_counter
(
gpt_clocksource
);
return
(
cycle_t
)
__omap_dm_timer_read_counter
(
clksrc
.
io_base
,
1
);
}
static
struct
clocksource
clocksource_gpt
=
{
...
...
@@ -215,52 +266,77 @@ static void notrace dmtimer_update_sched_clock(void)
{
u32
cyc
;
cyc
=
omap_dm_timer_read_counter
(
gpt_clocksource
);
cyc
=
__omap_dm_timer_read_counter
(
clksrc
.
io_base
,
1
);
update_sched_clock
(
&
cd
,
cyc
,
(
u32
)
~
0
);
}
unsigned
long
long
notrace
sched_clock
(
void
)
{
u32
cyc
=
0
;
if
(
clksrc
.
reserved
)
cyc
=
__omap_dm_timer_read_counter
(
clksrc
.
io_base
,
1
);
return
cyc_to_sched_clock
(
&
cd
,
cyc
,
(
u32
)
~
0
);
}
/* Setup free-running counter for clocksource */
static
void
__init
omap2_gp_clocksource_init
(
void
)
static
void
__init
omap2_gp_clocksource_init
(
int
gptimer_id
,
const
char
*
fck_source
)
{
static
struct
omap_dm_timer
*
gpt
;
u32
tick_rate
;
static
char
err1
[]
__initdata
=
KERN_ERR
"%s: failed to request dm-timer
\n
"
;
static
char
err2
[]
__initdata
=
KERN_ERR
"%s: can't register clocksource!
\n
"
;
int
res
;
gpt
=
omap_dm_timer_request
();
if
(
!
gpt
)
printk
(
err1
,
clocksource_gpt
.
name
);
gpt_clocksource
=
gpt
;
res
=
omap_dm_timer_init_one
(
&
clksrc
,
gptimer_id
,
fck_source
);
BUG_ON
(
res
);
omap_dm_timer_set_source
(
gpt
,
OMAP_TIMER_SRC_SYS_CLK
);
tick_rate
=
clk_get_rate
(
omap_dm_timer_get_fclk
(
gpt
)
);
pr_info
(
"OMAP clocksource: GPTIMER%d at %lu Hz
\n
"
,
gptimer_id
,
clksrc
.
rate
);
omap_dm_timer_set_load_start
(
gpt
,
1
,
0
);
__omap_dm_timer_load_start
(
clksrc
.
io_base
,
OMAP_TIMER_CTRL_ST
,
0
,
1
);
init_sched_clock
(
&
cd
,
dmtimer_update_sched_clock
,
32
,
clksrc
.
rate
);
init_sched_clock
(
&
cd
,
dmtimer_update_sched_clock
,
32
,
tick_rate
);
if
(
clocksource_register_hz
(
&
clocksource_gpt
,
clksrc
.
rate
))
pr_err
(
"Could not register clocksource %s
\n
"
,
clocksource_gpt
.
name
);
}
#endif
if
(
clocksource_register_hz
(
&
clocksource_gpt
,
tick_rate
))
printk
(
err2
,
clocksource_gpt
.
name
);
#define OMAP_SYS_TIMER_INIT(name, clkev_nr, clkev_src, \
clksrc_nr, clksrc_src) \
static void __init omap##name##_timer_init(void) \
{ \
omap2_gp_clockevent_init((clkev_nr), clkev_src); \
omap2_gp_clocksource_init((clksrc_nr), clksrc_src); \
}
#define OMAP_SYS_TIMER(name) \
struct sys_timer omap##name##_timer = { \
.init = omap##name##_timer_init, \
};
#ifdef CONFIG_ARCH_OMAP2
OMAP_SYS_TIMER_INIT
(
2
,
1
,
OMAP2_CLKEV_SOURCE
,
2
,
OMAP2_MPU_SOURCE
)
OMAP_SYS_TIMER
(
2
)
#endif
static
void
__init
omap2_gp_timer_init
(
void
)
#ifdef CONFIG_ARCH_OMAP3
OMAP_SYS_TIMER_INIT
(
3
,
1
,
OMAP3_CLKEV_SOURCE
,
2
,
OMAP3_MPU_SOURCE
)
OMAP_SYS_TIMER
(
3
)
OMAP_SYS_TIMER_INIT
(
3
_secure
,
OMAP3_SECURE_TIMER
,
OMAP3_CLKEV_SOURCE
,
2
,
OMAP3_MPU_SOURCE
)
OMAP_SYS_TIMER
(
3
_secure
)
#endif
#ifdef CONFIG_ARCH_OMAP4
static
void
__init
omap4_timer_init
(
void
)
{
#ifdef CONFIG_LOCAL_TIMERS
if
(
cpu_is_omap44xx
())
{
twd_base
=
ioremap
(
OMAP44XX_LOCAL_TWD_BASE
,
SZ_256
);
BUG_ON
(
!
twd_base
);
}
twd_base
=
ioremap
(
OMAP44XX_LOCAL_TWD_BASE
,
SZ_256
);
BUG_ON
(
!
twd_base
);
#endif
omap_dm_timer_init
();
omap2_gp_clockevent_init
();
omap2_gp_clocksource_init
();
omap2_gp_clockevent_init
(
1
,
OMAP4_CLKEV_SOURCE
);
omap2_gp_clocksource_init
(
2
,
OMAP4_MPU_SOURCE
);
}
struct
sys_timer
omap_timer
=
{
.
init
=
omap2_gp_timer_init
,
};
OMAP_SYS_TIMER
(
4
)
#endif
arch/arm/plat-omap/counter_32k.c
浏览文件 @
332acd9e
...
...
@@ -126,7 +126,7 @@ static inline unsigned long long notrace _omap_32k_sched_clock(void)
return
cyc_to_fixed_sched_clock
(
&
cd
,
cyc
,
(
u32
)
~
0
,
SC_MULT
,
SC_SHIFT
);
}
#if
ndef CONFIG_OMAP_MPU_TIMER
#if
defined(CONFIG_OMAP_32K_TIMER) && !defined(CONFIG_OMAP_MPU_TIMER)
unsigned
long
long
notrace
sched_clock
(
void
)
{
return
_omap_32k_sched_clock
();
...
...
arch/arm/plat-omap/dmtimer.c
浏览文件 @
332acd9e
...
...
@@ -41,127 +41,6 @@
#include <plat/dmtimer.h>
#include <mach/irqs.h>
/* register offsets */
#define _OMAP_TIMER_ID_OFFSET 0x00
#define _OMAP_TIMER_OCP_CFG_OFFSET 0x10
#define _OMAP_TIMER_SYS_STAT_OFFSET 0x14
#define _OMAP_TIMER_STAT_OFFSET 0x18
#define _OMAP_TIMER_INT_EN_OFFSET 0x1c
#define _OMAP_TIMER_WAKEUP_EN_OFFSET 0x20
#define _OMAP_TIMER_CTRL_OFFSET 0x24
#define OMAP_TIMER_CTRL_GPOCFG (1 << 14)
#define OMAP_TIMER_CTRL_CAPTMODE (1 << 13)
#define OMAP_TIMER_CTRL_PT (1 << 12)
#define OMAP_TIMER_CTRL_TCM_LOWTOHIGH (0x1 << 8)
#define OMAP_TIMER_CTRL_TCM_HIGHTOLOW (0x2 << 8)
#define OMAP_TIMER_CTRL_TCM_BOTHEDGES (0x3 << 8)
#define OMAP_TIMER_CTRL_SCPWM (1 << 7)
#define OMAP_TIMER_CTRL_CE (1 << 6)
/* compare enable */
#define OMAP_TIMER_CTRL_PRE (1 << 5)
/* prescaler enable */
#define OMAP_TIMER_CTRL_PTV_SHIFT 2
/* prescaler value shift */
#define OMAP_TIMER_CTRL_POSTED (1 << 2)
#define OMAP_TIMER_CTRL_AR (1 << 1)
/* auto-reload enable */
#define OMAP_TIMER_CTRL_ST (1 << 0)
/* start timer */
#define _OMAP_TIMER_COUNTER_OFFSET 0x28
#define _OMAP_TIMER_LOAD_OFFSET 0x2c
#define _OMAP_TIMER_TRIGGER_OFFSET 0x30
#define _OMAP_TIMER_WRITE_PEND_OFFSET 0x34
#define WP_NONE 0
/* no write pending bit */
#define WP_TCLR (1 << 0)
#define WP_TCRR (1 << 1)
#define WP_TLDR (1 << 2)
#define WP_TTGR (1 << 3)
#define WP_TMAR (1 << 4)
#define WP_TPIR (1 << 5)
#define WP_TNIR (1 << 6)
#define WP_TCVR (1 << 7)
#define WP_TOCR (1 << 8)
#define WP_TOWR (1 << 9)
#define _OMAP_TIMER_MATCH_OFFSET 0x38
#define _OMAP_TIMER_CAPTURE_OFFSET 0x3c
#define _OMAP_TIMER_IF_CTRL_OFFSET 0x40
#define _OMAP_TIMER_CAPTURE2_OFFSET 0x44
/* TCAR2, 34xx only */
#define _OMAP_TIMER_TICK_POS_OFFSET 0x48
/* TPIR, 34xx only */
#define _OMAP_TIMER_TICK_NEG_OFFSET 0x4c
/* TNIR, 34xx only */
#define _OMAP_TIMER_TICK_COUNT_OFFSET 0x50
/* TCVR, 34xx only */
#define _OMAP_TIMER_TICK_INT_MASK_SET_OFFSET 0x54
/* TOCR, 34xx only */
#define _OMAP_TIMER_TICK_INT_MASK_COUNT_OFFSET 0x58
/* TOWR, 34xx only */
/* register offsets with the write pending bit encoded */
#define WPSHIFT 16
#define OMAP_TIMER_ID_REG (_OMAP_TIMER_ID_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_OCP_CFG_REG (_OMAP_TIMER_OCP_CFG_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_SYS_STAT_REG (_OMAP_TIMER_SYS_STAT_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_STAT_REG (_OMAP_TIMER_STAT_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_INT_EN_REG (_OMAP_TIMER_INT_EN_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_WAKEUP_EN_REG (_OMAP_TIMER_WAKEUP_EN_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_CTRL_REG (_OMAP_TIMER_CTRL_OFFSET \
| (WP_TCLR << WPSHIFT))
#define OMAP_TIMER_COUNTER_REG (_OMAP_TIMER_COUNTER_OFFSET \
| (WP_TCRR << WPSHIFT))
#define OMAP_TIMER_LOAD_REG (_OMAP_TIMER_LOAD_OFFSET \
| (WP_TLDR << WPSHIFT))
#define OMAP_TIMER_TRIGGER_REG (_OMAP_TIMER_TRIGGER_OFFSET \
| (WP_TTGR << WPSHIFT))
#define OMAP_TIMER_WRITE_PEND_REG (_OMAP_TIMER_WRITE_PEND_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_MATCH_REG (_OMAP_TIMER_MATCH_OFFSET \
| (WP_TMAR << WPSHIFT))
#define OMAP_TIMER_CAPTURE_REG (_OMAP_TIMER_CAPTURE_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_IF_CTRL_REG (_OMAP_TIMER_IF_CTRL_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_CAPTURE2_REG (_OMAP_TIMER_CAPTURE2_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_TICK_POS_REG (_OMAP_TIMER_TICK_POS_OFFSET \
| (WP_TPIR << WPSHIFT))
#define OMAP_TIMER_TICK_NEG_REG (_OMAP_TIMER_TICK_NEG_OFFSET \
| (WP_TNIR << WPSHIFT))
#define OMAP_TIMER_TICK_COUNT_REG (_OMAP_TIMER_TICK_COUNT_OFFSET \
| (WP_TCVR << WPSHIFT))
#define OMAP_TIMER_TICK_INT_MASK_SET_REG \
(_OMAP_TIMER_TICK_INT_MASK_SET_OFFSET | (WP_TOCR << WPSHIFT))
#define OMAP_TIMER_TICK_INT_MASK_COUNT_REG \
(_OMAP_TIMER_TICK_INT_MASK_COUNT_OFFSET | (WP_TOWR << WPSHIFT))
struct
omap_dm_timer
{
unsigned
long
phys_base
;
int
irq
;
#ifdef CONFIG_ARCH_OMAP2PLUS
struct
clk
*
iclk
,
*
fclk
;
#endif
void
__iomem
*
io_base
;
unsigned
reserved
:
1
;
unsigned
enabled
:
1
;
unsigned
posted
:
1
;
};
static
int
dm_timer_count
;
#ifdef CONFIG_ARCH_OMAP1
...
...
@@ -291,11 +170,7 @@ static spinlock_t dm_timer_lock;
*/
static
inline
u32
omap_dm_timer_read_reg
(
struct
omap_dm_timer
*
timer
,
u32
reg
)
{
if
(
timer
->
posted
)
while
(
readl
(
timer
->
io_base
+
(
OMAP_TIMER_WRITE_PEND_REG
&
0xff
))
&
(
reg
>>
WPSHIFT
))
cpu_relax
();
return
readl
(
timer
->
io_base
+
(
reg
&
0xff
));
return
__omap_dm_timer_read
(
timer
->
io_base
,
reg
,
timer
->
posted
);
}
/*
...
...
@@ -307,11 +182,7 @@ static inline u32 omap_dm_timer_read_reg(struct omap_dm_timer *timer, u32 reg)
static
void
omap_dm_timer_write_reg
(
struct
omap_dm_timer
*
timer
,
u32
reg
,
u32
value
)
{
if
(
timer
->
posted
)
while
(
readl
(
timer
->
io_base
+
(
OMAP_TIMER_WRITE_PEND_REG
&
0xff
))
&
(
reg
>>
WPSHIFT
))
cpu_relax
();
writel
(
value
,
timer
->
io_base
+
(
reg
&
0xff
));
__omap_dm_timer_write
(
timer
->
io_base
,
reg
,
value
,
timer
->
posted
);
}
static
void
omap_dm_timer_wait_for_reset
(
struct
omap_dm_timer
*
timer
)
...
...
@@ -330,7 +201,7 @@ static void omap_dm_timer_wait_for_reset(struct omap_dm_timer *timer)
static
void
omap_dm_timer_reset
(
struct
omap_dm_timer
*
timer
)
{
u32
l
;
int
autoidle
=
0
,
wakeup
=
0
;
if
(
!
cpu_class_is_omap2
()
||
timer
!=
&
dm_timers
[
0
])
{
omap_dm_timer_write_reg
(
timer
,
OMAP_TIMER_IF_CTRL_REG
,
0x06
);
...
...
@@ -338,28 +209,21 @@ static void omap_dm_timer_reset(struct omap_dm_timer *timer)
}
omap_dm_timer_set_source
(
timer
,
OMAP_TIMER_SRC_32_KHZ
);
l
=
omap_dm_timer_read_reg
(
timer
,
OMAP_TIMER_OCP_CFG_REG
);
l
|=
0x02
<<
3
;
/* Set to smart-idle mode */
l
|=
0x2
<<
8
;
/* Set clock activity to perserve f-clock on idle */
/* Enable autoidle on OMAP2 / OMAP3 */
if
(
cpu_is_omap24xx
()
||
cpu_is_omap34xx
())
l
|=
0x1
<<
0
;
autoidle
=
1
;
/*
* Enable wake-up on OMAP2 CPUs.
*/
if
(
cpu_class_is_omap2
())
l
|=
1
<<
2
;
omap_dm_timer_write_reg
(
timer
,
OMAP_TIMER_OCP_CFG_REG
,
l
);
wakeup
=
1
;
/* Match hardware reset default of posted mode */
omap_dm_timer_write_reg
(
timer
,
OMAP_TIMER_IF_CTRL_REG
,
OMAP_TIMER_CTRL_POSTED
);
__omap_dm_timer_reset
(
timer
->
io_base
,
autoidle
,
wakeup
);
timer
->
posted
=
1
;
}
static
void
omap_dm_timer_prepare
(
struct
omap_dm_timer
*
timer
)
void
omap_dm_timer_prepare
(
struct
omap_dm_timer
*
timer
)
{
omap_dm_timer_enable
(
timer
);
omap_dm_timer_reset
(
timer
);
...
...
@@ -531,25 +395,13 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_start);
void
omap_dm_timer_stop
(
struct
omap_dm_timer
*
timer
)
{
u
32
l
;
u
nsigned
long
rate
=
0
;
l
=
omap_dm_timer_read_reg
(
timer
,
OMAP_TIMER_CTRL_REG
);
if
(
l
&
OMAP_TIMER_CTRL_ST
)
{
l
&=
~
0x1
;
omap_dm_timer_write_reg
(
timer
,
OMAP_TIMER_CTRL_REG
,
l
);
#ifdef CONFIG_ARCH_OMAP2PLUS
/* Readback to make sure write has completed */
omap_dm_timer_read_reg
(
timer
,
OMAP_TIMER_CTRL_REG
);
/*
* Wait for functional clock period x 3.5 to make sure that
* timer is stopped
*/
udelay
(
3500000
/
clk_get_rate
(
timer
->
fclk
)
+
1
);
rate
=
clk_get_rate
(
timer
->
fclk
);
#endif
}
/* Ack possibly pending interrupt */
omap_dm_timer_write_reg
(
timer
,
OMAP_TIMER_STAT_REG
,
OMAP_TIMER_INT_OVERFLOW
);
__omap_dm_timer_stop
(
timer
->
io_base
,
timer
->
posted
,
rate
);
}
EXPORT_SYMBOL_GPL
(
omap_dm_timer_stop
);
...
...
@@ -572,22 +424,11 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_set_source);
int
omap_dm_timer_set_source
(
struct
omap_dm_timer
*
timer
,
int
source
)
{
int
ret
=
-
EINVAL
;
if
(
source
<
0
||
source
>=
3
)
return
-
EINVAL
;
clk_disable
(
timer
->
fclk
);
ret
=
clk_set_parent
(
timer
->
fclk
,
dm_source_clocks
[
source
]);
clk_enable
(
timer
->
fclk
);
/*
* When the functional clock disappears, too quick writes seem
* to cause an abort. XXX Is this still necessary?
*/
__delay
(
300000
);
return
ret
;
return
__omap_dm_timer_set_source
(
timer
->
fclk
,
dm_source_clocks
[
source
]);
}
EXPORT_SYMBOL_GPL
(
omap_dm_timer_set_source
);
...
...
@@ -625,8 +466,7 @@ void omap_dm_timer_set_load_start(struct omap_dm_timer *timer, int autoreload,
}
l
|=
OMAP_TIMER_CTRL_ST
;
omap_dm_timer_write_reg
(
timer
,
OMAP_TIMER_COUNTER_REG
,
load
);
omap_dm_timer_write_reg
(
timer
,
OMAP_TIMER_CTRL_REG
,
l
);
__omap_dm_timer_load_start
(
timer
->
io_base
,
l
,
load
,
timer
->
posted
);
}
EXPORT_SYMBOL_GPL
(
omap_dm_timer_set_load_start
);
...
...
@@ -679,8 +519,7 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_set_prescaler);
void
omap_dm_timer_set_int_enable
(
struct
omap_dm_timer
*
timer
,
unsigned
int
value
)
{
omap_dm_timer_write_reg
(
timer
,
OMAP_TIMER_INT_EN_REG
,
value
);
omap_dm_timer_write_reg
(
timer
,
OMAP_TIMER_WAKEUP_EN_REG
,
value
);
__omap_dm_timer_int_enable
(
timer
->
io_base
,
value
);
}
EXPORT_SYMBOL_GPL
(
omap_dm_timer_set_int_enable
);
...
...
@@ -696,17 +535,13 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_read_status);
void
omap_dm_timer_write_status
(
struct
omap_dm_timer
*
timer
,
unsigned
int
value
)
{
omap_dm_timer_write_reg
(
timer
,
OMAP_TIMER_STAT_REG
,
value
);
__omap_dm_timer_write_status
(
timer
->
io_base
,
value
);
}
EXPORT_SYMBOL_GPL
(
omap_dm_timer_write_status
);
unsigned
int
omap_dm_timer_read_counter
(
struct
omap_dm_timer
*
timer
)
{
unsigned
int
l
;
l
=
omap_dm_timer_read_reg
(
timer
,
OMAP_TIMER_COUNTER_REG
);
return
l
;
return
__omap_dm_timer_read_counter
(
timer
->
io_base
,
timer
->
posted
);
}
EXPORT_SYMBOL_GPL
(
omap_dm_timer_read_counter
);
...
...
@@ -737,7 +572,7 @@ int omap_dm_timers_active(void)
}
EXPORT_SYMBOL_GPL
(
omap_dm_timers_active
);
int
__init
omap_dm_timer_init
(
void
)
static
int
__init
omap_dm_timer_init
(
void
)
{
struct
omap_dm_timer
*
timer
;
int
i
,
map_size
=
SZ_8K
;
/* Module 4KB + L4 4KB except on omap1 */
...
...
@@ -790,8 +625,16 @@ int __init omap_dm_timer_init(void)
sprintf
(
clk_name
,
"gpt%d_fck"
,
i
+
1
);
timer
->
fclk
=
clk_get
(
NULL
,
clk_name
);
}
/* One or two timers may be set up early for sys_timer */
if
(
sys_timer_reserved
&
(
1
<<
i
))
{
timer
->
reserved
=
1
;
timer
->
posted
=
1
;
}
#endif
}
return
0
;
}
arch_initcall
(
omap_dm_timer_init
);
arch/arm/plat-omap/include/plat/common.h
浏览文件 @
332acd9e
...
...
@@ -34,7 +34,11 @@
struct
sys_timer
;
extern
void
omap_map_common_io
(
void
);
extern
struct
sys_timer
omap_timer
;
extern
struct
sys_timer
omap1_timer
;
extern
struct
sys_timer
omap2_timer
;
extern
struct
sys_timer
omap3_timer
;
extern
struct
sys_timer
omap3_secure_timer
;
extern
struct
sys_timer
omap4_timer
;
extern
bool
omap_32k_timer_init
(
void
);
extern
int
__init
omap_init_clocksource_32k
(
void
);
extern
unsigned
long
long
notrace
omap_32k_sched_clock
(
void
);
...
...
arch/arm/plat-omap/include/plat/dmtimer.h
浏览文件 @
332acd9e
...
...
@@ -32,6 +32,9 @@
* 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <linux/clk.h>
#include <linux/delay.h>
#ifndef __ASM_ARCH_DMTIMER_H
#define __ASM_ARCH_DMTIMER_H
...
...
@@ -56,12 +59,8 @@
*/
#define OMAP_TIMER_IP_VERSION_1 0x1
struct
omap_dm_timer
;
extern
struct
omap_dm_timer
*
gptimer_wakeup
;
extern
struct
sys_timer
omap_timer
;
struct
clk
;
int
omap_dm_timer_init
(
void
);
struct
omap_dm_timer
*
omap_dm_timer_request
(
void
);
struct
omap_dm_timer
*
omap_dm_timer_request_specific
(
int
timer_id
);
void
omap_dm_timer_free
(
struct
omap_dm_timer
*
timer
);
...
...
@@ -93,5 +92,248 @@ void omap_dm_timer_write_counter(struct omap_dm_timer *timer, unsigned int value
int
omap_dm_timers_active
(
void
);
/*
* Do not use the defines below, they are not needed. They should be only
* used by dmtimer.c and sys_timer related code.
*/
/* register offsets */
#define _OMAP_TIMER_ID_OFFSET 0x00
#define _OMAP_TIMER_OCP_CFG_OFFSET 0x10
#define _OMAP_TIMER_SYS_STAT_OFFSET 0x14
#define _OMAP_TIMER_STAT_OFFSET 0x18
#define _OMAP_TIMER_INT_EN_OFFSET 0x1c
#define _OMAP_TIMER_WAKEUP_EN_OFFSET 0x20
#define _OMAP_TIMER_CTRL_OFFSET 0x24
#define OMAP_TIMER_CTRL_GPOCFG (1 << 14)
#define OMAP_TIMER_CTRL_CAPTMODE (1 << 13)
#define OMAP_TIMER_CTRL_PT (1 << 12)
#define OMAP_TIMER_CTRL_TCM_LOWTOHIGH (0x1 << 8)
#define OMAP_TIMER_CTRL_TCM_HIGHTOLOW (0x2 << 8)
#define OMAP_TIMER_CTRL_TCM_BOTHEDGES (0x3 << 8)
#define OMAP_TIMER_CTRL_SCPWM (1 << 7)
#define OMAP_TIMER_CTRL_CE (1 << 6)
/* compare enable */
#define OMAP_TIMER_CTRL_PRE (1 << 5)
/* prescaler enable */
#define OMAP_TIMER_CTRL_PTV_SHIFT 2
/* prescaler value shift */
#define OMAP_TIMER_CTRL_POSTED (1 << 2)
#define OMAP_TIMER_CTRL_AR (1 << 1)
/* auto-reload enable */
#define OMAP_TIMER_CTRL_ST (1 << 0)
/* start timer */
#define _OMAP_TIMER_COUNTER_OFFSET 0x28
#define _OMAP_TIMER_LOAD_OFFSET 0x2c
#define _OMAP_TIMER_TRIGGER_OFFSET 0x30
#define _OMAP_TIMER_WRITE_PEND_OFFSET 0x34
#define WP_NONE 0
/* no write pending bit */
#define WP_TCLR (1 << 0)
#define WP_TCRR (1 << 1)
#define WP_TLDR (1 << 2)
#define WP_TTGR (1 << 3)
#define WP_TMAR (1 << 4)
#define WP_TPIR (1 << 5)
#define WP_TNIR (1 << 6)
#define WP_TCVR (1 << 7)
#define WP_TOCR (1 << 8)
#define WP_TOWR (1 << 9)
#define _OMAP_TIMER_MATCH_OFFSET 0x38
#define _OMAP_TIMER_CAPTURE_OFFSET 0x3c
#define _OMAP_TIMER_IF_CTRL_OFFSET 0x40
#define _OMAP_TIMER_CAPTURE2_OFFSET 0x44
/* TCAR2, 34xx only */
#define _OMAP_TIMER_TICK_POS_OFFSET 0x48
/* TPIR, 34xx only */
#define _OMAP_TIMER_TICK_NEG_OFFSET 0x4c
/* TNIR, 34xx only */
#define _OMAP_TIMER_TICK_COUNT_OFFSET 0x50
/* TCVR, 34xx only */
#define _OMAP_TIMER_TICK_INT_MASK_SET_OFFSET 0x54
/* TOCR, 34xx only */
#define _OMAP_TIMER_TICK_INT_MASK_COUNT_OFFSET 0x58
/* TOWR, 34xx only */
/* register offsets with the write pending bit encoded */
#define WPSHIFT 16
#define OMAP_TIMER_ID_REG (_OMAP_TIMER_ID_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_OCP_CFG_REG (_OMAP_TIMER_OCP_CFG_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_SYS_STAT_REG (_OMAP_TIMER_SYS_STAT_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_STAT_REG (_OMAP_TIMER_STAT_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_INT_EN_REG (_OMAP_TIMER_INT_EN_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_WAKEUP_EN_REG (_OMAP_TIMER_WAKEUP_EN_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_CTRL_REG (_OMAP_TIMER_CTRL_OFFSET \
| (WP_TCLR << WPSHIFT))
#define OMAP_TIMER_COUNTER_REG (_OMAP_TIMER_COUNTER_OFFSET \
| (WP_TCRR << WPSHIFT))
#define OMAP_TIMER_LOAD_REG (_OMAP_TIMER_LOAD_OFFSET \
| (WP_TLDR << WPSHIFT))
#define OMAP_TIMER_TRIGGER_REG (_OMAP_TIMER_TRIGGER_OFFSET \
| (WP_TTGR << WPSHIFT))
#define OMAP_TIMER_WRITE_PEND_REG (_OMAP_TIMER_WRITE_PEND_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_MATCH_REG (_OMAP_TIMER_MATCH_OFFSET \
| (WP_TMAR << WPSHIFT))
#define OMAP_TIMER_CAPTURE_REG (_OMAP_TIMER_CAPTURE_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_IF_CTRL_REG (_OMAP_TIMER_IF_CTRL_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_CAPTURE2_REG (_OMAP_TIMER_CAPTURE2_OFFSET \
| (WP_NONE << WPSHIFT))
#define OMAP_TIMER_TICK_POS_REG (_OMAP_TIMER_TICK_POS_OFFSET \
| (WP_TPIR << WPSHIFT))
#define OMAP_TIMER_TICK_NEG_REG (_OMAP_TIMER_TICK_NEG_OFFSET \
| (WP_TNIR << WPSHIFT))
#define OMAP_TIMER_TICK_COUNT_REG (_OMAP_TIMER_TICK_COUNT_OFFSET \
| (WP_TCVR << WPSHIFT))
#define OMAP_TIMER_TICK_INT_MASK_SET_REG \
(_OMAP_TIMER_TICK_INT_MASK_SET_OFFSET | (WP_TOCR << WPSHIFT))
#define OMAP_TIMER_TICK_INT_MASK_COUNT_REG \
(_OMAP_TIMER_TICK_INT_MASK_COUNT_OFFSET | (WP_TOWR << WPSHIFT))
struct
omap_dm_timer
{
unsigned
long
phys_base
;
int
irq
;
#ifdef CONFIG_ARCH_OMAP2PLUS
struct
clk
*
iclk
,
*
fclk
;
#endif
void
__iomem
*
io_base
;
unsigned
long
rate
;
unsigned
reserved
:
1
;
unsigned
enabled
:
1
;
unsigned
posted
:
1
;
};
extern
u32
sys_timer_reserved
;
void
omap_dm_timer_prepare
(
struct
omap_dm_timer
*
timer
);
static
inline
u32
__omap_dm_timer_read
(
void
__iomem
*
base
,
u32
reg
,
int
posted
)
{
if
(
posted
)
while
(
__raw_readl
(
base
+
(
OMAP_TIMER_WRITE_PEND_REG
&
0xff
))
&
(
reg
>>
WPSHIFT
))
cpu_relax
();
return
__raw_readl
(
base
+
(
reg
&
0xff
));
}
static
inline
void
__omap_dm_timer_write
(
void
__iomem
*
base
,
u32
reg
,
u32
val
,
int
posted
)
{
if
(
posted
)
while
(
__raw_readl
(
base
+
(
OMAP_TIMER_WRITE_PEND_REG
&
0xff
))
&
(
reg
>>
WPSHIFT
))
cpu_relax
();
__raw_writel
(
val
,
base
+
(
reg
&
0xff
));
}
/* Assumes the source clock has been set by caller */
static
inline
void
__omap_dm_timer_reset
(
void
__iomem
*
base
,
int
autoidle
,
int
wakeup
)
{
u32
l
;
l
=
__omap_dm_timer_read
(
base
,
OMAP_TIMER_OCP_CFG_REG
,
0
);
l
|=
0x02
<<
3
;
/* Set to smart-idle mode */
l
|=
0x2
<<
8
;
/* Set clock activity to perserve f-clock on idle */
if
(
autoidle
)
l
|=
0x1
<<
0
;
if
(
wakeup
)
l
|=
1
<<
2
;
__omap_dm_timer_write
(
base
,
OMAP_TIMER_OCP_CFG_REG
,
l
,
0
);
/* Match hardware reset default of posted mode */
__omap_dm_timer_write
(
base
,
OMAP_TIMER_IF_CTRL_REG
,
OMAP_TIMER_CTRL_POSTED
,
0
);
}
static
inline
int
__omap_dm_timer_set_source
(
struct
clk
*
timer_fck
,
struct
clk
*
parent
)
{
int
ret
;
clk_disable
(
timer_fck
);
ret
=
clk_set_parent
(
timer_fck
,
parent
);
clk_enable
(
timer_fck
);
/*
* When the functional clock disappears, too quick writes seem
* to cause an abort. XXX Is this still necessary?
*/
__delay
(
300000
);
return
ret
;
}
static
inline
void
__omap_dm_timer_stop
(
void
__iomem
*
base
,
int
posted
,
unsigned
long
rate
)
{
u32
l
;
l
=
__omap_dm_timer_read
(
base
,
OMAP_TIMER_CTRL_REG
,
posted
);
if
(
l
&
OMAP_TIMER_CTRL_ST
)
{
l
&=
~
0x1
;
__omap_dm_timer_write
(
base
,
OMAP_TIMER_CTRL_REG
,
l
,
posted
);
#ifdef CONFIG_ARCH_OMAP2PLUS
/* Readback to make sure write has completed */
__omap_dm_timer_read
(
base
,
OMAP_TIMER_CTRL_REG
,
posted
);
/*
* Wait for functional clock period x 3.5 to make sure that
* timer is stopped
*/
udelay
(
3500000
/
rate
+
1
);
#endif
}
/* Ack possibly pending interrupt */
__omap_dm_timer_write
(
base
,
OMAP_TIMER_STAT_REG
,
OMAP_TIMER_INT_OVERFLOW
,
0
);
}
static
inline
void
__omap_dm_timer_load_start
(
void
__iomem
*
base
,
u32
ctrl
,
unsigned
int
load
,
int
posted
)
{
__omap_dm_timer_write
(
base
,
OMAP_TIMER_COUNTER_REG
,
load
,
posted
);
__omap_dm_timer_write
(
base
,
OMAP_TIMER_CTRL_REG
,
ctrl
,
posted
);
}
static
inline
void
__omap_dm_timer_int_enable
(
void
__iomem
*
base
,
unsigned
int
value
)
{
__omap_dm_timer_write
(
base
,
OMAP_TIMER_INT_EN_REG
,
value
,
0
);
__omap_dm_timer_write
(
base
,
OMAP_TIMER_WAKEUP_EN_REG
,
value
,
0
);
}
static
inline
unsigned
int
__omap_dm_timer_read_counter
(
void
__iomem
*
base
,
int
posted
)
{
return
__omap_dm_timer_read
(
base
,
OMAP_TIMER_COUNTER_REG
,
posted
);
}
static
inline
void
__omap_dm_timer_write_status
(
void
__iomem
*
base
,
unsigned
int
value
)
{
__omap_dm_timer_write
(
base
,
OMAP_TIMER_STAT_REG
,
value
,
0
);
}
#endif
/* __ASM_ARCH_DMTIMER_H */
arch/arm/plat-omap/include/plat/irqs.h
浏览文件 @
332acd9e
...
...
@@ -428,7 +428,11 @@
#define INTCPS_NR_IRQS 96
#ifndef __ASSEMBLY__
extern
void
omap_init_irq
(
void
);
extern
void
__iomem
*
omap_irq_base
;
void
omap1_init_irq
(
void
);
void
omap2_init_irq
(
void
);
void
omap3_init_irq
(
void
);
void
ti816x_init_irq
(
void
);
extern
int
omap_irq_pending
(
void
);
void
omap_intc_save_context
(
void
);
void
omap_intc_restore_context
(
void
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录