Skip to content

Commit

Permalink
[POWERPC] support ibm,extended-*-frequency properties
Browse files Browse the repository at this point in the history
Support the ibm,extended-*-frequency properties found in recent POWER5
firmware:

cpus/PowerPC,POWER5@0/clock-frequency
                 59aa5880 (1504336000)
cpus/PowerPC,POWER5@0/ibm,extended-clock-frequency
                 00000000 59aa5880
cpus/PowerPC,POWER5@0/timebase-frequency
                 0b354b10 (188042000)
cpus/PowerPC,POWER5@0/ibm,extended-timebase-frequency
                 00000000 0b354b10

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
Anton Blanchard authored and Paul Mackerras committed Jun 21, 2006
1 parent ccba051 commit 0bb474a
Showing 1 changed file with 30 additions and 27 deletions.
57 changes: 30 additions & 27 deletions arch/powerpc/kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -857,42 +857,50 @@ int do_settimeofday(struct timespec *tv)

EXPORT_SYMBOL(do_settimeofday);

void __init generic_calibrate_decr(void)
static int __init get_freq(char *name, int cells, unsigned long *val)
{
struct device_node *cpu;
unsigned int *fp;
int node_found;
int found = 0;

/*
* The cpu node should have a timebase-frequency property
* to tell us the rate at which the decrementer counts.
*/
/* The cpu node should have timebase and clock frequency properties */
cpu = of_find_node_by_type(NULL, "cpu");

ppc_tb_freq = DEFAULT_TB_FREQ; /* hardcoded default */
node_found = 0;
if (cpu) {
fp = (unsigned int *)get_property(cpu, "timebase-frequency",
NULL);
fp = (unsigned int *)get_property(cpu, name, NULL);
if (fp) {
node_found = 1;
ppc_tb_freq = *fp;
found = 1;
*val = 0;
while (cells--)
*val = (*val << 32) | *fp++;
}

of_node_put(cpu);
}
if (!node_found)

return found;
}

void __init generic_calibrate_decr(void)
{
ppc_tb_freq = DEFAULT_TB_FREQ; /* hardcoded default */

if (!get_freq("ibm,extended-timebase-frequency", 2, &ppc_tb_freq) &&
!get_freq("timebase-frequency", 1, &ppc_tb_freq)) {

printk(KERN_ERR "WARNING: Estimating decrementer frequency "
"(not found)\n");
}

ppc_proc_freq = DEFAULT_PROC_FREQ;
node_found = 0;
if (cpu) {
fp = (unsigned int *)get_property(cpu, "clock-frequency",
NULL);
if (fp) {
node_found = 1;
ppc_proc_freq = *fp;
}
ppc_proc_freq = DEFAULT_PROC_FREQ; /* hardcoded default */

if (!get_freq("ibm,extended-clock-frequency", 2, &ppc_proc_freq) &&
!get_freq("clock-frequency", 1, &ppc_proc_freq)) {

printk(KERN_ERR "WARNING: Estimating processor frequency "
"(not found)\n");
}

#ifdef CONFIG_BOOKE
/* Set the time base to zero */
mtspr(SPRN_TBWL, 0);
Expand All @@ -904,11 +912,6 @@ void __init generic_calibrate_decr(void)
/* Enable decrementer interrupt */
mtspr(SPRN_TCR, TCR_DIE);
#endif
if (!node_found)
printk(KERN_ERR "WARNING: Estimating processor frequency "
"(not found)\n");

of_node_put(cpu);
}

unsigned long get_boot_time(void)
Expand Down

0 comments on commit 0bb474a

Please sign in to comment.