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]>


Reply via email to