[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v8 0/5] m68k: add Virtual M68k Machine
From: |
Laurent Vivier |
Subject: |
[PATCH v8 0/5] m68k: add Virtual M68k Machine |
Date: |
Fri, 12 Mar 2021 22:41:40 +0100 |
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 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
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
v8:
goldfish-tty:
set version to 1 because, as pointed out by Peter, the version 0
provides virtual address and not physical address to QEMU.
It was working with m68k-virt kernel because virtual memory
of the kernel is mapped at the same address as the physical memory.
The m68k-virt kernel at this point is not ready to use the
goldfish tty driver with the physical address but we can
use the virtio-serial interface. We keep the goldfish-tty device
for the early printks that work fine because they use the PUT_CHAR
register.
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 | 285 ++++++++++++++++
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, 1330 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
- [PATCH v8 0/5] m68k: add Virtual M68k Machine,
Laurent Vivier <=
- [PATCH v8 2/5] intc: add goldfish-pic, Laurent Vivier, 2021/03/12
- [PATCH v8 1/5] char: add goldfish-tty, Laurent Vivier, 2021/03/12
- [PATCH v8 3/5] m68k: add an interrupt controller, Laurent Vivier, 2021/03/12
- [PATCH v8 4/5] m68k: add a system controller, Laurent Vivier, 2021/03/12
- [PATCH v8 5/5] m68k: add Virtual M68k Machine, Laurent Vivier, 2021/03/12
- Re: [PATCH v8 0/5] m68k: add Virtual M68k Machine, Philippe Mathieu-Daudé, 2021/03/13