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
f8016f1e
Commit
f8016f1e
authored
Mar 19, 2013
by
Arnd Bergmann
Browse files
Options
Browse Files
Download
Plain Diff
Merge branches 'prima2/soc' and 'clksrc/cleanup' into prima2/multiplatform
parents
5fa2f9af
4d10f054
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
60 additions
and
109 deletions
+60
-109
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
+3
-2
drivers/clocksource/tegra20_timer.c
drivers/clocksource/tegra20_timer.c
+27
-46
drivers/clocksource/vt8500_timer.c
drivers/clocksource/vt8500_timer.c
+2
-14
include/linux/clocksource.h
include/linux/clocksource.h
+10
-2
No files found.
arch/arm/Kconfig
View file @
f8016f1e
...
...
@@ -1597,6 +1597,7 @@ config HAVE_ARM_ARCH_TIMER
config HAVE_ARM_TWD
bool
depends on SMP
select CLKSRC_OF if OF
help
This options enables support for the ARM timer and watchdog unit
...
...
arch/arm/include/asm/smp_twd.h
View file @
f8016f1e
...
...
@@ -34,12 +34,4 @@ struct twd_local_timer name __initdata = { \
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
arch/arm/kernel/smp_twd.c
View file @
f8016f1e
...
...
@@ -362,25 +362,13 @@ int __init twd_local_timer_register(struct twd_local_timer *tlt)
}
#ifdef CONFIG_OF
const
static
struct
of_device_id
twd_of_match
[]
__initconst
=
{
{
.
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
)
static
void
__init
twd_local_timer_of_register
(
struct
device_node
*
np
)
{
struct
device_node
*
np
;
int
err
;
if
(
!
is_smp
()
||
!
setup_max_cpus
)
return
;
np
=
of_find_matching_node
(
NULL
,
twd_of_match
);
if
(
!
np
)
return
;
twd_ppi
=
irq_of_parse_and_map
(
np
,
0
);
if
(
!
twd_ppi
)
{
err
=
-
EINVAL
;
...
...
@@ -398,4 +386,7 @@ void __init twd_local_timer_of_register(void)
out:
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
arch/arm/mach-highbank/highbank.c
View file @
f8016f1e
...
...
@@ -32,7 +32,6 @@
#include <asm/cacheflush.h>
#include <asm/cputype.h>
#include <asm/smp_plat.h>
#include <asm/smp_twd.h>
#include <asm/hardware/arm_timer.h>
#include <asm/hardware/timer-sp.h>
#include <asm/hardware/cache-l2x0.h>
...
...
@@ -119,10 +118,10 @@ static void __init highbank_timer_init(void)
sp804_clocksource_and_sched_clock_init
(
timer_base
+
0x20
,
"timer1"
);
sp804_clockevents_init
(
timer_base
,
irq
,
"timer0"
);
twd_local_timer_of_register
();
arch_timer_of_register
();
arch_timer_sched_clock_init
();
clocksource_of_init
();
}
static
void
highbank_power_off
(
void
)
...
...
arch/arm/mach-imx/mach-imx6q.c
View file @
f8016f1e
...
...
@@ -12,6 +12,7 @@
#include <linux/clk.h>
#include <linux/clkdev.h>
#include <linux/clocksource.h>
#include <linux/cpu.h>
#include <linux/delay.h>
#include <linux/export.h>
...
...
@@ -28,11 +29,9 @@
#include <linux/regmap.h>
#include <linux/micrel_phy.h>
#include <linux/mfd/syscon.h>
#include <asm/smp_twd.h>
#include <asm/hardware/cache-l2x0.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/time.h>
#include <asm/system_misc.h>
#include "common.h"
...
...
@@ -292,7 +291,7 @@ static void __init imx6q_init_irq(void)
static
void
__init
imx6q_timer_init
(
void
)
{
mx6q_clocks_init
();
twd_local_timer_of_register
();
clocksource_of_init
();
imx_print_silicon_rev
(
"i.MX6Q"
,
imx6q_revision
());
}
...
...
arch/arm/mach-omap2/timer.c
View file @
f8016f1e
...
...
@@ -597,7 +597,7 @@ void __init omap4_local_timer_init(void)
int
err
;
if
(
of_have_populated_dt
())
{
twd_local_timer_of_register
();
clocksource_of_init
();
return
;
}
...
...
arch/arm/mach-spear13xx/spear13xx.c
View file @
f8016f1e
...
...
@@ -15,12 +15,12 @@
#include <linux/amba/pl022.h>
#include <linux/clk.h>
#include <linux/clocksource.h>
#include <linux/dw_dmac.h>
#include <linux/err.h>
#include <linux/of.h>
#include <asm/hardware/cache-l2x0.h>
#include <asm/mach/map.h>
#include <asm/smp_twd.h>
#include <mach/dma.h>
#include <mach/generic.h>
#include <mach/spear.h>
...
...
@@ -179,5 +179,5 @@ void __init spear13xx_timer_init(void)
clk_put
(
pclk
);
spear_setup_of_timer
();
twd_local_timer_of_register
();
clocksource_of_init
();
}
arch/arm/mach-ux500/timer.c
View file @
f8016f1e
...
...
@@ -7,6 +7,7 @@
#include <linux/io.h>
#include <linux/errno.h>
#include <linux/clksrc-dbx500-prcmu.h>
#include <linux/clocksource.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/platform_data/clocksource-nomadik-mtu.h>
...
...
@@ -32,7 +33,7 @@ static void __init ux500_twd_init(void)
twd_local_timer
=
&
u8500_twd_local_timer
;
if
(
of_have_populated_dt
())
twd_local_timer_of_register
();
clocksource_of_init
();
else
{
err
=
twd_local_timer_register
(
twd_local_timer
);
if
(
err
)
...
...
arch/arm/mach-vexpress/v2m.c
View file @
f8016f1e
...
...
@@ -5,6 +5,7 @@
#include <linux/amba/bus.h>
#include <linux/amba/mmci.h>
#include <linux/io.h>
#include <linux/clocksource.h>
#include <linux/smp.h>
#include <linux/init.h>
#include <linux/irqchip.h>
...
...
@@ -25,7 +26,6 @@
#include <asm/arch_timer.h>
#include <asm/mach-types.h>
#include <asm/sizes.h>
#include <asm/smp_twd.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/time.h>
...
...
@@ -435,6 +435,7 @@ static void __init v2m_dt_timer_init(void)
vexpress_clk_of_init
();
clocksource_of_init
();
do
{
node
=
of_find_compatible_node
(
node
,
NULL
,
"arm,sp804"
);
}
while
(
node
&&
vexpress_get_site_by_node
(
node
)
!=
VEXPRESS_SITE_MB
);
...
...
@@ -445,8 +446,7 @@ static void __init v2m_dt_timer_init(void)
irq_of_parse_and_map
(
node
,
0
));
}
if
(
arch_timer_of_register
()
!=
0
)
twd_local_timer_of_register
();
arch_timer_of_register
();
if
(
arch_timer_sched_clock_init
()
!=
0
)
versatile_sched_clock_init
(
vexpress_get_24mhz_clock_base
(),
...
...
drivers/clocksource/bcm2835_timer.c
View file @
f8016f1e
...
...
@@ -95,23 +95,13 @@ static irqreturn_t bcm2835_time_interrupt(int irq, void *dev_id)
}
}
static
struct
of_device_id
bcm2835_time_match
[]
__initconst
=
{
{
.
compatible
=
"brcm,bcm2835-system-timer"
},
{}
};
static
void
__init
bcm2835_timer_init
(
void
)
static
void
__init
bcm2835_timer_init
(
struct
device_node
*
node
)
{
struct
device_node
*
node
;
void
__iomem
*
base
;
u32
freq
;
int
irq
;
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
);
if
(
!
base
)
panic
(
"Can't remap registers"
);
...
...
drivers/clocksource/clksrc-of.c
View file @
f8016f1e
...
...
@@ -16,6 +16,7 @@
#include <linux/init.h>
#include <linux/of.h>
#include <linux/clocksource.h>
extern
struct
of_device_id
__clksrc_of_table
[];
...
...
@@ -26,10 +27,10 @@ void __init clocksource_of_init(void)
{
struct
device_node
*
np
;
const
struct
of_device_id
*
match
;
void
(
*
init_func
)(
void
)
;
clocksource_of_init_fn
init_func
;
for_each_matching_node_and_match
(
np
,
__clksrc_of_table
,
&
match
)
{
init_func
=
match
->
data
;
init_func
();
init_func
(
np
);
}
}
drivers/clocksource/tegra20_timer.c
View file @
f8016f1e
...
...
@@ -154,29 +154,12 @@ static struct irqaction tegra_timer_irq = {
.
dev_id
=
&
tegra_clockevent
,
};
static
const
struct
of_device_id
timer_match
[]
__initconst
=
{
{
.
compatible
=
"nvidia,tegra20-timer"
},
{}
};
static
const
struct
of_device_id
rtc_match
[]
__initconst
=
{
{
.
compatible
=
"nvidia,tegra20-rtc"
},
{}
};
static
void
__init
tegra20_init_timer
(
void
)
static
void
__init
tegra20_init_timer
(
struct
device_node
*
np
)
{
struct
device_node
*
np
;
struct
clk
*
clk
;
unsigned
long
rate
;
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
);
if
(
!
timer_reg_base
)
{
pr_err
(
"Can't map timer registers
\n
"
);
...
...
@@ -200,30 +183,6 @@ static void __init tegra20_init_timer(void)
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
)
{
case
12000000
:
timer_writel
(
0x000b
,
TIMERUS_USEC_CFG
);
...
...
@@ -259,12 +218,34 @@ static void __init tegra20_init_timer(void)
tegra_clockevent
.
irq
=
tegra_timer_irq
.
irq
;
clockevents_config_and_register
(
&
tegra_clockevent
,
1000000
,
0x1
,
0x1fffffff
);
#ifdef CONFIG_HAVE_ARM_TWD
twd_local_timer_of_register
();
#endif
}
CLOCKSOURCE_OF_DECLARE
(
tegra20_timer
,
"nvidia,tegra20-timer"
,
tegra20_init_timer
);
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
);
}
CLOCKSOURCE_OF_DECLARE
(
tegra20
,
"nvidia,tegra20-timer"
,
tegra20_init_timer
);
CLOCKSOURCE_OF_DECLARE
(
tegra20
_rtc
,
"nvidia,tegra20-rtc"
,
tegra20_init_rtc
);
#ifdef CONFIG_PM
static
u32
usec_config
;
...
...
drivers/clocksource/vt8500_timer.c
View file @
f8016f1e
...
...
@@ -129,22 +129,10 @@ static struct irqaction irq = {
.
dev_id
=
&
clockevent
,
};
static
struct
of_device_id
vt8500_timer_ids
[]
=
{
{
.
compatible
=
"via,vt8500-timer"
},
{
}
};
static
void
__init
vt8500_timer_init
(
void
)
static
void
__init
vt8500_timer_init
(
struct
device_node
*
np
)
{
struct
device_node
*
np
;
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
);
if
(
!
regbase
)
{
pr_err
(
"%s: Missing iobase description in Device Tree
\n
"
,
...
...
@@ -177,4 +165,4 @@ static void __init vt8500_timer_init(void)
4
,
0xf0000000
);
}
CLOCKSOURCE_OF_DECLARE
(
vt8500
,
"via,vt8500-timer"
,
vt8500_timer_init
)
CLOCKSOURCE_OF_DECLARE
(
vt8500
,
"via,vt8500-timer"
,
vt8500_timer_init
)
;
include/linux/clocksource.h
View file @
f8016f1e
...
...
@@ -332,15 +332,23 @@ extern int clocksource_mmio_init(void __iomem *, const char *,
extern
int
clocksource_i8253_init
(
void
);
struct
device_node
;
typedef
void
(
*
clocksource_of_init_fn
)(
struct
device_node
*
);
#ifdef CONFIG_CLKSRC_OF
extern
void
clocksource_of_init
(
void
);
#define CLOCKSOURCE_OF_DECLARE(name, compat, fn) \
static const struct of_device_id __clksrc_of_table_##name \
__used __section(__clksrc_of_table) \
= { .compatible = compat, .data = fn };
= { .compatible = compat, \
.data = (fn == (clocksource_of_init_fn)NULL) ? fn : fn }
#else
#define CLOCKSOURCE_OF_DECLARE(name, compat, fn)
static
inline
void
clocksource_of_init
(
void
)
{}
#define CLOCKSOURCE_OF_DECLARE(name, compat, fn) \
static const struct of_device_id __clksrc_of_table_##name \
__unused __section(__clksrc_of_table) \
= { .compatible = compat, \
.data = (fn == (clocksource_of_init_fn)NULL) ? fn : fn }
#endif
#endif
/* _LINUX_CLOCKSOURCE_H */
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