qemu-arm
[Top][All Lists]
Advanced

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

Re: [Qemu-arm] [PATCH v2 1/2] arm: Stub out NRF51 TWI magnetometer/accel


From: Peter Maydell
Subject: Re: [Qemu-arm] [PATCH v2 1/2] arm: Stub out NRF51 TWI magnetometer/accelerometer detection
Date: Fri, 18 Jan 2019 13:57:44 +0000

On Thu, 10 Jan 2019 at 09:40, Stefan Hajnoczi <address@hidden> wrote:
>
> From: Steffen Görtz <address@hidden>
>
> Recent microbit firmwares panic if the TWI magnetometer/accelerometer
> devices are not detected during startup.  We don't implement TWI (I2C)
> so let's stub out these devices just to let the firmware boot.
>

> --- a/hw/arm/microbit.c
> +++ b/hw/arm/microbit.c
> @@ -16,11 +16,13 @@
>  #include "exec/address-spaces.h"
>
>  #include "hw/arm/nrf51_soc.h"
> +#include "hw/i2c/microbit_i2c.h"
>
>  typedef struct {
>      MachineState parent;
>
>      NRF51State nrf51;
> +    MicrobitI2CState i2c;
>  } MicrobitMachineState;
>
>  #define TYPE_MICROBIT_MACHINE MACHINE_TYPE_NAME("microbit")
> @@ -32,7 +34,9 @@ static void microbit_init(MachineState *machine)
>  {
>      MicrobitMachineState *s = MICROBIT_MACHINE(machine);
>      MemoryRegion *system_memory = get_system_memory();
> +    MemoryRegion *mr;
>      Object *soc = OBJECT(&s->nrf51);
> +    Object *i2c = OBJECT(&s->i2c);
>
>      sysbus_init_child_obj(OBJECT(machine), "nrf51", soc, sizeof(s->nrf51),
>                            TYPE_NRF51_SOC);
> @@ -41,6 +45,17 @@ static void microbit_init(MachineState *machine)
>                               &error_fatal);
>      object_property_set_bool(soc, true, "realized", &error_fatal);
>
> +    /* Overlap the TWI stub device into the SoC.  This is a microbit-specific
> +     * hack until we implement the nRF51 TWI controller properly and the
> +     * magnetometer/accelerometer devices.
> +     */
> +    sysbus_init_child_obj(OBJECT(machine), "microbit.twi", i2c,
> +                          sizeof(s->i2c), TYPE_MICROBIT_I2C);
> +    object_property_set_bool(i2c, true, "realized", &error_fatal);
> +    mr = sysbus_mmio_get_region(SYS_BUS_DEVICE(i2c), 0);
> +    memory_region_add_subregion_overlap(&s->nrf51.container, NRF51_TWI_BASE,
> +                                        mr, -1);

This is an SoC device, right? Why are we creating it here
in the board code rather than in the SoC object's code ?

thanks
-- PMM



reply via email to

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