+ /* &i2c0 */
+ /* eeprom@50 */
+ at24c_eeprom_init(i2c[0], 0x50, 256 * KiB);
+ /* i2c-mux@70 */
+ i2c_slave_create_simple(i2c[0], TYPE_PCA9546, 0x70);
+
+ /* &i2c1 */
+ /* eeprom@50 */
+ at24c_eeprom_init(i2c[1], 0x50, 256 * KiB);
+ /* i2c-mux@70 (PCA9546) — 4 channels, empty */
+ i2c_slave_create_simple(i2c[1], TYPE_PCA9546, 0x70);
+
+ /* &i2c4 */
+ /* i2c-mux@70 (PCA9548) */
+ i2c_slave_create_simple(i2c[4], TYPE_PCA9548, 0x70);
+
+ /* &i2c6 */
+ /* eeprom@50 */
+ at24c_eeprom_init(i2c[6], 0x50, 32 * KiB);
+
+ /* &i2c8 */
+ /* i2c-mux@72 (PCA9546) */
+ i2c_mux = i2c_slave_create_simple(i2c[8], TYPE_PCA9546, 0x72);
+
+ /* i2c8mux ch0 */
+ /* adc128d818@1f — no model */
+ /* pca9555@22 */
+ i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 0),
+ TYPE_PCA9552, 0x22);
+ /* pca9555@24 */
+ i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 0),
+ TYPE_PCA9552, 0x24);
+ /* eeprom@50 */
+ at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 0), 0x50, 16 * KiB);
+
+ /* i2c8mux ch1 */
+ /* pca9555@22 */
+ i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 1),
+ TYPE_PCA9552, 0x22);
+ /* pca9555@24 */
+ i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 1),
+ TYPE_PCA9552, 0x24);
+ /* eeprom@50 */
+ at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 1), 0x50, 16 * KiB);
+
+ /* &i2c9 */
+ /* eeprom@50 */
+ at24c_eeprom_init(i2c[9], 0x50, 16 * KiB);
+ /* eeprom@56 */
+ at24c_eeprom_init(i2c[9], 0x56, 8 * KiB);
+
+ /* &i2c10 */
+ /* i2c-mux@71 (PCA9548) */
+ i2c_mux = i2c_slave_create_simple(i2c[10], TYPE_PCA9548, 0x71);
+
+ /* i2c10mux ch5 */
+ /* pca9555@22*/
+ i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 5),
+ TYPE_PCA9552, 0x22);
+ /* eeprom@52 */
+ at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 5), 0x52, 32 * KiB);
+
+ /* &i2c11 */
+ /* i2c-mux@71 (PCA9548) */
+ i2c_mux = i2c_slave_create_simple(i2c[11], TYPE_PCA9548, 0x71);
+
+ /* i2c11mux ch0-ch4 — empty */
+
+ /* i2c11mux ch5 */
+ /* pca9555@22 */
+ i2c_slave_create_simple(pca954x_i2c_get_bus(i2c_mux, 5),
+ TYPE_PCA9552, 0x22);
+ /* eeprom@52 */
+ at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 5), 0x52, 32 * KiB);
+
+ /* &i2c13 */
+ /* i2c-mux@70 (PCA9548) */
+ i2c_mux = i2c_slave_create_simple(i2c[13], TYPE_PCA9548, 0x70);
+
+ /* i2c13mux ch3 */
+ /* adc128d818@1f - no model */
+
+ /* i2c13mux ch4 */
+ /* eeprom@51 */
+ at24c_eeprom_init(pca954x_i2c_get_bus(i2c_mux, 4), 0x51, 32 * KiB);
+
+ /* i2c13mux ch7 */
+ /* nfc@28 — no model */
+}
+
+static void aspeed_machine_anacapa_class_init(ObjectClass *oc,
+ const void *data)
+{
+ MachineClass *mc = MACHINE_CLASS(oc);
+ AspeedMachineClass *amc = ASPEED_MACHINE_CLASS(oc);
+
+ mc->desc = "Facebook Anacapa BMC (Cortex-A7)";
+ amc->soc_name = "ast2600-a3";
+ amc->hw_strap1 = ANACAPA_BMC_HW_STRAP1;
+ amc->hw_strap2 = ANACAPA_BMC_HW_STRAP2;
+ amc->fmc_model = "mx66l1g45g";
+ amc->spi_model = NULL;
+ amc->num_cs = 2;
+ amc->macs_mask = ASPEED_MAC2_ON;
+ amc->i2c_init = anacapa_bmc_i2c_init;
+ mc->default_ram_size = ANACAPA_BMC_RAM_SIZE;
+ aspeed_machine_class_init_cpus_defaults(mc);
+}
+
+static const TypeInfo aspeed_ast2600_anacapa_types[] = {
+ {
+ .name = MACHINE_TYPE_NAME("anacapa-bmc"),
+ .parent = TYPE_ASPEED_MACHINE,
+ .class_init = aspeed_machine_anacapa_class_init,
+ .interfaces = arm_machine_interfaces,
+ }
+};
+
+DEFINE_TYPES(aspeed_ast2600_anacapa_types)
diff --git a/hw/arm/meson.build b/hw/arm/meson.build
index 84b8ec5fb5..3de3dca8a9 100644
--- a/hw/arm/meson.build
+++ b/hw/arm/meson.build
@@ -56,6 +56,7 @@ arm_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files(
'aspeed_ast2500_witherspoon.c',
'aspeed_ast2500_yosemitev2.c',
'aspeed_ast2600.c',
+ 'aspeed_ast2600_anacapa.c',
'aspeed_ast2600_bletchley.c',
'aspeed_ast2600_catalina.c',
'aspeed_ast2600_evb.c',
diff --git a/tests/functional/arm/meson.build b/tests/functional/arm/meson.build
index 2f538f29a2..959179a56f 100644
--- a/tests/functional/arm/meson.build
+++ b/tests/functional/arm/meson.build
@@ -12,6 +12,7 @@ test_arm_timeouts = {
'aspeed_ast2600_sdk' : 720,
'aspeed_ast2600_sdk_515' : 720,
'aspeed_ast2600_sdk_otp' : 720,
+ 'aspeed_anacapa' : 480,
'aspeed_bletchley' : 480,
'aspeed_catalina' : 480,
'aspeed_gb200nvl_bmc' : 480,
@@ -45,6 +46,7 @@ tests_arm_system_thorough = [
'aspeed_ast2600_sdk',
'aspeed_ast2600_sdk_515',
'aspeed_ast2600_sdk_otp',
+ 'aspeed_anacapa',
'aspeed_bletchley',
'aspeed_catalina',
'aspeed_gb200nvl_bmc',
diff --git a/tests/functional/arm/test_aspeed_anacapa.py
b/tests/functional/arm/test_aspeed_anacapa.py
new file mode 100755
index 0000000000..27f8bd8b56
--- /dev/null
+++ b/tests/functional/arm/test_aspeed_anacapa.py
@@ -0,0 +1,25 @@
+#!/usr/bin/env python3
+#
+# Functional test that boots the ASPEED machines
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+from qemu_test import Asset
+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')
+
+ 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')
+
+if __name__ == '__main__':
+ FacebookAspeedTest.main()