|
From: | BALATON Zoltan |
Subject: | Re: [PATCH v4 6/6] hw/ppc: Add emulation of Genesi/bPlan Pegasos II |
Date: | Mon, 8 Mar 2021 12:45:41 +0100 (CET) |
On Thu, 4 Mar 2021, BALATON Zoltan wrote:
On Wed, 3 Mar 2021, David Gibson wrote:On Tue, Mar 02, 2021 at 10:13:19AM +0100, BALATON Zoltan wrote:On Tue, 2 Mar 2021, Philippe Mathieu-Daudé wrote:On 2/25/21 8:47 PM, BALATON Zoltan wrote:Add new machine called pegasos2 emulating the Genesi/bPlan Pegasos II, a PowerPC board based on the Marvell MV64361 system controller and the VIA VT8231 integrated south bridge/superio chips. It can run Linux, AmigaOS and a wide range of MorphOS versions. Currently a firmware ROM image is needed to boot and only MorphOS has a video driver to produce graphics output. Linux could work too but distros that supported this machine don't include usual video drivers so those only run with serial console for now. Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> --- MAINTAINERS | 10 ++ default-configs/devices/ppc-softmmu.mak | 2 + hw/ppc/Kconfig | 10 ++ hw/ppc/meson.build | 2 + hw/ppc/pegasos2.c | 144 ++++++++++++++++++++++++ 5 files changed, 168 insertions(+) create mode 100644 hw/ppc/pegasos2.c diff --git a/MAINTAINERS b/MAINTAINERS index 9b2aa18e1f..a023217702 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1345,6 +1345,16 @@ F: pc-bios/canyonlands.dt[sb] F: pc-bios/u-boot-sam460ex-20100605.bin F: roms/u-boot-sam460ex +pegasos2 +M: BALATON Zoltan <balaton@eik.bme.hu> +R: David Gibson <david@gibson.dropbear.id.au>:)He's also listed as reviewer for the sam460ex and I think as the PPC maintainer probably should be notified about changes that's why this is here. I guess he can complain or submit a patch later if he wants to be removed.Including me as reviewer is fine for now.+L: qemu-ppc@nongnu.org +S: Maintained +F: hw/ppc/pegasos2.c +F: hw/pci-host/mv64361.c +F: hw/pci-host/mv643xx.h +F: include/hw/pci-host/mv64361.h + RISC-V Machines --------------- OpenTitandiff --git a/default-configs/devices/ppc-softmmu.mak b/default-configs/devices/ppc-softmmu.makindex 61b78b844d..4535993d8d 100644 --- a/default-configs/devices/ppc-softmmu.mak +++ b/default-configs/devices/ppc-softmmu.mak @@ -14,5 +14,7 @@ CONFIG_SAM460EX=y CONFIG_MAC_OLDWORLD=y CONFIG_MAC_NEWWORLD=y +CONFIG_PEGASOS2=y + # For PReP CONFIG_PREP=y diff --git a/hw/ppc/Kconfig b/hw/ppc/Kconfig index d11dc30509..98d8dd1a84 100644 --- a/hw/ppc/Kconfig +++ b/hw/ppc/Kconfig @@ -68,6 +68,16 @@ config SAM460EX select USB_OHCI select FDT_PPC +config PEGASOS2 + bool + select MV64361 + select VT82C686 + select IDE_VIA + select SMBUS_EEPROM +# These should come with VT82C686 + select APM + select ACPI_X86 + config PREP bool imply PCI_DEVICES diff --git a/hw/ppc/meson.build b/hw/ppc/meson.build index 218631c883..86d6f379d1 100644 --- a/hw/ppc/meson.build +++ b/hw/ppc/meson.build @@ -78,5 +78,7 @@ ppc_ss.add(when: 'CONFIG_E500', if_true: files( )) # PowerPC 440 Xilinx ML507 reference board. ppc_ss.add(when: 'CONFIG_VIRTEX', if_true: files('virtex_ml507.c')) +# Pegasos2 +ppc_ss.add(when: 'CONFIG_PEGASOS2', if_true: files('pegasos2.c')) hw_arch += {'ppc': ppc_ss} diff --git a/hw/ppc/pegasos2.c b/hw/ppc/pegasos2.c new file mode 100644 index 0000000000..427e884fbf --- /dev/null +++ b/hw/ppc/pegasos2.c @@ -0,0 +1,144 @@ +/* + * QEMU PowerPC CHRP (Genesi/bPlan Pegasos II) hardware System Emulator + * + * Copyright (c) 2018-2020 BALATON Zoltan2018-2021Not really. I've done this between Christmas of 2018 and 2020. This year were only changes for upstreaming and review comments so I preserved the dates to record when the actual code was written.Fwiw, Red Hat's internal guidelines have the opinion that the years don't matter that much and are usually out of date, so they suggest simply "Copyright Red Hat." for contributions from us. IANAL.I think including the year originally comes from that in some jurisdictions there is or was a limit for how long copyright is reserved starting from this date and then each modification may restart that period but I read somewhere that it's not any more relevant. Anyway, I've just added the year to record when did I do it and the whole copyright message is mostly to state who's to blame for this as it's under GPL anyway so copyright does not matter much and the commit log also has this info it's just easier to find in the header comment.+ * + * This work is licensed under the GNU GPL license version 2 or later. + * + */ + +#include "qemu/osdep.h" +#include "qemu-common.h" +#include "qemu/units.h" +#include "qapi/error.h" +#include "hw/hw.h" +#include "hw/ppc/ppc.h" +#include "hw/sysbus.h" +#include "hw/pci/pci_host.h" +#include "hw/irq.h" +#include "hw/pci-host/mv64361.h" +#include "hw/isa/vt82c686.h" +#include "hw/ide/pci.h" +#include "hw/i2c/smbus_eeprom.h" +#include "hw/qdev-properties.h" +#include "sysemu/reset.h" +#include "hw/boards.h" +#include "hw/loader.h" +#include "hw/fw-path-provider.h" +#include "elf.h" +#include "qemu/log.h" +#include "qemu/error-report.h" +#include "sysemu/kvm.h" +#include "kvm_ppc.h" +#include "exec/address-spaces.h" +#include "trace.h" +#include "qemu/datadir.h" +#include "sysemu/device_tree.h" + +#define PROM_FILENAME "pegasos2.rom" +#define PROM_ADDR 0xfff00000 +#define PROM_SIZE 0x80000 + +#define BUS_FREQ 133333333Can you rename as BUS_FREQ_HZ?+ +static void pegasos2_cpu_reset(void *opaque) +{ + PowerPCCPU *cpu = opaque; + + cpu_reset(CPU(cpu)); + cpu->env.spr[SPR_HID1] = 7ULL << 28; +} + +static void pegasos2_init(MachineState *machine) +{ + PowerPCCPU *cpu = NULL; + MemoryRegion *rom = g_new(MemoryRegion, 1); + DeviceState *mv; + PCIBus *pci_bus; + PCIDevice *dev; + I2CBus *i2c_bus; + const char *fwname = machine->firmware ?: PROM_FILENAME; + char *filename; + int sz; + uint8_t *spd_data; + + /* init CPU */ + cpu = POWERPC_CPU(cpu_create(machine->cpu_type)); + if (PPC_INPUT(&cpu->env) != PPC_FLAGS_INPUT_6xx) { + error_report("Incompatible CPU, only 6xx bus supported"); + exit(1); + } + + /* Set time-base frequency */ + cpu_ppc_tb_init(&cpu->env, BUS_FREQ / 4); + qemu_register_reset(pegasos2_cpu_reset, cpu); + + /* RAM */ + memory_region_add_subregion(get_system_memory(), 0, machine->ram); + + /* allocate and load firmware */ + filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, fwname); + if (!filename) { + error_report("Could not find firmware '%s'", fwname); + exit(1); + }+ memory_region_init_rom(rom, NULL, "pegasos2.rom", PROM_SIZE, &error_fatal);+ memory_region_add_subregion(get_system_memory(), PROM_ADDR, rom);+ sz = load_elf(filename, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1,+ PPC_ELF_MACHINE, 0, 0); + if (sz <= 0) { + sz = load_image_targphys(filename, PROM_ADDR, PROM_SIZE); + } + if (sz <= 0 || sz > PROM_SIZE) { + error_report("Could not load firmware '%s'", filename); + exit(1); + } + g_free(filename); + + /* Marvell Discovery II system controller */ + mv = DEVICE(sysbus_create_simple(TYPE_MV64361, -1,+ ((qemu_irq *)cpu->env.irq_inputs)[PPC6xx_INPUT_INT]));Indent off.There's no other way to fit in the 80 chars line length limit in a sensibleway. (Aligning to DEVICE( would be confusing as last arg belongs to sysbus_create_simple().)You could declare a temporary variable with the complex irq_inputs expression.Should I submit a new version with that change or you just noted it as a possibility? I've also thought about that but I think it's not worth it if it's only used at this one place. This may also be simplified in the future if PPC interrupts are converted to gpios as Peter suggested.
Ping? Is there anything that needs a respin that you're waiting for or you just did not yet have the time yet to merge this series?
Regards, BALATON Zoltan
[Prev in Thread] | Current Thread | [Next in Thread] |