[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(),
>> };
>>
>
- [Qemu-arm] [PATCH 01/11] armv7m: Abstract out the "load kernel" code, (continued)
- [Qemu-arm] [PATCH 01/11] armv7m: Abstract out the "load kernel" code, Peter Maydell, 2017/02/20
- [Qemu-arm] [PATCH 11/11] stm32f205: Rename 'nvic' local to 'armv7m', Peter Maydell, 2017/02/20
- [Qemu-arm] [PATCH 10/11] stm32f205: Create armv7m object without using armv7m_init(), Peter Maydell, 2017/02/20
- [Qemu-arm] [PATCH 07/11] armv7m: Make bitband device take the address space to access, Peter Maydell, 2017/02/20
- [Qemu-arm] [PATCH 08/11] armv7m: Don't put core v7M devices under CONFIG_STELLARIS, Peter Maydell, 2017/02/20
- [Qemu-arm] [PATCH 06/11] armv7m: Make NVIC expose a memory region rather than mapping itself, Peter Maydell, 2017/02/20
- [Qemu-arm] [PATCH 09/11] armv7m: Split systick out from NVIC, Peter Maydell, 2017/02/20