Le 09/03/2021 à 20:59, Laurent Vivier a écrit : > The Quadra 800 machine is very limited to run linux, it manages > only 1 GiB of memory and only some specific interfaces. > > The Virtual M68k Machine is based on Goldfish interfaces defined by Google > for Android simulator. It uses Goldfish-rtc (timer and RTC), > Goldfish-pic (PIC) and Goldfish-tty (for serial port and early tty). > > https://android.googlesource.com/platform/external/qemu/+/master/docs/GOLDFIS= > H-VIRTUAL-HARDWARE.TXT > > The machine is created with 128 virtio-mmio busses, and they can > be used to add serial console, GPU, disk, NIC, HID, ... > > This series re-use the goldfish-rtc implemented for RISCV, and > adds the two others based on the goldfish specs, the kernel driver > and android simulator ones. > > The machine can manage up to 3.2 GiB of memory, not because of an hardware > limitation but because the kernel crashes after this value. > > Simply configure qemu with: > > .../configure --target-list=3Dm68k-softmmu > > To run the machine you need a modified kernel you can find here: > > https://github.com/vivier/linux/tree/m68k-virt > > You need to compile the kernel with: > > make virt_defconfig > make vmlinux > > The disk must be installed using the q800 machine because the debian installer > doesn't want to be used with a kernel that is not the one on the ISO. > > And then you can run the machine with something like: > > qemu-system-m68k -M virt \ > -m 3399672K \ > -chardev stdio,signal=3Doff,mux=3Don,id=3Dchar0 \ > -mon chardev=3Dchar0,mode=3Dreadline \ > -kernel vmlinux \ > -append "console=3Dhvc0 root=3D/dev/vda2" \ > -blockdev node-name=3Dsystem,driver=3Dfile,filename=3Ddebian-10.0.qcow2 \ > -blockdev node-name=3Ddrive0,driver=3Dqcow2,file=3Dsystem \ > -device virtio-blk-device,drive=3Ddrive0 \ > -serial chardev:char0 \ > -device virtio-net-device,netdev=3Dhostnet0 \ > -netdev bridge,id=3Dhostnet0,br=3Dvirbr0 \ > -device virtio-rng-device \ > -device virtio-serial-device \ > -device virtio-gpu-device \ > -device virtconsole,chardev=3Dchar0 \ > -device virtio-keyboard-device \ > -device virtio-mouse-device > > if you want to use Goldfish-tty for the console rather than virtconsole, you > can add "console=3DttyGF". > > To start the debian-installer, you can try by adding: > > -device virtio-scsi-device \ > -blockdev node-name=3Ddebian10,driver=3Dfile,filename=3Ddebian-10.0.0-m68k-= > NETINST-1.iso \ > -blockdev node-name=3Dcdrom0,driver=3Draw,file=3Ddebian10 \ > -device scsi-cd,drive=3Dcdrom0 \ > -initrd installer-m68k/20200315/images/cdrom/initrd.gz > > ISO: https://cdimage.debian.org/cdimage/ports/snapshots/2020-10-12/debian-= > 10.0.0-m68k-NETINST-1.iso > initrd: https://cdimage.debian.org/cdimage/ports/debian-installer/2020-10-12/= > m68k/debian-installer-images_20200315_m68k.tar.gz > > v7: > remove VIRTIO from virt Kconfig (keep only VIRTIO_MMIO) > > v6: > m68k-virt-ctrl: > Renamed to virt-ctrl to be generic > Add a simple specs document > > v5: > goldfish-tty: > Use deposit64() > Add .impl.min_access_size > Fix CMD_WRITE_BUFFER/CMD_READ_BUFFER > > v4: > goldfish-tty: > Use fifo8 for the data_in buffer > Remove the data_out buffer from the struct and put it directly in > the function. We don't need to use the fifo8 type because we > can't bufferize the data as we can't stop the tx queue when the buffer > is full. We rely on qemu_chr_fe_write_all() that blocks the thread for > that. > goldfish-pic: > Add DEFINE_PROP_UINT8() for the index > Add .impl.min_access_size > > v3: > Add some #define for the interrupt controller (and fix the number of IRQs) > Add some comments > Update MAINTAINERS > Remove "goldfish_rtc: re-arm the alarm after migration" that will be > merged via the RISC-V branch. > > v2: > Add an interrupt controller to replace the Q800 GLUE > Add a system controller to shutdown the machine > Add a fix for goldfish_rtc (already sent alone) > Add statistics in goldfish-pic > Add versionned machine type > Use two goldfish-rtc rather than only one (for timer and RTC) > > Laurent Vivier (5): > char: add goldfish-tty > intc: add goldfish-pic > m68k: add an interrupt controller > m68k: add a system controller > m68k: add Virtual M68k Machine > > docs/specs/virt-ctlr.txt | 26 ++ > default-configs/devices/m68k-softmmu.mak | 1 + > include/hw/char/goldfish_tty.h | 35 ++ > include/hw/intc/goldfish_pic.h | 33 ++ > include/hw/intc/m68k_irqc.h | 41 +++ > include/hw/misc/virt_ctrl.h | 22 ++ > .../standard-headers/asm-m68k/bootinfo-virt.h | 18 + > hw/char/goldfish_tty.c | 283 ++++++++++++++++ > hw/intc/goldfish_pic.c | 219 ++++++++++++ > hw/intc/m68k_irqc.c | 119 +++++++ > hw/m68k/virt.c | 313 ++++++++++++++++++ > hw/misc/virt_ctrl.c | 151 +++++++++ > MAINTAINERS | 13 + > hw/char/Kconfig | 3 + > hw/char/meson.build | 2 + > hw/char/trace-events | 10 + > hw/intc/Kconfig | 6 + > hw/intc/meson.build | 2 + > hw/intc/trace-events | 8 + > hw/m68k/Kconfig | 9 + > hw/m68k/meson.build | 1 + > hw/misc/Kconfig | 3 + > hw/misc/meson.build | 3 + > hw/misc/trace-events | 7 + > 24 files changed, 1328 insertions(+) > create mode 100644 docs/specs/virt-ctlr.txt > create mode 100644 include/hw/char/goldfish_tty.h > create mode 100644 include/hw/intc/goldfish_pic.h > create mode 100644 include/hw/intc/m68k_irqc.h > create mode 100644 include/hw/misc/virt_ctrl.h > create mode 100644 include/standard-headers/asm-m68k/bootinfo-virt.h > create mode 100644 hw/char/goldfish_tty.c > create mode 100644 hw/intc/goldfish_pic.c > create mode 100644 hw/intc/m68k_irqc.c > create mode 100644 hw/m68k/virt.c > create mode 100644 hw/misc/virt_ctrl.c > > --=20 > 2.29.2 >
I've applied this series to my m68k-for-6.0 branch. Thanks, Laurent