From patchwork Fri Mar 12 21:41:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 12136115 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 52C10C433E0 for ; Fri, 12 Mar 2021 21:47:19 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id E233764F76 for ; Fri, 12 Mar 2021 21:47:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E233764F76 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=vivier.eu Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:36468 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lKpcs-0001f1-30 for qemu-devel@archiver.kernel.org; Fri, 12 Mar 2021 16:47:18 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:41430) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKpXp-0003sf-Nt for qemu-devel@nongnu.org; Fri, 12 Mar 2021 16:42:05 -0500 Received: from mout.kundenserver.de ([217.72.192.73]:46339) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKpXn-0008Dk-KD for qemu-devel@nongnu.org; Fri, 12 Mar 2021 16:42:05 -0500 Received: from localhost.localdomain ([82.142.6.26]) by mrelayeu.kundenserver.de (mreue109 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MBDvU-1lRxcO0zwk-00Cl0z; Fri, 12 Mar 2021 22:41:50 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Subject: [PATCH v8 0/5] m68k: add Virtual M68k Machine Date: Fri, 12 Mar 2021 22:41:40 +0100 Message-Id: <20210312214145.2936082-1-laurent@vivier.eu> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 X-Provags-ID: V03:K1:jbj2nLE/YPW9SXdJxNNBAlBEeGvnoDrwzJdqOd6urgyNeOIoEpp p+ttScaNqu06g+oX03WLyUzVuj4a7468ak/0V4zdfnoyocY42vhJaOEiMiM+/hr5RHpGxsE wJvcxt6twOAJvK6VfeBdbbQu0tO45G9g0TMmAUfzLQbTc+bke6T6wRel3PcPibuWSPBeZfo Pq0JS9iozU95njxej5VjA== X-UI-Out-Filterresults: notjunk:1;V03:K0:iIHozHg5mEE=:B6my+3D3nzCXi6DZM/t1W5 VQC8oeX4wtkgCGEBeFW8Qh0X+8C+avrfXPOjtrhdwjBJcWeBBNhp8UzBhItHXrVm/rujTOyle dZM9u0tycx27mGFjkBYJOrYmumRKwr87l2w+Puk8pLxlJEgmXesrEAEpQdUtjHIEAof8CKqMK K98bc4fbDM6ChwmUjw6xfKeu3ul1A0kYFAZic0d0ArNr8otYDXzS+wubZKUkgKGWfz+w2nwff nwC2T1WxNMDngjMBkYLNCmpgY/z4MCRpJZ9ZkGY80uSC1y01WJ+akuH3HTNB7MglaQiAAzP0R IawALZ1pMWZaknlEQfn5+vaIbETrWXWulAO2WlSJPL2eTTd7yz105PIK8zfxOs3GiCxXqHZ7H lDEj9do+YkUVJAmk29TLns1+BQ7KxCOdlb9tOiXeD/iuXM6EPESEtjig44Jo77iz41gCvHBSG 6P7biZgPpA== Received-SPF: none client-ip=217.72.192.73; 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, RCVD_IN_MSPIKE_H2=-0.001, 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: Peter Maydell , Richard Henderson , Laurent Vivier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , =?utf-8?q?Marc-A?= =?utf-8?q?ndr=C3=A9_Lureau?= , Paolo Bonzini Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.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 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