]> Git Repo - qemu.git/commitdiff
bcm2835_property: implement "get board revision" query
authorStephen Warren <[email protected]>
Thu, 11 Feb 2016 11:17:32 +0000 (11:17 +0000)
committerPeter Maydell <[email protected]>
Thu, 11 Feb 2016 11:17:32 +0000 (11:17 +0000)
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.

Cc: Andrew Baumann <[email protected]>
Signed-off-by: Stephen Warren <[email protected]>
Reviewed-by: Andrew Baumann <[email protected]>
Message-id: 1454993910[email protected]
Signed-off-by: Peter Maydell <[email protected]>
hw/arm/bcm2835_peripherals.c
hw/arm/bcm2836.c
hw/arm/raspi.c
hw/misc/bcm2835_property.c
include/hw/misc/bcm2835_property.h

index 18b72ecb696c1ff661831521793aea24429c754a..e4fb48b8035c69f106474bcd96dd85160a42c96c 100644 (file)
@@ -58,6 +58,8 @@ static void bcm2835_peripherals_init(Object *obj)
     /* Property channel */
     object_initialize(&s->property, sizeof(s->property), TYPE_BCM2835_PROPERTY);
     object_property_add_child(obj, "property", OBJECT(&s->property), NULL);
+    object_property_add_alias(obj, "board-rev", OBJECT(&s->property),
+                              "board-rev", &error_abort);
     qdev_set_parent_bus(DEVICE(&s->property), sysbus_get_default());
 
     object_property_add_const_link(OBJECT(&s->property), "dma-mr",
index 69c7438317c4c321e8a423b68f3ea62664fdef24..8a4d13c7d9734019ea09e919c67cc17fd9f01c91 100644 (file)
@@ -39,6 +39,8 @@ static void bcm2836_init(Object *obj)
                       TYPE_BCM2835_PERIPHERALS);
     object_property_add_child(obj, "peripherals", OBJECT(&s->peripherals),
                               &error_abort);
+    object_property_add_alias(obj, "board-rev", OBJECT(&s->peripherals),
+                              "board-rev", &error_abort);
     qdev_set_parent_bus(DEVICE(&s->peripherals), sysbus_get_default());
 }
 
index 0c9427c40ec44e710a16f9968c2f9d735c0e1e13..7d3d21ab32442a6b39baae086b865ca95101c3ac 100644 (file)
@@ -128,6 +128,8 @@ static void raspi2_init(MachineState *machine)
                                    &error_abort);
     object_property_set_int(OBJECT(&s->soc), smp_cpus, "enabled-cpus",
                             &error_abort);
+    object_property_set_int(OBJECT(&s->soc), 0xa21041, "board-rev",
+                            &error_abort);
     object_property_set_bool(OBJECT(&s->soc), true, "realized", &error_abort);
 
     setup_boot(machine, 2, machine->ram_size);
index e42b43e72d567e57fe66b0b9fc38a3498b30beac..45bd6c18ce90595e4132c1d4447a1aae76bfe31a 100644 (file)
@@ -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()
 };
index fcf5f3decafcb8de0e6cccb38b9b08e9044267bf..df889eaa08b54b5fc787059e8beb65c241ead61e 100644 (file)
@@ -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;
This page took 0.032456 seconds and 4 git commands to generate.