qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v2 11/13] hw/arm/bcm2836: Introduce the BCM2835 SoC


From: Luc Michel
Subject: Re: [PATCH v2 11/13] hw/arm/bcm2836: Introduce the BCM2835 SoC
Date: Tue, 18 Feb 2020 10:04:20 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0

On 2/17/20 12:45 PM, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <address@hidden>

Reviewed-by: Luc Michel <address@hidden>

> ---
>  include/hw/arm/bcm2836.h |  1 +
>  hw/arm/bcm2836.c         | 40 ++++++++++++++++++++++++++++++++++++++++
>  hw/arm/raspi.c           |  2 ++
>  3 files changed, 43 insertions(+)
> 
> diff --git a/include/hw/arm/bcm2836.h b/include/hw/arm/bcm2836.h
> index acc75bf553..3d46469a73 100644
> --- a/include/hw/arm/bcm2836.h
> +++ b/include/hw/arm/bcm2836.h
> @@ -24,6 +24,7 @@
>   * them, code using these devices should always handle them via the
>   * BCM283x base class, so they have no BCM2836(obj) etc macros.
>   */
> +#define TYPE_BCM2835 "bcm2835"
>  #define TYPE_BCM2836 "bcm2836"
>  #define TYPE_BCM2837 "bcm2837"
>  
> diff --git a/hw/arm/bcm2836.c b/hw/arm/bcm2836.c
> index 2b6fe31139..bce5f8a866 100644
> --- a/hw/arm/bcm2836.c
> +++ b/hw/arm/bcm2836.c
> @@ -103,6 +103,31 @@ static void bcm283x_common_realize(DeviceState *dev, 
> Error **errp)
>                              bc->peri_base, 1);
>  }
>  
> +static void bcm2835_realize(DeviceState *dev, Error **errp)
> +{
> +    BCM283XState *s = BCM283X(dev);
> +    Error *err = NULL;
> +
> +    bcm283x_common_realize(dev, &err);
> +    if (err) {
> +        error_propagate(errp, err);
> +        return;
> +    }
> +
> +    object_property_set_bool(OBJECT(&s->cpu[0].core), true,
> +                             "realized", &err);
> +    if (err) {
> +        error_propagate(errp, err);
> +        return;
> +    }
> +
> +    /* Connect irq/fiq outputs from the interrupt controller. */
> +    sysbus_connect_irq(SYS_BUS_DEVICE(&s->peripherals), 0,
> +            qdev_get_gpio_in(DEVICE(&s->cpu[0].core), ARM_CPU_IRQ));
> +    sysbus_connect_irq(SYS_BUS_DEVICE(&s->peripherals), 1,
> +            qdev_get_gpio_in(DEVICE(&s->cpu[0].core), ARM_CPU_FIQ));
> +}
> +
>  static void bcm2836_realize(DeviceState *dev, Error **errp)
>  {
>      BCM283XState *s = BCM283X(dev);
> @@ -184,6 +209,17 @@ static void bcm283x_class_init(ObjectClass *oc, void 
> *data)
>      dc->user_creatable = false;
>  }
>  
> +static void bcm2835_class_init(ObjectClass *oc, void *data)
> +{
> +    DeviceClass *dc = DEVICE_CLASS(oc);
> +    BCM283XClass *bc = BCM283X_CLASS(oc);
> +
> +    bc->cpu_type = ARM_CPU_TYPE_NAME("arm1176");
> +    bc->core_count = 1;
> +    bc->peri_base = 0x20000000;
> +    dc->realize = bcm2835_realize;
> +};
> +
>  static void bcm2836_class_init(ObjectClass *oc, void *data)
>  {
>      DeviceClass *dc = DEVICE_CLASS(oc);
> @@ -214,6 +250,10 @@ static void bcm2837_class_init(ObjectClass *oc, void 
> *data)
>  
>  static const TypeInfo bcm283x_types[] = {
>      {
> +        .name           = TYPE_BCM2835,
> +        .parent         = TYPE_BCM283X,
> +        .class_init     = bcm2835_class_init,
> +    }, {
>          .name           = TYPE_BCM2836,
>          .parent         = TYPE_BCM283X,
>          .class_init     = bcm2836_class_init,
> diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c
> index fff501affb..3537a329ac 100644
> --- a/hw/arm/raspi.c
> +++ b/hw/arm/raspi.c
> @@ -70,6 +70,7 @@ FIELD(REV_CODE, MEMORY_SIZE,       20, 3);
>  FIELD(REV_CODE, STYLE,             23, 1);
>  
>  typedef enum RaspiProcessorId {
> +    PROCESSOR_ID_BCM2835 = 0,
>      PROCESSOR_ID_BCM2836 = 1,
>      PROCESSOR_ID_BCM2837 = 2,
>  } RaspiProcessorId;
> @@ -78,6 +79,7 @@ static const struct {
>      const char *type;
>      int cores_count;
>  } soc_property[] = {
> +    [PROCESSOR_ID_BCM2835] = {TYPE_BCM2835, 1},
>      [PROCESSOR_ID_BCM2836] = {TYPE_BCM2836, BCM283X_NCPUS},
>      [PROCESSOR_ID_BCM2837] = {TYPE_BCM2837, BCM283X_NCPUS},
>  };
> 



reply via email to

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