[RFC PATCH v7 6/7] vmapple, gicv2m: add macOS compat quirk

Mohamed Mediouni posted 7 patches 1 week, 2 days ago
Maintainers: Roman Bolshakov <rbolshakov@ddn.com>, Phil Dennis-Jordan <phil@philjordan.eu>, Peter Maydell <peter.maydell@linaro.org>, Alexander Graf <agraf@csgraf.de>
[RFC PATCH v7 6/7] vmapple, gicv2m: add macOS compat quirk
Posted by Mohamed Mediouni 1 week, 2 days ago
macOS expects bit 31 of MSI_TYPER to be set.

Signed-off-by: Mohamed Mediouni <mohamed@unpredictable.fr>
---
 hw/intc/arm_gicv2m.c | 5 +++++
 hw/vmapple/vmapple.c | 1 +
 2 files changed, 6 insertions(+)

diff --git a/hw/intc/arm_gicv2m.c b/hw/intc/arm_gicv2m.c
index b343e17ca5..ead1d9d079 100644
--- a/hw/intc/arm_gicv2m.c
+++ b/hw/intc/arm_gicv2m.c
@@ -57,6 +57,7 @@ struct ARMGICv2mState {
 
     uint32_t base_spi;
     uint32_t num_spi;
+    uint32_t macos_compat;
 };
 
 static void gicv2m_set_irq(void *opaque, int irq)
@@ -81,6 +82,9 @@ static uint64_t gicv2m_read(void *opaque, hwaddr offset,
     case V2M_MSI_TYPER:
         val = (s->base_spi + 32) << 16;
         val |= s->num_spi;
+        if (s->macos_compat) {
+            val |= BIT(31);
+        }
         return val;
     case V2M_MSI_IIDR:
         /* We don't have any valid implementor so we leave that field as zero
@@ -173,6 +177,7 @@ static void gicv2m_init(Object *obj)
 static const Property gicv2m_properties[] = {
     DEFINE_PROP_UINT32("base-spi", ARMGICv2mState, base_spi, 0),
     DEFINE_PROP_UINT32("num-spi", ARMGICv2mState, num_spi, 64),
+    DEFINE_PROP_UINT32("macos-compat", ARMGICv2mState, macos_compat, 0),
 };
 
 static void gicv2m_class_init(ObjectClass *klass, const void *data)
diff --git a/hw/vmapple/vmapple.c b/hw/vmapple/vmapple.c
index f2a6fda2e5..e68b623c5b 100644
--- a/hw/vmapple/vmapple.c
+++ b/hw/vmapple/vmapple.c
@@ -301,6 +301,7 @@ static void create_gicv2m(VMAppleMachineState *vms)
     dev = qdev_new("arm-gicv2m");
     qdev_prop_set_uint32(dev, "base-spi", irq);
     qdev_prop_set_uint32(dev, "num-spi", NUM_GICV2M_SPIS);
+    qdev_prop_set_uint32(dev, "macos-compat", 1);
     sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
     sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, vms->memmap[VMAPPLE_GICV2M].base);
 
-- 
2.50.1 (Apple Git-155)
Re: [RFC PATCH v7 6/7] vmapple, gicv2m: add macOS compat quirk
Posted by Philippe Mathieu-Daudé 1 week, 1 day ago
On 24/3/26 21:48, Mohamed Mediouni wrote:
> macOS expects bit 31 of MSI_TYPER to be set.
> 
> Signed-off-by: Mohamed Mediouni <mohamed@unpredictable.fr>
> ---
>   hw/intc/arm_gicv2m.c | 5 +++++
>   hw/vmapple/vmapple.c | 1 +
>   2 files changed, 6 insertions(+)


>   static void gicv2m_set_irq(void *opaque, int irq)
> @@ -81,6 +82,9 @@ static uint64_t gicv2m_read(void *opaque, hwaddr offset,
>       case V2M_MSI_TYPER:
>           val = (s->base_spi + 32) << 16;
>           val |= s->num_spi;
> +        if (s->macos_compat) {
> +            val |= BIT(31);
> +        }
>           return val;
>       case V2M_MSI_IIDR:
>           /* We don't have any valid implementor so we leave that field as zero
> @@ -173,6 +177,7 @@ static void gicv2m_init(Object *obj)
>   static const Property gicv2m_properties[] = {
>       DEFINE_PROP_UINT32("base-spi", ARMGICv2mState, base_spi, 0),
>       DEFINE_PROP_UINT32("num-spi", ARMGICv2mState, num_spi, 64),
> +    DEFINE_PROP_UINT32("macos-compat", ARMGICv2mState, macos_compat, 0),

DEFINE_PROP_BOOL("x-macos-compat")?

>   };