[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
>