xref: /qemu/hw/arm/fby35.c (revision 778e14cc5cd589d45b5f8884b029d463c20226bc)
1c2f58c2fSPeter Delevoryas /*
2c2f58c2fSPeter Delevoryas  * Copyright (c) Meta Platforms, Inc. and affiliates. (http://www.meta.com)
3c2f58c2fSPeter Delevoryas  *
4c2f58c2fSPeter Delevoryas  * This code is licensed under the GPL version 2 or later. See the COPYING
5c2f58c2fSPeter Delevoryas  * file in the top-level directory.
6c2f58c2fSPeter Delevoryas  */
7c2f58c2fSPeter Delevoryas 
8c2f58c2fSPeter Delevoryas #include "qemu/osdep.h"
9*778e14ccSPeter Delevoryas #include "qemu/units.h"
10*778e14ccSPeter Delevoryas #include "qapi/error.h"
11*778e14ccSPeter Delevoryas #include "sysemu/sysemu.h"
12c2f58c2fSPeter Delevoryas #include "hw/boards.h"
13*778e14ccSPeter Delevoryas #include "hw/arm/aspeed_soc.h"
14c2f58c2fSPeter Delevoryas 
15c2f58c2fSPeter Delevoryas #define TYPE_FBY35 MACHINE_TYPE_NAME("fby35")
16c2f58c2fSPeter Delevoryas OBJECT_DECLARE_SIMPLE_TYPE(Fby35State, FBY35);
17c2f58c2fSPeter Delevoryas 
18c2f58c2fSPeter Delevoryas struct Fby35State {
19c2f58c2fSPeter Delevoryas     MachineState parent_obj;
20*778e14ccSPeter Delevoryas 
21*778e14ccSPeter Delevoryas     MemoryRegion bmc_memory;
22*778e14ccSPeter Delevoryas     MemoryRegion bmc_dram;
23*778e14ccSPeter Delevoryas     MemoryRegion bmc_boot_rom;
24*778e14ccSPeter Delevoryas 
25*778e14ccSPeter Delevoryas     AspeedSoCState bmc;
26c2f58c2fSPeter Delevoryas };
27c2f58c2fSPeter Delevoryas 
28*778e14ccSPeter Delevoryas #define FBY35_BMC_RAM_SIZE (2 * GiB)
29*778e14ccSPeter Delevoryas 
30*778e14ccSPeter Delevoryas static void fby35_bmc_init(Fby35State *s)
31*778e14ccSPeter Delevoryas {
32*778e14ccSPeter Delevoryas     memory_region_init(&s->bmc_memory, OBJECT(s), "bmc-memory", UINT64_MAX);
33*778e14ccSPeter Delevoryas     memory_region_init_ram(&s->bmc_dram, OBJECT(s), "bmc-dram",
34*778e14ccSPeter Delevoryas                            FBY35_BMC_RAM_SIZE, &error_abort);
35*778e14ccSPeter Delevoryas 
36*778e14ccSPeter Delevoryas     object_initialize_child(OBJECT(s), "bmc", &s->bmc, "ast2600-a3");
37*778e14ccSPeter Delevoryas     object_property_set_int(OBJECT(&s->bmc), "ram-size", FBY35_BMC_RAM_SIZE,
38*778e14ccSPeter Delevoryas                             &error_abort);
39*778e14ccSPeter Delevoryas     object_property_set_link(OBJECT(&s->bmc), "memory", OBJECT(&s->bmc_memory),
40*778e14ccSPeter Delevoryas                              &error_abort);
41*778e14ccSPeter Delevoryas     object_property_set_link(OBJECT(&s->bmc), "dram", OBJECT(&s->bmc_dram),
42*778e14ccSPeter Delevoryas                              &error_abort);
43*778e14ccSPeter Delevoryas     object_property_set_int(OBJECT(&s->bmc), "hw-strap1", 0x000000C0,
44*778e14ccSPeter Delevoryas                             &error_abort);
45*778e14ccSPeter Delevoryas     object_property_set_int(OBJECT(&s->bmc), "hw-strap2", 0x00000003,
46*778e14ccSPeter Delevoryas                             &error_abort);
47*778e14ccSPeter Delevoryas     aspeed_soc_uart_set_chr(&s->bmc, ASPEED_DEV_UART5, serial_hd(0));
48*778e14ccSPeter Delevoryas     qdev_realize(DEVICE(&s->bmc), NULL, &error_abort);
49*778e14ccSPeter Delevoryas 
50*778e14ccSPeter Delevoryas     aspeed_board_init_flashes(&s->bmc.fmc, "n25q00", 2, 0);
51*778e14ccSPeter Delevoryas }
52*778e14ccSPeter Delevoryas 
53c2f58c2fSPeter Delevoryas static void fby35_init(MachineState *machine)
54c2f58c2fSPeter Delevoryas {
55*778e14ccSPeter Delevoryas     Fby35State *s = FBY35(machine);
56*778e14ccSPeter Delevoryas 
57*778e14ccSPeter Delevoryas     fby35_bmc_init(s);
58c2f58c2fSPeter Delevoryas }
59c2f58c2fSPeter Delevoryas 
60c2f58c2fSPeter Delevoryas static void fby35_class_init(ObjectClass *oc, void *data)
61c2f58c2fSPeter Delevoryas {
62c2f58c2fSPeter Delevoryas     MachineClass *mc = MACHINE_CLASS(oc);
63c2f58c2fSPeter Delevoryas 
64c2f58c2fSPeter Delevoryas     mc->desc = "Meta Platforms fby35";
65c2f58c2fSPeter Delevoryas     mc->init = fby35_init;
66*778e14ccSPeter Delevoryas     mc->no_floppy = 1;
67*778e14ccSPeter Delevoryas     mc->no_cdrom = 1;
68*778e14ccSPeter Delevoryas     mc->min_cpus = mc->max_cpus = mc->default_cpus = 2;
69c2f58c2fSPeter Delevoryas }
70c2f58c2fSPeter Delevoryas 
71c2f58c2fSPeter Delevoryas static const TypeInfo fby35_types[] = {
72c2f58c2fSPeter Delevoryas     {
73c2f58c2fSPeter Delevoryas         .name = MACHINE_TYPE_NAME("fby35"),
74c2f58c2fSPeter Delevoryas         .parent = TYPE_MACHINE,
75c2f58c2fSPeter Delevoryas         .class_init = fby35_class_init,
76c2f58c2fSPeter Delevoryas         .instance_size = sizeof(Fby35State),
77c2f58c2fSPeter Delevoryas     },
78c2f58c2fSPeter Delevoryas };
79c2f58c2fSPeter Delevoryas 
80c2f58c2fSPeter Delevoryas DEFINE_TYPES(fby35_types);
81