From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38157) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bDIJf-0006MN-SY for qemu-devel@nongnu.org; Wed, 15 Jun 2016 17:25:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bDIJb-0002g6-Aq for qemu-devel@nongnu.org; Wed, 15 Jun 2016 17:25:39 -0400 References: <1466025380-6186-1-git-send-email-clg@kaod.org> From: Paolo Bonzini Message-ID: Date: Wed, 15 Jun 2016 23:25:10 +0200 MIME-Version: 1.0 In-Reply-To: <1466025380-6186-1-git-send-email-clg@kaod.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v2] ssi: change ssi_slave_init to be a realize ops List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?UTF-8?Q?C=c3=a9dric_Le_Goater?= , Peter Crosthwaite Cc: Kevin Wolf , Max Reitz , qemu-block@nongnu.org, Peter Maydell , Andrzej Zaborowski , qemu-arm@nongnu.org, qemu-devel@nongnu.org, Marcin Krzeminski On 15/06/2016 23:16, C=C3=A9dric Le Goater wrote: > This enables qemu to handle late inits and report errors. All the SSI > slave routine names were changed accordingly. Code was modified to > handle errors when possible (m25p80 and ssi-sd) >=20 > Tested with the m25p80 slave object. >=20 > Suggested-by: Paolo Bonzini > Signed-off-by: C=C3=A9dric Le Goater > --- >=20 > Should apply on top of : > =20 > m25p80: fix test on blk_pread() return value > https://lists.gnu.org/archive/html/qemu-devel/2016-05/msg05574.html >=20 > Changes since v1 : >=20 > - added a error_setg() report in ssi_sd_realize() >=20 > hw/arm/spitz.c | 12 ++++-------- > hw/arm/tosa.c | 5 ++--- > hw/arm/z2.c | 6 ++---- > hw/block/m25p80.c | 12 +++++------- > hw/display/ads7846.c | 5 ++--- > hw/display/ssd0323.c | 5 ++--- > hw/misc/max111x.c | 12 ++++++------ > hw/sd/ssi-sd.c | 9 +++++---- > hw/ssi/ssi.c | 6 +++--- > include/hw/ssi/ssi.h | 2 +- > 10 files changed, 32 insertions(+), 42 deletions(-) >=20 > Index: qemu-ast2400-mainline.git/hw/arm/spitz.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- qemu-ast2400-mainline.git.orig/hw/arm/spitz.c > +++ qemu-ast2400-mainline.git/hw/arm/spitz.c > @@ -598,15 +598,13 @@ static uint32_t spitz_lcdtg_transfer(SSI > return 0; > } > =20 > -static int spitz_lcdtg_init(SSISlave *dev) > +static void spitz_lcdtg_realize(SSISlave *dev, Error **errp) > { > SpitzLCDTG *s =3D FROM_SSI_SLAVE(SpitzLCDTG, dev); > =20 > spitz_lcdtg =3D s; > s->bl_power =3D 0; > s->bl_intensity =3D 0x20; > - > - return 0; > } > =20 > /* SSP devices */ > @@ -666,7 +664,7 @@ static void spitz_adc_temp_on(void *opaq > max111x_set_input(max1111, MAX1111_BATT_TEMP, 0); > } > =20 > -static int corgi_ssp_init(SSISlave *d) > +static void corgi_ssp_realize(SSISlave *d, Error **errp) > { > DeviceState *dev =3D DEVICE(d); > CorgiSSPState *s =3D FROM_SSI_SLAVE(CorgiSSPState, d); > @@ -675,8 +673,6 @@ static int corgi_ssp_init(SSISlave *d) > s->bus[0] =3D ssi_create_bus(dev, "ssi0"); > s->bus[1] =3D ssi_create_bus(dev, "ssi1"); > s->bus[2] =3D ssi_create_bus(dev, "ssi2"); > - > - return 0; > } > =20 > static void spitz_ssp_attach(PXA2xxState *cpu) > @@ -1121,7 +1117,7 @@ static void corgi_ssp_class_init(ObjectC > DeviceClass *dc =3D DEVICE_CLASS(klass); > SSISlaveClass *k =3D SSI_SLAVE_CLASS(klass); > =20 > - k->init =3D corgi_ssp_init; > + k->realize =3D corgi_ssp_realize; > k->transfer =3D corgi_ssp_transfer; > dc->vmsd =3D &vmstate_corgi_ssp_regs; > } > @@ -1150,7 +1146,7 @@ static void spitz_lcdtg_class_init(Objec > DeviceClass *dc =3D DEVICE_CLASS(klass); > SSISlaveClass *k =3D SSI_SLAVE_CLASS(klass); > =20 > - k->init =3D spitz_lcdtg_init; > + k->realize =3D spitz_lcdtg_realize; > k->transfer =3D spitz_lcdtg_transfer; > dc->vmsd =3D &vmstate_spitz_lcdtg_regs; > } > Index: qemu-ast2400-mainline.git/hw/arm/tosa.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- qemu-ast2400-mainline.git.orig/hw/arm/tosa.c > +++ qemu-ast2400-mainline.git/hw/arm/tosa.c > @@ -127,10 +127,9 @@ static uint32_t tosa_ssp_tansfer(SSISlav > return 0; > } > =20 > -static int tosa_ssp_init(SSISlave *dev) > +static void tosa_ssp_realize(SSISlave *dev, Error **errp) > { > /* Nothing to do. */ > - return 0; > } > =20 > #define TYPE_TOSA_DAC "tosa_dac" > @@ -283,7 +282,7 @@ static void tosa_ssp_class_init(ObjectCl > { > SSISlaveClass *k =3D SSI_SLAVE_CLASS(klass); > =20 > - k->init =3D tosa_ssp_init; > + k->realize =3D tosa_ssp_realize; > k->transfer =3D tosa_ssp_tansfer; > } > =20 > Index: qemu-ast2400-mainline.git/hw/arm/z2.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- qemu-ast2400-mainline.git.orig/hw/arm/z2.c > +++ qemu-ast2400-mainline.git/hw/arm/z2.c > @@ -151,14 +151,12 @@ static void z2_lcd_cs(void *opaque, int > z2_lcd->selected =3D !level; > } > =20 > -static int zipit_lcd_init(SSISlave *dev) > +static void zipit_lcd_realize(SSISlave *dev, Error **errp) > { > ZipitLCD *z =3D FROM_SSI_SLAVE(ZipitLCD, dev); > z->selected =3D 0; > z->enabled =3D 0; > z->pos =3D 0; > - > - return 0; > } > =20 > static VMStateDescription vmstate_zipit_lcd_state =3D { > @@ -181,7 +179,7 @@ static void zipit_lcd_class_init(ObjectC > DeviceClass *dc =3D DEVICE_CLASS(klass); > SSISlaveClass *k =3D SSI_SLAVE_CLASS(klass); > =20 > - k->init =3D zipit_lcd_init; > + k->realize =3D zipit_lcd_realize; > k->transfer =3D zipit_lcd_transfer; > dc->vmsd =3D &vmstate_zipit_lcd_state; > } > Index: qemu-ast2400-mainline.git/hw/block/m25p80.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- qemu-ast2400-mainline.git.orig/hw/block/m25p80.c > +++ qemu-ast2400-mainline.git/hw/block/m25p80.c > @@ -28,6 +28,7 @@ > #include "hw/ssi/ssi.h" > #include "qemu/bitops.h" > #include "qemu/log.h" > +#include "qapi/error.h" > =20 > #ifndef M25P80_ERR_DEBUG > #define M25P80_ERR_DEBUG 0 > @@ -878,7 +879,7 @@ static uint32_t m25p80_transfer8(SSISlav > return r; > } > =20 > -static int m25p80_init(SSISlave *ss) > +static void m25p80_realize(SSISlave *ss, Error **errp) > { > DriveInfo *dinfo; > Flash *s =3D M25P80(ss); > @@ -899,18 +900,15 @@ static int m25p80_init(SSISlave *ss) > =20 > s->storage =3D blk_blockalign(s->blk, s->size); > =20 > - /* FIXME: Move to late init */ > if (blk_pread(s->blk, 0, s->storage, s->size) !=3D s->size) { > - fprintf(stderr, "Failed to initialize SPI flash!\n"); > - return 1; > + error_setg(errp, "failed to read the initial flash content= "); > + return; > } > } else { > DB_PRINT_L(0, "No BDRV - binding to RAM\n"); > s->storage =3D blk_blockalign(NULL, s->size); > memset(s->storage, 0xFF, s->size); > } > - > - return 0; > } > =20 > static void m25p80_reset(DeviceState *d) > @@ -960,7 +958,7 @@ static void m25p80_class_init(ObjectClas > SSISlaveClass *k =3D SSI_SLAVE_CLASS(klass); > M25P80Class *mc =3D M25P80_CLASS(klass); > =20 > - k->init =3D m25p80_init; > + k->realize =3D m25p80_realize; > k->transfer =3D m25p80_transfer8; > k->set_cs =3D m25p80_cs; > k->cs_polarity =3D SSI_CS_LOW; > Index: qemu-ast2400-mainline.git/hw/display/ads7846.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- qemu-ast2400-mainline.git.orig/hw/display/ads7846.c > +++ qemu-ast2400-mainline.git/hw/display/ads7846.c > @@ -133,7 +133,7 @@ static const VMStateDescription vmstate_ > } > }; > =20 > -static int ads7846_init(SSISlave *d) > +static void ads7846_realize(SSISlave *d, Error **errp) > { > DeviceState *dev =3D DEVICE(d); > ADS7846State *s =3D FROM_SSI_SLAVE(ADS7846State, d); > @@ -152,14 +152,13 @@ static int ads7846_init(SSISlave *d) > ads7846_int_update(s); > =20 > vmstate_register(NULL, -1, &vmstate_ads7846, s); > - return 0; > } > =20 > static void ads7846_class_init(ObjectClass *klass, void *data) > { > SSISlaveClass *k =3D SSI_SLAVE_CLASS(klass); > =20 > - k->init =3D ads7846_init; > + k->realize =3D ads7846_realize; > k->transfer =3D ads7846_transfer; > } > =20 > Index: qemu-ast2400-mainline.git/hw/display/ssd0323.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- qemu-ast2400-mainline.git.orig/hw/display/ssd0323.c > +++ qemu-ast2400-mainline.git/hw/display/ssd0323.c > @@ -361,7 +361,7 @@ static const GraphicHwOps ssd0323_ops =3D > .gfx_update =3D ssd0323_update_display, > }; > =20 > -static int ssd0323_init(SSISlave *d) > +static void ssd0323_realize(SSISlave *d, Error **errp) > { > DeviceState *dev =3D DEVICE(d); > ssd0323_state *s =3D FROM_SSI_SLAVE(ssd0323_state, d); > @@ -375,14 +375,13 @@ static int ssd0323_init(SSISlave *d) > =20 > register_savevm(dev, "ssd0323_oled", -1, 1, > ssd0323_save, ssd0323_load, s); > - return 0; > } > =20 > static void ssd0323_class_init(ObjectClass *klass, void *data) > { > SSISlaveClass *k =3D SSI_SLAVE_CLASS(klass); > =20 > - k->init =3D ssd0323_init; > + k->realize =3D ssd0323_realize; > k->transfer =3D ssd0323_transfer; > k->cs_polarity =3D SSI_CS_HIGH; > } > Index: qemu-ast2400-mainline.git/hw/misc/max111x.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- qemu-ast2400-mainline.git.orig/hw/misc/max111x.c > +++ qemu-ast2400-mainline.git/hw/misc/max111x.c > @@ -147,14 +147,14 @@ static int max111x_init(SSISlave *d, int > return 0; > } > =20 > -static int max1110_init(SSISlave *dev) > +static void max1110_realize(SSISlave *dev, Error **errp) > { > - return max111x_init(dev, 8); > + max111x_init(dev, 8); > } > =20 > -static int max1111_init(SSISlave *dev) > +static void max1111_realize(SSISlave *dev, Error **errp) > { > - return max111x_init(dev, 4); > + max111x_init(dev, 4); > } > =20 > void max111x_set_input(DeviceState *dev, int line, uint8_t value) > @@ -183,7 +183,7 @@ static void max1110_class_init(ObjectCla > { > SSISlaveClass *k =3D SSI_SLAVE_CLASS(klass); > =20 > - k->init =3D max1110_init; > + k->realize =3D max1110_realize; > } > =20 > static const TypeInfo max1110_info =3D { > @@ -196,7 +196,7 @@ static void max1111_class_init(ObjectCla > { > SSISlaveClass *k =3D SSI_SLAVE_CLASS(klass); > =20 > - k->init =3D max1111_init; > + k->realize =3D max1111_realize; > } > =20 > static const TypeInfo max1111_info =3D { > Index: qemu-ast2400-mainline.git/hw/sd/ssi-sd.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- qemu-ast2400-mainline.git.orig/hw/sd/ssi-sd.c > +++ qemu-ast2400-mainline.git/hw/sd/ssi-sd.c > @@ -15,6 +15,7 @@ > #include "sysemu/blockdev.h" > #include "hw/ssi/ssi.h" > #include "hw/sd/sd.h" > +#include "qapi/error.h" > =20 > //#define DEBUG_SSI_SD 1 > =20 > @@ -249,7 +250,7 @@ static int ssi_sd_load(QEMUFile *f, void > return 0; > } > =20 > -static int ssi_sd_init(SSISlave *d) > +static void ssi_sd_realize(SSISlave *d, Error **errp) > { > DeviceState *dev =3D DEVICE(d); > ssi_sd_state *s =3D FROM_SSI_SLAVE(ssi_sd_state, d); > @@ -260,17 +261,17 @@ static int ssi_sd_init(SSISlave *d) > dinfo =3D drive_get_next(IF_SD); > s->sd =3D sd_init(dinfo ? blk_by_legacy_dinfo(dinfo) : NULL, true)= ; > if (s->sd =3D=3D NULL) { > - return -1; > + error_setg(errp, "Device initialization failed."); > + return; > } > register_savevm(dev, "ssi_sd", -1, 1, ssi_sd_save, ssi_sd_load, s)= ; > - return 0; > } > =20 > static void ssi_sd_class_init(ObjectClass *klass, void *data) > { > SSISlaveClass *k =3D SSI_SLAVE_CLASS(klass); > =20 > - k->init =3D ssi_sd_init; > + k->realize =3D ssi_sd_realize; > k->transfer =3D ssi_sd_transfer; > k->cs_polarity =3D SSI_CS_LOW; > } > Index: qemu-ast2400-mainline.git/hw/ssi/ssi.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- qemu-ast2400-mainline.git.orig/hw/ssi/ssi.c > +++ qemu-ast2400-mainline.git/hw/ssi/ssi.c > @@ -54,7 +54,7 @@ static uint32_t ssi_transfer_raw_default > return 0; > } > =20 > -static int ssi_slave_init(DeviceState *dev) > +static void ssi_slave_realize(DeviceState *dev, Error **errp) > { > SSISlave *s =3D SSI_SLAVE(dev); > SSISlaveClass *ssc =3D SSI_SLAVE_GET_CLASS(s); > @@ -64,7 +64,7 @@ static int ssi_slave_init(DeviceState *d > qdev_init_gpio_in_named(dev, ssi_cs_default, SSI_GPIO_CS, 1); > } > =20 > - return ssc->init(s); > + ssc->realize(s, errp); > } > =20 > static void ssi_slave_class_init(ObjectClass *klass, void *data) > @@ -72,7 +72,7 @@ static void ssi_slave_class_init(ObjectC > SSISlaveClass *ssc =3D SSI_SLAVE_CLASS(klass); > DeviceClass *dc =3D DEVICE_CLASS(klass); > =20 > - dc->init =3D ssi_slave_init; > + dc->realize =3D ssi_slave_realize; > dc->bus_type =3D TYPE_SSI_BUS; > if (!ssc->transfer_raw) { > ssc->transfer_raw =3D ssi_transfer_raw_default; > Index: qemu-ast2400-mainline.git/include/hw/ssi/ssi.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- qemu-ast2400-mainline.git.orig/include/hw/ssi/ssi.h > +++ qemu-ast2400-mainline.git/include/hw/ssi/ssi.h > @@ -37,7 +37,7 @@ enum SSICSMode { > struct SSISlaveClass { > DeviceClass parent_class; > =20 > - int (*init)(SSISlave *dev); > + void (*realize)(SSISlave *dev, Error **errp); > =20 > /* if you have standard or no CS behaviour, just override transfer= . > * This is called when the device cs is active (true by default). >=20 Reviewed-by: Paolo Bonzini