On Sun, Sep 6, 2015 at 1:46 PM, Jean-Christophe Dubois <j...@tribudubois.net> wrote: > Signed-off-by: Jean-Christophe Dubois <j...@tribudubois.net> > Reviewed-by: Peter Crosthwaite <crosthwaite.pe...@gmail.com> > --- > > Changes since v1: > * various coding style cleanup > > hw/arm/fsl-imx25.c | 29 +++++++++++++++++++++++++++++ > include/hw/arm/fsl-imx25.h | 15 +++++++++++++++ > 2 files changed, 44 insertions(+) > > diff --git a/hw/arm/fsl-imx25.c b/hw/arm/fsl-imx25.c > index 6d157c9..86fde42 100644 > --- a/hw/arm/fsl-imx25.c > +++ b/hw/arm/fsl-imx25.c > @@ -63,6 +63,11 @@ static void fsl_imx25_init(Object *obj) > object_initialize(&s->i2c[i], sizeof(s->i2c[i]), TYPE_IMX_I2C); > qdev_set_parent_bus(DEVICE(&s->i2c[i]), sysbus_get_default()); > } > + > + for (i = 0; i < FSL_IMX25_NUM_GPIOS; i++) { > + object_initialize(&s->gpio[i], sizeof(s->gpio[i]), TYPE_IMX_GPIO); > + qdev_set_parent_bus(DEVICE(&s->gpio[i]), sysbus_get_default()); > + } > } > > static void fsl_imx25_realize(DeviceState *dev, Error **errp) > @@ -214,6 +219,30 @@ static void fsl_imx25_realize(DeviceState *dev, Error > **errp) > i2c_table[i].irq)); > } > > + /* Initialize all GPIOs */ > + for (i = 0; i < FSL_IMX25_NUM_GPIOS; i++) { > + static const struct { > + hwaddr addr; > + unsigned int irq; > + } gpio_table[FSL_IMX25_NUM_GPIOS] = { > + { FSL_IMX25_GPIO1_ADDR, FSL_IMX25_GPIO1_IRQ }, > + { FSL_IMX25_GPIO2_ADDR, FSL_IMX25_GPIO2_IRQ }, > + { FSL_IMX25_GPIO3_ADDR, FSL_IMX25_GPIO3_IRQ }, > + { FSL_IMX25_GPIO4_ADDR, FSL_IMX25_GPIO4_IRQ } > + }; > + > + object_property_set_bool(OBJECT(&s->gpio[i]), true, "realized", > &err); > + if (err) { > + error_propagate(errp, err); > + return; > + }
Same. Feel free to rely on the default value (prop should be false) in one case of the other, but being explicit in both machine models is OK as well. Regards, Peter > + sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpio[i]), 0, gpio_table[i].addr); > + /* Connect GPIO IRQ to PIC */ > + sysbus_connect_irq(SYS_BUS_DEVICE(&s->gpio[i]), 0, > + qdev_get_gpio_in(DEVICE(&s->avic), > + gpio_table[i].irq)); > + } > + > /* initialize 2 x 16 KB ROM */ > memory_region_init_rom_device(&s->rom[0], NULL, NULL, NULL, > "imx25.rom0", FSL_IMX25_ROM0_SIZE, &err); > diff --git a/include/hw/arm/fsl-imx25.h b/include/hw/arm/fsl-imx25.h > index 7f6bb64..73f50c6 100644 > --- a/include/hw/arm/fsl-imx25.h > +++ b/include/hw/arm/fsl-imx25.h > @@ -25,6 +25,7 @@ > #include "hw/timer/imx_epit.h" > #include "hw/net/imx_fec.h" > #include "hw/i2c/imx_i2c.h" > +#include "hw/gpio/imx_gpio.h" > #include "exec/memory.h" > > #define TYPE_FSL_IMX25 "fsl,imx25" > @@ -34,6 +35,7 @@ > #define FSL_IMX25_NUM_GPTS 4 > #define FSL_IMX25_NUM_EPITS 2 > #define FSL_IMX25_NUM_I2CS 3 > +#define FSL_IMX25_NUM_GPIOS 4 > > typedef struct FslIMX25State { > /*< private >*/ > @@ -48,6 +50,7 @@ typedef struct FslIMX25State { > IMXEPITState epit[FSL_IMX25_NUM_EPITS]; > IMXFECState fec; > IMXI2CState i2c[FSL_IMX25_NUM_I2CS]; > + IMXGPIOState gpio[FSL_IMX25_NUM_GPIOS]; > MemoryRegion rom[2]; > MemoryRegion iram; > MemoryRegion iram_alias; > @@ -204,6 +207,14 @@ typedef struct FslIMX25State { > #define FSL_IMX25_EPIT1_SIZE 0x4000 > #define FSL_IMX25_EPIT2_ADDR 0x53F98000 > #define FSL_IMX25_EPIT2_SIZE 0x4000 > +#define FSL_IMX25_GPIO4_ADDR 0x53F9C000 > +#define FSL_IMX25_GPIO4_SIZE 0x4000 > +#define FSL_IMX25_GPIO3_ADDR 0x53FA4000 > +#define FSL_IMX25_GPIO3_SIZE 0x4000 > +#define FSL_IMX25_GPIO1_ADDR 0x53FCC000 > +#define FSL_IMX25_GPIO1_SIZE 0x4000 > +#define FSL_IMX25_GPIO2_ADDR 0x53FD0000 > +#define FSL_IMX25_GPIO2_SIZE 0x4000 > #define FSL_IMX25_AVIC_ADDR 0x68000000 > #define FSL_IMX25_AVIC_SIZE 0x4000 > #define FSL_IMX25_IRAM_ADDR 0x78000000 > @@ -230,5 +241,9 @@ typedef struct FslIMX25State { > #define FSL_IMX25_I2C1_IRQ 3 > #define FSL_IMX25_I2C2_IRQ 4 > #define FSL_IMX25_I2C3_IRQ 10 > +#define FSL_IMX25_GPIO1_IRQ 52 > +#define FSL_IMX25_GPIO2_IRQ 51 > +#define FSL_IMX25_GPIO3_IRQ 16 > +#define FSL_IMX25_GPIO4_IRQ 23 > > #endif /* FSL_IMX25_H */ > -- > 2.1.4 >