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
nexedi
linux
Commits
3ed628a8
Commit
3ed628a8
authored
Apr 01, 2013
by
Shawn Guo
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'arm-soc/clksrc/cleanup' into mxs/cleanup
parents
07961ac7
da4a686a
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
49 additions
and
106 deletions
+49
-106
arch/arm/Kconfig
arch/arm/Kconfig
+1
-0
arch/arm/include/asm/smp_twd.h
arch/arm/include/asm/smp_twd.h
+0
-8
arch/arm/kernel/smp_twd.c
arch/arm/kernel/smp_twd.c
+4
-13
arch/arm/mach-highbank/highbank.c
arch/arm/mach-highbank/highbank.c
+2
-3
arch/arm/mach-imx/mach-imx6q.c
arch/arm/mach-imx/mach-imx6q.c
+2
-3
arch/arm/mach-omap2/timer.c
arch/arm/mach-omap2/timer.c
+1
-1
arch/arm/mach-spear13xx/spear13xx.c
arch/arm/mach-spear13xx/spear13xx.c
+2
-2
arch/arm/mach-ux500/timer.c
arch/arm/mach-ux500/timer.c
+2
-1
arch/arm/mach-vexpress/v2m.c
arch/arm/mach-vexpress/v2m.c
+3
-3
drivers/clocksource/bcm2835_timer.c
drivers/clocksource/bcm2835_timer.c
+1
-11
drivers/clocksource/clksrc-of.c
drivers/clocksource/clksrc-of.c
+2
-2
drivers/clocksource/tegra20_timer.c
drivers/clocksource/tegra20_timer.c
+27
-46
drivers/clocksource/vt8500_timer.c
drivers/clocksource/vt8500_timer.c
+1
-13
include/linux/clocksource.h
include/linux/clocksource.h
+1
-0
No files found.
arch/arm/Kconfig
View file @
3ed628a8
...
@@ -1593,6 +1593,7 @@ config HAVE_ARM_ARCH_TIMER
...
@@ -1593,6 +1593,7 @@ config HAVE_ARM_ARCH_TIMER
config HAVE_ARM_TWD
config HAVE_ARM_TWD
bool
bool
depends on SMP
depends on SMP
select CLKSRC_OF if OF
help
help
This options enables support for the ARM timer and watchdog unit
This options enables support for the ARM timer and watchdog unit
...
...
arch/arm/include/asm/smp_twd.h
View file @
3ed628a8
...
@@ -34,12 +34,4 @@ struct twd_local_timer name __initdata = { \
...
@@ -34,12 +34,4 @@ struct twd_local_timer name __initdata = { \
int
twd_local_timer_register
(
struct
twd_local_timer
*
);
int
twd_local_timer_register
(
struct
twd_local_timer
*
);
#ifdef CONFIG_HAVE_ARM_TWD
void
twd_local_timer_of_register
(
void
);
#else
static
inline
void
twd_local_timer_of_register
(
void
)
{
}
#endif
#endif
#endif
arch/arm/kernel/smp_twd.c
View file @
3ed628a8
...
@@ -362,25 +362,13 @@ int __init twd_local_timer_register(struct twd_local_timer *tlt)
...
@@ -362,25 +362,13 @@ int __init twd_local_timer_register(struct twd_local_timer *tlt)
}
}
#ifdef CONFIG_OF
#ifdef CONFIG_OF
const
static
struct
of_device_id
twd_of_match
[]
__initconst
=
{
static
void
__init
twd_local_timer_of_register
(
struct
device_node
*
np
)
{
.
compatible
=
"arm,cortex-a9-twd-timer"
,
},
{
.
compatible
=
"arm,cortex-a5-twd-timer"
,
},
{
.
compatible
=
"arm,arm11mp-twd-timer"
,
},
{
},
};
void
__init
twd_local_timer_of_register
(
void
)
{
{
struct
device_node
*
np
;
int
err
;
int
err
;
if
(
!
is_smp
()
||
!
setup_max_cpus
)
if
(
!
is_smp
()
||
!
setup_max_cpus
)
return
;
return
;
np
=
of_find_matching_node
(
NULL
,
twd_of_match
);
if
(
!
np
)
return
;
twd_ppi
=
irq_of_parse_and_map
(
np
,
0
);
twd_ppi
=
irq_of_parse_and_map
(
np
,
0
);
if
(
!
twd_ppi
)
{
if
(
!
twd_ppi
)
{
err
=
-
EINVAL
;
err
=
-
EINVAL
;
...
@@ -398,4 +386,7 @@ void __init twd_local_timer_of_register(void)
...
@@ -398,4 +386,7 @@ void __init twd_local_timer_of_register(void)
out:
out:
WARN
(
err
,
"twd_local_timer_of_register failed (%d)
\n
"
,
err
);
WARN
(
err
,
"twd_local_timer_of_register failed (%d)
\n
"
,
err
);
}
}
CLOCKSOURCE_OF_DECLARE
(
arm_twd_a9
,
"arm,cortex-a9-twd-timer"
,
twd_local_timer_of_register
);
CLOCKSOURCE_OF_DECLARE
(
arm_twd_a5
,
"arm,cortex-a5-twd-timer"
,
twd_local_timer_of_register
);
CLOCKSOURCE_OF_DECLARE
(
arm_twd_11mp
,
"arm,arm11mp-twd-timer"
,
twd_local_timer_of_register
);
#endif
#endif
arch/arm/mach-highbank/highbank.c
View file @
3ed628a8
...
@@ -32,7 +32,6 @@
...
@@ -32,7 +32,6 @@
#include <asm/cacheflush.h>
#include <asm/cacheflush.h>
#include <asm/cputype.h>
#include <asm/cputype.h>
#include <asm/smp_plat.h>
#include <asm/smp_plat.h>
#include <asm/smp_twd.h>
#include <asm/hardware/arm_timer.h>
#include <asm/hardware/arm_timer.h>
#include <asm/hardware/timer-sp.h>
#include <asm/hardware/timer-sp.h>
#include <asm/hardware/cache-l2x0.h>
#include <asm/hardware/cache-l2x0.h>
...
@@ -119,10 +118,10 @@ static void __init highbank_timer_init(void)
...
@@ -119,10 +118,10 @@ static void __init highbank_timer_init(void)
sp804_clocksource_and_sched_clock_init
(
timer_base
+
0x20
,
"timer1"
);
sp804_clocksource_and_sched_clock_init
(
timer_base
+
0x20
,
"timer1"
);
sp804_clockevents_init
(
timer_base
,
irq
,
"timer0"
);
sp804_clockevents_init
(
timer_base
,
irq
,
"timer0"
);
twd_local_timer_of_register
();
arch_timer_of_register
();
arch_timer_of_register
();
arch_timer_sched_clock_init
();
arch_timer_sched_clock_init
();
clocksource_of_init
();
}
}
static
void
highbank_power_off
(
void
)
static
void
highbank_power_off
(
void
)
...
...
arch/arm/mach-imx/mach-imx6q.c
View file @
3ed628a8
...
@@ -12,6 +12,7 @@
...
@@ -12,6 +12,7 @@
#include <linux/clk.h>
#include <linux/clk.h>
#include <linux/clkdev.h>
#include <linux/clkdev.h>
#include <linux/clocksource.h>
#include <linux/cpu.h>
#include <linux/cpu.h>
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/export.h>
#include <linux/export.h>
...
@@ -28,11 +29,9 @@
...
@@ -28,11 +29,9 @@
#include <linux/regmap.h>
#include <linux/regmap.h>
#include <linux/micrel_phy.h>
#include <linux/micrel_phy.h>
#include <linux/mfd/syscon.h>
#include <linux/mfd/syscon.h>
#include <asm/smp_twd.h>
#include <asm/hardware/cache-l2x0.h>
#include <asm/hardware/cache-l2x0.h>
#include <asm/mach/arch.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/map.h>
#include <asm/mach/time.h>
#include <asm/system_misc.h>
#include <asm/system_misc.h>
#include "common.h"
#include "common.h"
...
@@ -292,7 +291,7 @@ static void __init imx6q_init_irq(void)
...
@@ -292,7 +291,7 @@ static void __init imx6q_init_irq(void)
static
void
__init
imx6q_timer_init
(
void
)
static
void
__init
imx6q_timer_init
(
void
)
{
{
mx6q_clocks_init
();
mx6q_clocks_init
();
twd_local_timer_of_register
();
clocksource_of_init
();
imx_print_silicon_rev
(
"i.MX6Q"
,
imx6q_revision
());
imx_print_silicon_rev
(
"i.MX6Q"
,
imx6q_revision
());
}
}
...
...
arch/arm/mach-omap2/timer.c
View file @
3ed628a8
...
@@ -597,7 +597,7 @@ void __init omap4_local_timer_init(void)
...
@@ -597,7 +597,7 @@ void __init omap4_local_timer_init(void)
int
err
;
int
err
;
if
(
of_have_populated_dt
())
{
if
(
of_have_populated_dt
())
{
twd_local_timer_of_register
();
clocksource_of_init
();
return
;
return
;
}
}
...
...
arch/arm/mach-spear13xx/spear13xx.c
View file @
3ed628a8
...
@@ -15,12 +15,12 @@
...
@@ -15,12 +15,12 @@
#include <linux/amba/pl022.h>
#include <linux/amba/pl022.h>
#include <linux/clk.h>
#include <linux/clk.h>
#include <linux/clocksource.h>
#include <linux/dw_dmac.h>
#include <linux/dw_dmac.h>
#include <linux/err.h>
#include <linux/err.h>
#include <linux/of.h>
#include <linux/of.h>
#include <asm/hardware/cache-l2x0.h>
#include <asm/hardware/cache-l2x0.h>
#include <asm/mach/map.h>
#include <asm/mach/map.h>
#include <asm/smp_twd.h>
#include <mach/dma.h>
#include <mach/dma.h>
#include <mach/generic.h>
#include <mach/generic.h>
#include <mach/spear.h>
#include <mach/spear.h>
...
@@ -179,5 +179,5 @@ void __init spear13xx_timer_init(void)
...
@@ -179,5 +179,5 @@ void __init spear13xx_timer_init(void)
clk_put
(
pclk
);
clk_put
(
pclk
);
spear_setup_of_timer
();
spear_setup_of_timer
();
twd_local_timer_of_register
();
clocksource_of_init
();
}
}
arch/arm/mach-ux500/timer.c
View file @
3ed628a8
...
@@ -7,6 +7,7 @@
...
@@ -7,6 +7,7 @@
#include <linux/io.h>
#include <linux/io.h>
#include <linux/errno.h>
#include <linux/errno.h>
#include <linux/clksrc-dbx500-prcmu.h>
#include <linux/clksrc-dbx500-prcmu.h>
#include <linux/clocksource.h>
#include <linux/of.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_address.h>
#include <linux/platform_data/clocksource-nomadik-mtu.h>
#include <linux/platform_data/clocksource-nomadik-mtu.h>
...
@@ -32,7 +33,7 @@ static void __init ux500_twd_init(void)
...
@@ -32,7 +33,7 @@ static void __init ux500_twd_init(void)
twd_local_timer
=
&
u8500_twd_local_timer
;
twd_local_timer
=
&
u8500_twd_local_timer
;
if
(
of_have_populated_dt
())
if
(
of_have_populated_dt
())
twd_local_timer_of_register
();
clocksource_of_init
();
else
{
else
{
err
=
twd_local_timer_register
(
twd_local_timer
);
err
=
twd_local_timer_register
(
twd_local_timer
);
if
(
err
)
if
(
err
)
...
...
arch/arm/mach-vexpress/v2m.c
View file @
3ed628a8
...
@@ -5,6 +5,7 @@
...
@@ -5,6 +5,7 @@
#include <linux/amba/bus.h>
#include <linux/amba/bus.h>
#include <linux/amba/mmci.h>
#include <linux/amba/mmci.h>
#include <linux/io.h>
#include <linux/io.h>
#include <linux/clocksource.h>
#include <linux/smp.h>
#include <linux/smp.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/irqchip.h>
#include <linux/irqchip.h>
...
@@ -25,7 +26,6 @@
...
@@ -25,7 +26,6 @@
#include <asm/arch_timer.h>
#include <asm/arch_timer.h>
#include <asm/mach-types.h>
#include <asm/mach-types.h>
#include <asm/sizes.h>
#include <asm/sizes.h>
#include <asm/smp_twd.h>
#include <asm/mach/arch.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/map.h>
#include <asm/mach/time.h>
#include <asm/mach/time.h>
...
@@ -435,6 +435,7 @@ static void __init v2m_dt_timer_init(void)
...
@@ -435,6 +435,7 @@ static void __init v2m_dt_timer_init(void)
vexpress_clk_of_init
();
vexpress_clk_of_init
();
clocksource_of_init
();
do
{
do
{
node
=
of_find_compatible_node
(
node
,
NULL
,
"arm,sp804"
);
node
=
of_find_compatible_node
(
node
,
NULL
,
"arm,sp804"
);
}
while
(
node
&&
vexpress_get_site_by_node
(
node
)
!=
VEXPRESS_SITE_MB
);
}
while
(
node
&&
vexpress_get_site_by_node
(
node
)
!=
VEXPRESS_SITE_MB
);
...
@@ -445,8 +446,7 @@ static void __init v2m_dt_timer_init(void)
...
@@ -445,8 +446,7 @@ static void __init v2m_dt_timer_init(void)
irq_of_parse_and_map
(
node
,
0
));
irq_of_parse_and_map
(
node
,
0
));
}
}
if
(
arch_timer_of_register
()
!=
0
)
arch_timer_of_register
();
twd_local_timer_of_register
();
if
(
arch_timer_sched_clock_init
()
!=
0
)
if
(
arch_timer_sched_clock_init
()
!=
0
)
versatile_sched_clock_init
(
vexpress_get_24mhz_clock_base
(),
versatile_sched_clock_init
(
vexpress_get_24mhz_clock_base
(),
...
...
drivers/clocksource/bcm2835_timer.c
View file @
3ed628a8
...
@@ -95,23 +95,13 @@ static irqreturn_t bcm2835_time_interrupt(int irq, void *dev_id)
...
@@ -95,23 +95,13 @@ static irqreturn_t bcm2835_time_interrupt(int irq, void *dev_id)
}
}
}
}
static
struct
of_device_id
bcm2835_time_match
[]
__initconst
=
{
static
void
__init
bcm2835_timer_init
(
struct
device_node
*
node
)
{
.
compatible
=
"brcm,bcm2835-system-timer"
},
{}
};
static
void
__init
bcm2835_timer_init
(
void
)
{
{
struct
device_node
*
node
;
void
__iomem
*
base
;
void
__iomem
*
base
;
u32
freq
;
u32
freq
;
int
irq
;
int
irq
;
struct
bcm2835_timer
*
timer
;
struct
bcm2835_timer
*
timer
;
node
=
of_find_matching_node
(
NULL
,
bcm2835_time_match
);
if
(
!
node
)
panic
(
"No bcm2835 timer node"
);
base
=
of_iomap
(
node
,
0
);
base
=
of_iomap
(
node
,
0
);
if
(
!
base
)
if
(
!
base
)
panic
(
"Can't remap registers"
);
panic
(
"Can't remap registers"
);
...
...
drivers/clocksource/clksrc-of.c
View file @
3ed628a8
...
@@ -26,10 +26,10 @@ void __init clocksource_of_init(void)
...
@@ -26,10 +26,10 @@ void __init clocksource_of_init(void)
{
{
struct
device_node
*
np
;
struct
device_node
*
np
;
const
struct
of_device_id
*
match
;
const
struct
of_device_id
*
match
;
void
(
*
init_func
)(
void
);
void
(
*
init_func
)(
struct
device_node
*
);
for_each_matching_node_and_match
(
np
,
__clksrc_of_table
,
&
match
)
{
for_each_matching_node_and_match
(
np
,
__clksrc_of_table
,
&
match
)
{
init_func
=
match
->
data
;
init_func
=
match
->
data
;
init_func
();
init_func
(
np
);
}
}
}
}
drivers/clocksource/tegra20_timer.c
View file @
3ed628a8
...
@@ -154,29 +154,12 @@ static struct irqaction tegra_timer_irq = {
...
@@ -154,29 +154,12 @@ static struct irqaction tegra_timer_irq = {
.
dev_id
=
&
tegra_clockevent
,
.
dev_id
=
&
tegra_clockevent
,
};
};
static
const
struct
of_device_id
timer_match
[]
__initconst
=
{
static
void
__init
tegra20_init_timer
(
struct
device_node
*
np
)
{
.
compatible
=
"nvidia,tegra20-timer"
},
{}
};
static
const
struct
of_device_id
rtc_match
[]
__initconst
=
{
{
.
compatible
=
"nvidia,tegra20-rtc"
},
{}
};
static
void
__init
tegra20_init_timer
(
void
)
{
{
struct
device_node
*
np
;
struct
clk
*
clk
;
struct
clk
*
clk
;
unsigned
long
rate
;
unsigned
long
rate
;
int
ret
;
int
ret
;
np
=
of_find_matching_node
(
NULL
,
timer_match
);
if
(
!
np
)
{
pr_err
(
"Failed to find timer DT node
\n
"
);
BUG
();
}
timer_reg_base
=
of_iomap
(
np
,
0
);
timer_reg_base
=
of_iomap
(
np
,
0
);
if
(
!
timer_reg_base
)
{
if
(
!
timer_reg_base
)
{
pr_err
(
"Can't map timer registers
\n
"
);
pr_err
(
"Can't map timer registers
\n
"
);
...
@@ -200,30 +183,6 @@ static void __init tegra20_init_timer(void)
...
@@ -200,30 +183,6 @@ static void __init tegra20_init_timer(void)
of_node_put
(
np
);
of_node_put
(
np
);
np
=
of_find_matching_node
(
NULL
,
rtc_match
);
if
(
!
np
)
{
pr_err
(
"Failed to find RTC DT node
\n
"
);
BUG
();
}
rtc_base
=
of_iomap
(
np
,
0
);
if
(
!
rtc_base
)
{
pr_err
(
"Can't map RTC registers"
);
BUG
();
}
/*
* rtc registers are used by read_persistent_clock, keep the rtc clock
* enabled
*/
clk
=
clk_get_sys
(
"rtc-tegra"
,
NULL
);
if
(
IS_ERR
(
clk
))
pr_warn
(
"Unable to get rtc-tegra clock
\n
"
);
else
clk_prepare_enable
(
clk
);
of_node_put
(
np
);
switch
(
rate
)
{
switch
(
rate
)
{
case
12000000
:
case
12000000
:
timer_writel
(
0x000b
,
TIMERUS_USEC_CFG
);
timer_writel
(
0x000b
,
TIMERUS_USEC_CFG
);
...
@@ -259,12 +218,34 @@ static void __init tegra20_init_timer(void)
...
@@ -259,12 +218,34 @@ static void __init tegra20_init_timer(void)
tegra_clockevent
.
irq
=
tegra_timer_irq
.
irq
;
tegra_clockevent
.
irq
=
tegra_timer_irq
.
irq
;
clockevents_config_and_register
(
&
tegra_clockevent
,
1000000
,
clockevents_config_and_register
(
&
tegra_clockevent
,
1000000
,
0x1
,
0x1fffffff
);
0x1
,
0x1fffffff
);
#ifdef CONFIG_HAVE_ARM_TWD
}
twd_local_timer_of_register
();
CLOCKSOURCE_OF_DECLARE
(
tegra20_timer
,
"nvidia,tegra20-timer"
,
tegra20_init_timer
);
#endif
static
void
__init
tegra20_init_rtc
(
struct
device_node
*
np
)
{
struct
clk
*
clk
;
rtc_base
=
of_iomap
(
np
,
0
);
if
(
!
rtc_base
)
{
pr_err
(
"Can't map RTC registers"
);
BUG
();
}
/*
* rtc registers are used by read_persistent_clock, keep the rtc clock
* enabled
*/
clk
=
clk_get_sys
(
"rtc-tegra"
,
NULL
);
if
(
IS_ERR
(
clk
))
pr_warn
(
"Unable to get rtc-tegra clock
\n
"
);
else
clk_prepare_enable
(
clk
);
of_node_put
(
np
);
register_persistent_clock
(
NULL
,
tegra_read_persistent_clock
);
register_persistent_clock
(
NULL
,
tegra_read_persistent_clock
);
}
}
CLOCKSOURCE_OF_DECLARE
(
tegra20
,
"nvidia,tegra20-timer"
,
tegra20_init_timer
);
CLOCKSOURCE_OF_DECLARE
(
tegra20
_rtc
,
"nvidia,tegra20-rtc"
,
tegra20_init_rtc
);
#ifdef CONFIG_PM
#ifdef CONFIG_PM
static
u32
usec_config
;
static
u32
usec_config
;
...
...
drivers/clocksource/vt8500_timer.c
View file @
3ed628a8
...
@@ -129,22 +129,10 @@ static struct irqaction irq = {
...
@@ -129,22 +129,10 @@ static struct irqaction irq = {
.
dev_id
=
&
clockevent
,
.
dev_id
=
&
clockevent
,
};
};
static
struct
of_device_id
vt8500_timer_ids
[]
=
{
static
void
__init
vt8500_timer_init
(
struct
device_node
*
np
)
{
.
compatible
=
"via,vt8500-timer"
},
{
}
};
static
void
__init
vt8500_timer_init
(
void
)
{
{
struct
device_node
*
np
;
int
timer_irq
;
int
timer_irq
;
np
=
of_find_matching_node
(
NULL
,
vt8500_timer_ids
);
if
(
!
np
)
{
pr_err
(
"%s: Timer description missing from Device Tree
\n
"
,
__func__
);
return
;
}
regbase
=
of_iomap
(
np
,
0
);
regbase
=
of_iomap
(
np
,
0
);
if
(
!
regbase
)
{
if
(
!
regbase
)
{
pr_err
(
"%s: Missing iobase description in Device Tree
\n
"
,
pr_err
(
"%s: Missing iobase description in Device Tree
\n
"
,
...
...
include/linux/clocksource.h
View file @
3ed628a8
...
@@ -340,6 +340,7 @@ extern void clocksource_of_init(void);
...
@@ -340,6 +340,7 @@ extern void clocksource_of_init(void);
__used __section(__clksrc_of_table) \
__used __section(__clksrc_of_table) \
= { .compatible = compat, .data = fn };
= { .compatible = compat, .data = fn };
#else
#else
static
inline
void
clocksource_of_init
(
void
)
{}
#define CLOCKSOURCE_OF_DECLARE(name, compat, fn)
#define CLOCKSOURCE_OF_DECLARE(name, compat, fn)
#endif
#endif
...
...
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