qemu-arm
[Top][All Lists]
Advanced

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

Re: [Qemu-arm] [PATCH 10/11] stm32f205: Create armv7m object without usi


From: Alistair Francis
Subject: Re: [Qemu-arm] [PATCH 10/11] stm32f205: Create armv7m object without using armv7m_init()
Date: Tue, 21 Feb 2017 03:32:09 -0800

On Mon, Feb 20, 2017 at 9:45 AM, Philippe Mathieu-Daudé <address@hidden> wrote:
> On 02/20/2017 12:36 PM, Peter Maydell wrote:
>>
>> Switch the stm32f205 SoC to create the armv7m object directly
>> rather than via the armv7m_init() wrapper. This fits better
>> with the SoC model's very QOMified design.
>>
>> In particular this means we can push loading the guest image
>> out to the top level board code where it belongs, rather
>> than the SoC object having a QOM property for the filename
>> to load.
>>
>> Signed-off-by: Peter Maydell <address@hidden>
>
>
> Reviewed-by: Philippe Mathieu-Daudé <address@hidden>

Reviewed-by: Alistair Francis <address@hidden>

Thanks,

Alistair

>
>
>> ---
>>  include/hw/arm/stm32f205_soc.h |  4 +++-
>>  hw/arm/netduino2.c             |  7 ++++---
>>  hw/arm/stm32f205_soc.c         | 16 +++++++++++++---
>>  3 files changed, 20 insertions(+), 7 deletions(-)
>>
>> diff --git a/include/hw/arm/stm32f205_soc.h
>> b/include/hw/arm/stm32f205_soc.h
>> index 1332141..e2dce11 100644
>> --- a/include/hw/arm/stm32f205_soc.h
>> +++ b/include/hw/arm/stm32f205_soc.h
>> @@ -31,6 +31,7 @@
>>  #include "hw/adc/stm32f2xx_adc.h"
>>  #include "hw/or-irq.h"
>>  #include "hw/ssi/stm32f2xx_spi.h"
>> +#include "hw/arm/armv7m.h"
>>
>>  #define TYPE_STM32F205_SOC "stm32f205-soc"
>>  #define STM32F205_SOC(obj) \
>> @@ -51,9 +52,10 @@ typedef struct STM32F205State {
>>      SysBusDevice parent_obj;
>>      /*< public >*/
>>
>> -    char *kernel_filename;
>>      char *cpu_model;
>>
>> +    ARMv7MState armv7m;
>> +
>>      STM32F2XXSyscfgState syscfg;
>>      STM32F2XXUsartState usart[STM_NUM_USARTS];
>>      STM32F2XXTimerState timer[STM_NUM_TIMERS];
>> diff --git a/hw/arm/netduino2.c b/hw/arm/netduino2.c
>> index 23d7928..3cfe332 100644
>> --- a/hw/arm/netduino2.c
>> +++ b/hw/arm/netduino2.c
>> @@ -27,17 +27,18 @@
>>  #include "hw/boards.h"
>>  #include "qemu/error-report.h"
>>  #include "hw/arm/stm32f205_soc.h"
>> +#include "hw/arm/arm.h"
>>
>>  static void netduino2_init(MachineState *machine)
>>  {
>>      DeviceState *dev;
>>
>>      dev = qdev_create(NULL, TYPE_STM32F205_SOC);
>> -    if (machine->kernel_filename) {
>> -        qdev_prop_set_string(dev, "kernel-filename",
>> machine->kernel_filename);
>> -    }
>>      qdev_prop_set_string(dev, "cpu-model", "cortex-m3");
>>      object_property_set_bool(OBJECT(dev), true, "realized",
>> &error_fatal);
>> +
>> +    armv7m_load_kernel(ARM_CPU(first_cpu), machine->kernel_filename,
>> +                       FLASH_SIZE);
>>  }
>>
>>  static void netduino2_machine_init(MachineClass *mc)
>> diff --git a/hw/arm/stm32f205_soc.c b/hw/arm/stm32f205_soc.c
>> index 38425bd..e6bd73a 100644
>> --- a/hw/arm/stm32f205_soc.c
>> +++ b/hw/arm/stm32f205_soc.c
>> @@ -49,6 +49,9 @@ static void stm32f205_soc_initfn(Object *obj)
>>      STM32F205State *s = STM32F205_SOC(obj);
>>      int i;
>>
>> +    object_initialize(&s->armv7m, sizeof(s->armv7m), TYPE_ARMV7M);
>> +    qdev_set_parent_bus(DEVICE(&s->armv7m), sysbus_get_default());
>> +
>>      object_initialize(&s->syscfg, sizeof(s->syscfg),
>> TYPE_STM32F2XX_SYSCFG);
>>      qdev_set_parent_bus(DEVICE(&s->syscfg), sysbus_get_default());
>>
>> @@ -110,8 +113,16 @@ static void stm32f205_soc_realize(DeviceState
>> *dev_soc, Error **errp)
>>      vmstate_register_ram_global(sram);
>>      memory_region_add_subregion(system_memory, SRAM_BASE_ADDRESS, sram);
>>
>> -    nvic = armv7m_init(get_system_memory(), FLASH_SIZE, 96,
>> -                       s->kernel_filename, s->cpu_model);
>> +    nvic = DEVICE(&s->armv7m);
>> +    qdev_prop_set_uint32(nvic, "num-irq", 96);
>> +    qdev_prop_set_string(nvic, "cpu-model", s->cpu_model);
>> +    object_property_set_link(OBJECT(&s->armv7m),
>> OBJECT(get_system_memory()),
>> +                                     "memory", &error_abort);
>> +    object_property_set_bool(OBJECT(&s->armv7m), true, "realized", &err);
>> +    if (err != NULL) {
>> +        error_propagate(errp, err);
>> +        return;
>> +    }
>>
>>      /* System configuration controller */
>>      dev = DEVICE(&s->syscfg);
>> @@ -192,7 +203,6 @@ static void stm32f205_soc_realize(DeviceState
>> *dev_soc, Error **errp)
>>  }
>>
>>  static Property stm32f205_soc_properties[] = {
>> -    DEFINE_PROP_STRING("kernel-filename", STM32F205State,
>> kernel_filename),
>>      DEFINE_PROP_STRING("cpu-model", STM32F205State, cpu_model),
>>      DEFINE_PROP_END_OF_LIST(),
>>  };
>>
>



reply via email to

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