"devices" On Sat, Apr 25, 2015 at 1:19 AM, Alistair Francis <alistai...@gmail.com> wrote: > Connect the SPI device to the STM32F205 SoC. >
"devices". Curious. Are you attaching the SPI slaves on the command line using -device? Otherwise: Reviewed-by: Peter Crosthwaite <peter.crosthwa...@xilinx.com> Regards, Peter > Signed-off-by: Alistair Francis <alist...@alistair23.me> > --- > > hw/arm/stm32f205_soc.c | 22 ++++++++++++++++++++++ > include/hw/arm/stm32f205_soc.h | 3 +++ > 2 files changed, 25 insertions(+) > > diff --git a/hw/arm/stm32f205_soc.c b/hw/arm/stm32f205_soc.c > index 641ecbb..cb8884f 100644 > --- a/hw/arm/stm32f205_soc.c > +++ b/hw/arm/stm32f205_soc.c > @@ -33,10 +33,13 @@ static const uint32_t usart_addr[STM_NUM_USARTS] = { > 0x40011000, 0x40004400, > 0x40004800, 0x40004C00, 0x40005000, 0x40011400 }; > static const uint32_t adc_addr[STM_NUM_ADCS] = { 0x40012000, 0x40012100, > 0x40012200 }; > +static const uint32_t spi_addr[STM_NUM_SPIS] = { 0x40013000, 0x40003800, > + 0x40003C00 }; > > static const int timer_irq[STM_NUM_TIMERS] = {28, 29, 30, 50}; > static const int usart_irq[STM_NUM_USARTS] = {37, 38, 39, 52, 53, 71}; > #define ADC_IRQ 18 > +static const int spi_irq[STM_NUM_SPIS] = {35, 36, 51}; > > static void stm32f205_soc_initfn(Object *obj) > { > @@ -63,6 +66,12 @@ static void stm32f205_soc_initfn(Object *obj) > TYPE_STM32F2XX_ADC); > qdev_set_parent_bus(DEVICE(&s->adc[i]), sysbus_get_default()); > } > + > + for (i = 0; i < STM_NUM_SPIS; i++) { > + object_initialize(&s->spi[i], sizeof(s->spi[i]), > + TYPE_STM32F2XX_SPI); > + qdev_set_parent_bus(DEVICE(&s->spi[i]), sysbus_get_default()); > + } > } > > static void stm32f205_soc_realize(DeviceState *dev_soc, Error **errp) > @@ -150,6 +159,19 @@ static void stm32f205_soc_realize(DeviceState *dev_soc, > Error **errp) > sysbus_mmio_map(busdev, 0, adc_addr[i]); > sysbus_connect_irq(busdev, 0, pic[ADC_IRQ]); > } > + > + /* SPI 1 and 2 */ > + for (i = 0; i < STM_NUM_SPIS; i++) { > + dev = DEVICE(&(s->spi[i])); > + object_property_set_bool(OBJECT(&s->spi[i]), true, "realized", &err); > + if (err != NULL) { > + error_propagate(errp, err); > + return; > + } > + busdev = SYS_BUS_DEVICE(dev); > + sysbus_mmio_map(busdev, 0, spi_addr[i]); > + sysbus_connect_irq(busdev, 0, pic[spi_irq[i]]); > + } > } > > static Property stm32f205_soc_properties[] = { > diff --git a/include/hw/arm/stm32f205_soc.h b/include/hw/arm/stm32f205_soc.h > index 7d6603b..00c2f3d 100644 > --- a/include/hw/arm/stm32f205_soc.h > +++ b/include/hw/arm/stm32f205_soc.h > @@ -29,6 +29,7 @@ > #include "hw/timer/stm32f2xx_timer.h" > #include "hw/char/stm32f2xx_usart.h" > #include "hw/misc/stm32f2xx_adc.h" > +#include "hw/ssi/stm32f2xx_spi.h" > > #define TYPE_STM32F205_SOC "stm32f205-soc" > #define STM32F205_SOC(obj) \ > @@ -37,6 +38,7 @@ > #define STM_NUM_USARTS 6 > #define STM_NUM_TIMERS 4 > #define STM_NUM_ADCS 3 > +#define STM_NUM_SPIS 3 > > #define FLASH_BASE_ADDRESS 0x08000000 > #define FLASH_SIZE (1024 * 1024) > @@ -55,6 +57,7 @@ typedef struct STM32F205State { > STM32F2XXUsartState usart[STM_NUM_USARTS]; > STM32F2XXTimerState timer[STM_NUM_TIMERS]; > STM32F2XXAdcState adc[STM_NUM_ADCS]; > + STM32F2XXSpiState spi[STM_NUM_SPIS]; > } STM32F205State; > > #endif > -- > 2.1.4 > >