[{"id":3685932,"web_url":"http://patchwork.ozlabs.org/comment/3685932/","msgid":"<7184f945-7e92-4394-b484-1eb336aa4161@kaod.org>","list_archive_url":null,"date":"2026-05-04T17:34:44","subject":"Re: [PATCH 4/4] ast2600: yosemite4 initial support","submitter":{"id":68548,"url":"http://patchwork.ozlabs.org/api/people/68548/","name":"Cédric Le Goater","email":"clg@kaod.org"},"content":"Hello,\n\nOn 5/4/26 18:48, Alexander Hansen wrote:\n> Initial patch based on [1] to support yosemite v4 bmc emulation.\n> \n> The goal of this machine support is to support OpenBMC development.\n> \n> Reference linux devicetree from openbmc linux is [2].\n> \n> Status:\n> - Enclosure FRU:         showing up\n> - Management Board FRU:  showing up\n> - Blade Board FRU:       showing up\n> - Blade Board sensors:   not implemented\n> - Blade Chassis FRU:     showing up\n> - Fan Board FRU:         both showing up\n> - Fan Board sensors:     supported\n> \n> Overall the emulation is incomplete but already helpful in development\n> and testing.\n> \n> The focus of this initial support is on the FRU eeproms and fanboard\n> sensors.\n> \n> Tested: booted an OpenBMC image for yosemite4 target.\n\nA functional test would be greatly appreciated. This is especially\ntrue since the other patches add new sensors.\n\n\n> References:\n> [1] https://github.com/9elements/qemu/commit/32139f913c2bd0ebe4bd26c46765861f6f9f2d49\n> [2] arch/arm/boot/dts/aspeed/aspeed-bmc-facebook-yosemite4.dts\n> \n> Cc: \"Cédric Le Goater\" <clg@kaod.org> (maintainer:ASPEED BMCs)\n> Cc: Peter Maydell <peter.maydell@linaro.org> (maintainer:ASPEED BMCs)\n> Cc: Steven Lee <steven_lee@aspeedtech.com> (reviewer:ASPEED BMCs)\n> Cc: Troy Lee <leetroy@gmail.com> (reviewer:ASPEED BMCs)\n> Cc: Jamin Lin <jamin_lin@aspeedtech.com> (reviewer:ASPEED BMCs)\n> Cc: Kane Chen <kane_chen@aspeedtech.com> (reviewer:ASPEED BMCs)\n> Cc: Andrew Jeffery <andrew@codeconstruct.com.au> (reviewer:ASPEED BMCs)\n> Cc: Joel Stanley <joel@jms.id.au> (reviewer:ASPEED BMCs)\n> Cc: qemu-arm@nongnu.org (open list:ASPEED BMCs)\n> Cc: qemu-devel@nongnu.org (open list:All patches CC here)\n> Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>\n> ---\n>   hw/arm/aspeed_ast2600_fby4.c | 298 +++++++++++++++++++++++++++++++++++\n>   hw/arm/meson.build           |   1 +\n>   2 files changed, 299 insertions(+)\n>   create mode 100644 hw/arm/aspeed_ast2600_fby4.c\n> \n> diff --git a/hw/arm/aspeed_ast2600_fby4.c b/hw/arm/aspeed_ast2600_fby4.c\n> new file mode 100644\n> index 0000000000..84cd372838\n> --- /dev/null\n> +++ b/hw/arm/aspeed_ast2600_fby4.c\n> @@ -0,0 +1,298 @@\n\nThis lacks a SPDX-License-Identifier and Copyright.\n\nDid you run './scripts/checkpatch.pl' ?\n\n\n> +#include <inttypes.h>\n> +#include <stdbool.h>\n\nPlease remove\n\n> +#include \"qemu/osdep.h\"\n> +#include \"qapi/error.h\"\n> +#include \"hw/arm/machines-qom.h\"\n> +#include \"hw/arm/aspeed.h\"\n> +#include \"hw/arm/aspeed_soc.h\"\n> +#include \"hw/nvram/eeprom_at24c.h\"\n> +#include \"hw/sensor/tmp105.h\"\n> +#include \"hw/sensor/max31790.h\"\n> +#include \"hw/sensor/max11615.h\"\n> +#include \"hw/sensor/adc128d818.h\"\n> +#include \"hw/i2c/i2c_mux_pca954x.h\"\n> +#include \"hw/gpio/pca9552.h\"\n> +#include \"system/reset.h\"\n> +\n> +#define FBY4_BMC_RAM_SIZE ASPEED_RAM_SIZE(2 * GiB)\n> +\n> +/* START OF EEPROM CONTENTS */\n> +\n> +/*\n> +./frugen -s board.mfg=\"Wiwynn\" \\\n> +  --set board.pname=\"Fan Board FSC-MAX ADC-TI LED-NXP EFUSE-MAX\" \\\n> +  --set text:board.pn=\"BRD-PN-345\" \\\n> +  --board-date \"10/1/2017 12:58:00\" \\\n> +  --set board.serial=\"123456\" \\\n> +  --set product.pname=\"Yosemite V4\" \\\n> +  --set product.mfg=\"Wiwynn\" \\\n> +  --set product.ver=\"v1.1\" \\\n> +  --set product.serial=\"123456\" \\\n> +  --set product.atag=\"PLACEHOLDER\" \\\n> +  --set product.custom=\"Fanboard Custom1\" \\\n> +  --set product.custom.1=\"Fanboard Custom2\" \\\n> +  --set text:product.pn=\"PN-345\" \\\n> +  fru-yv4-fanboard.bin\n> +*/\n> +/* EM Config: yosemite4_fanboard_fsc_max_adc_ti_led_nxp_ons_efuse_max.json */\n> +/* Yosemite4 fan board */\n> +unsigned char fru_yv4_fanboard_bin[] = {\n\nthis should be a \"static const uint8_t'\n\n> +  0x01, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0xf3, 0x01, 0x0a, 0x19, 0xce,\n> +  0xc2, 0xa8, 0xc6, 0x57, 0x69, 0x77, 0x79, 0x6e, 0x6e, 0xea, 0x46, 0x61,\n> +  0x6e, 0x20, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x20, 0x46, 0x53, 0x43, 0x2d,\n> +  0x4d, 0x41, 0x58, 0x20, 0x41, 0x44, 0x43, 0x2d, 0x54, 0x49, 0x20, 0x4c,\n> +  0x45, 0x44, 0x2d, 0x4e, 0x58, 0x50, 0x20, 0x45, 0x46, 0x55, 0x53, 0x45,\n> +  0x2d, 0x4d, 0x41, 0x58, 0x85, 0x91, 0x34, 0x51, 0x95, 0x05, 0xca, 0x42,\n> +  0x52, 0x44, 0x2d, 0x50, 0x4e, 0x2d, 0x33, 0x34, 0x35, 0xc0, 0xc1, 0x00,\n> +  0x00, 0x00, 0x00, 0xdb, 0x01, 0x09, 0x19, 0xc6, 0x57, 0x69, 0x77, 0x79,\n> +  0x6e, 0x6e, 0xcb, 0x59, 0x6f, 0x73, 0x65, 0x6d, 0x69, 0x74, 0x65, 0x20,\n> +  0x56, 0x34, 0xc6, 0x50, 0x4e, 0x2d, 0x33, 0x34, 0x35, 0xc4, 0x76, 0x31,\n> +  0x2e, 0x31, 0x85, 0x91, 0x34, 0x51, 0x95, 0x05, 0x89, 0x30, 0x1b, 0x8e,\n> +  0x25, 0xfa, 0xb2, 0x64, 0x29, 0x03, 0xc0, 0xd0, 0x46, 0x61, 0x6e, 0x62,\n> +  0x6f, 0x61, 0x72, 0x64, 0x20, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x32,\n> +  0xc1, 0x00, 0x00, 0x9d\n> +};\n> +unsigned int fru_yv4_fanboard_bin_len = 160;\n\nstatic const size_t fru_yv4_fanboard_bin_len = sizeof(fru_yv4_fanboard_bin);\n\n> +\n> +/*\n> +./frugen -s board.mfg=\"Wiwynn\" \\\n> +  --set board.pname=\"Sentinel Dome without Retimer\" \\\n> +  --set text:board.pn=\"BRD-PN-345\" \\\n> +  --board-date \"10/1/2017 12:58:00\" \\\n> +  --set board.serial=\"123456\" \\\n> +  --set product.pname=\"Yosemite V4\" \\\n> +  --set product.mfg=\"Wiwynn\" \\\n> +  --set product.ver=\"v1.1\" \\\n> +  --set product.serial=\"123456\" \\\n> +  --set product.atag=\"PLACEHOLDER\" \\\n> +  --set product.custom=\"Yosemite V4 T1\" \\\n> +  --set product.custom.1=\"Yosemite V4 T1\" \\\n> +  --set text:product.pn=\"PN-345\" \\\n> +  fru-yv4-sentineldome-board.bin\n> +*/\n> +/* product.cust maps to PRODUCT_INFO_AM2 */\n> +/* EM Config: yosemite4_sentineldome_t1.json */\n> +/* Yosemite4 Sentinel Dome without Retimer Boards */\n> +unsigned char fru_yv4_sentineldome_board_bin[] = {\n> +  0x01, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xf5, 0x01, 0x08, 0x19, 0xce,\n> +  0xc2, 0xa8, 0xc6, 0x57, 0x69, 0x77, 0x79, 0x6e, 0x6e, 0xdd, 0x53, 0x65,\n> +  0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x20, 0x44, 0x6f, 0x6d, 0x65, 0x20,\n> +  0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x52, 0x65, 0x74, 0x69,\n> +  0x6d, 0x65, 0x72, 0x85, 0x91, 0x34, 0x51, 0x95, 0x05, 0xca, 0x42, 0x52,\n> +  0x44, 0x2d, 0x50, 0x4e, 0x2d, 0x33, 0x34, 0x35, 0xc0, 0xc1, 0x00, 0x78,\n> +  0x01, 0x09, 0x19, 0xc6, 0x57, 0x69, 0x77, 0x79, 0x6e, 0x6e, 0xcb, 0x59,\n> +  0x6f, 0x73, 0x65, 0x6d, 0x69, 0x74, 0x65, 0x20, 0x56, 0x34, 0xc6, 0x50,\n> +  0x4e, 0x2d, 0x33, 0x34, 0x35, 0xc4, 0x76, 0x31, 0x2e, 0x31, 0x85, 0x91,\n> +  0x34, 0x51, 0x95, 0x05, 0x89, 0x30, 0x1b, 0x8e, 0x25, 0xfa, 0xb2, 0x64,\n> +  0x29, 0x03, 0xc0, 0xce, 0x59, 0x6f, 0x73, 0x65, 0x6d, 0x69, 0x74, 0x65,\n> +  0x20, 0x56, 0x34, 0x20, 0x54, 0x31, 0xc1, 0x00, 0x00, 0x00, 0x00, 0xeb\n> +};\n> +unsigned int fru_yv4_sentineldome_board_bin_len = 144;\n> +\n> +/*\n> +./frugen -s board.mfg=\"Wiwynn\" \\\n> +        --set board.pname=\"Sentinel Dome\" \\\n> +        --set text:board.pn=\"BRD-PN-345\" \\\n> +        --board-date \"10/1/2017 12:58:00\" \\\n> +        --set board.serial=\"123456\" \\\n> +        --set product.pname=\"Yosemite V4\" \\\n> +        --set product.mfg=\"Wiwynn\" \\\n> +        --set product.ver=\"v1.1\" \\\n> +        --set product.serial=\"123456\" \\\n> +        --set product.atag=\"PLACEHOLDER\" \\\n> +        --set text:product.pn=\"PN-345\" \\\n> +        fru-yv4-sentineldome-chassis.bin\n> +*/\n> +/* EM Config: yosemite4_sentineldome_chassis.json */\n> +/* Yosemite 4 Sentinel Dome Chassis FRU */\n> +unsigned char fru_yv4_sentineldome_chassis_bin[] = {\n> +  0x01, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0xf7, 0x01, 0x06, 0x19, 0xce,\n> +  0xc2, 0xa8, 0xc6, 0x57, 0x69, 0x77, 0x79, 0x6e, 0x6e, 0xcd, 0x53, 0x65,\n> +  0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x20, 0x44, 0x6f, 0x6d, 0x65, 0x85,\n> +  0x91, 0x34, 0x51, 0x95, 0x05, 0xca, 0x42, 0x52, 0x44, 0x2d, 0x50, 0x4e,\n> +  0x2d, 0x33, 0x34, 0x35, 0xc0, 0xc1, 0x00, 0xb6, 0x01, 0x07, 0x19, 0xc6,\n> +  0x57, 0x69, 0x77, 0x79, 0x6e, 0x6e, 0xcb, 0x59, 0x6f, 0x73, 0x65, 0x6d,\n> +  0x69, 0x74, 0x65, 0x20, 0x56, 0x34, 0xc6, 0x50, 0x4e, 0x2d, 0x33, 0x34,\n> +  0x35, 0xc4, 0x76, 0x31, 0x2e, 0x31, 0x85, 0x91, 0x34, 0x51, 0x95, 0x05,\n> +  0x89, 0x30, 0x1b, 0x8e, 0x25, 0xfa, 0xb2, 0x64, 0x29, 0x03, 0xc0, 0xc1,\n> +  0x00, 0x00, 0x00, 0x59\n> +};\n> +unsigned int fru_yv4_sentineldome_chassis_bin_len = 112;\n> +\n> +/*\n> +./frugen -s board.mfg=\"Wiwynn\" \\\n> +      --set board.pname=\"Management Board wBMC\" \\\n> +      --set text:board.pn=\"BRD-PN-345\" \\\n> +      --board-date \"10/1/2017 12:58:00\" \\\n> +      --set board.serial=\"123456\" \\\n> +      --set product.pname=\"Yosemite V4\" \\\n> +      --set product.mfg=\"Wiwynn\" \\\n> +      --set product.ver=\"v1.1\" \\\n> +      --set product.serial=\"123456\" \\\n> +      --set product.atag=\"PLACEHOLDER\" \\\n> +      --set text:product.pn=\"PN-345\" \\\n> +      fru-yv4-eclosure.bin\n> +*/\n> +/* EM Config: yosemite4_chassis.json, yosemite4.json */\n> +/* Yosemite 4 Sentinel Dome Enclosure FRU */\n> +unsigned char fru_yv4_eclosure_bin[] = {\n> +  0x01, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0xf6, 0x01, 0x07, 0x19, 0xce,\n> +  0xc2, 0xa8, 0xc6, 0x57, 0x69, 0x77, 0x79, 0x6e, 0x6e, 0xd5, 0x4d, 0x61,\n> +  0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x42, 0x6f, 0x61,\n> +  0x72, 0x64, 0x20, 0x77, 0x42, 0x4d, 0x43, 0x85, 0x91, 0x34, 0x51, 0x95,\n> +  0x05, 0xca, 0x42, 0x52, 0x44, 0x2d, 0x50, 0x4e, 0x2d, 0x33, 0x34, 0x35,\n> +  0xc0, 0xc1, 0x00, 0x26, 0x01, 0x07, 0x19, 0xc6, 0x57, 0x69, 0x77, 0x79,\n> +  0x6e, 0x6e, 0xcb, 0x59, 0x6f, 0x73, 0x65, 0x6d, 0x69, 0x74, 0x65, 0x20,\n> +  0x56, 0x34, 0xc6, 0x50, 0x4e, 0x2d, 0x33, 0x34, 0x35, 0xc4, 0x76, 0x31,\n> +  0x2e, 0x31, 0x85, 0x91, 0x34, 0x51, 0x95, 0x05, 0x89, 0x30, 0x1b, 0x8e,\n> +  0x25, 0xfa, 0xb2, 0x64, 0x29, 0x03, 0xc0, 0xc1, 0x00, 0x00, 0x00, 0x59\n> +};\n> +unsigned int fru_yv4_eclosure_bin_len = 120;\n> +\n> +/* END OF EEPROM CONTENTS */\n> +\n> +static void fby4_i2c_init_fanboard(I2CSlave *fan_mux, size_t eepromSize)\n> +{\n> +\n\nextra white line\n\n> +    /* 2 fan boards */\n> +    for (int i = 0; i <= 1; i++) {\n> +        /* downstream bus */\n> +        I2CBus *bus = pca954x_i2c_get_bus(fan_mux, i);\n> +\n> +        /* ti,adc128d818 @ 0x1f    (adc) */\n> +        /* the driver will throw away the last 4 bits, set them 0 */\n> +        uint16_t adc_values1[8] = {\n\nI would define these arrays as read only data.\n\n> +            0b011110000000, 0b010100010000,\n> +            0b001000110000, 0b100000100000,\n> +            0b011110000000, 0b010100010000,\n> +            0b001000110000, 0b100000100000};\n> +        adc128d818_init_with_values(bus,\n> +                              0x1f, adc_values1, 8);\n\nThis could be on one line.\n\n> +\n> +        /* maxim,max31790 @ 0x20   (pwm) */\n> +        i2c_slave_create_simple(bus,\n> +                              TYPE_MAX31790, 0x20);\n\nsame here.\n\n> +\n> +        /*\n> +         * ti,tca6424 @ 0x22       (gpio)\n> +         * linux handles tca6424 with PCA953X_TYPE, same as pca9535\n> +         * { \"pca9535\", 16 | PCA953X_TYPE | PCA_INT, },\n> +         * { \"tca6424\", 24 | PCA953X_TYPE | PCA_INT, },\n> +         * so we _could_ be fine here unless more than 16 gpios are used\n> +         */\n> +        i2c_slave_create_simple(bus,\n> +                              TYPE_PCA9535, 0x22);\n> +        /*\n> +         * NOTE: above works and could use for gpio presence:\n> +         * $ gpioget gpiochip2 2\n> +         * 1\n> +         */\n> +\n> +        /* maxim,max31790 @ 0x2f   (pwm) */\n> +        i2c_slave_create_simple(bus,\n> +                              TYPE_MAX31790, 0x2f);\n> +\n> +        /* maxim,max11615 @ 0x33   (adc) */\n> +        uint16_t adc_values[8] = {\n> +            0b011110000010, 0b010100011000,\n> +            0b001000110100, 0b100000101001,\n> +            0b011110000010, 0b010100011000,\n> +            0b001000110100, 0b100000101001};\n> +        max11615_init_with_values(bus,\n> +                              0x33, adc_values, 8);\n> +> +        at24c_eeprom_init_rom(\n> +            bus, 0x52, eepromSize,\n> +            fru_yv4_fanboard_bin,\n> +            fru_yv4_fanboard_bin_len);\n> +\n> +        /* LED blink driver / gpio expander */\n> +        /* nxp,pca9552 @ 0x61   (gpio) */\n> +        i2c_slave_create_simple(bus,\n> +                              TYPE_PCA9552, 0x61);\n> +    }\n> +}\n> +\n> +static void fby4_i2c_init_blade_chassis(I2CBus *bus, size_t eepromSize)\n> +{\n> +\n\nExtra white line.\n\n> +    /* Sentinel Dome Board EEPROMS */\n> +    const uint8_t board_addr = 0x54;\n> +    const uint8_t chassis_addr = 0x55;\n\nThese variables look unnecessary.\n\n> +\n> +    /* Board */\n> +    at24c_eeprom_init_rom(bus, board_addr, eepromSize,\n> +        fru_yv4_sentineldome_board_bin, fru_yv4_sentineldome_board_bin_len);\n> +\n> +    /* Chassis */\n> +   at24c_eeprom_init_rom(bus, chassis_addr, eepromSize,\n> +       fru_yv4_sentineldome_chassis_bin, fru_yv4_sentineldome_chassis_bin_len);\n> +}\n> +\n> +static void fby4_i2c_init_multiple_blade_chassis(I2CBus **i2c,\n> +    size_t eepromSize)\n> +{\n> +\n\nExtra white line.\n\n\n> +    /* there is 8 blade chassis, but we only emulate 2 for performance reason */\n> +    for (int bus = 1; bus <= (8 / 4); bus++) {\n> +\n> +        fby4_i2c_init_blade_chassis(i2c[bus], eepromSize);\n> +    }\n> +}\n> +\n> +static void fby4_i2c_init(AspeedMachineState *bmc)\n> +{\n> +    AspeedSoCState *soc = bmc->soc;\n> +    I2CBus *i2c[16];\n> +\n> +    for (int i = 0; i < 16; i++) {\n> +        i2c[i] = aspeed_i2c_get_bus(&soc->i2c, i);\n> +    }\n> +\n> +    const size_t eepromSize = 128 * KiB;\n> +\n> +    const uint8_t enclosure_addr = 0x51;\n> +\n> +    /* Enclosure (EM Config: yosemite4_chassis.json, yosemite4.json) */\n> +    at24c_eeprom_init_rom(i2c[1], enclosure_addr, eepromSize,\n> +        fru_yv4_eclosure_bin, fru_yv4_eclosure_bin_len);\n> +\n> +    fby4_i2c_init_multiple_blade_chassis(i2c, eepromSize);\n> +\n> +    /* Yv4 fanboard connection */\n> +    I2CSlave *fan_mux = i2c_slave_create_simple(i2c[14], TYPE_PCA9546, 0x74);\n> +\n> +    fby4_i2c_init_fanboard(fan_mux, eepromSize);\n> +}\n> +\n> +static void fby4_reset(MachineState *state, ResetType type)\n> +{\n> +    qemu_devices_reset(type);\n> +}\n\n\nnot needed\n\n> +static void aspeed_machine_fby4_class_init(ObjectClass *oc, const void *data)\n> +{\n> +    MachineClass *mc = MACHINE_CLASS(oc);\n> +    AspeedMachineClass *amc = ASPEED_MACHINE_CLASS(oc);\n> +\n> +    mc->desc       = \"Facebook fby4 BMC (Cortex-A7)\";\n> +    mc->reset      = fby4_reset;\n> +    amc->fmc_model = \"mx66l1g45g\";\n> +    amc->num_cs    = 2;\n> +    amc->macs_mask = ASPEED_MAC3_ON;\n> +    amc->i2c_init  = fby4_i2c_init;\n> +    mc->default_ram_size = FBY4_BMC_RAM_SIZE;\n> +    aspeed_machine_class_init_cpus_defaults(mc);\n> +}> +\n> +static const TypeInfo aspeed_ast2600_fby4_types[] = {\n> +    {\n> +        .name          = MACHINE_TYPE_NAME(\"fby4-bmc\"),\n> +        .parent        = MACHINE_TYPE_NAME(\"ast2600-evb\"),\n> +        .class_init    = aspeed_machine_fby4_class_init,\n> +        .interfaces    = arm_machine_interfaces,\n> +    }\n> +};\n> +\n> +DEFINE_TYPES(aspeed_ast2600_fby4_types)\n> diff --git a/hw/arm/meson.build b/hw/arm/meson.build\n> index 84b8ec5fb5..ccbc23e549 100644\n> --- a/hw/arm/meson.build\n> +++ b/hw/arm/meson.build\n> @@ -60,6 +60,7 @@ arm_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files(\n>     'aspeed_ast2600_catalina.c',\n>     'aspeed_ast2600_evb.c',\n>     'aspeed_ast2600_fby35.c',\n> +  'aspeed_ast2600_fby4.c',\n>     'aspeed_ast2600_fuji.c',\n>     'aspeed_ast2600_gb200nvl.c',\n>     'aspeed_ast2600_qcom-dc-scm-v1.c',\n\nThanks,\n\nC.","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kaod.org header.i=@kaod.org header.a=rsa-sha256\n header.s=ovhmo393970-selector1 header.b=GqK2Hu/Z;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)","garm.ovh; auth=pass\n (GARM-96R001274fa6f1-8adb-46ef-8be8-85cbb564ee0d,\n 6CC5FA71F9BBCB93EEE0D9DCB002DEB149E91A90) smtp.auth=clg@kaod.org"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g8TLp29Hjz1yJV\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 05 May 2026 03:35:30 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wJxC9-0006ly-Cs; Mon, 04 May 2026 13:35:01 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <clg@kaod.org>) id 1wJxC6-0006kq-O6\n for qemu-devel@nongnu.org; Mon, 04 May 2026 13:34:59 -0400","from smtpout3.mo534.mail-out.ovh.net ([51.210.94.142])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <clg@kaod.org>) id 1wJxC0-0005rE-QT\n for qemu-devel@nongnu.org; Mon, 04 May 2026 13:34:58 -0400","from director1.derp.mail-out.ovh.net\n (director1.derp.mail-out.ovh.net [51.68.80.175])\n by mo534.mail-out.ovh.net (Postfix) with ESMTPS id 4g8TKy6Cpbz614y;\n Mon,  4 May 2026 17:34:46 +0000 (UTC)","from director1.derp.mail-out.ovh.net\n (director1.derp.mail-out.ovh.net. [127.0.0.1])\n by director1.derp.mail-out.ovh.net (inspect_sender_mail_agent) with SMTP\n for <alexander.hansen@9elements.com>; Mon,  4 May 2026 17:34:46 +0000 (UTC)","from mta11.priv.ovhmail-u2.ea.mail.ovh.net (unknown [10.110.58.138])\n by director1.derp.mail-out.ovh.net (Postfix) with ESMTPS id\n 4g8TKy3qWlz5vLP; Mon,  4 May 2026 17:34:46 +0000 (UTC)","from kaod.org (unknown [10.1.6.3])\n (Authenticated sender: clg@kaod.org)\n by mta11.priv.ovhmail-u2.ea.mail.ovh.net (Postfix) with ESMTPSA id\n 4428B24034C7; Mon,  4 May 2026 17:34:45 +0000 (UTC)"],"X-OVh-ClientIp":"82.64.250.170","Message-ID":"<7184f945-7e92-4394-b484-1eb336aa4161@kaod.org>","Date":"Mon, 4 May 2026 19:34:44 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH 4/4] ast2600: yosemite4 initial support","To":"Alexander Hansen <alexander.hansen@9elements.com>, qemu-devel@nongnu.org","Cc":"Peter Maydell <peter.maydell@linaro.org>,\n Steven Lee <steven_lee@aspeedtech.com>, Troy Lee <leetroy@gmail.com>,\n Jamin Lin <jamin_lin@aspeedtech.com>, Kane Chen <kane_chen@aspeedtech.com>,\n Andrew Jeffery <andrew@codeconstruct.com.au>, Joel Stanley <joel@jms.id.au>,\n qemu-arm@nongnu.org","References":"<20260504165043.213704-2-alexander.hansen@9elements.com>\n <20260504165043.213704-6-alexander.hansen@9elements.com>","Content-Language":"en-US, fr","From":"=?utf-8?q?C=C3=A9dric_Le_Goater?= <clg@kaod.org>","Autocrypt":"addr=clg@kaod.org; keydata=\n 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","In-Reply-To":"<20260504165043.213704-6-alexander.hansen@9elements.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","x-ovh-tracer-id":"15615668759392332811","X-VR-SPAMSTATE":"OK","X-VR-SPAMSCORE":"-100","X-VR-SPAMCAUSE":"\n dmFkZTGvzoMqq6/LpqBtDNj+tVXXkJuZMZBIFVCbhP8QXervLtsuKacEPqepiPGIoD/ga/kkXwHJ81aUFsqnux5EJQ4S5LWJGcLrZPTLrqWlKd+LLfMvZmU2THZIZ2T+UTMtpj/dyMQsK4jHktb5ixxDPEliwGZalgnQcAvCUc2i2PeIsbvnKJp0TgQgiYIUOFV9z5/OwsXP1zxHxFeLflNLd9Dx1x//Q+0CQ3M/mRx3iCOEE4KPMZRmM30Um5yMpLXvJmgGr6qWDJTleOeK+6moG7ImoO5a5GvKiSl/P4AW+GoykXCGZTXDfcrnbIY+I7z+YquPwDzVzoCs6KeOcNRHFUWYf9rKftIhgVaQ9mdBlkJx51sKinOIsNS7IvREkvB59xTCYHutJSXFN7pQW8PRx9RSFw31LNXDPE1wYdE7n8o/tCTO0wuEyVnYxRu5bq7hOgLdPSQddsP4+9WcxOCHX00zbYaYxvOJ1KvMyVVtZakLrCajeAg12V9TtZRm+j3JnI6Qlg2BeNNiiHtd4qAwgCEmC7lM/ZQvXu7ij2PXJcL9qkZEUoZlUpiH9SFiXgB5EKAVdURK2eOGG0jmpDMOLGHWxoxp2Oi8z/Y8CFFWeP6o5t+so9XQItg8+avDX5bKavc3mICT7QrRv6kPM9j2sblC35oqmqqH1KPYGNQ7yDmomQ","DKIM-Signature":"a=rsa-sha256; bh=Ko6SwvFfr+HvmA19ntsuFAqqMWHTI16hqCVTLo88Rfk=;\n c=relaxed/relaxed; d=kaod.org; h=From; s=ovhmo393970-selector1;\n t=1777916088; v=1;\n b=GqK2Hu/ZVOOfGA/mACtjRXowgAt6gJR3k+l3d7WzL/1i16X6H9Kdk+QPM6uRAfEFHXjRnfaV\n f6gl+hwjw6Wv+E19wpKPDexKlYDVCUE1Nton9AGbVkgXvImJSGwFhdOOkziUhMCGeshsQ+YFahE\n r4mdI7dm+vDXpVti37fzKtqyZbzvQDRIyFkVv49yApkNSnF1SxsUjlU/06YHzDzRiAckPamI3FT\n +MBABO468qajMI5eLZ19kG8Ojg3V9Kc+c8u8eG8nP3vZLnW9/mHCpKcWH/Eh7/oLa6J30oh62eG\n nzS+b7vPxmhJUsynlk820t2VLjTwRhBt6P53KbZVVOsHg==","Received-SPF":"pass client-ip=51.210.94.142; envelope-from=clg@kaod.org;\n helo=smtpout3.mo534.mail-out.ovh.net","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001,\n SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}},{"id":3686579,"web_url":"http://patchwork.ozlabs.org/comment/3686579/","msgid":"<7437bd8e-e938-4a36-9678-cabde10a5d17@9elements.com>","list_archive_url":null,"date":"2026-05-05T15:56:13","subject":"Re: [PATCH 4/4] ast2600: yosemite4 initial support","submitter":{"id":87518,"url":"http://patchwork.ozlabs.org/api/people/87518/","name":"Alexander Hansen","email":"alexander.hansen@9elements.com"},"content":"Hi Cedric, thanks for taking a look so quickly!\n\n > A functional test would be greatly appreciated. This is especially  \ntrue since the other patches add new sensors.\n\nI sent a v2 which includes a functional test, i agree that would be \nquite helpful to confirm that the new sensors do not crash anything :)\nThe functional test is currently pointing to my fork of qemu-aspeed-boot \n(so you can run it already) but a PR to your tree has been opened.\n\nThe new functional test has a single issue which is that one line from \nthe expected logs (hostname) is not emitted.\nI am not sure if it's due to differences in the image or simply due to \ntimeouts being hit on userspace services.\n\nNetworking however is functional and i can ssh into the qemu machine. \nFor now i simply dropped that assertion from the function test\nand instead asserted on the login prompt.\n\nI hope to have addressed all your comments,  looking forward to your \nnext review :p\n\nThank you,\nAlexander\n\nOn 5/4/26 19:34, Cédric Le Goater wrote:\n> Hello,\n>\n> On 5/4/26 18:48, Alexander Hansen wrote:\n>> Initial patch based on [1] to support yosemite v4 bmc emulation.\n>>\n>> The goal of this machine support is to support OpenBMC development.\n>>\n>> Reference linux devicetree from openbmc linux is [2].\n>>\n>> Status:\n>> - Enclosure FRU:         showing up\n>> - Management Board FRU:  showing up\n>> - Blade Board FRU:       showing up\n>> - Blade Board sensors:   not implemented\n>> - Blade Chassis FRU:     showing up\n>> - Fan Board FRU:         both showing up\n>> - Fan Board sensors:     supported\n>>\n>> Overall the emulation is incomplete but already helpful in development\n>> and testing.\n>>\n>> The focus of this initial support is on the FRU eeproms and fanboard\n>> sensors.\n>>\n>> Tested: booted an OpenBMC image for yosemite4 target.\n>\n> A functional test would be greatly appreciated. This is especially\n> true since the other patches add new sensors.\n>\n>\n>> References:\n>> [1] \n>> https://github.com/9elements/qemu/commit/32139f913c2bd0ebe4bd26c46765861f6f9f2d49\n>> [2] arch/arm/boot/dts/aspeed/aspeed-bmc-facebook-yosemite4.dts\n>>\n>> Cc: \"Cédric Le Goater\" <clg@kaod.org> (maintainer:ASPEED BMCs)\n>> Cc: Peter Maydell <peter.maydell@linaro.org> (maintainer:ASPEED BMCs)\n>> Cc: Steven Lee <steven_lee@aspeedtech.com> (reviewer:ASPEED BMCs)\n>> Cc: Troy Lee <leetroy@gmail.com> (reviewer:ASPEED BMCs)\n>> Cc: Jamin Lin <jamin_lin@aspeedtech.com> (reviewer:ASPEED BMCs)\n>> Cc: Kane Chen <kane_chen@aspeedtech.com> (reviewer:ASPEED BMCs)\n>> Cc: Andrew Jeffery <andrew@codeconstruct.com.au> (reviewer:ASPEED BMCs)\n>> Cc: Joel Stanley <joel@jms.id.au> (reviewer:ASPEED BMCs)\n>> Cc: qemu-arm@nongnu.org (open list:ASPEED BMCs)\n>> Cc: qemu-devel@nongnu.org (open list:All patches CC here)\n>> Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>\n>> ---\n>>   hw/arm/aspeed_ast2600_fby4.c | 298 +++++++++++++++++++++++++++++++++++\n>>   hw/arm/meson.build           |   1 +\n>>   2 files changed, 299 insertions(+)\n>>   create mode 100644 hw/arm/aspeed_ast2600_fby4.c\n>>\n>> diff --git a/hw/arm/aspeed_ast2600_fby4.c b/hw/arm/aspeed_ast2600_fby4.c\n>> new file mode 100644\n>> index 0000000000..84cd372838\n>> --- /dev/null\n>> +++ b/hw/arm/aspeed_ast2600_fby4.c\n>> @@ -0,0 +1,298 @@\n>\n> This lacks a SPDX-License-Identifier and Copyright.\n>\n> Did you run './scripts/checkpatch.pl' ?\n>\n>\n>> +#include <inttypes.h>\n>> +#include <stdbool.h>\n>\n> Please remove\n>\n>> +#include \"qemu/osdep.h\"\n>> +#include \"qapi/error.h\"\n>> +#include \"hw/arm/machines-qom.h\"\n>> +#include \"hw/arm/aspeed.h\"\n>> +#include \"hw/arm/aspeed_soc.h\"\n>> +#include \"hw/nvram/eeprom_at24c.h\"\n>> +#include \"hw/sensor/tmp105.h\"\n>> +#include \"hw/sensor/max31790.h\"\n>> +#include \"hw/sensor/max11615.h\"\n>> +#include \"hw/sensor/adc128d818.h\"\n>> +#include \"hw/i2c/i2c_mux_pca954x.h\"\n>> +#include \"hw/gpio/pca9552.h\"\n>> +#include \"system/reset.h\"\n>> +\n>> +#define FBY4_BMC_RAM_SIZE ASPEED_RAM_SIZE(2 * GiB)\n>> +\n>> +/* START OF EEPROM CONTENTS */\n>> +\n>> +/*\n>> +./frugen -s board.mfg=\"Wiwynn\" \\\n>> +  --set board.pname=\"Fan Board FSC-MAX ADC-TI LED-NXP EFUSE-MAX\" \\\n>> +  --set text:board.pn=\"BRD-PN-345\" \\\n>> +  --board-date \"10/1/2017 12:58:00\" \\\n>> +  --set board.serial=\"123456\" \\\n>> +  --set product.pname=\"Yosemite V4\" \\\n>> +  --set product.mfg=\"Wiwynn\" \\\n>> +  --set product.ver=\"v1.1\" \\\n>> +  --set product.serial=\"123456\" \\\n>> +  --set product.atag=\"PLACEHOLDER\" \\\n>> +  --set product.custom=\"Fanboard Custom1\" \\\n>> +  --set product.custom.1=\"Fanboard Custom2\" \\\n>> +  --set text:product.pn=\"PN-345\" \\\n>> +  fru-yv4-fanboard.bin\n>> +*/\n>> +/* EM Config: \n>> yosemite4_fanboard_fsc_max_adc_ti_led_nxp_ons_efuse_max.json */\n>> +/* Yosemite4 fan board */\n>> +unsigned char fru_yv4_fanboard_bin[] = {\n>\n> this should be a \"static const uint8_t'\n>\n>> +  0x01, 0x00, 0x00, 0x01, 0x0b, 0x00, 0x00, 0xf3, 0x01, 0x0a, 0x19, \n>> 0xce,\n>> +  0xc2, 0xa8, 0xc6, 0x57, 0x69, 0x77, 0x79, 0x6e, 0x6e, 0xea, 0x46, \n>> 0x61,\n>> +  0x6e, 0x20, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x20, 0x46, 0x53, 0x43, \n>> 0x2d,\n>> +  0x4d, 0x41, 0x58, 0x20, 0x41, 0x44, 0x43, 0x2d, 0x54, 0x49, 0x20, \n>> 0x4c,\n>> +  0x45, 0x44, 0x2d, 0x4e, 0x58, 0x50, 0x20, 0x45, 0x46, 0x55, 0x53, \n>> 0x45,\n>> +  0x2d, 0x4d, 0x41, 0x58, 0x85, 0x91, 0x34, 0x51, 0x95, 0x05, 0xca, \n>> 0x42,\n>> +  0x52, 0x44, 0x2d, 0x50, 0x4e, 0x2d, 0x33, 0x34, 0x35, 0xc0, 0xc1, \n>> 0x00,\n>> +  0x00, 0x00, 0x00, 0xdb, 0x01, 0x09, 0x19, 0xc6, 0x57, 0x69, 0x77, \n>> 0x79,\n>> +  0x6e, 0x6e, 0xcb, 0x59, 0x6f, 0x73, 0x65, 0x6d, 0x69, 0x74, 0x65, \n>> 0x20,\n>> +  0x56, 0x34, 0xc6, 0x50, 0x4e, 0x2d, 0x33, 0x34, 0x35, 0xc4, 0x76, \n>> 0x31,\n>> +  0x2e, 0x31, 0x85, 0x91, 0x34, 0x51, 0x95, 0x05, 0x89, 0x30, 0x1b, \n>> 0x8e,\n>> +  0x25, 0xfa, 0xb2, 0x64, 0x29, 0x03, 0xc0, 0xd0, 0x46, 0x61, 0x6e, \n>> 0x62,\n>> +  0x6f, 0x61, 0x72, 0x64, 0x20, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, \n>> 0x32,\n>> +  0xc1, 0x00, 0x00, 0x9d\n>> +};\n>> +unsigned int fru_yv4_fanboard_bin_len = 160;\n>\n> static const size_t fru_yv4_fanboard_bin_len = \n> sizeof(fru_yv4_fanboard_bin);\n>\n>> +\n>> +/*\n>> +./frugen -s board.mfg=\"Wiwynn\" \\\n>> +  --set board.pname=\"Sentinel Dome without Retimer\" \\\n>> +  --set text:board.pn=\"BRD-PN-345\" \\\n>> +  --board-date \"10/1/2017 12:58:00\" \\\n>> +  --set board.serial=\"123456\" \\\n>> +  --set product.pname=\"Yosemite V4\" \\\n>> +  --set product.mfg=\"Wiwynn\" \\\n>> +  --set product.ver=\"v1.1\" \\\n>> +  --set product.serial=\"123456\" \\\n>> +  --set product.atag=\"PLACEHOLDER\" \\\n>> +  --set product.custom=\"Yosemite V4 T1\" \\\n>> +  --set product.custom.1=\"Yosemite V4 T1\" \\\n>> +  --set text:product.pn=\"PN-345\" \\\n>> +  fru-yv4-sentineldome-board.bin\n>> +*/\n>> +/* product.cust maps to PRODUCT_INFO_AM2 */\n>> +/* EM Config: yosemite4_sentineldome_t1.json */\n>> +/* Yosemite4 Sentinel Dome without Retimer Boards */\n>> +unsigned char fru_yv4_sentineldome_board_bin[] = {\n>> +  0x01, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xf5, 0x01, 0x08, 0x19, \n>> 0xce,\n>> +  0xc2, 0xa8, 0xc6, 0x57, 0x69, 0x77, 0x79, 0x6e, 0x6e, 0xdd, 0x53, \n>> 0x65,\n>> +  0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x20, 0x44, 0x6f, 0x6d, 0x65, \n>> 0x20,\n>> +  0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x52, 0x65, 0x74, \n>> 0x69,\n>> +  0x6d, 0x65, 0x72, 0x85, 0x91, 0x34, 0x51, 0x95, 0x05, 0xca, 0x42, \n>> 0x52,\n>> +  0x44, 0x2d, 0x50, 0x4e, 0x2d, 0x33, 0x34, 0x35, 0xc0, 0xc1, 0x00, \n>> 0x78,\n>> +  0x01, 0x09, 0x19, 0xc6, 0x57, 0x69, 0x77, 0x79, 0x6e, 0x6e, 0xcb, \n>> 0x59,\n>> +  0x6f, 0x73, 0x65, 0x6d, 0x69, 0x74, 0x65, 0x20, 0x56, 0x34, 0xc6, \n>> 0x50,\n>> +  0x4e, 0x2d, 0x33, 0x34, 0x35, 0xc4, 0x76, 0x31, 0x2e, 0x31, 0x85, \n>> 0x91,\n>> +  0x34, 0x51, 0x95, 0x05, 0x89, 0x30, 0x1b, 0x8e, 0x25, 0xfa, 0xb2, \n>> 0x64,\n>> +  0x29, 0x03, 0xc0, 0xce, 0x59, 0x6f, 0x73, 0x65, 0x6d, 0x69, 0x74, \n>> 0x65,\n>> +  0x20, 0x56, 0x34, 0x20, 0x54, 0x31, 0xc1, 0x00, 0x00, 0x00, 0x00, \n>> 0xeb\n>> +};\n>> +unsigned int fru_yv4_sentineldome_board_bin_len = 144;\n>> +\n>> +/*\n>> +./frugen -s board.mfg=\"Wiwynn\" \\\n>> +        --set board.pname=\"Sentinel Dome\" \\\n>> +        --set text:board.pn=\"BRD-PN-345\" \\\n>> +        --board-date \"10/1/2017 12:58:00\" \\\n>> +        --set board.serial=\"123456\" \\\n>> +        --set product.pname=\"Yosemite V4\" \\\n>> +        --set product.mfg=\"Wiwynn\" \\\n>> +        --set product.ver=\"v1.1\" \\\n>> +        --set product.serial=\"123456\" \\\n>> +        --set product.atag=\"PLACEHOLDER\" \\\n>> +        --set text:product.pn=\"PN-345\" \\\n>> +        fru-yv4-sentineldome-chassis.bin\n>> +*/\n>> +/* EM Config: yosemite4_sentineldome_chassis.json */\n>> +/* Yosemite 4 Sentinel Dome Chassis FRU */\n>> +unsigned char fru_yv4_sentineldome_chassis_bin[] = {\n>> +  0x01, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0xf7, 0x01, 0x06, 0x19, \n>> 0xce,\n>> +  0xc2, 0xa8, 0xc6, 0x57, 0x69, 0x77, 0x79, 0x6e, 0x6e, 0xcd, 0x53, \n>> 0x65,\n>> +  0x6e, 0x74, 0x69, 0x6e, 0x65, 0x6c, 0x20, 0x44, 0x6f, 0x6d, 0x65, \n>> 0x85,\n>> +  0x91, 0x34, 0x51, 0x95, 0x05, 0xca, 0x42, 0x52, 0x44, 0x2d, 0x50, \n>> 0x4e,\n>> +  0x2d, 0x33, 0x34, 0x35, 0xc0, 0xc1, 0x00, 0xb6, 0x01, 0x07, 0x19, \n>> 0xc6,\n>> +  0x57, 0x69, 0x77, 0x79, 0x6e, 0x6e, 0xcb, 0x59, 0x6f, 0x73, 0x65, \n>> 0x6d,\n>> +  0x69, 0x74, 0x65, 0x20, 0x56, 0x34, 0xc6, 0x50, 0x4e, 0x2d, 0x33, \n>> 0x34,\n>> +  0x35, 0xc4, 0x76, 0x31, 0x2e, 0x31, 0x85, 0x91, 0x34, 0x51, 0x95, \n>> 0x05,\n>> +  0x89, 0x30, 0x1b, 0x8e, 0x25, 0xfa, 0xb2, 0x64, 0x29, 0x03, 0xc0, \n>> 0xc1,\n>> +  0x00, 0x00, 0x00, 0x59\n>> +};\n>> +unsigned int fru_yv4_sentineldome_chassis_bin_len = 112;\n>> +\n>> +/*\n>> +./frugen -s board.mfg=\"Wiwynn\" \\\n>> +      --set board.pname=\"Management Board wBMC\" \\\n>> +      --set text:board.pn=\"BRD-PN-345\" \\\n>> +      --board-date \"10/1/2017 12:58:00\" \\\n>> +      --set board.serial=\"123456\" \\\n>> +      --set product.pname=\"Yosemite V4\" \\\n>> +      --set product.mfg=\"Wiwynn\" \\\n>> +      --set product.ver=\"v1.1\" \\\n>> +      --set product.serial=\"123456\" \\\n>> +      --set product.atag=\"PLACEHOLDER\" \\\n>> +      --set text:product.pn=\"PN-345\" \\\n>> +      fru-yv4-eclosure.bin\n>> +*/\n>> +/* EM Config: yosemite4_chassis.json, yosemite4.json */\n>> +/* Yosemite 4 Sentinel Dome Enclosure FRU */\n>> +unsigned char fru_yv4_eclosure_bin[] = {\n>> +  0x01, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0xf6, 0x01, 0x07, 0x19, \n>> 0xce,\n>> +  0xc2, 0xa8, 0xc6, 0x57, 0x69, 0x77, 0x79, 0x6e, 0x6e, 0xd5, 0x4d, \n>> 0x61,\n>> +  0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x42, 0x6f, \n>> 0x61,\n>> +  0x72, 0x64, 0x20, 0x77, 0x42, 0x4d, 0x43, 0x85, 0x91, 0x34, 0x51, \n>> 0x95,\n>> +  0x05, 0xca, 0x42, 0x52, 0x44, 0x2d, 0x50, 0x4e, 0x2d, 0x33, 0x34, \n>> 0x35,\n>> +  0xc0, 0xc1, 0x00, 0x26, 0x01, 0x07, 0x19, 0xc6, 0x57, 0x69, 0x77, \n>> 0x79,\n>> +  0x6e, 0x6e, 0xcb, 0x59, 0x6f, 0x73, 0x65, 0x6d, 0x69, 0x74, 0x65, \n>> 0x20,\n>> +  0x56, 0x34, 0xc6, 0x50, 0x4e, 0x2d, 0x33, 0x34, 0x35, 0xc4, 0x76, \n>> 0x31,\n>> +  0x2e, 0x31, 0x85, 0x91, 0x34, 0x51, 0x95, 0x05, 0x89, 0x30, 0x1b, \n>> 0x8e,\n>> +  0x25, 0xfa, 0xb2, 0x64, 0x29, 0x03, 0xc0, 0xc1, 0x00, 0x00, 0x00, \n>> 0x59\n>> +};\n>> +unsigned int fru_yv4_eclosure_bin_len = 120;\n>> +\n>> +/* END OF EEPROM CONTENTS */\n>> +\n>> +static void fby4_i2c_init_fanboard(I2CSlave *fan_mux, size_t \n>> eepromSize)\n>> +{\n>> +\n>\n> extra white line\n>\n>> +    /* 2 fan boards */\n>> +    for (int i = 0; i <= 1; i++) {\n>> +        /* downstream bus */\n>> +        I2CBus *bus = pca954x_i2c_get_bus(fan_mux, i);\n>> +\n>> +        /* ti,adc128d818 @ 0x1f    (adc) */\n>> +        /* the driver will throw away the last 4 bits, set them 0 */\n>> +        uint16_t adc_values1[8] = {\n>\n> I would define these arrays as read only data.\n>\n>> +            0b011110000000, 0b010100010000,\n>> +            0b001000110000, 0b100000100000,\n>> +            0b011110000000, 0b010100010000,\n>> +            0b001000110000, 0b100000100000};\n>> +        adc128d818_init_with_values(bus,\n>> +                              0x1f, adc_values1, 8);\n>\n> This could be on one line.\n>\n>> +\n>> +        /* maxim,max31790 @ 0x20   (pwm) */\n>> +        i2c_slave_create_simple(bus,\n>> +                              TYPE_MAX31790, 0x20);\n>\n> same here.\n>\n>> +\n>> +        /*\n>> +         * ti,tca6424 @ 0x22       (gpio)\n>> +         * linux handles tca6424 with PCA953X_TYPE, same as pca9535\n>> +         * { \"pca9535\", 16 | PCA953X_TYPE | PCA_INT, },\n>> +         * { \"tca6424\", 24 | PCA953X_TYPE | PCA_INT, },\n>> +         * so we _could_ be fine here unless more than 16 gpios are \n>> used\n>> +         */\n>> +        i2c_slave_create_simple(bus,\n>> +                              TYPE_PCA9535, 0x22);\n>> +        /*\n>> +         * NOTE: above works and could use for gpio presence:\n>> +         * $ gpioget gpiochip2 2\n>> +         * 1\n>> +         */\n>> +\n>> +        /* maxim,max31790 @ 0x2f   (pwm) */\n>> +        i2c_slave_create_simple(bus,\n>> +                              TYPE_MAX31790, 0x2f);\n>> +\n>> +        /* maxim,max11615 @ 0x33   (adc) */\n>> +        uint16_t adc_values[8] = {\n>> +            0b011110000010, 0b010100011000,\n>> +            0b001000110100, 0b100000101001,\n>> +            0b011110000010, 0b010100011000,\n>> +            0b001000110100, 0b100000101001};\n>> +        max11615_init_with_values(bus,\n>> +                              0x33, adc_values, 8);\n>> +> +        at24c_eeprom_init_rom(\n>> +            bus, 0x52, eepromSize,\n>> +            fru_yv4_fanboard_bin,\n>> +            fru_yv4_fanboard_bin_len);\n>> +\n>> +        /* LED blink driver / gpio expander */\n>> +        /* nxp,pca9552 @ 0x61   (gpio) */\n>> +        i2c_slave_create_simple(bus,\n>> +                              TYPE_PCA9552, 0x61);\n>> +    }\n>> +}\n>> +\n>> +static void fby4_i2c_init_blade_chassis(I2CBus *bus, size_t eepromSize)\n>> +{\n>> +\n>\n> Extra white line.\n>\n>> +    /* Sentinel Dome Board EEPROMS */\n>> +    const uint8_t board_addr = 0x54;\n>> +    const uint8_t chassis_addr = 0x55;\n>\n> These variables look unnecessary.\n>\n>> +\n>> +    /* Board */\n>> +    at24c_eeprom_init_rom(bus, board_addr, eepromSize,\n>> +        fru_yv4_sentineldome_board_bin, \n>> fru_yv4_sentineldome_board_bin_len);\n>> +\n>> +    /* Chassis */\n>> +   at24c_eeprom_init_rom(bus, chassis_addr, eepromSize,\n>> +       fru_yv4_sentineldome_chassis_bin, \n>> fru_yv4_sentineldome_chassis_bin_len);\n>> +}\n>> +\n>> +static void fby4_i2c_init_multiple_blade_chassis(I2CBus **i2c,\n>> +    size_t eepromSize)\n>> +{\n>> +\n>\n> Extra white line.\n>\n>\n>> +    /* there is 8 blade chassis, but we only emulate 2 for \n>> performance reason */\n>> +    for (int bus = 1; bus <= (8 / 4); bus++) {\n>> +\n>> +        fby4_i2c_init_blade_chassis(i2c[bus], eepromSize);\n>> +    }\n>> +}\n>> +\n>> +static void fby4_i2c_init(AspeedMachineState *bmc)\n>> +{\n>> +    AspeedSoCState *soc = bmc->soc;\n>> +    I2CBus *i2c[16];\n>> +\n>> +    for (int i = 0; i < 16; i++) {\n>> +        i2c[i] = aspeed_i2c_get_bus(&soc->i2c, i);\n>> +    }\n>> +\n>> +    const size_t eepromSize = 128 * KiB;\n>> +\n>> +    const uint8_t enclosure_addr = 0x51;\n>> +\n>> +    /* Enclosure (EM Config: yosemite4_chassis.json, yosemite4.json) */\n>> +    at24c_eeprom_init_rom(i2c[1], enclosure_addr, eepromSize,\n>> +        fru_yv4_eclosure_bin, fru_yv4_eclosure_bin_len);\n>> +\n>> +    fby4_i2c_init_multiple_blade_chassis(i2c, eepromSize);\n>> +\n>> +    /* Yv4 fanboard connection */\n>> +    I2CSlave *fan_mux = i2c_slave_create_simple(i2c[14], \n>> TYPE_PCA9546, 0x74);\n>> +\n>> +    fby4_i2c_init_fanboard(fan_mux, eepromSize);\n>> +}\n>> +\n>> +static void fby4_reset(MachineState *state, ResetType type)\n>> +{\n>> +    qemu_devices_reset(type);\n>> +}\n>\n>\n> not needed\n>\n>> +static void aspeed_machine_fby4_class_init(ObjectClass *oc, const \n>> void *data)\n>> +{\n>> +    MachineClass *mc = MACHINE_CLASS(oc);\n>> +    AspeedMachineClass *amc = ASPEED_MACHINE_CLASS(oc);\n>> +\n>> +    mc->desc       = \"Facebook fby4 BMC (Cortex-A7)\";\n>> +    mc->reset      = fby4_reset;\n>> +    amc->fmc_model = \"mx66l1g45g\";\n>> +    amc->num_cs    = 2;\n>> +    amc->macs_mask = ASPEED_MAC3_ON;\n>> +    amc->i2c_init  = fby4_i2c_init;\n>> +    mc->default_ram_size = FBY4_BMC_RAM_SIZE;\n>> +    aspeed_machine_class_init_cpus_defaults(mc);\n>> +}> +\n>> +static const TypeInfo aspeed_ast2600_fby4_types[] = {\n>> +    {\n>> +        .name          = MACHINE_TYPE_NAME(\"fby4-bmc\"),\n>> +        .parent        = MACHINE_TYPE_NAME(\"ast2600-evb\"),\n>> +        .class_init    = aspeed_machine_fby4_class_init,\n>> +        .interfaces    = arm_machine_interfaces,\n>> +    }\n>> +};\n>> +\n>> +DEFINE_TYPES(aspeed_ast2600_fby4_types)\n>> diff --git a/hw/arm/meson.build b/hw/arm/meson.build\n>> index 84b8ec5fb5..ccbc23e549 100644\n>> --- a/hw/arm/meson.build\n>> +++ b/hw/arm/meson.build\n>> @@ -60,6 +60,7 @@ arm_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files(\n>>     'aspeed_ast2600_catalina.c',\n>>     'aspeed_ast2600_evb.c',\n>>     'aspeed_ast2600_fby35.c',\n>> +  'aspeed_ast2600_fby4.c',\n>>     'aspeed_ast2600_fuji.c',\n>>     'aspeed_ast2600_gb200nvl.c',\n>>     'aspeed_ast2600_qcom-dc-scm-v1.c',\n>\n> Thanks,\n>\n> C.","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=9elements.com header.i=@9elements.com header.a=rsa-sha256\n header.s=google header.b=BtwbAWUx;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g93983h8Gz1yJ0\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 06 May 2026 01:59:08 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wKIAR-0003Yd-TS; Tue, 05 May 2026 11:58:39 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <alexander.hansen@9elements.com>)\n id 1wKIAN-0003Xb-Ro\n for qemu-devel@nongnu.org; Tue, 05 May 2026 11:58:35 -0400","from mail-wr1-x431.google.com ([2a00:1450:4864:20::431])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <alexander.hansen@9elements.com>)\n id 1wKIAK-0000Si-1n\n for qemu-devel@nongnu.org; Tue, 05 May 2026 11:58:35 -0400","by mail-wr1-x431.google.com with SMTP id\n ffacd0b85a97d-44c350a5b87so1678617f8f.3\n for <qemu-devel@nongnu.org>; Tue, 05 May 2026 08:58:30 -0700 (PDT)","from [10.93.128.145] ([188.111.3.154])\n by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-450524831cdsm6085249f8f.5.2026.05.05.08.58.28\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Tue, 05 May 2026 08:58:29 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=9elements.com; s=google; t=1777996710; x=1778601510; darn=nongnu.org;\n h=content-transfer-encoding:in-reply-to:from:content-language\n :references:cc:to:subject:user-agent:mime-version:date:message-id\n :from:to:cc:subject:date:message-id:reply-to;\n bh=gxMPOwc1DrwlEUOVXlwTx8H5S+DnZZzRQ1hsNsMwY3o=;\n b=BtwbAWUxAnIatE4bR+EkHSvkVtNKPwBWXQGX5Pkvf0JmA2ChYmw0t6Pa1m8pX5aZBT\n ZKEQJyHraS4I+RPNRzoTZQ3resa7pmykED4uTFc/fKRv8+XFlLQarGSpsBRZ5bpyNcMK\n 8amn1xE7dyekKYW7fFlc2AS8S7W8XhwajpMUAyrCYYDr9u89Kgga8rWiEq3D1XHp2LqS\n yAMoAo97pMFDOlpvm388VgzRfeg9XvPA1XvGlwX/V+eVirFLmnKMZ4uWKOLUcO+1ytfN\n +x2SywynCIiUEZLOr9GTdi/0nqzbzNf1nDZqkpO1HBPrQd1zbnwsDBbzQjbfhfuwXw64\n icbQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777996710; x=1778601510;\n h=content-transfer-encoding:in-reply-to:from:content-language\n :references:cc:to:subject:user-agent:mime-version:date:message-id\n :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=gxMPOwc1DrwlEUOVXlwTx8H5S+DnZZzRQ1hsNsMwY3o=;\n b=OfGe0pvdefa+7SmeVyPB/oy44fNLiKacFGzJx6aRXL95mDb7S2Zhyo59fi1rNnQddO\n DD9UPwykv2YHcxNMnZWaIN4IbZ2Qc+Pb3fk82jPPIOUHKv+6A7TSm4ZYYgRu1/84n0kd\n po1z9Yv61m66VJQLImquULCoAdqRUIW5R3vgkwaqMA6r+T7nNzMTIlCAyiEyj3G2RTN/\n ndYrg44ZrlPR07yYmklMWTcLARXUbUxvt2ss2HC0yJ9jgI7DgDIWmxuM/FGoLuUg8wT1\n l6xcHRJN39T7iUfruWbxjCjO0Sz7WXGZZ0qRdfkGfKn86FqGocazf3spNmc3MTgIYhUj\n fi8Q==","X-Forwarded-Encrypted":"i=1;\n AFNElJ8IBL+wCa/n2j9HrwuYRosW2TObfVS38CxplO8NUZgtnGSoxa478Oe08TxS64kg109u3g2mtg77YFoN@nongnu.org","X-Gm-Message-State":"AOJu0YweUwgvvl6ctAwVeGwV6ioenfTYuKzl6MIDcRGSTEldd3t2D0CX\n I6+4uMocF9znheyEMQTLe2veNBEbRlS84TVbXf0W4JSOfjLx1U9n1mXEA/cBngcMhVs=","X-Gm-Gg":"AeBDiet6+wUIgUrvVUUnr6PQ65+yRLIgoKupIUSNhvlRCeACXjKjmJ4umAQaXAci+XD\n 7O0kD4wpUQNZbLbouhUpwCjXYk+yozguu7PMEBynMTE1iCp4LAmjxpDtWiEVckVR1E2pmb1v8LL\n FexjdtVC45xDveEEs5qXbmV9CVcv3xbZ+qiCYysu8h+rctSyzCZ/TRo+v8cO0rQ3dMa2UrH3Vaw\n /10u0FkXPKpq796rPbIHbUk22I7526DiLiQMkSnCTfYoi8DNXb67S85ZP7X/BnUM9YntyHPXXSq\n 5QLQlS6h+Qxw2NSYqUtsydKCI6mvVWTzjchAIhNebh/qAMcYOKCwBX5EjpCUxV9aP0KbkM0tv8x\n fxVm5mnixNBj/WeHJoahI0SqeiA9vzVT5Ay9sYQ+Fx7KYBV0XciKKvEVhdwweNTcUrbS8HfCi0V\n JmdiNbU7/5gGilQKegrG2IErXSzqNAZhODY4xPVRtW4XTFddqtdiAC","X-Received":"by 2002:a05:6000:40df:b0:43d:7dc2:b655 with SMTP id\n ffacd0b85a97d-450041b076fmr6850578f8f.15.1777996709569;\n Tue, 05 May 2026 08:58:29 -0700 (PDT)","Message-ID":"<7437bd8e-e938-4a36-9678-cabde10a5d17@9elements.com>","Date":"Tue, 5 May 2026 17:56:13 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH 4/4] ast2600: yosemite4 initial support","To":"=?utf-8?q?C=C3=A9dric_Le_Goater?= <clg@kaod.org>, qemu-devel@nongnu.org","Cc":"Peter Maydell <peter.maydell@linaro.org>,\n Steven Lee <steven_lee@aspeedtech.com>, Troy Lee <leetroy@gmail.com>,\n Jamin Lin <jamin_lin@aspeedtech.com>, Kane Chen <kane_chen@aspeedtech.com>,\n Andrew Jeffery <andrew@codeconstruct.com.au>, Joel Stanley <joel@jms.id.au>,\n qemu-arm@nongnu.org, Patrick Williams <patrickw3@meta.com>","References":"<20260504165043.213704-2-alexander.hansen@9elements.com>\n <20260504165043.213704-6-alexander.hansen@9elements.com>\n <7184f945-7e92-4394-b484-1eb336aa4161@kaod.org>","Content-Language":"en-US","From":"Alexander Hansen <alexander.hansen@9elements.com>","In-Reply-To":"<7184f945-7e92-4394-b484-1eb336aa4161@kaod.org>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=2a00:1450:4864:20::431;\n envelope-from=alexander.hansen@9elements.com; helo=mail-wr1-x431.google.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"}}]