From patchwork Sun Dec 20 11:26:08 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 1418810 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=vivier.eu Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4CzL1J6tqJz9sVm for ; Sun, 20 Dec 2020 22:27:31 +1100 (AEDT) Received: from localhost ([::1]:40182 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kqws3-0005AO-Sy for incoming@patchwork.ozlabs.org; Sun, 20 Dec 2020 06:27:27 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:55062) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kqwr3-00059g-T7 for qemu-devel@nongnu.org; Sun, 20 Dec 2020 06:26:25 -0500 Received: from mout.kundenserver.de ([212.227.17.13]:60083) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kqwr1-0005Qp-NJ for qemu-devel@nongnu.org; Sun, 20 Dec 2020 06:26:25 -0500 Received: from localhost.localdomain ([82.252.144.198]) by mrelayeu.kundenserver.de (mreue107 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MeC1p-1kFxfw1n3H-00bG9e; Sun, 20 Dec 2020 12:26:19 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PATCH v2 0/7] m68k: add Virtual M68k Machine Date: Sun, 20 Dec 2020 12:26:08 +0100 Message-Id: <20201220112615.933036-1-laurent@vivier.eu> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 X-Provags-ID: V03:K1:bm37T7JuNn1w+elyAzv5BZPEPVVk08K4Nwou7rQ5srLWZ2VPjSS Wr/rHu/nZue8397cRv3zOWCfLYYXn3+RuN+B1I9Dd7hEIhkz7Cq59ZJwDYosEzsi8eB6p85 6fYg6FjMMHZsBTSepvuWD5Qu7nrglukDr6lr4tKRWCI32IlKRxx9C/YyGAvd2996nLuo6OT DCVAsFY+E9CyghO7Xed9A== X-UI-Out-Filterresults: notjunk:1;V03:K0:Znlqjse763c=:40pfTyAn0wrZtM2DzJKuX/ ixNRiTIYvk0f2IgaFgz6XnjGa7qUDHRZ2fhPKRSL3Ku1NUYjmwwm3kyEuWuauC8KHEBxabOad Le3r4kofa6OxaxzoLnVBWlKg/EDq8kxXi+cWtQPrs3+Zx62c/X9PPuXF2XPWetRJSrf8PC4ze 4yAFnFSsE3pZeNpETmyvUGRQYMuqVuWyzIycxxYkmzzT9Zc8wdLXWkONW43jhXr8fY6gGk11v uiMP8vhrlxSNc+WvpgpWsU893FcUdcDXtyMZ1HLP3BZQdW1rhlTnIDUm9OYNJQX8w27dwIDWI OO9Nm/jlWxGQZ/748tLTWtWk28ReIoqLifxfowvXNKvsrWFd3fOddpnkKQAPJaQdCHE/Kee9L 2OhAP505bsYxO69aDRs1lexA+QligROt9AQUa4FAVWUT8xftiHA7wEiypV/eQ Received-SPF: none client-ip=212.227.17.13; envelope-from=laurent@vivier.eu; helo=mout.kundenserver.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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 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 (7): m68k: import bootinfo headers from linux char: add goldfish-tty intc: add goldfish-pic m68k: add an interrupt controller m68k: add a system controller goldfish_rtc: re-arm the alarm after migration m68k: add Virtual M68k Machine default-configs/devices/m68k-softmmu.mak | 1 + hw/m68k/bootinfo.h | 55 --- include/hw/char/goldfish_tty.h | 36 ++ include/hw/intc/goldfish_pic.h | 33 ++ include/hw/intc/m68k_irqc.h | 28 ++ include/hw/misc/m68k_virt_ctrl.h | 22 ++ .../standard-headers/asm-m68k/bootinfo-mac.h | 120 +++++++ .../standard-headers/asm-m68k/bootinfo-virt.h | 18 + include/standard-headers/asm-m68k/bootinfo.h | 166 ++++++++++ hw/char/goldfish_tty.c | 266 +++++++++++++++ hw/intc/goldfish_pic.c | 214 ++++++++++++ hw/intc/m68k_irqc.c | 120 +++++++ hw/m68k/q800.c | 20 +- hw/m68k/virt.c | 312 ++++++++++++++++++ hw/misc/m68k_virt_ctrl.c | 152 +++++++++ hw/rtc/goldfish_rtc.c | 2 + MAINTAINERS | 11 + hw/char/Kconfig | 3 + hw/char/meson.build | 2 + hw/char/trace-events | 9 + hw/intc/Kconfig | 6 + hw/intc/meson.build | 2 + hw/intc/trace-events | 8 + hw/m68k/Kconfig | 10 + hw/m68k/meson.build | 1 + hw/misc/Kconfig | 3 + hw/misc/meson.build | 3 + hw/misc/trace-events | 7 + 28 files changed, 1562 insertions(+), 68 deletions(-) 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/m68k_virt_ctrl.h create mode 100644 include/standard-headers/asm-m68k/bootinfo-mac.h create mode 100644 include/standard-headers/asm-m68k/bootinfo-virt.h create mode 100644 include/standard-headers/asm-m68k/bootinfo.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/m68k_virt_ctrl.c --=20 2.29.2