Skip to content

Commit

Permalink
powerpc: Properly start decrementer on BookE secondary CPUs
Browse files Browse the repository at this point in the history
This moves the code to start the decrementer on 40x and BookE into
a separate function which is now called from time_init() and
secondary_time_init(), before the respective clock sources are
registered. We also remove the 85xx specific code for doing it
from the platform code.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
  • Loading branch information
Benjamin Herrenschmidt committed Aug 28, 2009
1 parent e5a6a1c commit 77c0a70
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 20 deletions.
30 changes: 22 additions & 8 deletions arch/powerpc/kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -727,6 +727,18 @@ static int __init get_freq(char *name, int cells, unsigned long *val)
return found;
}

/* should become __cpuinit when secondary_cpu_time_init also is */
void start_cpu_decrementer(void)
{
#if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
/* Clear any pending timer interrupts */
mtspr(SPRN_TSR, TSR_ENW | TSR_WIS | TSR_DIS | TSR_FIS);

/* Enable decrementer interrupt */
mtspr(SPRN_TCR, TCR_DIE);
#endif /* defined(CONFIG_BOOKE) || defined(CONFIG_40x) */
}

void __init generic_calibrate_decr(void)
{
ppc_tb_freq = DEFAULT_TB_FREQ; /* hardcoded default */
Expand All @@ -746,14 +758,6 @@ void __init generic_calibrate_decr(void)
printk(KERN_ERR "WARNING: Estimating processor frequency "
"(not found)\n");
}

#if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
/* Clear any pending timer interrupts */
mtspr(SPRN_TSR, TSR_ENW | TSR_WIS | TSR_DIS | TSR_FIS);

/* Enable decrementer interrupt */
mtspr(SPRN_TCR, TCR_DIE);
#endif
}

int update_persistent_clock(struct timespec now)
Expand Down Expand Up @@ -914,6 +918,11 @@ static void __init init_decrementer_clockevent(void)

void secondary_cpu_time_init(void)
{
/* Start the decrementer on CPUs that have manual control
* such as BookE
*/
start_cpu_decrementer();

/* FIME: Should make unrelatred change to move snapshot_timebase
* call here ! */
register_decrementer_clockevent(smp_processor_id());
Expand Down Expand Up @@ -1017,6 +1026,11 @@ void __init time_init(void)

write_sequnlock_irqrestore(&xtime_lock, flags);

/* Start the decrementer on CPUs that have manual control
* such as BookE
*/
start_cpu_decrementer();

/* Register the clocksource, if we're not running on iSeries */
if (!firmware_has_feature(FW_FEATURE_ISERIES))
clocksource_init();
Expand Down
12 changes: 0 additions & 12 deletions arch/powerpc/platforms/85xx/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,22 +78,10 @@ smp_85xx_kick_cpu(int nr)
pr_debug("waited %d msecs for CPU #%d.\n", n, nr);
}

static void __init
smp_85xx_basic_setup(int cpu_nr)
{
/* Clear any pending timer interrupts */
mtspr(SPRN_TSR, TSR_ENW | TSR_WIS | TSR_DIS | TSR_FIS);

/* Enable decrementer interrupt */
mtspr(SPRN_TCR, TCR_DIE);
}

static void __init
smp_85xx_setup_cpu(int cpu_nr)
{
mpic_setup_this_cpu();

smp_85xx_basic_setup(cpu_nr);
}

struct smp_ops_t smp_85xx_ops = {
Expand Down

0 comments on commit 77c0a70

Please sign in to comment.