qemu-arm
[Top][All Lists]
Advanced

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

Re: [Qemu-arm] [PATCH] bcm2835_property: implement "get board revision"


From: Peter Maydell
Subject: Re: [Qemu-arm] [PATCH] bcm2835_property: implement "get board revision" query
Date: Sun, 7 Feb 2016 12:48:31 +0000

Hi; you forgot to cc qemu-devel (all patches must be cc'd there).

thanks
-- PMM

On 7 February 2016 at 05:09, Stephen Warren <address@hidden> wrote:
> Return a valid value from the BCM2835 property mailbox query "get board
> revision". This query is used by U-Boot. Implementing it fixes the first
> obvious difference between qemu and real HW.
>
> The value returned is currently hard-coded to match the RPi2 I own. Other
> values are legal, e.g. different board manufacturer field values are
> likely to exist in the wild. When support for other RPi models is added,
> the value can be made dynamic.
>
> Cc: Andrew Baumann <address@hidden>
> Signed-off-by: Stephen Warren <address@hidden>
> ---
> This looks like the only non-video-related mailbox request used by U-Boot
> that wasn't implemented by qemu.
>
> The only other feature required for U-Boot to get to its command prompt
> is the BCM2835 timer.
>
> Andrew, I assume you're actively working on mainlining all the features
> in your github branch? I look forward to U-Boot working on qemu:-)
> ---
>  hw/arm/bcm2835_peripherals.c       | 9 +++++++++
>  hw/misc/bcm2835_property.c         | 4 ++--
>  include/hw/misc/bcm2835_property.h | 1 +
>  3 files changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/hw/arm/bcm2835_peripherals.c b/hw/arm/bcm2835_peripherals.c
> index 18b72ecb696c..5fed6c90b048 100644
> --- a/hw/arm/bcm2835_peripherals.c
> +++ b/hw/arm/bcm2835_peripherals.c
> @@ -148,6 +148,15 @@ static void bcm2835_peripherals_realize(DeviceState 
> *dev, Error **errp)
>          return;
>      }
>
> +    /* When multiple Pi revisions are supported, this hard-coded number 
> should
> +     * be selected by the various raspi*_machine_init().
> +     */
> +    object_property_set_int(OBJECT(&s->property), 0xa21041, "board-rev", 
> &err);
> +    if (err) {
> +        error_propagate(errp, err);
> +        return;
> +    }
> +
>      object_property_set_bool(OBJECT(&s->property), true, "realized", &err);
>      if (err) {
>          error_propagate(errp, err);
> diff --git a/hw/misc/bcm2835_property.c b/hw/misc/bcm2835_property.c
> index e42b43e72d56..45bd6c18ce90 100644
> --- a/hw/misc/bcm2835_property.c
> +++ b/hw/misc/bcm2835_property.c
> @@ -43,8 +43,7 @@ static void bcm2835_property_mbox_push(BCM2835PropertyState 
> *s, uint32_t value)
>              resplen = 4;
>              break;
>          case 0x00010002: /* Get board revision */
> -            qemu_log_mask(LOG_UNIMP,
> -                          "bcm2835_property: %x get board revision NYI\n", 
> tag);
> +            stl_phys(&s->dma_as, value + 12, s->board_rev);
>              resplen = 4;
>              break;
>          case 0x00010003: /* Get board MAC address */
> @@ -258,6 +257,7 @@ static void bcm2835_property_realize(DeviceState *dev, 
> Error **errp)
>  }
>
>  static Property bcm2835_property_props[] = {
> +    DEFINE_PROP_UINT32("board-rev", BCM2835PropertyState, board_rev, 0),
>      DEFINE_PROP_UINT32("ram-size", BCM2835PropertyState, ram_size, 0),
>      DEFINE_PROP_END_OF_LIST()
>  };
> diff --git a/include/hw/misc/bcm2835_property.h 
> b/include/hw/misc/bcm2835_property.h
> index fcf5f3decafc..df889eaa08b5 100644
> --- a/include/hw/misc/bcm2835_property.h
> +++ b/include/hw/misc/bcm2835_property.h
> @@ -23,6 +23,7 @@ typedef struct {
>      MemoryRegion iomem;
>      qemu_irq mbox_irq;
>      MACAddr macaddr;
> +    uint32_t board_rev;
>      uint32_t ram_size;
>      uint32_t addr;
>      bool pending;
> --
> 1.9.1
>



reply via email to

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