Message ID | 20230607043943.1837186-6-clg@kaod.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | aspeed: fixes and extensions | expand |
On Wed, 7 Jun 2023 at 04:40, Cédric Le Goater <clg@kaod.org> wrote: > > Simple routine to retrieve a DeviceState object on a SPI bus using its > address/cs. It will be useful for the board to wire the CS lines. > > Cc: Alistair Francis <alistair@alistair23.me> > Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> > Signed-off-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: Joel Stanley <joel@jms.id.au> > --- > include/hw/ssi/ssi.h | 2 ++ > hw/ssi/ssi.c | 15 +++++++++++++++ > 2 files changed, 17 insertions(+) > > diff --git a/include/hw/ssi/ssi.h b/include/hw/ssi/ssi.h > index 9e0706a5248c..01662521b09a 100644 > --- a/include/hw/ssi/ssi.h > +++ b/include/hw/ssi/ssi.h > @@ -112,4 +112,6 @@ SSIBus *ssi_create_bus(DeviceState *parent, const char *name); > > uint32_t ssi_transfer(SSIBus *bus, uint32_t val); > > +DeviceState *ssi_get_cs(SSIBus *bus, uint8_t addr); > + > #endif > diff --git a/hw/ssi/ssi.c b/hw/ssi/ssi.c > index d4409535429c..7c71fce0db90 100644 > --- a/hw/ssi/ssi.c > +++ b/hw/ssi/ssi.c > @@ -27,6 +27,21 @@ struct SSIBus { > #define TYPE_SSI_BUS "SSI" > OBJECT_DECLARE_SIMPLE_TYPE(SSIBus, SSI_BUS) > > +DeviceState *ssi_get_cs(SSIBus *bus, uint8_t addr) > +{ > + BusState *b = BUS(bus); > + BusChild *kid; > + > + QTAILQ_FOREACH(kid, &b->children, sibling) { > + SSIPeripheral *kid_ssi = SSI_PERIPHERAL(kid->child); > + if (kid_ssi->addr == addr) { > + return kid->child; > + } > + } > + > + return NULL; > +} > + > static const TypeInfo ssi_bus_info = { > .name = TYPE_SSI_BUS, > .parent = TYPE_BUS, > -- > 2.40.1 >
On 7/6/23 06:39, Cédric Le Goater wrote: > Simple routine to retrieve a DeviceState object on a SPI bus using its > address/cs. It will be useful for the board to wire the CS lines. > > Cc: Alistair Francis <alistair@alistair23.me> > Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> > Signed-off-by: Cédric Le Goater <clg@kaod.org> > --- > include/hw/ssi/ssi.h | 2 ++ > hw/ssi/ssi.c | 15 +++++++++++++++ > 2 files changed, 17 insertions(+) > > diff --git a/include/hw/ssi/ssi.h b/include/hw/ssi/ssi.h > index 9e0706a5248c..01662521b09a 100644 > --- a/include/hw/ssi/ssi.h > +++ b/include/hw/ssi/ssi.h > @@ -112,4 +112,6 @@ SSIBus *ssi_create_bus(DeviceState *parent, const char *name); > > uint32_t ssi_transfer(SSIBus *bus, uint32_t val); > > +DeviceState *ssi_get_cs(SSIBus *bus, uint8_t addr); Revisiting this patch, I now think this should be: qemu_irq ssi_get_cs(SSIBus *bus, uint8_t chipselect); > #endif > diff --git a/hw/ssi/ssi.c b/hw/ssi/ssi.c > index d4409535429c..7c71fce0db90 100644 > --- a/hw/ssi/ssi.c > +++ b/hw/ssi/ssi.c > @@ -27,6 +27,21 @@ struct SSIBus { > #define TYPE_SSI_BUS "SSI" > OBJECT_DECLARE_SIMPLE_TYPE(SSIBus, SSI_BUS) > > +DeviceState *ssi_get_cs(SSIBus *bus, uint8_t addr) > +{ > + BusState *b = BUS(bus); > + BusChild *kid; > + > + QTAILQ_FOREACH(kid, &b->children, sibling) { > + SSIPeripheral *kid_ssi = SSI_PERIPHERAL(kid->child); > + if (kid_ssi->addr == addr) { > + return kid->child; and: return qdev_get_gpio_in_named(kid->child, SSI_GPIO_CS, 0); > + } > + } > + > + return NULL; > +} > + > static const TypeInfo ssi_bus_info = { > .name = TYPE_SSI_BUS, > .parent = TYPE_BUS,
On 6/29/23 13:09, Philippe Mathieu-Daudé wrote: > On 7/6/23 06:39, Cédric Le Goater wrote: >> Simple routine to retrieve a DeviceState object on a SPI bus using its >> address/cs. It will be useful for the board to wire the CS lines. >> >> Cc: Alistair Francis <alistair@alistair23.me> >> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> >> Signed-off-by: Cédric Le Goater <clg@kaod.org> >> --- >> include/hw/ssi/ssi.h | 2 ++ >> hw/ssi/ssi.c | 15 +++++++++++++++ >> 2 files changed, 17 insertions(+) >> >> diff --git a/include/hw/ssi/ssi.h b/include/hw/ssi/ssi.h >> index 9e0706a5248c..01662521b09a 100644 >> --- a/include/hw/ssi/ssi.h >> +++ b/include/hw/ssi/ssi.h >> @@ -112,4 +112,6 @@ SSIBus *ssi_create_bus(DeviceState *parent, const char *name); >> uint32_t ssi_transfer(SSIBus *bus, uint32_t val); >> +DeviceState *ssi_get_cs(SSIBus *bus, uint8_t addr); > > Revisiting this patch, I now think this should be: > > qemu_irq ssi_get_cs(SSIBus *bus, uint8_t chipselect); The device is needed for some other use. See : [PATCH v2 10/12] aspeed: Get the BlockBackend of FMC0 from the flash device C. > > >> #endif >> diff --git a/hw/ssi/ssi.c b/hw/ssi/ssi.c >> index d4409535429c..7c71fce0db90 100644 >> --- a/hw/ssi/ssi.c >> +++ b/hw/ssi/ssi.c >> @@ -27,6 +27,21 @@ struct SSIBus { >> #define TYPE_SSI_BUS "SSI" >> OBJECT_DECLARE_SIMPLE_TYPE(SSIBus, SSI_BUS) >> +DeviceState *ssi_get_cs(SSIBus *bus, uint8_t addr) >> +{ >> + BusState *b = BUS(bus); >> + BusChild *kid; >> + >> + QTAILQ_FOREACH(kid, &b->children, sibling) { >> + SSIPeripheral *kid_ssi = SSI_PERIPHERAL(kid->child); >> + if (kid_ssi->addr == addr) { >> + return kid->child; > > and: > > return qdev_get_gpio_in_named(kid->child, > SSI_GPIO_CS, 0); > >> + } >> + } >> + >> + return NULL; >> +} >> + >> static const TypeInfo ssi_bus_info = { >> .name = TYPE_SSI_BUS, >> .parent = TYPE_BUS, >
diff --git a/include/hw/ssi/ssi.h b/include/hw/ssi/ssi.h index 9e0706a5248c..01662521b09a 100644 --- a/include/hw/ssi/ssi.h +++ b/include/hw/ssi/ssi.h @@ -112,4 +112,6 @@ SSIBus *ssi_create_bus(DeviceState *parent, const char *name); uint32_t ssi_transfer(SSIBus *bus, uint32_t val); +DeviceState *ssi_get_cs(SSIBus *bus, uint8_t addr); + #endif diff --git a/hw/ssi/ssi.c b/hw/ssi/ssi.c index d4409535429c..7c71fce0db90 100644 --- a/hw/ssi/ssi.c +++ b/hw/ssi/ssi.c @@ -27,6 +27,21 @@ struct SSIBus { #define TYPE_SSI_BUS "SSI" OBJECT_DECLARE_SIMPLE_TYPE(SSIBus, SSI_BUS) +DeviceState *ssi_get_cs(SSIBus *bus, uint8_t addr) +{ + BusState *b = BUS(bus); + BusChild *kid; + + QTAILQ_FOREACH(kid, &b->children, sibling) { + SSIPeripheral *kid_ssi = SSI_PERIPHERAL(kid->child); + if (kid_ssi->addr == addr) { + return kid->child; + } + } + + return NULL; +} + static const TypeInfo ssi_bus_info = { .name = TYPE_SSI_BUS, .parent = TYPE_BUS,