Commit 0355e2ff authored by Russell King's avatar Russell King

Merge branch 'sched_clock-for-rmk' of...

Merge branch 'sched_clock-for-rmk' of git://git.kernel.org/pub/scm/linux/kernel/git/maz/arm-platforms into devel-stable
parents bea15fd7 6905a658
...@@ -51,9 +51,6 @@ config MIGHT_HAVE_PCI ...@@ -51,9 +51,6 @@ config MIGHT_HAVE_PCI
config SYS_SUPPORTS_APM_EMULATION config SYS_SUPPORTS_APM_EMULATION
bool bool
config HAVE_SCHED_CLOCK
bool
config GENERIC_GPIO config GENERIC_GPIO
bool bool
...@@ -438,7 +435,6 @@ config ARCH_MXC ...@@ -438,7 +435,6 @@ config ARCH_MXC
select CLKDEV_LOOKUP select CLKDEV_LOOKUP
select CLKSRC_MMIO select CLKSRC_MMIO
select GENERIC_IRQ_CHIP select GENERIC_IRQ_CHIP
select HAVE_SCHED_CLOCK
select MULTI_IRQ_HANDLER select MULTI_IRQ_HANDLER
help help
Support for Freescale MXC/iMX-based family of processors Support for Freescale MXC/iMX-based family of processors
...@@ -530,7 +526,6 @@ config ARCH_IXP4XX ...@@ -530,7 +526,6 @@ config ARCH_IXP4XX
select CPU_XSCALE select CPU_XSCALE
select GENERIC_GPIO select GENERIC_GPIO
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select HAVE_SCHED_CLOCK
select MIGHT_HAVE_PCI select MIGHT_HAVE_PCI
select DMABOUNCE if PCI select DMABOUNCE if PCI
help help
...@@ -601,7 +596,6 @@ config ARCH_MMP ...@@ -601,7 +596,6 @@ config ARCH_MMP
select CLKDEV_LOOKUP select CLKDEV_LOOKUP
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select GPIO_PXA select GPIO_PXA
select HAVE_SCHED_CLOCK
select TICK_ONESHOT select TICK_ONESHOT
select PLAT_PXA select PLAT_PXA
select SPARSE_IRQ select SPARSE_IRQ
...@@ -642,7 +636,6 @@ config ARCH_TEGRA ...@@ -642,7 +636,6 @@ config ARCH_TEGRA
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select GENERIC_GPIO select GENERIC_GPIO
select HAVE_CLK select HAVE_CLK
select HAVE_SCHED_CLOCK
select HAVE_SMP select HAVE_SMP
select MIGHT_HAVE_CACHE_L2X0 select MIGHT_HAVE_CACHE_L2X0
select ARCH_HAS_CPUFREQ select ARCH_HAS_CPUFREQ
...@@ -659,7 +652,6 @@ config ARCH_PICOXCELL ...@@ -659,7 +652,6 @@ config ARCH_PICOXCELL
select DW_APB_TIMER select DW_APB_TIMER
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select GENERIC_GPIO select GENERIC_GPIO
select HAVE_SCHED_CLOCK
select HAVE_TCM select HAVE_TCM
select NO_IOPORT select NO_IOPORT
select SPARSE_IRQ select SPARSE_IRQ
...@@ -687,7 +679,6 @@ config ARCH_PXA ...@@ -687,7 +679,6 @@ config ARCH_PXA
select ARCH_REQUIRE_GPIOLIB select ARCH_REQUIRE_GPIOLIB
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select GPIO_PXA select GPIO_PXA
select HAVE_SCHED_CLOCK
select TICK_ONESHOT select TICK_ONESHOT
select PLAT_PXA select PLAT_PXA
select SPARSE_IRQ select SPARSE_IRQ
...@@ -755,7 +746,6 @@ config ARCH_SA1100 ...@@ -755,7 +746,6 @@ config ARCH_SA1100
select CPU_FREQ select CPU_FREQ
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select CLKDEV_LOOKUP select CLKDEV_LOOKUP
select HAVE_SCHED_CLOCK
select TICK_ONESHOT select TICK_ONESHOT
select ARCH_REQUIRE_GPIOLIB select ARCH_REQUIRE_GPIOLIB
select HAVE_IDE select HAVE_IDE
...@@ -812,7 +802,6 @@ config ARCH_S5P64X0 ...@@ -812,7 +802,6 @@ config ARCH_S5P64X0
select CLKSRC_MMIO select CLKSRC_MMIO
select HAVE_S3C2410_WATCHDOG if WATCHDOG select HAVE_S3C2410_WATCHDOG if WATCHDOG
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select HAVE_SCHED_CLOCK
select HAVE_S3C2410_I2C if I2C select HAVE_S3C2410_I2C if I2C
select HAVE_S3C_RTC if RTC_CLASS select HAVE_S3C_RTC if RTC_CLASS
help help
...@@ -845,7 +834,6 @@ config ARCH_S5PV210 ...@@ -845,7 +834,6 @@ config ARCH_S5PV210
select ARM_L1_CACHE_SHIFT_6 select ARM_L1_CACHE_SHIFT_6
select ARCH_HAS_CPUFREQ select ARCH_HAS_CPUFREQ
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select HAVE_SCHED_CLOCK
select HAVE_S3C2410_I2C if I2C select HAVE_S3C2410_I2C if I2C
select HAVE_S3C_RTC if RTC_CLASS select HAVE_S3C_RTC if RTC_CLASS
select HAVE_S3C2410_WATCHDOG if WATCHDOG select HAVE_S3C2410_WATCHDOG if WATCHDOG
...@@ -888,7 +876,6 @@ config ARCH_U300 ...@@ -888,7 +876,6 @@ config ARCH_U300
depends on MMU depends on MMU
select CLKSRC_MMIO select CLKSRC_MMIO
select CPU_ARM926T select CPU_ARM926T
select HAVE_SCHED_CLOCK
select HAVE_TCM select HAVE_TCM
select ARM_AMBA select ARM_AMBA
select ARM_PATCH_PHYS_VIRT select ARM_PATCH_PHYS_VIRT
...@@ -946,7 +933,6 @@ config ARCH_OMAP ...@@ -946,7 +933,6 @@ config ARCH_OMAP
select ARCH_HAS_CPUFREQ select ARCH_HAS_CPUFREQ
select CLKSRC_MMIO select CLKSRC_MMIO
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select HAVE_SCHED_CLOCK
select ARCH_HAS_HOLES_MEMORYMODEL select ARCH_HAS_HOLES_MEMORYMODEL
help help
Support for TI's OMAP platform (OMAP1/2/3/4). Support for TI's OMAP platform (OMAP1/2/3/4).
...@@ -1112,13 +1098,11 @@ config ARCH_ACORN ...@@ -1112,13 +1098,11 @@ config ARCH_ACORN
config PLAT_IOP config PLAT_IOP
bool bool
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select HAVE_SCHED_CLOCK
config PLAT_ORION config PLAT_ORION
bool bool
select CLKSRC_MMIO select CLKSRC_MMIO
select GENERIC_IRQ_CHIP select GENERIC_IRQ_CHIP
select HAVE_SCHED_CLOCK
config PLAT_PXA config PLAT_PXA
bool bool
......
...@@ -14,8 +14,8 @@ CFLAGS_REMOVE_return_address.o = -pg ...@@ -14,8 +14,8 @@ CFLAGS_REMOVE_return_address.o = -pg
# Object file lists. # Object file lists.
obj-y := elf.o entry-armv.o entry-common.o irq.o opcodes.o \ obj-y := elf.o entry-armv.o entry-common.o irq.o opcodes.o \
process.o ptrace.o return_address.o setup.o signal.o \ process.o ptrace.o return_address.o sched_clock.o \
sys_arm.o stacktrace.o time.o traps.o setup.o signal.o stacktrace.o sys_arm.o time.o traps.o
obj-$(CONFIG_DEPRECATED_PARAM_STRUCT) += compat.o obj-$(CONFIG_DEPRECATED_PARAM_STRUCT) += compat.o
...@@ -30,7 +30,6 @@ obj-$(CONFIG_ARTHUR) += arthur.o ...@@ -30,7 +30,6 @@ obj-$(CONFIG_ARTHUR) += arthur.o
obj-$(CONFIG_ISA_DMA) += dma-isa.o obj-$(CONFIG_ISA_DMA) += dma-isa.o
obj-$(CONFIG_PCI) += bios32.o isa.o obj-$(CONFIG_PCI) += bios32.o isa.o
obj-$(CONFIG_ARM_CPU_SUSPEND) += sleep.o suspend.o obj-$(CONFIG_ARM_CPU_SUSPEND) += sleep.o suspend.o
obj-$(CONFIG_HAVE_SCHED_CLOCK) += sched_clock.o
obj-$(CONFIG_SMP) += smp.o smp_tlb.o obj-$(CONFIG_SMP) += smp.o smp_tlb.o
obj-$(CONFIG_HAVE_ARM_SCU) += smp_scu.o obj-$(CONFIG_HAVE_ARM_SCU) += smp_scu.o
obj-$(CONFIG_HAVE_ARM_TWD) += smp_twd.o obj-$(CONFIG_HAVE_ARM_TWD) += smp_twd.o
......
...@@ -147,8 +147,6 @@ void __init time_init(void) ...@@ -147,8 +147,6 @@ void __init time_init(void)
{ {
system_timer = machine_desc->timer; system_timer = machine_desc->timer;
system_timer->init(); system_timer->init();
#ifdef CONFIG_HAVE_SCHED_CLOCK
sched_clock_postinit(); sched_clock_postinit();
#endif
} }
...@@ -19,11 +19,14 @@ ...@@ -19,11 +19,14 @@
#include <linux/err.h> #include <linux/err.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <mach/hardware.h> #include <asm/sched_clock.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <mach/cputype.h> #include <mach/cputype.h>
#include <mach/hardware.h>
#include <mach/time.h> #include <mach/time.h>
#include "clock.h" #include "clock.h"
static struct clock_event_device clockevent_davinci; static struct clock_event_device clockevent_davinci;
...@@ -272,19 +275,9 @@ static cycle_t read_cycles(struct clocksource *cs) ...@@ -272,19 +275,9 @@ static cycle_t read_cycles(struct clocksource *cs)
return (cycles_t)timer32_read(t); return (cycles_t)timer32_read(t);
} }
/*
* Kernel assumes that sched_clock can be called early but may not have
* things ready yet.
*/
static cycle_t read_dummy(struct clocksource *cs)
{
return 0;
}
static struct clocksource clocksource_davinci = { static struct clocksource clocksource_davinci = {
.rating = 300, .rating = 300,
.read = read_dummy, .read = read_cycles,
.mask = CLOCKSOURCE_MASK(32), .mask = CLOCKSOURCE_MASK(32),
.flags = CLOCK_SOURCE_IS_CONTINUOUS, .flags = CLOCK_SOURCE_IS_CONTINUOUS,
}; };
...@@ -292,12 +285,9 @@ static struct clocksource clocksource_davinci = { ...@@ -292,12 +285,9 @@ static struct clocksource clocksource_davinci = {
/* /*
* Overwrite weak default sched_clock with something more precise * Overwrite weak default sched_clock with something more precise
*/ */
unsigned long long notrace sched_clock(void) static u32 notrace davinci_read_sched_clock(void)
{ {
const cycle_t cyc = clocksource_davinci.read(&clocksource_davinci); return timer32_read(&timers[TID_CLOCKSOURCE]);
return clocksource_cyc2ns(cyc, clocksource_davinci.mult,
clocksource_davinci.shift);
} }
/* /*
...@@ -397,12 +387,14 @@ static void __init davinci_timer_init(void) ...@@ -397,12 +387,14 @@ static void __init davinci_timer_init(void)
davinci_clock_tick_rate = clk_get_rate(timer_clk); davinci_clock_tick_rate = clk_get_rate(timer_clk);
/* setup clocksource */ /* setup clocksource */
clocksource_davinci.read = read_cycles;
clocksource_davinci.name = id_to_name[clocksource_id]; clocksource_davinci.name = id_to_name[clocksource_id];
if (clocksource_register_hz(&clocksource_davinci, if (clocksource_register_hz(&clocksource_davinci,
davinci_clock_tick_rate)) davinci_clock_tick_rate))
printk(err, clocksource_davinci.name); printk(err, clocksource_davinci.name);
setup_sched_clock(davinci_read_sched_clock, 32,
davinci_clock_tick_rate);
/* setup clockevent */ /* setup clockevent */
clockevent_davinci.name = id_to_name[timers[TID_CLOCKEVENT].id]; clockevent_davinci.name = id_to_name[timers[TID_CLOCKEVENT].id];
clockevent_davinci.mult = div_sc(davinci_clock_tick_rate, NSEC_PER_SEC, clockevent_davinci.mult = div_sc(davinci_clock_tick_rate, NSEC_PER_SEC,
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <mach/map.h> #include <mach/map.h>
#include <asm/sched_clock.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#define SIRFSOC_TIMER_COUNTER_LO 0x0000 #define SIRFSOC_TIMER_COUNTER_LO 0x0000
...@@ -165,21 +166,9 @@ static struct irqaction sirfsoc_timer_irq = { ...@@ -165,21 +166,9 @@ static struct irqaction sirfsoc_timer_irq = {
}; };
/* Overwrite weak default sched_clock with more precise one */ /* Overwrite weak default sched_clock with more precise one */
unsigned long long notrace sched_clock(void) static u32 notrace sirfsoc_read_sched_clock(void)
{ {
static int is_mapped; return (u32)(sirfsoc_timer_read(NULL) & 0xffffffff);
/*
* sched_clock is called earlier than .init of sys_timer
* if we map timer memory in .init of sys_timer, system
* will panic due to illegal memory access
*/
if (!is_mapped) {
sirfsoc_of_timer_map();
is_mapped = 1;
}
return sirfsoc_timer_read(NULL) * (NSEC_PER_SEC / CLOCK_TICK_RATE);
} }
static void __init sirfsoc_clockevent_init(void) static void __init sirfsoc_clockevent_init(void)
...@@ -210,6 +199,8 @@ static void __init sirfsoc_timer_init(void) ...@@ -210,6 +199,8 @@ static void __init sirfsoc_timer_init(void)
BUG_ON(rate < CLOCK_TICK_RATE); BUG_ON(rate < CLOCK_TICK_RATE);
BUG_ON(rate % CLOCK_TICK_RATE); BUG_ON(rate % CLOCK_TICK_RATE);
sirfsoc_of_timer_map();
writel_relaxed(rate / CLOCK_TICK_RATE / 2 - 1, sirfsoc_timer_base + SIRFSOC_TIMER_DIV); writel_relaxed(rate / CLOCK_TICK_RATE / 2 - 1, sirfsoc_timer_base + SIRFSOC_TIMER_DIV);
writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_LO); writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_LO);
writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_HI); writel_relaxed(0, sirfsoc_timer_base + SIRFSOC_TIMER_COUNTER_HI);
...@@ -217,6 +208,8 @@ static void __init sirfsoc_timer_init(void) ...@@ -217,6 +208,8 @@ static void __init sirfsoc_timer_init(void)
BUG_ON(clocksource_register_hz(&sirfsoc_clocksource, CLOCK_TICK_RATE)); BUG_ON(clocksource_register_hz(&sirfsoc_clocksource, CLOCK_TICK_RATE));
setup_sched_clock(sirfsoc_read_sched_clock, 32, CLOCK_TICK_RATE);
BUG_ON(setup_irq(sirfsoc_timer_irq.irq, &sirfsoc_timer_irq)); BUG_ON(setup_irq(sirfsoc_timer_irq.irq, &sirfsoc_timer_irq));
sirfsoc_clockevent_init(); sirfsoc_clockevent_init();
......
...@@ -23,7 +23,6 @@ config HAS_MTU ...@@ -23,7 +23,6 @@ config HAS_MTU
config NOMADIK_MTU_SCHED_CLOCK config NOMADIK_MTU_SCHED_CLOCK
bool bool
depends on HAS_MTU depends on HAS_MTU
select HAVE_SCHED_CLOCK
help help
Use the Multi Timer Unit as the sched_clock. Use the Multi Timer Unit as the sched_clock.
......
...@@ -12,6 +12,5 @@ config PLAT_VERSATILE_LEDS ...@@ -12,6 +12,5 @@ config PLAT_VERSATILE_LEDS
config PLAT_VERSATILE_SCHED_CLOCK config PLAT_VERSATILE_SCHED_CLOCK
def_bool y if !ARCH_INTEGRATOR_AP def_bool y if !ARCH_INTEGRATOR_AP
select HAVE_SCHED_CLOCK
endif endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment