Re: [PATCH 00/29] hw/arm: improve Aspeed Catalina BMC emulation
Cédric Le Goater <[email protected]>
| Newsgroups | org.nongnu.qemu-arm,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
On 7/9/26 17:23, Emmanuel Blot wrote: > This series improves emulation of the Aspeed-based Catalina BMC machine, > mostly around its I2C buses: the GPIO expanders the board relies on and > the temperature sensors sitting next to them. > > The bulk of the work is on the PCA95xx I/O expander models. The existing > PCA9552 and PCA9554 drivers only really covered the exact parts a couple > of boards happened to use, and some of their register and pin behaviour > did not match the datasheets. Catalina needs a few more variants and > expects them to act like the real chips, so: > > - the PCA9552 driver now provides proper PCA9555/PCA9535 types, applies > input polarity inversion on reads, and handles the command register > as the datasheet describes (auto-increment and wrapping); > > - the PCA9554 driver gains the 4-bit PCA9536 variant, reflects > push-pull > outputs back into the input register, and grows an opt-in mode that > honours the configured pin direction instead of forcing pins to > outputs; > > - both drivers expose each line as a "pinN" QOM property, which lets an > external actor drive an input pin. The property also allows reading > the value driven onto an output-configured pin, which is the more > useful capability, but nothing exercises it yet. > > Along the way both models get a fair bit of cleanup (DEFINE_TYPES, the > Resettable interface, state moved out of the headers, default > descriptions derived from the instantiated type). > > On the machine itself, Catalina now instantiates its PCA9555 expanders > as their own type, gains the NIC and FIO temperature sensors present on > real hardware, and drives the pca9554 expander input pins from outside > the guest. > > Finally, the register-level behaviour of both expanders is covered by > new qtests, and the functional test that boots the OpenBMC image now > exercises the expanders end to end, both through QOM and through the > guest's gpio tooling. > > Note that the "hw/i2c: parent slaves created with > i2c_slave_create_simple" > patch is only a temporary dependency here: it already belongs to the > separate ADC128D818 series currently under review, and will be dropped > from this series before it is submitted for final review. > > Signed-off-by: Emmanuel Blot <[email protected]> > --- > Emmanuel Blot (29): > hw/gpio: pca9552: register types with DEFINE_TYPES() > hw/gpio: pca9552: move PCA955xState definition out of the header > hw/gpio: pca9552: rename I2CSlave member to parent_obj > hw/gpio: pca9552: default description to the instantiated type name > hw/gpio: pca9552: declare pca9555 device as an alias of pca9535 device > hw/gpio: pca9552: use the Resettable interface instead of legacy reset > hw/gpio: pca9552: apply input polarity inversion on read > hw/gpio: pca9552: conform GPIO command handling to the datasheet > hw/gpio: pca9552: expose GPIO pins as pin%d QOM properties > tests/qtest: add PCA9555 register access tests > tests/qtest: pca9555: test output-to-input reflection and pull-ups > tests/qtest: pca9555: test polarity inversion > tests/qtest: pca9555: test auto-increment and command wrapping > tests/qtest: pca9552: test behaviour specific to the LED variant > hw/gpio: pca9554: add PCA9536 support > hw/gpio: pca9554: add hw-dir property honoring the configured pin direction > hw/gpio: pca9554: reflect push-pull outputs in the input register > hw/gpio: pca9554: expose pin%d as a string property > tests/qtest: add PCA9554 register access tests > tests/qtest: pca9554: test output-to-input reflection and pull-ups > tests/qtest: pca9554: test polarity inversion > tests/qtest: pca9554: test absence of command auto-increment > tests/qtest: pca9554: test the PCA9536 4-bit variant > hw/arm: catalina: model PCA9555 IO expanders with their own type > hw/arm: catalina: add NIC and FIO temperature sensors > hw/i2c: parent slaves created with i2c_slave_create_simple > test/functional: catalina: test PCA9555 IO expander via QOM > hw/arm: catalina: drive pca9554 io expander input pins externally > test/functional: catalina: test PCA9554 IO expander via QOM > > hw/arm/aspeed_ast2600_catalina.c | 67 ++++--- > hw/gpio/pca9552.c | 256 ++++++++++++++++++++------- > hw/gpio/pca9554.c | 175 ++++++++++-------- > hw/i2c/core.c | 3 + > include/hw/gpio/pca9552.h | 31 +--- > include/hw/gpio/pca9554.h | 3 + > include/hw/i2c/i2c.h | 7 +- > tests/functional/arm/test_aspeed_catalina.py | 81 +++++++++ > tests/qtest/meson.build | 2 + > tests/qtest/pca9552-test.c | 76 ++++++++ > tests/qtest/pca9554-test.c | 223 +++++++++++++++++++++++ > tests/qtest/pca9555-test.c | 251 ++++++++++++++++++++++++++ > 12 files changed, 994 insertions(+), 181 deletions(-) > --- > base-commit: f893c46c3931b3684d235d221bf8b7844ddbf1d7 > change-id: 20260703-catalina-upgrade-3eae7d9d7289 > > Best regards, > -- > Emmanuel Blot <[email protected]> > Applied 1-25 to https://github.com/legoater/qemu aspeed-next Thanks, C.