]> Pileus Git - ~andy/linux/commitdiff
powerpc/85xx: add board support for the Freescale hypervisor
authorTimur Tabi <timur@freescale.com>
Thu, 19 May 2011 13:54:30 +0000 (08:54 -0500)
committerKumar Gala <galak@kernel.crashing.org>
Mon, 27 Jun 2011 13:30:54 +0000 (08:30 -0500)
Add support for the ePAPR-compliant Freescale hypervisor (aka "Topaz") on
the Freescale P3041DS, P4080DS, and P5020DS reference boards.

Signed-off-by: Timur Tabi <timur@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
arch/powerpc/platforms/85xx/Kconfig
arch/powerpc/platforms/85xx/corenet_ds.c
arch/powerpc/platforms/85xx/p3041_ds.c
arch/powerpc/platforms/85xx/p4080_ds.c
arch/powerpc/platforms/85xx/p5020_ds.c

index 6db0275619619222e523740bebd35096fb25ba58..10e147a1f302efa6fa5e4e4a5d4f798b1c152d89 100644 (file)
@@ -169,6 +169,7 @@ config P3041_DS
        select SWIOTLB
        select MPC8xxx_GPIO
        select HAS_RAPIDIO
+       select PPC_EPAPR_HV_PIC
        help
          This option enables support for the P3041 DS board
 
@@ -180,6 +181,7 @@ config P4080_DS
        select SWIOTLB
        select MPC8xxx_GPIO
        select HAS_RAPIDIO
+       select PPC_EPAPR_HV_PIC
        help
          This option enables support for the P4080 DS board
 
@@ -194,6 +196,7 @@ config P5020_DS
        select SWIOTLB
        select MPC8xxx_GPIO
        select HAS_RAPIDIO
+       select PPC_EPAPR_HV_PIC
        help
          This option enables support for the P5020 DS board
 
index 338e6dc316637485fdefea9fa6b8b16e1e3ad6a0..802ad110b75719780ea29547f9ef85c6b0863a8d 100644 (file)
@@ -120,6 +120,13 @@ static const struct of_device_id of_device_ids[] __devinitconst = {
        {
                .compatible     = "fsl,qoriq-pcie-v2.2",
        },
+       /* The following two are for the Freescale hypervisor */
+       {
+               .name           = "hypervisor",
+       },
+       {
+               .name           = "handles",
+       },
        {}
 };
 
index 0ed52e18298cc70697eac16884fac7b36ccb53ad..e2cfb6b6fb2570f447ed50ca6497d6a568a9cc32 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/of_platform.h>
 #include <sysdev/fsl_soc.h>
 #include <sysdev/fsl_pci.h>
+#include <asm/ehv_pic.h>
 
 #include "corenet_ds.h"
 
@@ -40,7 +41,20 @@ static int __init p3041_ds_probe(void)
 {
        unsigned long root = of_get_flat_dt_root();
 
-       return of_flat_dt_is_compatible(root, "fsl,P3041DS");
+       if (of_flat_dt_is_compatible(root, "fsl,P3041DS"))
+               return 1;
+
+       /* Check if we're running under the Freescale hypervisor */
+       if (of_flat_dt_is_compatible(root, "fsl,P3041DS-hv")) {
+               ppc_md.init_IRQ = ehv_pic_init;
+               ppc_md.get_irq = ehv_pic_get_irq;
+               ppc_md.restart = fsl_hv_restart;
+               ppc_md.power_off = fsl_hv_halt;
+               ppc_md.halt = fsl_hv_halt;
+               return 1;
+       }
+
+       return 0;
 }
 
 define_machine(p3041_ds) {
index ec8320c95f8ff96ff84475c413d4ee248566b0be..eed4b01deff7aaf196fd6727056ab16b8afed594 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/of_platform.h>
 #include <sysdev/fsl_soc.h>
 #include <sysdev/fsl_pci.h>
+#include <asm/ehv_pic.h>
 
 #include "corenet_ds.h"
 
@@ -39,7 +40,20 @@ static int __init p4080_ds_probe(void)
 {
        unsigned long root = of_get_flat_dt_root();
 
-       return of_flat_dt_is_compatible(root, "fsl,P4080DS");
+       if (of_flat_dt_is_compatible(root, "fsl,P4080DS"))
+               return 1;
+
+       /* Check if we're running under the Freescale hypervisor */
+       if (of_flat_dt_is_compatible(root, "fsl,P4080DS-hv")) {
+               ppc_md.init_IRQ = ehv_pic_init;
+               ppc_md.get_irq = ehv_pic_get_irq;
+               ppc_md.restart = fsl_hv_restart;
+               ppc_md.power_off = fsl_hv_halt;
+               ppc_md.halt = fsl_hv_halt;
+               return 1;
+       }
+
+       return 0;
 }
 
 define_machine(p4080_ds) {
index 7467b712ee00621ed014f53093801d89f2e7ba59..94348c9b5dc663507734051a712fb4b4296919b9 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/of_platform.h>
 #include <sysdev/fsl_soc.h>
 #include <sysdev/fsl_pci.h>
+#include <asm/ehv_pic.h>
 
 #include "corenet_ds.h"
 
@@ -40,7 +41,20 @@ static int __init p5020_ds_probe(void)
 {
        unsigned long root = of_get_flat_dt_root();
 
-       return of_flat_dt_is_compatible(root, "fsl,P5020DS");
+       if (of_flat_dt_is_compatible(root, "fsl,P5020DS"))
+               return 1;
+
+       /* Check if we're running under the Freescale hypervisor */
+       if (of_flat_dt_is_compatible(root, "fsl,P5020DS-hv")) {
+               ppc_md.init_IRQ = ehv_pic_init;
+               ppc_md.get_irq = ehv_pic_get_irq;
+               ppc_md.restart = fsl_hv_restart;
+               ppc_md.power_off = fsl_hv_halt;
+               ppc_md.halt = fsl_hv_halt;
+               return 1;
+       }
+
+       return 0;
 }
 
 define_machine(p5020_ds) {