Skip to content

Commit

Permalink
powerpc/85xx: disable timebase synchronization under the hypervisor
Browse files Browse the repository at this point in the history
The Freescale hypervisor does not allow guests to write to the timebase
registers (virtualizing the timebase register was deemed too complicated),
so don't try to synchronize the timebase registers when we're running
under the hypervisor.

This typically happens when kexec support is enabled.

Signed-off-by: Timur Tabi <timur@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
  • Loading branch information
Timur Tabi authored and Kumar Gala committed Jun 27, 2011
1 parent 2d05c39 commit 14497d3
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 0 deletions.
11 changes: 11 additions & 0 deletions arch/powerpc/platforms/85xx/p3041_ds.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@
static int __init p3041_ds_probe(void)
{
unsigned long root = of_get_flat_dt_root();
#ifdef CONFIG_SMP
extern struct smp_ops_t smp_85xx_ops;
#endif

if (of_flat_dt_is_compatible(root, "fsl,P3041DS"))
return 1;
Expand All @@ -51,6 +54,14 @@ static int __init p3041_ds_probe(void)
ppc_md.restart = fsl_hv_restart;
ppc_md.power_off = fsl_hv_halt;
ppc_md.halt = fsl_hv_halt;
#ifdef CONFIG_SMP
/*
* Disable the timebase sync operations because we can't write
* to the timebase registers under the hypervisor.
*/
smp_85xx_ops.give_timebase = NULL;
smp_85xx_ops.take_timebase = NULL;
#endif
return 1;
}

Expand Down
11 changes: 11 additions & 0 deletions arch/powerpc/platforms/85xx/p4080_ds.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@
static int __init p4080_ds_probe(void)
{
unsigned long root = of_get_flat_dt_root();
#ifdef CONFIG_SMP
extern struct smp_ops_t smp_85xx_ops;
#endif

if (of_flat_dt_is_compatible(root, "fsl,P4080DS"))
return 1;
Expand All @@ -50,6 +53,14 @@ static int __init p4080_ds_probe(void)
ppc_md.restart = fsl_hv_restart;
ppc_md.power_off = fsl_hv_halt;
ppc_md.halt = fsl_hv_halt;
#ifdef CONFIG_SMP
/*
* Disable the timebase sync operations because we can't write
* to the timebase registers under the hypervisor.
*/
smp_85xx_ops.give_timebase = NULL;
smp_85xx_ops.take_timebase = NULL;
#endif
return 1;
}

Expand Down
11 changes: 11 additions & 0 deletions arch/powerpc/platforms/85xx/p5020_ds.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@
static int __init p5020_ds_probe(void)
{
unsigned long root = of_get_flat_dt_root();
#ifdef CONFIG_SMP
extern struct smp_ops_t smp_85xx_ops;
#endif

if (of_flat_dt_is_compatible(root, "fsl,P5020DS"))
return 1;
Expand All @@ -51,6 +54,14 @@ static int __init p5020_ds_probe(void)
ppc_md.restart = fsl_hv_restart;
ppc_md.power_off = fsl_hv_halt;
ppc_md.halt = fsl_hv_halt;
#ifdef CONFIG_SMP
/*
* Disable the timebase sync operations because we can't write
* to the timebase registers under the hypervisor.
*/
smp_85xx_ops.give_timebase = NULL;
smp_85xx_ops.take_timebase = NULL;
#endif
return 1;
}

Expand Down

0 comments on commit 14497d3

Please sign in to comment.