All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-arm] [PATCH] bcm2835_property: implement "get board revision" query
@ 2016-02-07  5:09 Stephen Warren
  2016-02-07 12:48   ` [Qemu-devel] " Peter Maydell
  2016-02-07 22:37 ` [Qemu-arm] " Andrew Baumann
  0 siblings, 2 replies; 5+ messages in thread
From: Stephen Warren @ 2016-02-07  5:09 UTC (permalink / raw)
  To: Peter Maydell; +Cc: qemu-arm, Andrew Baumann, Stephen Warren

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 <Andrew.Baumann@microsoft.com>
Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
---
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


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-02-09  4:28 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-07  5:09 [Qemu-arm] [PATCH] bcm2835_property: implement "get board revision" query Stephen Warren
2016-02-07 12:48 ` Peter Maydell
2016-02-07 12:48   ` [Qemu-devel] " Peter Maydell
2016-02-07 22:37 ` [Qemu-arm] " Andrew Baumann
2016-02-09  4:28   ` Stephen Warren

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.