Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
332acd9e
Commit
332acd9e
authored
Jun 29, 2011
by
Tony Lindgren
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'devel-timer' into devel-cleanup
parents
bafe2721
0f622e8c
Changes
59
Hide whitespace changes
Inline
Side-by-side
Showing
59 changed files
with
749 additions
and
404 deletions
+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
No files found.
arch/arm/mach-omap1/board-ams-delta.c
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
deleted
100644 → 0
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment