Message ID | 20220704215457.38332-8-peter@pjd.dev (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/8] hw/i2c/pca954x: Add method to get channels | expand |
On 7/4/22 23:54, Peter Delevoryas wrote: > With the BIC, the easiest way to run everything is to create two pty's > for each SoC and reserve stdin/stdout for the monitor: > > 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 > qemu-system-arm -machine fby35 \ > -drive file=fby35.mtd,format=raw,if=mtd \ > -device loader,file=fby35.mtd,addr=0,cpu-num=0 \ > -serial pty -serial pty -serial mon:stdio -display none -S > > screen /dev/ttys0 > screen /dev/ttys1 > (qemu) c > > Signed-off-by: Peter Delevoryas <peter@pjd.dev> Reviewed-by: Cédric Le Goater <clg@kaod.org> Thanks, C. > --- > hw/arm/fby35.c | 27 ++++++++++++++++++++++++++- > 1 file changed, 26 insertions(+), 1 deletion(-) > > diff --git a/hw/arm/fby35.c b/hw/arm/fby35.c > index d3edfa3b10..031602800f 100644 > --- a/hw/arm/fby35.c > +++ b/hw/arm/fby35.c > @@ -11,7 +11,9 @@ > #include "sysemu/sysemu.h" > #include "sysemu/block-backend.h" > #include "hw/boards.h" > +#include "hw/qdev-clock.h" > #include "hw/arm/aspeed_soc.h" > +#include "hw/arm/boot.h" > > #define TYPE_FBY35 MACHINE_TYPE_NAME("fby35") > OBJECT_DECLARE_SIMPLE_TYPE(Fby35State, FBY35); > @@ -22,8 +24,11 @@ struct Fby35State { > MemoryRegion bmc_memory; > MemoryRegion bmc_dram; > MemoryRegion bmc_boot_rom; > + MemoryRegion bic_memory; > + Clock *bic_sysclk; > > AspeedSoCState bmc; > + AspeedSoCState bic; > > bool mmio_exec; > }; > @@ -110,11 +115,31 @@ static void fby35_bmc_init(Fby35State *s) > } > } > > +static void fby35_bic_init(Fby35State *s) > +{ > + s->bic_sysclk = clock_new(OBJECT(s), "SYSCLK"); > + clock_set_hz(s->bic_sysclk, 200000000ULL); > + > + memory_region_init(&s->bic_memory, OBJECT(s), "bic-memory", UINT64_MAX); > + > + object_initialize_child(OBJECT(s), "bic", &s->bic, "ast1030-a1"); > + 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(&s->bic, ASPEED_DEV_UART5, serial_hd(1)); > + qdev_realize(DEVICE(&s->bic), NULL, &error_abort); > + > + aspeed_board_init_flashes(&s->bic.fmc, "sst25vf032b", 2, 2); > + aspeed_board_init_flashes(&s->bic.spi[0], "sst25vf032b", 2, 4); > + aspeed_board_init_flashes(&s->bic.spi[1], "sst25vf032b", 2, 6); > +} > + > static void fby35_init(MachineState *machine) > { > Fby35State *s = FBY35(machine); > > fby35_bmc_init(s); > + fby35_bic_init(s); > } > > > @@ -141,7 +166,7 @@ static void fby35_class_init(ObjectClass *oc, void *data) > mc->init = fby35_init; > mc->no_floppy = 1; > mc->no_cdrom = 1; > - mc->min_cpus = mc->max_cpus = mc->default_cpus = 2; > + mc->min_cpus = mc->max_cpus = mc->default_cpus = 3; > > object_class_property_add_bool(oc, "execute-in-place", > fby35_get_mmio_exec,
diff --git a/hw/arm/fby35.c b/hw/arm/fby35.c index d3edfa3b10..031602800f 100644 --- a/hw/arm/fby35.c +++ b/hw/arm/fby35.c @@ -11,7 +11,9 @@ #include "sysemu/sysemu.h" #include "sysemu/block-backend.h" #include "hw/boards.h" +#include "hw/qdev-clock.h" #include "hw/arm/aspeed_soc.h" +#include "hw/arm/boot.h" #define TYPE_FBY35 MACHINE_TYPE_NAME("fby35") OBJECT_DECLARE_SIMPLE_TYPE(Fby35State, FBY35); @@ -22,8 +24,11 @@ struct Fby35State { MemoryRegion bmc_memory; MemoryRegion bmc_dram; MemoryRegion bmc_boot_rom; + MemoryRegion bic_memory; + Clock *bic_sysclk; AspeedSoCState bmc; + AspeedSoCState bic; bool mmio_exec; }; @@ -110,11 +115,31 @@ static void fby35_bmc_init(Fby35State *s) } } +static void fby35_bic_init(Fby35State *s) +{ + s->bic_sysclk = clock_new(OBJECT(s), "SYSCLK"); + clock_set_hz(s->bic_sysclk, 200000000ULL); + + memory_region_init(&s->bic_memory, OBJECT(s), "bic-memory", UINT64_MAX); + + object_initialize_child(OBJECT(s), "bic", &s->bic, "ast1030-a1"); + 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(&s->bic, ASPEED_DEV_UART5, serial_hd(1)); + qdev_realize(DEVICE(&s->bic), NULL, &error_abort); + + aspeed_board_init_flashes(&s->bic.fmc, "sst25vf032b", 2, 2); + aspeed_board_init_flashes(&s->bic.spi[0], "sst25vf032b", 2, 4); + aspeed_board_init_flashes(&s->bic.spi[1], "sst25vf032b", 2, 6); +} + static void fby35_init(MachineState *machine) { Fby35State *s = FBY35(machine); fby35_bmc_init(s); + fby35_bic_init(s); } @@ -141,7 +166,7 @@ static void fby35_class_init(ObjectClass *oc, void *data) mc->init = fby35_init; mc->no_floppy = 1; mc->no_cdrom = 1; - mc->min_cpus = mc->max_cpus = mc->default_cpus = 2; + mc->min_cpus = mc->max_cpus = mc->default_cpus = 3; object_class_property_add_bool(oc, "execute-in-place", fby35_get_mmio_exec,
With the BIC, the easiest way to run everything is to create two pty's for each SoC and reserve stdin/stdout for the monitor: 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 qemu-system-arm -machine fby35 \ -drive file=fby35.mtd,format=raw,if=mtd \ -device loader,file=fby35.mtd,addr=0,cpu-num=0 \ -serial pty -serial pty -serial mon:stdio -display none -S screen /dev/ttys0 screen /dev/ttys1 (qemu) c Signed-off-by: Peter Delevoryas <peter@pjd.dev> --- hw/arm/fby35.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-)