{"id":2198260,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2198260/?format=json","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/1.0/projects/14/?format=json","name":"QEMU Development","link_name":"qemu-devel","list_id":"qemu-devel.nongnu.org","list_email":"qemu-devel@nongnu.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20260219171810.602667-4-alex.bennee@linaro.org>","date":"2026-02-19T17:17:59","name":"[RFC,v2,03/14] hw/m68k: transition virt machine to multi-phase reset","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"7598cd8014d5182271a85428b49be73404f2106e","submitter":{"id":39532,"url":"http://patchwork.ozlabs.org/api/1.0/people/39532/?format=json","name":"Alex Bennée","email":"alex.bennee@linaro.org"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260219171810.602667-4-alex.bennee@linaro.org/mbox/","series":[{"id":492705,"url":"http://patchwork.ozlabs.org/api/1.0/series/492705/?format=json","date":"2026-02-19T17:17:57","name":"cpu_reset clean-ups for arm, alpha, mips, m68k and tricore","version":2,"mbox":"http://patchwork.ozlabs.org/series/492705/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2198260/checks/","tags":{},"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=hO80TEES;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fH0WF4BPpz1xxd\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 20 Feb 2026 04:20:09 +1100 (AEDT)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vt7fW-0005Rq-SN; Thu, 19 Feb 2026 12:18:26 -0500","from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <alex.bennee@linaro.org>)\n id 1vt7fN-0005L1-H2\n for qemu-devel@nongnu.org; Thu, 19 Feb 2026 12:18:17 -0500","from mail-ej1-x629.google.com ([2a00:1450:4864:20::629])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <alex.bennee@linaro.org>)\n id 1vt7fL-0000QB-BI\n for qemu-devel@nongnu.org; Thu, 19 Feb 2026 12:18:17 -0500","by mail-ej1-x629.google.com with SMTP id\n a640c23a62f3a-b8f97c626aaso163088066b.2\n for <qemu-devel@nongnu.org>; Thu, 19 Feb 2026 09:18:14 -0800 (PST)","from draig.lan ([185.124.0.126]) by smtp.gmail.com with ESMTPSA id\n a640c23a62f3a-b8fc735d516sm596445866b.5.2026.02.19.09.18.11\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 19 Feb 2026 09:18:11 -0800 (PST)","from draig.lan (localhost [IPv6:::1])\n by draig.lan (Postfix) with ESMTP id CA2B35F8A4;\n Thu, 19 Feb 2026 17:18:10 +0000 (GMT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1771521494; x=1772126294; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=SoUGojlUBFbeTt19n+1NScOu+57mMHlZ25AsG3U0eCQ=;\n b=hO80TEESVkCxnoCOw4FWUWV3iI8z4zYFjRbfbQYiIP77CSqkqUavlS5F+emDaDHXsJ\n tcw1B7VSESyIh0oykHPYlHLPvBRtFQWxHHrat6EG/4/nO6H1BnUimoG1bkl9xfJBsADn\n M0wKxMiT0Ude8waNIrNIg9z7XMQBtQ4qRkE9BqLSUVOGlRFPnS7GVTLCKUUAU3pOcLxd\n PMLB/zY5d+VhCeAf/AMbv6GxmqA48n33LkHI5Dtm0uRnfxtj0bTw3UyRT8djDCyyEqXc\n TW9sSH6Ajv79CXHEQbezmuGoJwiL8BWAzjOs7f6+TaSPfQxoPpxguk72o5WBS0QMIlAC\n oOFQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1771521494; x=1772126294;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=SoUGojlUBFbeTt19n+1NScOu+57mMHlZ25AsG3U0eCQ=;\n b=IgoaRgAnE3/aaOWT1KnBBuzBT0i/4tU0MO16l5d+AD7fWGEIyFIg4zfAKS54OnPipP\n ez0pBQ7vILVomCosGy65kIqxMi4jS63n7sVwEdSfikRtakISuJNSw5/u7ZQdmReQEmij\n G5Lqdw2CmbeMEmrYPxul9IDQCCxfICiBXpu9wDvev86XVAzc/I7H9Czz/12XUM5Q1kRs\n P8gy93bQeYkVVLsIJNxsOYVnzQPpeuE7h5xLAewtjW+aAxk8kH1xmBNDeT/qxEP1gnei\n Q4JJN9hULuS3uvdrOhxBBK45v1v4rZLONQD6MWetTfuV/UfNuKmeBUQnbw77Dd0ypIop\n 6j3w==","X-Gm-Message-State":"AOJu0Ywc1ExqNgRyAPHCn9pyYKioV6F65vvGdJEH90BByM5jSn4KJNne\n beOEQWAnmRx0pXhRcDO+OSetYzHUt9S1JrMZLfoGzHyjGrLqPwrnrxIe2TBC/D2gmQU=","X-Gm-Gg":"AZuq6aI7Mk2GXcuc9HJ0czwWpmklq8B1tA2jbwOOHWE+VinIxxczSO5yKBy8W5iXy7d\n vLr3GtBzhPVMMyof7eQlXqpY1CQ2lpYZnrHQ2WRFyj4uLbRUr20f6KNG9b4g2N5zbiJX9kVDhWh\n 11U0u3N2ofEf07TKKSB/yjPanGGEHBfPfSQy7z5fxc53cg89GTVdWdslA4DRlewm6D0DRgi3iaN\n o2EIHQchDfEilJyucZq17/zAukSJEg38yMAbpGVvqtVb5XObBtx9Qy+ZoN8T/a17x+9T+o58waD\n Kc1cfg+ydDSPz/wzI9GQDgTcFbwrNEQMgxoLpwFQQtvTm0dHLLUHDBtQjoUOsouQCQMK4DGGN2o\n ycM+RbQFHFwH0hixLqiE3Es2Yny6vbO1bBm41RjjI/v8rNCb0bnrCa6k3FWY7cCBBhcVo7S0ykQ\n 03IHvjJm554Y8OsbHYxJ1QI+k=","X-Received":"by 2002:a17:907:25c1:b0:b87:efa:8786 with SMTP id\n a640c23a62f3a-b904deacd46mr211257966b.55.1771521493625;\n Thu, 19 Feb 2026 09:18:13 -0800 (PST)","From":"=?utf-8?q?Alex_Benn=C3=A9e?= <alex.bennee@linaro.org>","To":"qemu-devel@nongnu.org","Cc":"Yoshinori Sato <yoshinori.sato@nifty.com>, qemu-arm@nongnu.org,\n Laurent Vivier <laurent@vivier.eu>, Thomas Huth <huth@tuxfamily.org>,\n Marcel Apfelbaum <marcel.apfelbaum@gmail.com>,\n Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>,\n Aurelien Jarno <aurelien@aurel32.net>,\n Jim MacArthur <jim.macarthur@linaro.org>,\n Eduardo Habkost <eduardo@habkost.net>,\n Peter Maydell <peter.maydell@linaro.org>,\n Bastian Koppelmann <kbastian@rumtueddeln.de>, =?utf-8?q?Philippe_Mathieu-Da?=\n\t=?utf-8?q?ud=C3=A9?= <philmd@linaro.org>,\n Aleksandar Rikalo <arikalo@gmail.com>,\n Richard Henderson <richard.henderson@linaro.org>,\n Zhao Liu <zhao1.liu@intel.com>, Jiaxun Yang <jiaxun.yang@flygoat.com>,\n Yanan Wang <wangyanan55@huawei.com>,\n =?utf-8?q?Alex_Benn=C3=A9e?= <alex.bennee@linaro.org>","Subject":"[RFC PATCH v2 03/14] hw/m68k: transition virt machine to multi-phase\n reset","Date":"Thu, 19 Feb 2026 17:17:59 +0000","Message-ID":"<20260219171810.602667-4-alex.bennee@linaro.org>","X-Mailer":"git-send-email 2.47.3","In-Reply-To":"<20260219171810.602667-1-alex.bennee@linaro.org>","References":"<20260219171810.602667-1-alex.bennee@linaro.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=2a00:1450:4864:20::629;\n envelope-from=alex.bennee@linaro.org; helo=mail-ej1-x629.google.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"},"content":"We don't need to re-create the architectural reset behaviour now it is\nhandled in the core m68k CPU reset code. We do however need to add\nsupport for direct kernel booting so we stash that value in\nenv->direct_kernel_boot_pc and enhance m68k_cpu_reset_exit() to use it\nif set.\n\nSigned-off-by: Alex Bennée <alex.bennee@linaro.org>\n\n---\nv2\n  - re-write to use proper 3-phase logic, so dropped all tags\n  - favour cpu_reset over resettable_reset(cs)\n---\n target/m68k/cpu.h |  2 ++\n hw/m68k/virt.c    | 34 ++++++++++------------------------\n target/m68k/cpu.c |  5 +++++\n 3 files changed, 17 insertions(+), 24 deletions(-)","diff":"diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h\nindex 7911ab9de30..d3b604689ab 100644\n--- a/target/m68k/cpu.h\n+++ b/target/m68k/cpu.h\n@@ -155,6 +155,8 @@ typedef struct CPUArchState {\n \n     /* Fields from here on are preserved across CPU reset. */\n     uint64_t features;\n+    /* Override the normal reset vector with a direct kernel boot */\n+    uint32_t direct_kernel_boot_pc;\n } CPUM68KState;\n \n /*\ndiff --git a/hw/m68k/virt.c b/hw/m68k/virt.c\nindex e67900c727d..b2e651ebcfd 100644\n--- a/hw/m68k/virt.c\n+++ b/hw/m68k/virt.c\n@@ -87,23 +87,6 @@\n #define VIRT_VIRTIO_MMIO_BASE 0xff010000     /* MMIO: 0xff010000 - 0xff01ffff */\n #define VIRT_VIRTIO_IRQ_BASE  PIC_IRQ(2, 1)  /* PIC: 2, 3, 4, 5, IRQ: ALL */\n \n-typedef struct {\n-    M68kCPU *cpu;\n-    hwaddr initial_pc;\n-    hwaddr initial_stack;\n-} ResetInfo;\n-\n-static void main_cpu_reset(void *opaque)\n-{\n-    ResetInfo *reset_info = opaque;\n-    M68kCPU *cpu = reset_info->cpu;\n-    CPUState *cs = CPU(cpu);\n-\n-    cpu_reset(cs);\n-    cpu->env.aregs[7] = reset_info->initial_stack;\n-    cpu->env.pc = reset_info->initial_pc;\n-}\n-\n static void rerandomize_rng_seed(void *opaque)\n {\n     struct bi_record *rng_seed = opaque;\n@@ -111,6 +94,14 @@ static void rerandomize_rng_seed(void *opaque)\n                                 be16_to_cpu(*(uint16_t *)rng_seed->data));\n }\n \n+static void virt_machine_reset(MachineState *ms, ResetType type)\n+{\n+    CPUState *cs = first_cpu;\n+\n+    qemu_devices_reset(type);\n+    cpu_reset(cs);\n+}\n+\n static void virt_init(MachineState *machine)\n {\n     M68kCPU *cpu = NULL;\n@@ -129,7 +120,6 @@ static void virt_init(MachineState *machine)\n     SysBusDevice *sysbus;\n     hwaddr io_base;\n     int i;\n-    ResetInfo *reset_info;\n     uint8_t rng_seed[32];\n \n     if (ram_size > 3399672 * KiB) {\n@@ -142,14 +132,9 @@ static void virt_init(MachineState *machine)\n         exit(1);\n     }\n \n-    reset_info = g_new0(ResetInfo, 1);\n-\n     /* init CPUs */\n     cpu = M68K_CPU(cpu_create(machine->cpu_type));\n \n-    reset_info->cpu = cpu;\n-    qemu_register_reset(main_cpu_reset, reset_info);\n-\n     /* RAM */\n     memory_region_add_subregion(get_system_memory(), 0, machine->ram);\n \n@@ -235,7 +220,7 @@ static void virt_init(MachineState *machine)\n             error_report(\"could not load kernel '%s'\", kernel_filename);\n             exit(1);\n         }\n-        reset_info->initial_pc = elf_entry;\n+        cpu->env.direct_kernel_boot_pc = elf_entry;\n         parameters_base = (high + 1) & ~1;\n         param_ptr = param_blob;\n \n@@ -315,6 +300,7 @@ static void virt_machine_class_init(ObjectClass *oc, const void *data)\n     MachineClass *mc = MACHINE_CLASS(oc);\n     mc->desc = \"QEMU M68K Virtual Machine\";\n     mc->init = virt_init;\n+    mc->reset = virt_machine_reset;\n     mc->default_cpu_type = M68K_CPU_TYPE_NAME(\"m68040\");\n     mc->max_cpus = 1;\n     mc->no_floppy = 1;\ndiff --git a/target/m68k/cpu.c b/target/m68k/cpu.c\nindex 0dce8ef282e..71393b9fa19 100644\n--- a/target/m68k/cpu.c\n+++ b/target/m68k/cpu.c\n@@ -193,6 +193,11 @@ static void m68k_cpu_reset_exit(Object *obj, ResetType type)\n                                          MEMTXATTRS_UNSPECIFIED, NULL);\n     env->pc = address_space_ldl_be(cs->as, 4,\n                                    MEMTXATTRS_UNSPECIFIED, NULL);\n+\n+    /* some machine models support direct kernel boot */\n+    if (env->direct_kernel_boot_pc) {\n+        env->pc = env->direct_kernel_boot_pc;\n+    }\n #endif\n }\n \n","prefixes":["RFC","v2","03/14"]}