Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c24594d authored by Paul Mundt's avatar Paul Mundt
Browse files

sh: generic clockevent broadcast support.



This hooks up GENERIC_CLOCKEVENTS_BROADCAST and a dummy local timer,
which we call in to from the timer IPI when no other local timer is
provided.

Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent 6f52707e
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -66,6 +66,9 @@ config GENERIC_TIME
config GENERIC_CLOCKEVENTS
	def_bool n

config GENERIC_CLOCKEVENTS_BROADCAST
	bool

config GENERIC_LOCKBREAK
	def_bool y
	depends on SMP && PREEMPT
@@ -323,6 +326,7 @@ config CPU_SUBTYPE_SHX3
	select ARCH_SPARSEMEM_ENABLE
	select SYS_SUPPORTS_NUMA
	select SYS_SUPPORTS_SMP
	select GENERIC_CLOCKEVENTS_BROADCAST

# SH4AL-DSP Processor Support

+3 −0
Original line number Diff line number Diff line
@@ -33,6 +33,9 @@ enum {
void smp_message_recv(unsigned int msg);
void smp_timer_broadcast(cpumask_t mask);

void local_timer_interrupt(void);
void local_timer_setup(unsigned int cpu);

void plat_smp_setup(void);
void plat_prepare_cpus(unsigned int max_cpus);
int plat_smp_processor_id(void);
+5 −2
Original line number Diff line number Diff line
@@ -84,9 +84,12 @@ asmlinkage void __cpuinit start_secondary(void)

	local_irq_enable();

	cpu = smp_processor_id();

	/* Enable local timers */
	local_timer_setup(cpu);
	calibrate_delay();

	cpu = smp_processor_id();
	smp_store_cpu_info(cpu);

	cpu_set(cpu, cpu_online_map);
@@ -195,7 +198,7 @@ void smp_timer_broadcast(cpumask_t mask)
static void ipi_timer(void)
{
	irq_enter();
	/* XXX ... */
	local_timer_interrupt();
	irq_exit();
}

+7 −2
Original line number Diff line number Diff line
/*
 *  arch/sh/kernel/time.c
 *  arch/sh/kernel/time_32.c
 *
 *  Copyright (C) 1999  Tetsuya Okada & Niibe Yutaka
 *  Copyright (C) 2000  Philipp Rumpf <prumpf@tux.org>
 *  Copyright (C) 2002 - 2007  Paul Mundt
 *  Copyright (C) 2002 - 2008  Paul Mundt
 *  Copyright (C) 2002  M. R. Brown  <mrbrown@linux-sh.org>
 *
 *  Some code taken from i386 version.
@@ -16,6 +16,7 @@
#include <linux/timex.h>
#include <linux/sched.h>
#include <linux/clockchips.h>
#include <linux/smp.h>
#include <asm/clock.h>
#include <asm/rtc.h>
#include <asm/timer.h>
@@ -260,6 +261,10 @@ void __init time_init(void)
	sys_timer = get_sys_timer();
	printk(KERN_INFO "Using %s for system timer\n", sys_timer->name);

#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
	local_timer_setup(smp_processor_id());
#endif

	if (sys_timer->ops->read)
		clocksource_sh.read = sys_timer->ops->read;

+1 −0
Original line number Diff line number Diff line
@@ -8,3 +8,4 @@ obj-$(CONFIG_SH_TMU) += timer-tmu.o
obj-$(CONFIG_SH_MTU2)		+= timer-mtu2.o
obj-$(CONFIG_SH_CMT)		+= timer-cmt.o

obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST)	+= timer-broadcast.o
Loading