Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AF61BC433FE for ; Thu, 13 Jan 2022 20:19:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233193AbiAMUTn convert rfc822-to-8bit (ORCPT ); Thu, 13 Jan 2022 15:19:43 -0500 Received: from mout.kundenserver.de ([212.227.17.10]:57655 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231486AbiAMUTm (ORCPT ); Thu, 13 Jan 2022 15:19:42 -0500 Received: from quad ([82.142.23.158]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.183]) with ESMTPSA (Nemesis) id 1MG9Xu-1n73JO20Hk-00GZBS; Thu, 13 Jan 2022 21:19:22 +0100 From: Laurent Vivier To: linux-kernel@vger.kernel.org Cc: Thomas Gleixner , Jiaxun Yang , Alessandro Zummo , linux-m68k@lists.linux-m68k.org, John Stultz , linux-rtc@vger.kernel.org, Arnd Bergmann , Daniel Lezcano , Geert Uytterhoeven , Stephen Boyd , Alexandre Belloni , Laurent Vivier Subject: [PATCH v6 0/4] m68k: Add Virtual M68k Machine Date: Thu, 13 Jan 2022 21:19:16 +0100 Message-Id: <20220113201920.3201760-1-laurent@vivier.eu> X-Mailer: git-send-email 2.34.1 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8BIT X-Provags-ID: V03:K1:i6c74OwnoZhEG6Qz/wpDyL56yK7pvZYn6d5SCbrrJss6i0mRJPN h+bs++CXeRNmLc18TT+i5tukbgr6EOTezyPvKHR56bcKeWOUqxCUBDuqQ0ltYdrcux4Bk6l 9yKD6pKDMLg8ySC+cvAnxnc7GVqbfbtH+0+QSuq2QB4N5ccAiTs9VnfEE9G2AlLwsbc0vYo zYNA4tAjIiYB6lMp8lWMg== X-UI-Out-Filterresults: notjunk:1;V03:K0:n5l8hIKBCyA=:XqrQI33MxVR6bAwrxX82/e cCDhSY783xUVL/ZNj+3T+QaopI1fv1sy8hCBpwYL1/JEA6uUSg2fI2O6AX2VNTV8kSZbZuFj0 eUMe/gARAlkVZZNcxtmPCvc9k3GacPyHgYIP/WFVlkWTaJF7he2KYTofz90rvdQCm74Z7tLs2 HvuwLop28ONCLoupKvhelPOY6C9QhC4DbpEkvkaHg5Mp1jD83IZ6BiZoSXosLvuTgiJh7KpCC c2s/QhcETatub1I85xC9+vPuRW+rzBwBklFrL6p3UA9eXN+g1Ri6nZbj4Kqgj2a0UurIoWl/Y 0EIizK9xxUlTxAVPnDBkzXMyOhDxoJyTsE99jWbOyFkTw9ETwdzTzH9vEZ7Vndg0Y0OpczASR ooPxaLzzG4vF+cfvaLYmxxuo8jIFtOCdPv/9ICbgTdyRewD7QqTXWX0DiWV08M2XpxPSR3Nxc 4n3TSV5eeH7/+EbywfxRsNdS/VWX9udK4QmB5p4BtmK462o1j6hjz41DYMRx1FGmsag8kBCYQ QZ6T7PMYkdCD8QXaVEkx41FN2D06f72GRRSGmSJlVneZVfz5mYlCNiH3o29A+d+X4JzHFAEpE NCqdvxOAqe59HHCMJz6T7g7Qr37ix5M1P3lfbXRCKOySDvy9FTqaXfdJzOCoNAtiTQUj0qAnj 7GibFa7z/kbLnRWsIIolPc3FTCIbXZ4ZNESsqgwEg3hU1bYHtVo+hWFgj0E1TLQQ0hJA= Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The most powerful m68k machine emulated by QEMU is a Quadra 800, but this machine is very limited: only 1 GiB of memory and only some specific interfaces, with no DMA. 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). The machine is created with 128 virtio-mmio buses, and they can be used to add serial console, GPU, disk, NIC, HID, hwrng, 9PFS... The virtual m68k machine has been merged in QEMU and will be available with the release 6.0. This series introduces the support of this new machine in the linux kernel. If you want to try: - Configure and build latest QEMU with (or download qemu 6.0 binary): .../configure --target-list=m68k-softmmu --enable-virglrenderer make - Configure and build linux with: make virt_defconfig make vmlinux A pre-installed qcow2 disk image is available at: http://vivier.eu/debian-10.0.qcow2 You can run the machine with something like: qemu-system-m68k -M virt \ -m 3G \ -chardev stdio,signal=off,mux=on,id=char0 \ -mon chardev=char0,mode=readline \ -kernel vmlinux \ -append "console=hvc0 root=/dev/vda2" \ -blockdev node-name=system,driver=file,filename=debian-10.0.qcow2 \ -blockdev node-name=drive0,driver=qcow2,file=system \ -device virtio-blk-device,drive=drive0 \ -serial chardev:char0 \ -device virtio-net-device,netdev=hostnet0 \ -netdev bridge,id=hostnet0,br=virbr0,helper=/usr/libexec/qemu-bridge-helper \ -device virtio-serial-device \ -device virtio-gpu-device \ -device virtconsole,chardev=char0 \ -device virtio-keyboard-device \ -device virtio-mouse-device You can watch a presentation about the machine on the Planet m68k channel: https://youtu.be/s_ve0bCC9q4 [Demo at 38:00] v6: - fix goldfish-rtc endianness - move goldfish-timer code to drivers/clocksource - remove LEGACY_TIMER_TICK and use directly goldfish-timer v5: - add GENERIC_CLOCKEVENTS in Kconfig.machine v4: - update PATCH 1: comments and parameter names - add a patch to move to generic clockevents (I prefer to have a separate patch as it can be used as an example to move from legacy timer tick to generic clockevents) v3: - introduce config.h to export prototypes to arch/m68k/kernel/setup_mm.c - define virt_nmi_handler as static v2: - Remove VIRTO_MENU set y - sort the selects - add CONFIG_LOCALVERSION="-virt" - generate virt_defconfig using "make savedefconfig" - rename MACH_VIRTONLY to MACH_VIRT_ONLY - add a test_notvirt label in head.S - rework iounmap() to use two separate #ifdefs - use %u in virt_get_model() - drop show_registers() in config.c - drop pr_err() from config_virt() - sort includes in ints.c - call virt_irq_enable() in virt_irq_startup() - drop virt_irq_shutdown() and use virt_irq_disable() - move in_nmi into virt_nmi_handler() - use pr_warn() in virt_nmi_handler() - rework goldfish_pic_irq() IRQ scan - copy goldfish-pic IRQs related information from QEMU hw/m68k/virt - add a comment to "min_low_pfn = 0" - use platform_device_register_simple() - use goldfish_timer_read(), upper_32_bits() and lower_32_bits() Thanks, Laurent Laurent Vivier (4): m68k: add asm/config.h rtc: goldfish: use __raw_writel()/__raw_readl() clocksource/drivers: Add a goldfish-timer clocksource m68k: introduce a virtual m68k machine arch/m68k/Kbuild | 1 + arch/m68k/Kconfig.machine | 15 +++ arch/m68k/amiga/config.c | 1 + arch/m68k/apollo/config.c | 1 + arch/m68k/atari/config.c | 1 + arch/m68k/bvme6000/config.c | 1 + arch/m68k/configs/virt_defconfig | 65 +++++++++++ arch/m68k/hp300/config.c | 1 + arch/m68k/include/asm/config.h | 35 ++++++ arch/m68k/include/asm/irq.h | 3 +- arch/m68k/include/asm/pgtable_mm.h | 7 ++ arch/m68k/include/asm/setup.h | 44 +++++-- arch/m68k/include/asm/virt.h | 25 ++++ arch/m68k/include/uapi/asm/bootinfo-virt.h | 18 +++ arch/m68k/include/uapi/asm/bootinfo.h | 1 + arch/m68k/kernel/Makefile | 1 + arch/m68k/kernel/head.S | 31 +++++ arch/m68k/kernel/setup_mm.c | 30 ++--- arch/m68k/mac/config.c | 1 + arch/m68k/mm/kmap.c | 23 ++-- arch/m68k/mvme147/config.c | 1 + arch/m68k/mvme16x/config.c | 1 + arch/m68k/q40/config.c | 1 + arch/m68k/virt/Makefile | 6 + arch/m68k/virt/config.c | 119 +++++++++++++++++++ arch/m68k/virt/ints.c | 120 +++++++++++++++++++ arch/m68k/virt/platform.c | 72 ++++++++++++ drivers/clocksource/Kconfig | 7 ++ drivers/clocksource/Makefile | 1 + drivers/clocksource/timer-goldfish.c | 130 +++++++++++++++++++++ drivers/rtc/rtc-goldfish.c | 30 ++--- include/clocksource/timer-goldfish.h | 12 ++ 32 files changed, 750 insertions(+), 55 deletions(-) create mode 100644 arch/m68k/configs/virt_defconfig create mode 100644 arch/m68k/include/asm/config.h create mode 100644 arch/m68k/include/asm/virt.h create mode 100644 arch/m68k/include/uapi/asm/bootinfo-virt.h create mode 100644 arch/m68k/virt/Makefile create mode 100644 arch/m68k/virt/config.c create mode 100644 arch/m68k/virt/ints.c create mode 100644 arch/m68k/virt/platform.c create mode 100644 drivers/clocksource/timer-goldfish.c create mode 100644 include/clocksource/timer-goldfish.h -- 2.34.1