It is sometime useful to verify a device chip select polarity on a SPI bus. Since we have this information available, display it in the 'info qtree' monitor output:
$ qemu-system-arm -M lm3s6965evb -monitor stdio -S (qemu) info qtree [...] dev: pl022, id "" gpio-out "sysbus-irq" 1 mmio 0000000040008000/0000000000001000 bus: ssi type SSI dev: ssd0323, id "" gpio-in "" 1 gpio-in "ssi-gpio-cs" 1 chip select polarity: high <--- dev: ssi-sd, id "" gpio-in "ssi-gpio-cs" 1 chip select polarity: low <--- bus: sd-bus type sd-bus dev: sd-card, id "" spec_version = 2 (0x2) drive = "sd0" spi = true Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org> --- hw/ssi/ssi.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/hw/ssi/ssi.c b/hw/ssi/ssi.c index 4278d0e4440..4c9f8d66d23 100644 --- a/hw/ssi/ssi.c +++ b/hw/ssi/ssi.c @@ -17,6 +17,7 @@ #include "migration/vmstate.h" #include "qemu/module.h" #include "qapi/error.h" +#include "monitor/monitor.h" #include "qom/object.h" struct SSIBus { @@ -26,10 +27,31 @@ struct SSIBus { #define TYPE_SSI_BUS "SSI" OBJECT_DECLARE_SIMPLE_TYPE(SSIBus, SSI_BUS) +static void ssi_print_dev(Monitor *mon, DeviceState *dev, int indent) +{ + static const char *const polarity_s[] = { + [SSI_CS_NONE] = "unknown", + [SSI_CS_LOW] = "low", + [SSI_CS_HIGH] = "high" + }; + SSISlaveClass *ssc = SSI_SLAVE_GET_CLASS(dev); + + monitor_printf(mon, "%*schip select polarity: %s\n", + indent, "", polarity_s[ssc->cs_polarity]); +} + +static void ssi_bus_class_init(ObjectClass *klass, void *data) +{ + BusClass *k = BUS_CLASS(klass); + + k->print_dev = ssi_print_dev; +} + static const TypeInfo ssi_bus_info = { .name = TYPE_SSI_BUS, .parent = TYPE_BUS, .instance_size = sizeof(SSIBus), + .class_init = ssi_bus_class_init, }; static void ssi_cs_default(void *opaque, int n, int level) -- 2.26.2