qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 6/8] ppc: Fix OpenPIC model


From: David Gibson
Subject: Re: [Qemu-devel] [PATCH 6/8] ppc: Fix OpenPIC model
Date: Tue, 19 Sep 2017 06:37:49 +1000
User-agent: Mutt/1.8.3 (2017-05-23)

On Sun, Sep 17, 2017 at 06:15:46PM +0100, Mark Cave-Ayland wrote:
> From: Benjamin Herrenschmidt <address@hidden>
> 
> Apple uses an IBM MPIC2A without timers, it has 64 sources.
> 
> Signed-off-by: Benjamin Herrenschmidt <address@hidden>

Applied to ppc-for-2.11.

> ---
>  hw/intc/openpic.c        |   35 +++++++++++++++++++++++++++++++++++
>  hw/ppc/mac_newworld.c    |    2 +-
>  include/hw/ppc/openpic.h |    1 +
>  3 files changed, 37 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/intc/openpic.c b/hw/intc/openpic.c
> index 9dd285b..10d6e87 100644
> --- a/hw/intc/openpic.c
> +++ b/hw/intc/openpic.c
> @@ -92,6 +92,16 @@ static int get_current_cpu(void);
>  #define RAVEN_MAX_TMR      OPENPIC_MAX_TMR
>  #define RAVEN_MAX_IPI      OPENPIC_MAX_IPI
>  
> +/* KeyLargo */
> +#define KEYLARGO_MAX_CPU  4
> +#define KEYLARGO_MAX_EXT  64
> +#define KEYLARGO_MAX_IPI  4
> +#define KEYLARGO_MAX_IRQ  (64 + KEYLARGO_MAX_IPI)
> +#define KEYLARGO_MAX_TMR  0
> +#define KEYLARGO_IPI_IRQ  (KEYLARGO_MAX_EXT) /* First IPI IRQ */
> +/* Timers don't exist but this makes the code happy... */
> +#define KEYLARGO_TMR_IRQ  (KEYLARGO_IPI_IRQ + KEYLARGO_MAX_IPI)
> +
>  /* Interrupt definitions */
>  #define RAVEN_FE_IRQ     (RAVEN_MAX_EXT)     /* Internal functional IRQ */
>  #define RAVEN_ERR_IRQ    (RAVEN_MAX_EXT + 1) /* Error IRQ */
> @@ -120,6 +130,7 @@ static FslMpicInfo fsl_mpic_42 = {
>  #define VID_REVISION_1_3   3
>  
>  #define VIR_GENERIC      0x00000000 /* Generic Vendor ID */
> +#define VIR_MPIC2A       0x00004614 /* IBM MPIC-2A */
>  
>  #define GCR_RESET        0x80000000
>  #define GCR_MODE_PASS    0x00000000
> @@ -329,6 +340,8 @@ typedef struct OpenPICState {
>      uint32_t nb_cpus;
>      /* Timer registers */
>      OpenPICTimer timers[OPENPIC_MAX_TMR];
> +    uint32_t max_tmr;
> +
>      /* Shared MSI registers */
>      OpenPICMSI msi[MAX_MSI];
>      uint32_t max_irq;
> @@ -1717,6 +1730,28 @@ static void openpic_realize(DeviceState *dev, Error 
> **errp)
>  
>          map_list(opp, list_le, &list_count);
>          break;
> +
> +    case OPENPIC_MODEL_KEYLARGO:
> +        opp->nb_irqs = KEYLARGO_MAX_EXT;
> +        opp->vid = VID_REVISION_1_2;
> +        opp->vir = VIR_GENERIC;
> +        opp->vector_mask = 0xFF;
> +        opp->tfrr_reset = 4160000;
> +        opp->ivpr_reset = IVPR_MASK_MASK | IVPR_MODE_MASK;
> +        opp->idr_reset = 0;
> +        opp->max_irq = KEYLARGO_MAX_IRQ;
> +        opp->irq_ipi0 = KEYLARGO_IPI_IRQ;
> +        opp->irq_tim0 = KEYLARGO_TMR_IRQ;
> +        opp->brr1 = -1;
> +        opp->mpic_mode_mask = GCR_MODE_MIXED;
> +
> +        if (opp->nb_cpus != 1) {
> +            error_setg(errp, "Only UP supported today");
> +            return;
> +        }
> +
> +        map_list(opp, list_le, &list_count);
> +        break;
>      }
>  
>      for (i = 0; i < opp->nb_cpus; i++) {
> diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c
> index c581d96..62bd8d3 100644
> --- a/hw/ppc/mac_newworld.c
> +++ b/hw/ppc/mac_newworld.c
> @@ -351,7 +351,7 @@ static void ppc_core99_init(MachineState *machine)
>      pic = g_new0(qemu_irq, 64);
>  
>      dev = qdev_create(NULL, TYPE_OPENPIC);
> -    qdev_prop_set_uint32(dev, "model", OPENPIC_MODEL_RAVEN);
> +    qdev_prop_set_uint32(dev, "model", OPENPIC_MODEL_KEYLARGO);
>      qdev_init_nofail(dev);
>      s = SYS_BUS_DEVICE(dev);
>      pic_mem = s->mmio[0].memory;
> diff --git a/include/hw/ppc/openpic.h b/include/hw/ppc/openpic.h
> index 6137e2d..e55ce54 100644
> --- a/include/hw/ppc/openpic.h
> +++ b/include/hw/ppc/openpic.h
> @@ -20,6 +20,7 @@ enum {
>  #define OPENPIC_MODEL_RAVEN       0
>  #define OPENPIC_MODEL_FSL_MPIC_20 1
>  #define OPENPIC_MODEL_FSL_MPIC_42 2
> +#define OPENPIC_MODEL_KEYLARGO    3
>  
>  #define OPENPIC_MAX_SRC     256
>  #define OPENPIC_MAX_TMR     4

-- 
David Gibson                    | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
                                | _way_ _around_!
http://www.ozlabs.org/~dgibson

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]