On 7/7/26 11:44, Emmanuel Blot wrote:
Verify the ADC128D818 on the Anacapa R-PDB (i2c8 mux channel 0): two
channels are driven with distinct voltages and each is checked to be
reported back independently through the kernel hwmon interface, and the
channel 0 limit registers are validated.

Signed-off-by: Emmanuel Blot <[email protected]>
---
  tests/functional/arm/test_aspeed_anacapa.py | 68 +++++++++++++++++++--
  1 file changed, 62 insertions(+), 6 deletions(-)

diff --git a/tests/functional/arm/test_aspeed_anacapa.py 
b/tests/functional/arm/test_aspeed_anacapa.py
index 27f8bd8b56..bc227baa22 100644
--- a/tests/functional/arm/test_aspeed_anacapa.py
+++ b/tests/functional/arm/test_aspeed_anacapa.py
@@ -2,24 +2,80 @@
  #
  # Functional test that boots the ASPEED machines
  #
+# Copyright (c) 2026 Meta Platforms, Inc. and affiliates.
+#
  # SPDX-License-Identifier: GPL-2.0-or-later
+import re
+import time
+
  from qemu_test import Asset
+from qemu_test import exec_command_and_wait_for_pattern
  from aspeed import FacebookAspeedTest
class AnacapaMachine(FacebookAspeedTest): ASSET_ANACAPA_FLASH = Asset(
-        
'https://github.com/legoater/qemu-aspeed-boot/raw/3fa3212827b04be4034d43b5adeef57c27d6ab18/images/anacapa-bmc/openbmc-20260512025228/obmc-phosphor-image-anacapa-20260512025228.static.mtd.xz',
-        '2232e241abcfb6d4f6b82cb6c378ce5ce05e364aac6d118785c2b6cc33fe43f3')
+        
"https://github.com/legoater/qemu-aspeed-boot/raw/c5f585f9f57843c0dc95e3865a57d92ec39cbb0b/images/anacapa-bmc/openbmc-20260616025349/obmc-phosphor-image-anacapa-20260616025349.static.mtd.xz";,
+        "de3841fb6ed3085aec6424358ee6efc4b8ee85688361e5aa1987fd1acb7d3fb4",
+    )
+
+    ADC128D818_QOM_PATH = \
+        "/machine/soc/i2c/bus[8]/aspeed.i2c.bus.8/0x72/i2c.0/0x1f"
+    ADC128D818_MUX_CHANNEL = "/sys/bus/i2c/devices/8-0072/channel-0"
+    PROMPT = "root@anacapa:~#"
def test_arm_ast2600_anacapa_openbmc(self):
          image_path = self.uncompress(self.ASSET_ANACAPA_FLASH)
- self.do_test_arm_aspeed_openbmc('anacapa-bmc', image=image_path,
-                                        uboot='2019.04', cpu_id='0xf00',
-                                        soc='AST2600 rev A3')
+        self.do_test_arm_aspeed_openbmc(
+            "anacapa-bmc",
+            image=image_path,
+            uboot="2019.04",
+            cpu_id="0xf00",
+            soc="AST2600 rev A3",
+        )
-if __name__ == '__main__':
+        exec_command_and_wait_for_pattern(self, "root", "Password:")
+        exec_command_and_wait_for_pattern(self, "0penBmc", "#")
+
+        self.adc_hwmon = self.resolve_adc128d818_hwmon()
+        self.assertIn(b"adc128d818", self.read_adc128d818("name"))
+
+        adc = self.ADC128D818_QOM_PATH
+        for ch0_mv, ch1_mv in ((108, 2000), (1280, 500)):
+            self.vm.cmd("qom-set", path=adc, property="ain0", value=ch0_mv)
+            self.vm.cmd("qom-set", path=adc, property="ain1", value=ch1_mv)
+            self.wait_adc128d818_value("in0_input", ch0_mv)
+            self.wait_adc128d818_value("in1_input", ch1_mv)
+
+        self.assertIn(b"2551", self.read_adc128d818("in0_max"))
+        self.assertRegex(self.read_adc128d818("in0_min"), rb"(?m)^0\r*$")
+
+    def resolve_adc128d818_hwmon(self):
+        out = self.read_adc128d818_console(
+            f"basename $(readlink {self.ADC128D818_MUX_CHANNEL})"
+        )
+        match = re.search(rb"i2c-(\d+)", out)
+        self.assertIsNotNone(match, "could not resolve ADC128D818 i2c bus")
+        bus = int(match.group(1))
+        return f"/sys/bus/i2c/devices/{bus}-001f/hwmon/hwmon*"
+
+    def read_adc128d818_console(self, command):
+        return exec_command_and_wait_for_pattern(self, command, self.PROMPT)
+
+    def read_adc128d818(self, attr):
+        return self.read_adc128d818_console(f"cat {self.adc_hwmon}/{attr}")
+
+    def wait_adc128d818_value(self, attr, expected):
+        needle = str(expected).encode()
+        if needle in self.read_adc128d818(attr):
+            return
+        time.sleep(2)
+        if needle not in self.read_adc128d818(attr):
+            self.fail(f"{attr} did not reach {expected}")
+
+
+if __name__ == "__main__":
      FacebookAspeedTest.main()

Functional test fails :

  $ ./pyvenv/bin/meson test --suite thorough func-arm-aspeed_anacapa
  ninja: Entering directory `/home/legoater/work/qemu/qemu-aspeed.git/build'
  [1/6] Generating qemu-version.h with a custom command (wrapped by meson to 
capture output)
  1/1 qemu:func-thorough+func-arm-thorough+thorough / func-arm-aspeed_anacapa   
     ERROR           99.49s   exit status 1
$ cat tests/functional/arm/test_aspeed_anacapa.AnacapaMachine.test_arm_ast2600_anacapa_openbmc/base.log
  ...
  2026-07-08 11:29:31,385 - DEBUG: qemu-test._console_interaction Console 
interaction: success_msg='root@anacapa:~#' failure_msg='None' 
send_string='basename $(readlink /sys/bus/i'c/devices/8-0072/channel-0)
  ...
$ tail -3 tests/functional/arm/test_aspeed_anacapa.AnacapaMachine.test_arm_ast2600_anacapa_openbmc/console.log
  2026-07-08 11:29:31,398: basename $(readlink 
/sys/bus/i2c/devices/8-0072/channel-0)
  2026-07-08 11:29:31,431: i2c-32
  2026-07-08 11:29:31,434: root@anacapa:~#
Thanks,

C.

Reply via email to