Oh sure, yeah sounds good to me!

Acked-by: Peter Delevoryas <[email protected]>

On Tue, May 12, 2026, at 2:39 AM, Cédric Le Goater wrote:
> Hi,
> 
> + Peter for awareness. Forgot to add you, sorry about that.
> 
> It would be nice to have an Ack for this removal.
> 
> Thanks,
> 
> C.
> 
> On 5/10/26 18:57, Cédric Le Goater wrote:
> > The fby35 machine was deprecated in QEMU 10.2 and is now removed in
> > QEMU 11.1.
> > 
> > This multi-SoC machine was added as an example of heterogeneous
> > systems, but the models never evolved and no public firmware is
> > available to boot it. Users needing multi-SoC emulation should use the
> > ast2700fc machine instead, which is based on newer AST2700 SoCs with
> > better support.
> > 
> > Signed-off-by: Cédric Le Goater <[email protected]>
> > ---
> >   MAINTAINERS                     |   2 -
> >   docs/about/deprecated.rst       |  10 --
> >   docs/about/removed-features.rst |  10 ++
> >   docs/system/arm/fby35.rst       |  52 --------
> >   docs/system/target-arm.rst      |   1 -
> >   hw/arm/fby35.c                  | 203 --------------------------------
> >   hw/arm/meson.build              |   3 +-
> >   7 files changed, 11 insertions(+), 270 deletions(-)
> >   delete mode 100644 docs/system/arm/fby35.rst
> >   delete mode 100644 hw/arm/fby35.c
> > 
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index 9d3d64595370..14c8fe0da402 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -1276,12 +1276,10 @@ F: include/hw/*/*aspeed*
> >   F: hw/net/ftgmac100.c
> >   F: include/hw/net/ftgmac100.h
> >   F: docs/system/arm/aspeed.rst
> > -F: docs/system/arm/fby35.rst
> >   F: docs/specs/aspeed*
> >   F: tests/functional/*/*aspeed*
> >   F: tests/*/*aspeed*
> >   F: tests/*/*ast2700*
> > -F: hw/arm/fby35.c
> >   F: pc-bios/ast27x0_bootrom.bin
> >   F: roms/vbootrom
> >   
> > diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst
> > index e416f3d8a74b..bf6182d61c6e 100644
> > --- a/docs/about/deprecated.rst
> > +++ b/docs/about/deprecated.rst
> > @@ -250,16 +250,6 @@ deprecated; use the new name ``dtb-randomness`` 
> > instead. The new name
> >   better reflects the way this property affects all random data within
> >   the device tree blob, not just the ``kaslr-seed`` node.
> >   
> > -Arm ``fby35`` machine (since 10.2)
> > -''''''''''''''''''''''''''''''''''
> > -
> > -The ``fby35`` machine was originally added as an example of a
> > -multi-SoC system, with the expectation the models would evolve over
> > -time in an heterogeneous system. This hasn't happened and no public
> > -firmware is available to boot it. It can be replaced by the
> > -``ast2700fc``, another multi-SoC machine based on the newer AST2700
> > -SoCs which are excepted to receive better support in the future.
> > -
> >   
> >   RISC-V default machine option (since 10.0)
> >   ''''''''''''''''''''''''''''''''''''''''''
> > diff --git a/docs/about/removed-features.rst 
> > b/docs/about/removed-features.rst
> > index 2da8283d0e1e..9bd83b183f46 100644
> > --- a/docs/about/removed-features.rst
> > +++ b/docs/about/removed-features.rst
> > @@ -1213,6 +1213,16 @@ models, it can be replaced by the ``ast2500-evb`` 
> > machine using the
> >   ``fmc-model`` option to specify the flash type. The I2C devices
> >   connected to the board can be defined via the QEMU command line.
> >   
> > +Arm ``fby35`` machine (removed in 11.1)
> > +'''''''''''''''''''''''''''''''''''''''
> > +
> > +The ``fby35`` machine was originally added as an example of a
> > +multi-SoC system, with the expectation the models would evolve over
> > +time in an heterogeneous system. This hasn't happened and no public
> > +firmware is available to boot it. It can be replaced by the
> > +``ast2700fc``, another multi-SoC machine based on the newer AST2700
> > +SoCs which are excepted to receive better support in the future.
> > +
> >   linux-user mode CPUs
> >   --------------------
> >   
> > diff --git a/docs/system/arm/fby35.rst b/docs/system/arm/fby35.rst
> > deleted file mode 100644
> > index e19274e75c81..000000000000
> > --- a/docs/system/arm/fby35.rst
> > +++ /dev/null
> > @@ -1,52 +0,0 @@
> > -Facebook Yosemite v3.5 Platform and CraterLake Server (``fby35``)
> > -==================================================================
> > -
> > -Facebook has a series of multi-node compute server designs named
> > -Yosemite. The most recent version released was
> > -`Yosemite v3 
> > <https://www.opencompute.org/documents/ocp-yosemite-v3-platform-design-specification-1v16-pdf>`__.
> > -
> > -Yosemite v3.5 is an iteration on this design, and is very similar: there's 
> > a
> > -baseboard with a BMC, and 4 server slots. The new server board design 
> > termed
> > -"CraterLake" includes a Bridge IC (BIC), with room for expansion boards to
> > -include various compute accelerators (video, inferencing, etc). At the 
> > moment,
> > -only the first server slot's BIC is included.
> > -
> > -Yosemite v3.5 is itself a sled which fits into a 40U chassis, and 3 sleds
> > -can be fit into a chassis. See `here 
> > <https://www.opencompute.org/products-chiplets/237/wiwynn-yosemite-v3-server>`__
> > -for an example.
> > -
> > -In this generation, the BMC is an AST2600 and each BIC is an AST1030. The 
> > BMC
> > -runs `OpenBMC <https://github.com/facebook/openbmc>`__, and the BIC runs
> > -`OpenBIC <https://github.com/facebook/openbic>`__.
> > -
> > -Firmware images can be retrieved from the Github releases or built from the
> > -source code, see the README's for instructions on that. This image uses the
> > -"fby35" machine recipe from OpenBMC, and the "yv35-cl" target from OpenBIC.
> > -Some reference images can also be found here:
> > -
> > -.. code-block:: bash
> > -
> > -    $ wget 
> > https://github.com/facebook/openbmc/releases/download/openbmc-e2294ff5d31d/fby35.mtd
> > -    $ wget 
> > https://github.com/peterdelevoryas/OpenBIC/releases/download/oby35-cl-2022.13.01/Y35BCL.elf
> > -
> > -Since this machine has multiple SoC's, each with their own serial console, 
> > the
> > -recommended way to run it is to allocate a pseudoterminal for each serial
> > -console and let the monitor use stdio. Also, starting in a paused state is
> > -useful because it allows you to attach to the pseudoterminals before the 
> > boot
> > -process starts.
> > -
> > -.. code-block:: bash
> > -
> > -    $ qemu-system-arm -machine fby35 \
> > -        -drive file=fby35.mtd,format=raw,if=mtd \
> > -        -device loader,file=Y35BCL.elf,addr=0,cpu-num=2 \
> > -        -serial pty -serial pty -serial mon:stdio \
> > -        -display none -S
> > -    $ screen /dev/tty0 # In a separate TMUX pane, terminal window, etc.
> > -    $ screen /dev/tty1
> > -    $ (qemu) c    # Start the boot process once screen is setup.
> > -
> > -This machine model supports emulation of the boot from the CE0 flash 
> > device by
> > -setting option ``execute-in-place``. When using this option, the CPU 
> > fetches
> > -instructions to execute by reading CE0 and not from a preloaded ROM
> > -initialized at machine init time. As a result, execution will be slower.
> > diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst
> > index c57102a4149f..e34492402f0a 100644
> > --- a/docs/system/target-arm.rst
> > +++ b/docs/system/target-arm.rst
> > @@ -87,7 +87,6 @@ Board-specific documentation
> >      arm/cubieboard
> >      arm/emcraft-sf2
> >      arm/exynos
> > -   arm/fby35
> >      arm/musicpal
> >      arm/kzm
> >      arm/nrf
> > diff --git a/hw/arm/fby35.c b/hw/arm/fby35.c
> > deleted file mode 100644
> > index d3bfd2c7d26a..000000000000
> > --- a/hw/arm/fby35.c
> > +++ /dev/null
> > @@ -1,203 +0,0 @@
> > -/*
> > - * Copyright (c) Meta Platforms, Inc. and affiliates. (http://www.meta.com)
> > - *
> > - * This code is licensed under the GPL version 2 or later. See the COPYING
> > - * file in the top-level directory.
> > - */
> > -
> > -#include "qemu/osdep.h"
> > -#include "qemu/units.h"
> > -#include "qapi/error.h"
> > -#include "system/system.h"
> > -#include "system/block-backend.h"
> > -#include "hw/core/boards.h"
> > -#include "hw/core/qdev-clock.h"
> > -#include "hw/arm/aspeed_soc.h"
> > -#include "hw/arm/boot.h"
> > -#include "hw/arm/machines-qom.h"
> > -
> > -#define TYPE_FBY35 MACHINE_TYPE_NAME("fby35")
> > -OBJECT_DECLARE_SIMPLE_TYPE(Fby35State, FBY35);
> > -
> > -struct Fby35State {
> > -    MachineState parent_obj;
> > -
> > -    MemoryRegion bmc_memory;
> > -    MemoryRegion bmc_dram;
> > -    MemoryRegion bmc_boot_rom;
> > -    MemoryRegion bic_memory;
> > -    Clock *bic_sysclk;
> > -
> > -    Aspeed2600SoCState bmc;
> > -    Aspeed10x0SoCState bic;
> > -
> > -    bool mmio_exec;
> > -};
> > -
> > -#define FBY35_BMC_RAM_SIZE (2 * GiB)
> > -#define FBY35_BMC_FIRMWARE_ADDR 0x0
> > -
> > -static void fby35_bmc_write_boot_rom(DriveInfo *dinfo, MemoryRegion *mr,
> > -                                     hwaddr offset, size_t rom_size,
> > -                                     Error **errp)
> > -{
> > -    BlockBackend *blk = blk_by_legacy_dinfo(dinfo);
> > -    g_autofree void *storage = NULL;
> > -    int64_t size;
> > -
> > -    /*
> > -     * The block backend size should have already been 'validated' by
> > -     * the creation of the m25p80 object.
> > -     */
> > -    size = blk_getlength(blk);
> > -    if (size <= 0) {
> > -        error_setg(errp, "failed to get flash size");
> > -        return;
> > -    }
> > -
> > -    if (rom_size > size) {
> > -        rom_size = size;
> > -    }
> > -
> > -    storage = g_malloc0(rom_size);
> > -    if (blk_pread(blk, 0, rom_size, storage, 0) < 0) {
> > -        error_setg(errp, "failed to read the initial flash content");
> > -        return;
> > -    }
> > -
> > -    /* TODO: find a better way to install the ROM */
> > -    memcpy(memory_region_get_ram_ptr(mr) + offset, storage, rom_size);
> > -}
> > -
> > -static void fby35_bmc_init(Fby35State *s)
> > -{
> > -    AspeedSoCState *soc;
> > -    AspeedSoCClass *sc;
> > -
> > -    object_initialize_child(OBJECT(s), "bmc", &s->bmc, "ast2600-a3");
> > -    soc = ASPEED_SOC(&s->bmc);
> > -    sc = ASPEED_SOC_GET_CLASS(soc);
> > -
> > -    memory_region_init(&s->bmc_memory, OBJECT(&s->bmc), "bmc-memory",
> > -                       UINT64_MAX);
> > -    memory_region_add_subregion(get_system_memory(), 0, &s->bmc_memory);
> > -    memory_region_init_ram(&s->bmc_dram, OBJECT(&s->bmc), "bmc-dram",
> > -                           FBY35_BMC_RAM_SIZE, &error_abort);
> > -
> > -    object_property_set_int(OBJECT(&s->bmc), "ram-size", 
> > FBY35_BMC_RAM_SIZE,
> > -                            &error_abort);
> > -    object_property_set_link(OBJECT(&s->bmc), "memory", 
> > OBJECT(&s->bmc_memory),
> > -                             &error_abort);
> > -    object_property_set_link(OBJECT(&s->bmc), "dram", OBJECT(&s->bmc_dram),
> > -                             &error_abort);
> > -    object_property_set_int(OBJECT(&s->bmc), "hw-strap1", 0x000000C0,
> > -                            &error_abort);
> > -    object_property_set_int(OBJECT(&s->bmc), "hw-strap2", 0x00000003,
> > -                            &error_abort);
> > -    aspeed_soc_uart_set_chr(soc->uart, ASPEED_DEV_UART5, sc->uarts_base,
> > -                            sc->uarts_num, serial_hd(0));
> > -    qdev_realize(DEVICE(&s->bmc), NULL, &error_abort);
> > -
> > -    aspeed_board_init_flashes(&soc->fmc, "n25q00", 2, 0);
> > -
> > -    /* Install first FMC flash content as a boot rom. */
> > -    if (!s->mmio_exec) {
> > -        DriveInfo *mtd0 = drive_get(IF_MTD, 0, 0);
> > -
> > -        if (mtd0) {
> > -            uint64_t rom_size = memory_region_size(&soc->spi_boot);
> > -
> > -            memory_region_init_rom(&s->bmc_boot_rom, NULL, 
> > "aspeed.boot_rom",
> > -                                   rom_size, &error_abort);
> > -            memory_region_add_subregion_overlap(&soc->spi_boot_container, 
> > 0,
> > -                                                &s->bmc_boot_rom, 1);
> > -
> > -            fby35_bmc_write_boot_rom(mtd0, &s->bmc_boot_rom,
> > -                                     FBY35_BMC_FIRMWARE_ADDR,
> > -                                     rom_size, &error_abort);
> > -        }
> > -    }
> > -}
> > -
> > -static void fby35_bic_init(Fby35State *s)
> > -{
> > -    AspeedSoCState *soc;
> > -    AspeedSoCClass *sc;
> > -
> > -    s->bic_sysclk = clock_new(OBJECT(s), "SYSCLK");
> > -    clock_set_hz(s->bic_sysclk, 200000000ULL);
> > -
> > -    object_initialize_child(OBJECT(s), "bic", &s->bic, "ast1030-a1");
> > -    soc = ASPEED_SOC(&s->bic);
> > -    sc = ASPEED_SOC_GET_CLASS(soc);
> > -
> > -    memory_region_init(&s->bic_memory, OBJECT(&s->bic), "bic-memory",
> > -                       UINT64_MAX);
> > -
> > -    qdev_connect_clock_in(DEVICE(&s->bic), "sysclk", s->bic_sysclk);
> > -    object_property_set_link(OBJECT(&s->bic), "memory", 
> > OBJECT(&s->bic_memory),
> > -                             &error_abort);
> > -    aspeed_soc_uart_set_chr(soc->uart, ASPEED_DEV_UART5, sc->uarts_base,
> > -                            sc->uarts_num, serial_hd(1));
> > -    qdev_realize(DEVICE(&s->bic), NULL, &error_abort);
> > -
> > -    aspeed_board_init_flashes(&soc->fmc, "sst25vf032b", 2, 2);
> > -    aspeed_board_init_flashes(&soc->spi[0], "sst25vf032b", 2, 4);
> > -    aspeed_board_init_flashes(&soc->spi[1], "sst25vf032b", 2, 6);
> > -}
> > -
> > -static void fby35_init(MachineState *machine)
> > -{
> > -    Fby35State *s = FBY35(machine);
> > -
> > -    fby35_bmc_init(s);
> > -    fby35_bic_init(s);
> > -}
> > -
> > -
> > -static bool fby35_get_mmio_exec(Object *obj, Error **errp)
> > -{
> > -    return FBY35(obj)->mmio_exec;
> > -}
> > -
> > -static void fby35_set_mmio_exec(Object *obj, bool value, Error **errp)
> > -{
> > -    FBY35(obj)->mmio_exec = value;
> > -}
> > -
> > -static void fby35_instance_init(Object *obj)
> > -{
> > -    FBY35(obj)->mmio_exec = false;
> > -}
> > -
> > -static void fby35_class_init(ObjectClass *oc, const void *data)
> > -{
> > -    MachineClass *mc = MACHINE_CLASS(oc);
> > -
> > -    mc->desc = "Meta Platforms fby35";
> > -    mc->deprecation_reason = "For a multi-soc machine, use 'ast2700fc' 
> > instead";
> > -    mc->init = fby35_init;
> > -    mc->no_floppy = 1;
> > -    mc->no_cdrom = 1;
> > -    mc->auto_create_sdcard = true;
> > -    mc->min_cpus = mc->max_cpus = mc->default_cpus = 3;
> > -
> > -    object_class_property_add_bool(oc, "execute-in-place",
> > -                                   fby35_get_mmio_exec,
> > -                                   fby35_set_mmio_exec);
> > -    object_class_property_set_description(oc, "execute-in-place",
> > -                           "boot directly from CE0 flash device");
> > -}
> > -
> > -static const TypeInfo fby35_types[] = {
> > -    {
> > -        .name = MACHINE_TYPE_NAME("fby35"),
> > -        .parent = TYPE_MACHINE,
> > -        .class_init = fby35_class_init,
> > -        .instance_size = sizeof(Fby35State),
> > -        .instance_init = fby35_instance_init,
> > -        .interfaces = arm_machine_interfaces,
> > -    },
> > -};
> > -
> > -DEFINE_TYPES(fby35_types);
> > diff --git a/hw/arm/meson.build b/hw/arm/meson.build
> > index 063abf2cf654..80068f70bb9c 100644
> > --- a/hw/arm/meson.build
> > +++ b/hw/arm/meson.build
> > @@ -62,8 +62,7 @@ arm_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files(
> >     'aspeed_ast2600_gb200nvl.c',
> >     'aspeed_ast2600_rainier.c',
> >     'aspeed_ast10x0.c',
> > -  'aspeed_ast10x0_evb.c',
> > -  'fby35.c'))
> > +  'aspeed_ast10x0_evb.c'))
> >   arm_common_ss.add(when: ['CONFIG_ASPEED_SOC', 'TARGET_AARCH64'], if_true: 
> > files(
> >     'aspeed_ast1700.c',
> >     'aspeed_ast27x0.c',
> 
> 

Reply via email to