From nobody Sat Sep 26 22:14:28 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1788410875; cv=none; d=zohomail.com; s=zohoarc; b=YqaS6HfhMMALLzHWSKtJwrHofuTkLKcbUQ0XN5o5HgLnI3EJ7HJ9L0JoLq3HdVQMrvJzUZ049KDou3bxbOczTbkAiax5ldTJsp6lOsPDpb+z23MfcLXa53K2cJEh+Pk8zTDZeYyOljlq868uk6GWLXBsbAYEJN4Td7rVrtlCGmY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788410875; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=i3g73XDbayun2RDRE4Z2oQdeeiZiLVapMTAbvYIdgx8=; b=HpQ53TFHyKRQxfqrOtbnqwX91ne+y52d0A55cOskrI+5dXO+dtIS5HDBfGOE4KZh39yjWkMpfj9ShzDzS2cBiawMsXWtjh9bJQ7G9qvBqdrDx6+sXYEFm/Lk4ifBNfWIVTzDdwzC5j6IRAu+ncQH4/OoU3rvyOd01uiyYnouAA8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from=<54weasels@gmail.com> (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788410875702144.78918365342327; Wed, 2 Sep 2026 21:47:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x1zLa-0002p4-93; Thu, 03 Sep 2026 00:46:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <54weasels@gmail.com>) id 1x1zLY-0002ov-JU for qemu-devel@nongnu.org; Thu, 03 Sep 2026 00:46:44 -0400 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <54weasels@gmail.com>) id 1x1zLX-0006TX-5f for qemu-devel@nongnu.org; Thu, 03 Sep 2026 00:46:44 -0400 Received: by mail-pj1-x1035.google.com with SMTP id 98e67ed59e1d1-3964dfb5a69so2643833a91.1 for ; Wed, 02 Sep 2026 21:46:42 -0700 (PDT) Received: from localhost.localdomain ([76.133.142.170]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1431994db8csm2337726c88.9.2026.09.02.21.46.40 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 02 Sep 2026 21:46:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788410802; x=1789015602; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=i3g73XDbayun2RDRE4Z2oQdeeiZiLVapMTAbvYIdgx8=; b=LEVUtaQEYDnPZ5c42D6KESlsYpeQoJlI8L39wvyJyu4Qo123IaHm9RHzbyvHFKvfRo LFouz//7FwOgYhMjB7NkoYgdpKZ8yzNCaDheZCB57qz+97ugqaa55jc3UtjreSUrOKej C5JsX6pAURpVTYKIXVjT3Cv4O1Dh7PnoWvLFOFgeX8PbCLMW80lYgb9/F0g5taKrSFME 8aqLt976I2Z5WdHI9caOhLF2qR3zbmP1LA7YV2qDlB3qodJGuTTW14cdKA3GsF6zhDaV nFTOTaN+CJcxNz0mMqA1r2tb54+mEi8Wgd/QyPMmYqbFiUV7NQ0ntl5/zVVEyF+zDGpa H6Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788410802; x=1789015602; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=i3g73XDbayun2RDRE4Z2oQdeeiZiLVapMTAbvYIdgx8=; b=QE3CLgN8lSdet5pxVS5TnhwWeDti63bSNKTBvoIBHgSQE+1rr+17NgEoJQYegb8RQK u3jK1tjIIj9pOKvWgFMWdLZsBdigVNFJ/uQmgQzmOpaoGzADPwEHClt6k7YSbDtQkJXz WNvKGxaQuD+SZvQkUNocGzaEsaRUVuA40DuxOIDYUPrTZEC/Q4mFtULzE3Tl9z+3rg28 C6YNc6Ncxo25aCOXOqMnqosJ2dqERHQaIuyB+mIB/Bgys1MmIHu/9haddGz0NySdWwGA pkkcG5LkaGIbd/fhD9VutzIXRU5wcyyL/1KO+gj8WGMRhOVfgEeDatGR5xuYYu7ijjzJ I+qA== X-Gm-Message-State: AFuF++lNqVCETWfOKjD9I8St88kzTXyS9Ibsp+va9fJVeyqvleKJnl9e AVRrm1MxuBxNMbyT+bPhl2UeWoqOblnlX4VV5gfCGwmeltrvjxxprhTEVMCNPMgG X-Gm-Gg: AYBFou2cGf9Ssyn4hOuSdyk7JqrUIuAoWv5RFTIHe1z3WfPhVrKIhTxb9KdIu/GSC9b qkMlJ5iBqhlpSvjvkN5jRAo+LxhLMJC4esqC5bU7FL0YTBORe9zfc8sRqH9f17b3A8qWFJhzF0A SIZ0ng5OzXGLx9gLVOou7Gt8b9hO4hX86svxsPcpjLN/m/Qc+AjZuZq8zpgiE4zz+GS+Ls3zbNY Y8MkWkjRpjQlUG9I1YfnAC1nGQ60FLTkOn8mKnyO8UdH9MaRHY+RSgv2IwUbsC2oQRcfxitaRPT ZxgSE0gendM+nlDk4yedqFs09TqhBnnKPdFf3PY7C8fauUeH8UvI77d9SH468JFJaN4A7XIUq48 e6cNG6ywdQ3tTqHN0jxxksOkC6bxVa8Rbz7NC8hJ6Zd2Ee2W3GC7J6R2EDAgbHTqDvhE1iB3K7d CtUYhhjFZ78MrzS96mXQnzydJxRUcXXcVmLSRDbmRjzdwYSXi6e+igtIsWhisJrjSNE7MSMDq64 mH+c0CVVJ6Vk1YZ3A== X-Received: by 2002:a17:90b:2752:b0:38e:4cb:51f with SMTP id 98e67ed59e1d1-39aee00bddcmr15550653a91.11.1788410801776; Wed, 02 Sep 2026 21:46:41 -0700 (PDT) From: 54weasels <54weasels@gmail.com> To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, balaton@eik.bme.hu, 54weasels <54weasels@gmail.com> Subject: [PATCH v5 1/6] target/m68k: Add dummy CAAR register Date: Wed, 2 Sep 2026 21:45:14 -0700 Message-ID: <20260903044626.24453-2-54weasels@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260903044626.24453-1-54weasels@gmail.com> References: <20260903044626.24453-1-54weasels@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1035; envelope-from=54weasels@gmail.com; helo=mail-pj1-x1035.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, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1788410877836158500 Content-Type: text/plain; charset="utf-8" Why this change is made & How it will be used: The Sun-3 ROM expects the Cache Control Register (CAAR) to exist on the 680= 20. Reading/writing this register currently aborts QEMU. This patch provide= s a dummy implementation that simply ignores writes and returns 0 on reads,= allowing the ROM to continue booting. Impact on existing functionality: No impact on existing targets. ColdFire and Mac targets do not access CAAR = in a way that currently aborts, and providing a safe dummy implementation e= nsures robustness across M68k boards. Signed-off-by: 54weasels <54weasels@gmail.com> --- target/m68k/helper.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/target/m68k/helper.c b/target/m68k/helper.c index 5f91d206f5..68f523ea84 100644 --- a/target/m68k/helper.c +++ b/target/m68k/helper.c @@ -281,8 +281,10 @@ void HELPER(m68k_movec_to)(CPUM68KState *env, uint32_t= reg, uint32_t val) return; } break; - /* Unimplemented Registers */ + /* Dummy implementation for CAAR */ case M68K_CR_CAAR: + return; + /* Unimplemented Registers */ case M68K_CR_PCR: case M68K_CR_BUSCR: cpu_abort(env_cpu(env), @@ -385,8 +387,10 @@ uint32_t HELPER(m68k_movec_from)(CPUM68KState *env, ui= nt32_t reg) return env->mmu.ttr[M68K_DTTR1]; } break; - /* Unimplemented Registers */ + /* Dummy implementation for CAAR */ case M68K_CR_CAAR: + return 0; + /* Unimplemented Registers */ case M68K_CR_PCR: case M68K_CR_BUSCR: cpu_abort(env_cpu(env), "Unimplemented control register read 0x%x\= n", --=20 2.50.1 (Apple Git-155) From nobody Sat Sep 26 22:14:28 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1788410866; cv=none; d=zohomail.com; s=zohoarc; b=n2MLOj2wvrxgSg9heUJtDPunjH/xFHMrW3VPzkErhJgKjrY+tt/jJwhzB7/9r6Xnlx0FkYpk9+Oj+yYHcMsk8Irs84G9NqCsafwYpnwVL+8331VJ3FVPikUi2GMSYaKsAcF3ONEE/SGq+SJERZppVb+cbVze9MKtZb+GEG6g928= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788410866; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=I5Kx/vv5Aml97SX5v+rORs1NUsyXUXac0cX1brEGJwk=; b=YwYiHNfk2ahKx/f1UqRu81uFU+8gu/PjCQjwkskIQS597jy9RJMU87Mf5GqAAVSsOsjOh2lvywaBS1BIx5nvKYUeNy7IFwjQbmzZgHyZF65Nsa2k09T2MzbXMgCtuDm8n34iA3AK5hyOE95ILlja+0uxf6TqUax61Xglm1Z5YEM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from=<54weasels@gmail.com> (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788410866591708.7843310277983; Wed, 2 Sep 2026 21:47:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x1zLd-0002pj-16; Thu, 03 Sep 2026 00:46:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <54weasels@gmail.com>) id 1x1zLc-0002pb-3U for qemu-devel@nongnu.org; Thu, 03 Sep 2026 00:46:48 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <54weasels@gmail.com>) id 1x1zLa-0006Uz-K1 for qemu-devel@nongnu.org; Thu, 03 Sep 2026 00:46:47 -0400 Received: by mail-pg1-x530.google.com with SMTP id 41be03b00d2f7-cc1c7364550so2117771a12.1 for ; Wed, 02 Sep 2026 21:46:46 -0700 (PDT) Received: from localhost.localdomain ([76.133.142.170]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1431994db8csm2337726c88.9.2026.09.02.21.46.43 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 02 Sep 2026 21:46:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788410805; x=1789015605; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=I5Kx/vv5Aml97SX5v+rORs1NUsyXUXac0cX1brEGJwk=; b=FQ4ZKuKQ91nDA/2pONw3WP20rwjBJ/fzptOAeP6VeWfuOLDtouhqIohvcm1N4ZOnmx RNXwEqQYw3WlF2pIHPmat7dVfJJS/6QzqGA08wrqprU2iaJkjRTFsaN8arXo6+EDSQV/ AhywBKNo7q2kDKUiGVTheG9BLbCMi/aRD0VizufhQVr2JZOlegV0TOJlkm+wfyeWhrzu 5Y3eWs7VZB4P+qhWAzr7+SgrXIdU3CTmbU9qzxM/avJaTD9h7YdN32ef++c8jMH++Tfc XQRTBHGTyRONOWfWBjQyc4r1eQcRwL71xbnXxzFDIiiFrjZRHiWkIGfH0RQJUP28EEEC ssXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788410805; x=1789015605; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=I5Kx/vv5Aml97SX5v+rORs1NUsyXUXac0cX1brEGJwk=; b=A8rRyOVBngypP8IHGjXRg5qhWoBfwF7M8T/DHpgSP9g1g9grmm1THWp++rWIBwHTzd +EsYgQfXEudP9vlduHlnhXEG792OkVsyNOLTMA19QyZMnE5S4IpTmOwLpXHxgssH0VRp mDjrjnjVpymeq0BADZHe2cyWQLvzPut4LimZPEvNV2FEOQfffN/NnihcxVJ9ZQjjp24e kj4IVkLVOZGeuIPZQbKPJ03+8WCooXBxuagNhGkiMC1S60fGrb6xTAMVgtOQ6gZMcGd9 h1yKdYClXToRq9qEHM+EhmVUV2wmnES1iYmd0agvxdPD3fUZlnU6ni3ewuSrJKXRkD0V Ac/Q== X-Gm-Message-State: AFuF++k3q2MFwW2Dg/0WOnOiuc5if/Khxy11TWLBHMdvH6XpWMIDmLs2 aZRWgzzojSKaMZJNJT1/tXuy30uu6wy/n2ndEt2C4dKLr3jqbYvoWweEzhdYyo27 X-Gm-Gg: AYBFou3QB2BIPGIDadh9sLGf6ytmxuGXIJV+KPvgKrgFhKyKPeA5i1vXxhj6gJwxrvo azlMNQZbhoBtLDUr6ctrlGc7cZn/gMPQUeDA8jDmVboeJ3QbJAjKO/h1KYY3ddehAV42ghHKRN6 7/qnT/NvsKXut3eL5PBR7i98bUUI7bggc3ybcMg5/jq/xvlxu/t8LP5xKAzsw4yvjTTN498oSVB +24DC4mxqg0LCWtxpAmKnaJp/IuEPoMDOoJrzgM94zy7XoOhAKfiSQ9FKEtSJAdENGO8l3DpdxH 3P4m+8mzAasP9VZgIkAtQIt2/MuqpNTztwSFB4H6yVyqAL9IwfathP0b94NBFxnzpEVkgZm7BXO 8Xxwb4Vqyb8ISce4hXMMWIwEPX2HwPCI74V1rnY36P5ghyeUZWK7BQ9QIIBqfhQ7wZMgp7ZD6my L3OlQsWH1JK5a2ukt543iG35t1S/R0f2y7RCWloXKKZ7adkgysjurMLLjJLvZGE/z9R9tNB93O4 0nuHMqqxWkrruCF4Q== X-Received: by 2002:a05:6a20:9f92:b0:3cd:67e9:8565 with SMTP id adf61e73a8af0-3d9ae0c7efcmr16886199637.9.1788410805121; Wed, 02 Sep 2026 21:46:45 -0700 (PDT) From: 54weasels <54weasels@gmail.com> To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, balaton@eik.bme.hu, 54weasels <54weasels@gmail.com> Subject: [PATCH v5 2/6] target/m68k: Fix fsave/frestore for 68881 FPU Date: Wed, 2 Sep 2026 21:45:15 -0700 Message-ID: <20260903044626.24453-3-54weasels@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260903044626.24453-1-54weasels@gmail.com> References: <20260903044626.24453-1-54weasels@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::530; envelope-from=54weasels@gmail.com; helo=mail-pg1-x530.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, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1788410867792158500 Content-Type: text/plain; charset="utf-8" Why this change is made & How it will be used: The 68881/68882 FPUs require fsave/frestore instructions to read/write stat= e frames. QEMU only fully implemented this for the 68040. The Sun-3 uses a = 68881 FPU, and the boot ROM executes `fsave` to probe FPU presence. This pa= tch adds basic 68881 FPU state frame handling (NULL frame) to accurately si= mulate an idle FPU state. Impact on existing functionality: Fixes FPU detection for 68881/68882 across all M68k boards without affectin= g 68040 specific state logic. Signed-off-by: 54weasels <54weasels@gmail.com> --- target/m68k/translate.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index 138c89d3e5..c89ef213ed 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -5364,11 +5364,11 @@ DISAS_INSN(frestore) gen_exception(s, s->base.pc_next, EXCP_PRIVILEGE); return; } - if (m68k_feature(s->env, M68K_FEATURE_M68040)) { + if (m68k_feature(s->env, M68K_FEATURE_FPU)) { SRC_EA(env, addr, OS_LONG, 0, NULL); /* FIXME: check the state frame */ } else { - disas_undef(env, s, insn); + disas_undef_fpu(env, s, insn); } } =20 @@ -5379,12 +5379,18 @@ DISAS_INSN(fsave) return; } =20 - if (m68k_feature(s->env, M68K_FEATURE_M68040)) { - /* always write IDLE */ - TCGv idle =3D tcg_constant_i32(0x41000000); - DEST_EA(env, insn, OS_LONG, idle, NULL); + if (m68k_feature(s->env, M68K_FEATURE_FPU)) { + TCGv frame; + if (m68k_feature(s->env, M68K_FEATURE_M68040)) { + /* 68040 FSAVE: always write IDLE */ + frame =3D tcg_constant_i32(0x41000000); + } else { + /* 68881/68882 FSAVE: always write NULL frame */ + frame =3D tcg_constant_i32(0x00000000); + } + DEST_EA(env, insn, OS_LONG, frame, NULL); } else { - disas_undef(env, s, insn); + disas_undef_fpu(env, s, insn); } } #endif --=20 2.50.1 (Apple Git-155) From nobody Sat Sep 26 22:14:28 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1788410847; cv=none; d=zohomail.com; s=zohoarc; b=Mhzp5oR2E6Zkv+EHghdLF0jRxnlvPza63W/MUaTE3h6mUr1fuWiC7gdvB242VS3tu048cAmPf9PKjoCOxDi5/xBy5kv/vHbktNUoxDoL1gJiKe7IWueQQnOKxtXige8h6T/x0FQsrxeNMU9NwzlVYS1aH9Pl54T/LZHwqoRhSNM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788410847; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=/fffGBqlaLkGfazVmKx0LxZ4r97UqWLeXOQpQGmiKtM=; b=WSi1TrcL5ONTVNgTDCSbCK8Zm+ntlk/rG/nfkwfUTdnoJiDiWcATTPJOHtIlk2DvHzuOK95HzhrPkV8vjh2lEBKCI3ju5+EoK5gts/OccZ3xek8wCyNyGG+T4hBxI3XvfCLe9DuKXIC5LRG4qUUix9Xjy/hET0J3zPcO8xSXudI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from=<54weasels@gmail.com> (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788410847157597.2757993955338; Wed, 2 Sep 2026 21:47:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x1zLf-0002qN-Hj; Thu, 03 Sep 2026 00:46:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <54weasels@gmail.com>) id 1x1zLd-0002pz-Vz for qemu-devel@nongnu.org; Thu, 03 Sep 2026 00:46:50 -0400 Received: from mail-pg1-x52a.google.com ([2607:f8b0:4864:20::52a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <54weasels@gmail.com>) id 1x1zLc-0006W3-C0 for qemu-devel@nongnu.org; Thu, 03 Sep 2026 00:46:49 -0400 Received: by mail-pg1-x52a.google.com with SMTP id 41be03b00d2f7-cc1d57602e8so2019853a12.3 for ; Wed, 02 Sep 2026 21:46:48 -0700 (PDT) Received: from localhost.localdomain ([76.133.142.170]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1431994db8csm2337726c88.9.2026.09.02.21.46.46 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 02 Sep 2026 21:46:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788410807; x=1789015607; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=/fffGBqlaLkGfazVmKx0LxZ4r97UqWLeXOQpQGmiKtM=; b=OLBO1h/8XvjC3amDUQFtGV4ixxrj80onelHL1gl1b33MWstrwP5FLBFy2+QcHEFMp3 WwTJUiEXa7A35ZrRQZFhJypQAtjwZ2oM135f/FxI3vjMNef+PqVi7tK5xKDYVIIDIeWR BfBWdnC7Q7bc2UrrhAmyMxZ9PRl3PyPGLgr7L4kKHK0CfPmAAuYvth+nSp5GAb1CFDqt XoHhrSClhKrfx9a/DhHXkjQy/D4iYx3qqM0/CahAHuTTIFWIS6kFuPp1lJDNawff1+oT 2B4LKkAF6CJ+4G+VNtriiMJ3RiwddVhZeXp1m4MGdAnfUn6ShZYYorC4b1CZXeWW58nN wf7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788410807; x=1789015607; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=/fffGBqlaLkGfazVmKx0LxZ4r97UqWLeXOQpQGmiKtM=; b=gO3Hw6fZfmLmCBc23EnLH35BY0H4hZLpVVsUgYRu7pyUP5BPm/Jp4NUeeAzZb+QFXs VZLGseORJee9ra140Shgt9FwB61d8LYZNEI9fSqWQryU/12hzbvmgwhxRaNSh5QK7Ltc TTzGmx2eJkJ3u2u1fiWlALN/shgSMDX+axOqNEBow18hkYMzJ5dR9/m8vBwS+RedWTS8 +2bmeINpXSpLLlXFm0TUVqBsksVuYy/W+yni01LwBSNOiKG5Ri4JVza78+aU0mRmOId+ nJy5c3GKn4uV6ruVck6RsyesYnjlA4Ov6YZDrmkZ8WRQx6+FqlYGWIqpl1kkD+HA8yKw O3xw== X-Gm-Message-State: AFuF++ncl03uvPaF94j0kSDLM2XiS7wpoyUixZU2YyviZnoU/ZBvQTVY TclywLJObCtaUDCC+Q6ThmFViu4/qrtnAu3zFGq+fA8w4rxLRzj++ysMyYuUHfAl X-Gm-Gg: AYBFou1yV1XzPL/RY2ntNlPFClB3ZnD0OOA1zfP9jNLIH/nWR4Pzl++Y+KyrI3hPPi9 OnqiQSKQQGOzpDMivZ2Yd/QQ6o/C34HBBGV0QohAuvUAz+31vZYev60+NZizMfriHYcqsucgeCO 9wLpYj8NsO62/NMhWj/DVd03CrCFYgyLaQzt5G6FxF4UMZ6RV0Gvlo+sEmmz1tcFZ/D3W4HhS+I mwifjDSsAqS3xx8YqxYa6BYjqRATT8irqQl4xndKXFp+i6bkrX3IphyfG8k29kFuH9hrqJMWAAc GXnc8TrIHsM5ZWDwy/leaMK4WsMFh7ieY5Ddo0TWILztd5CaG6zjkw1L1oKKQJD7IdOKbIQt6AM 3LB2NmzQj/XRfQynGYraE6ZpDttQr0adx3Yoo02Kes5IiTC7detwmNVgM6Bqcoa+sXCtQUc/XBn jMcI5+VSgPku5CQOFPk/9ngxfkp5MpovpUaQvZjtUtJOa62c96tYCZfhdqyL1AJ5sRmqQemgTgE myR0OPhwISD510jbw== X-Received: by 2002:a17:90b:1811:b0:398:c724:1bb1 with SMTP id 98e67ed59e1d1-39aedee9313mr14088699a91.8.1788410806880; Wed, 02 Sep 2026 21:46:46 -0700 (PDT) From: 54weasels <54weasels@gmail.com> To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, balaton@eik.bme.hu, 54weasels <54weasels@gmail.com> Subject: [PATCH v5 3/6] target/m68k: Fix NMI pending for Level 7 interrupts Date: Wed, 2 Sep 2026 21:45:16 -0700 Message-ID: <20260903044626.24453-4-54weasels@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260903044626.24453-1-54weasels@gmail.com> References: <20260903044626.24453-1-54weasels@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52a; envelope-from=54weasels@gmail.com; helo=mail-pg1-x52a.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, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1788410850265158500 Content-Type: text/plain; charset="utf-8" Why this change is made & How it will be used: Level 7 interrupts are Non-Maskable Interrupts (NMI) on the M68k architectu= re. The hardware asserts an NMI only on the rising edge of the level 7 sign= al. The current QEMU implementation treats level 7 like a standard level in= terrupt. This patch ensures proper NMI edge-triggered semantics for level 7= , which is strictly required by the Sun-3 keyboard/mouse NMI routing logic. Impact on existing functionality: Corrects NMI edge-triggering for all M68k boards, adhering closely to the M= otorola specifications. Existing boards will now correctly require an edge = transition to trigger consecutive NMIs. Signed-off-by: 54weasels <54weasels@gmail.com> --- target/m68k/cpu.h | 4 ++++ target/m68k/helper.c | 6 ++++++ target/m68k/op_helper.c | 14 ++++++-------- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h index 7cf3791108..8f4dec4a40 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -25,6 +25,9 @@ #include "exec/cpu-interrupt.h" #include "qemu/cpu-float.h" #include "cpu-qom.h" +#include "exec/cpu-defs.h" + +#define CPU_INTERRUPT_NMI CPU_INTERRUPT_TGT_EXT_1 =20 #define OS_BYTE 0 #define OS_WORD 1 @@ -148,6 +151,7 @@ typedef struct CPUArchState { =20 int pending_vector; int pending_level; + bool nmi_pending; =20 /* Fields up to this point are cleared by a CPU reset */ struct {} end_reset_fields; diff --git a/target/m68k/helper.c b/target/m68k/helper.c index 68f523ea84..93739ccda7 100644 --- a/target/m68k/helper.c +++ b/target/m68k/helper.c @@ -949,6 +949,12 @@ void m68k_set_irq_level(M68kCPU *cpu, int level, uint8= _t vector) CPUState *cs =3D CPU(cpu); CPUM68KState *env =3D &cpu->env; =20 + if (level =3D=3D 7 && env->pending_level !=3D 7) { + env->nmi_pending =3D true; + } else if (level !=3D 7) { + env->nmi_pending =3D false; + } + env->pending_level =3D level; env->pending_vector =3D vector; if (level) { diff --git a/target/m68k/op_helper.c b/target/m68k/op_helper.c index 38f7a68981..30af4a2631 100644 --- a/target/m68k/op_helper.c +++ b/target/m68k/op_helper.c @@ -522,14 +522,12 @@ bool m68k_cpu_exec_interrupt(CPUState *cs, int interr= upt_request) { CPUM68KState *env =3D cpu_env(cs); =20 - if (interrupt_request & CPU_INTERRUPT_HARD - && ((env->sr & SR_I) >> SR_I_SHIFT) < env->pending_level) { - /* - * Real hardware gets the interrupt vector via an IACK cycle - * at this point. Current emulated hardware doesn't rely on - * this, so we provide/save the vector when the interrupt is - * first signalled. - */ + if (env->nmi_pending) { + env->nmi_pending =3D false; + cs->exception_index =3D env->pending_vector; + do_interrupt_m68k_hardirq(env); + return true; + } else if (((env->sr & SR_I) >> SR_I_SHIFT) < env->pending_level) { cs->exception_index =3D env->pending_vector; do_interrupt_m68k_hardirq(env); return true; --=20 2.50.1 (Apple Git-155) From nobody Sat Sep 26 22:14:28 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1788410847; cv=none; d=zohomail.com; s=zohoarc; b=YEfYfULb5+WENqc7CdNiOcE6MfK1Xt1o9ErfyMNkZWYCQkkL/KNXed8+X5k3FILAlMuo/Jy0zIfMS37B9oEfGyFe0v6IR8AGAsevLDqL43yJA9y/zHOMQExQtonTfRmh88w4yrC6NABemeXYc10PXa3uSGgrkwImUr0Pd9Z1tBQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788410847; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=pnRjqUvuxbPjuZO7YdnutdWizBVmUQWo0boyEFmZtt4=; b=jA4IwBlE84GHEGdBtY0C61UuxAn55ZCnBLmGYNKbeT5in2GDjr9kBZBhxLzmj3aIm9CDLT6nrIswNwd79CR9tINEbW+kna4sAZiULyaqM1tjpEjlCKlTKgOgGOGQPV8u5/ns4Px8SVVmkvAx5PzoAvVkWc5ehxUP3D20awbeQbk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from=<54weasels@gmail.com> (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788410847315775.9423084651103; Wed, 2 Sep 2026 21:47:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x1zLi-0002qf-QQ; Thu, 03 Sep 2026 00:46:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <54weasels@gmail.com>) id 1x1zLh-0002qU-0N for qemu-devel@nongnu.org; Thu, 03 Sep 2026 00:46:53 -0400 Received: from mail-pg1-x534.google.com ([2607:f8b0:4864:20::534]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <54weasels@gmail.com>) id 1x1zLe-0006WY-SB for qemu-devel@nongnu.org; Thu, 03 Sep 2026 00:46:52 -0400 Received: by mail-pg1-x534.google.com with SMTP id 41be03b00d2f7-cb5b8572b70so2086871a12.2 for ; Wed, 02 Sep 2026 21:46:50 -0700 (PDT) Received: from localhost.localdomain ([76.133.142.170]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1431994db8csm2337726c88.9.2026.09.02.21.46.48 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 02 Sep 2026 21:46:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788410809; x=1789015609; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=pnRjqUvuxbPjuZO7YdnutdWizBVmUQWo0boyEFmZtt4=; b=colxmeE/iHJeL+KAbMtE82uUWL88KwDgeLKIZPp0hHQLdORaNi9rILfcuIqoeoi+EA CClvRzfEx2PoT1rnMcOC4H4wybsOWTtrRZmb+uLqJxD72kADGZHqytPLxmUobkGdxJaR Uyu9xg26IWJHRUv0f8IX5goB8INyRvmA+Ixuw8BlVVyOyPpmwXyacHi3bPDACaPUVK6f 9UyQkaPP6WiAbs5Rx1SuYx5kW0UpNO4YmUz8PbMvEYEMewMwuL/t+RmIvjnYAm2wmCHn CCII10fcrUEn3o4ypyQhPYVJwMuzMRBTdhYDvOXMoQhA1Ig24Fe/bjsbOoduNsLrusaj eeAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788410809; x=1789015609; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=pnRjqUvuxbPjuZO7YdnutdWizBVmUQWo0boyEFmZtt4=; b=NgL/hSrlFk/pXh3I+qkBlH4DEBkIngZb4skcIIg0C6iQ9eliXNr9i9oCKEAgfeFS7Q pNC9nHkW7aG2cEJGZ4rHxWoyzbkQjvVuqWDUSSEHExq93TTF4yhGYgwredgwUDAslLCm 5l0h6u0TpOP9tqpwHg5gS/qiIUmDuh/hjrGQj3PoF2BAhjGILjtZaC91LewPRjc4mYOj u37MeB3AnfKZWWNLTQUC44BZHNKrfhw5gj/x19s5dykHM8Oe8tYYVlL/t/7BUDsuv5E4 HJjkxBguuYUZFnJ9mbkgbURpj29W7eSV1wMkcNECGWxuKOEMsGtEf2KCP1NpTwkZGXr6 NlxQ== X-Gm-Message-State: AFuF++nvk69lqXHlYj9YsjdYnkWWHdHzSYY1ug5a7IpaJHL11m46kszq 1s5D2G6MUSM8Kkn/CHscsHs2JKI2rCHUMNcoswsD5COFO4H8aA2WijRsSaSMOKUB X-Gm-Gg: AYBFou2MurTv1b3Z+wjjr7BFR0o4K1foOslVYjWUABOQzjd9Io4fWxaK+wk+A3BihBO YJ6EE0p5w/YULVL0g0sBlG29Xf6zft1f7hqVL8HD4NeVHakNjHJ7laPAanNm2wxEiOwY/miI3UN AZ8Qc/u/iOzrnKxedfK6/mr8fTgchw1v4RcbnPgaOsa4i5whbBRYRGsfPEgTcPxlngyVNuS135A TW15u6JRKKk8mq4GIH531fhdODkVDWxWswVWkIB1VJqheBeMMM+BDSa7bWSTLbFRxBMVWaukgH2 E3zyQzIrWmdssL3KmbVqr/A74UzxQi4CbtdXdBjVleEVuSMMEE/4MnXe92hD99FEYt/M+Snrz9P vZAoPNwpFwJjJnou3b27rK7j76klP+E6fXmxVaVtD0I9u0n4Zr8nvZNjTz1nvKrvtKehSEnUYLw WXZgz2tddvMkxOviftnxOEFPhsLs6n9xJNIetaIuxKmtCzG63YuscRHhNbxWWxDE7FT5LuYZPbN NVBMyPRbqKdf3Cs7A== X-Received: by 2002:a05:6a21:6da9:b0:3d0:88f5:f806 with SMTP id adf61e73a8af0-3d9af9ff7b4mr13915122637.15.1788410809252; Wed, 02 Sep 2026 21:46:49 -0700 (PDT) From: 54weasels <54weasels@gmail.com> To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, balaton@eik.bme.hu, 54weasels <54weasels@gmail.com> Subject: [PATCH v5 4/6] target/m68k: Extract Function Codes during TLB fills Date: Wed, 2 Sep 2026 21:45:17 -0700 Message-ID: <20260903044626.24453-5-54weasels@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260903044626.24453-1-54weasels@gmail.com> References: <20260903044626.24453-1-54weasels@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::534; envelope-from=54weasels@gmail.com; helo=mail-pg1-x534.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, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1788410850289158500 Content-Type: text/plain; charset="utf-8" Why this change is made & How it will be used: The Motorola 68020 architecture utilizes 3-bit Function Codes (FC0-FC2) to = distinguish between User/Supervisor Data and Program memory spaces during M= MU translation. Previously, QEMU's TLB fills did not explicitly extract or = pass these codes down to the translation hooks. This patch extracts the exp= licit Function Codes (either natively or via the `moves` instruction) and p= acks them into the `access_type` field. This is required for the upcoming S= un-3 emulation, whose external MMU hardware maps entirely different physica= l address spaces depending on the Function Code asserted on the bus. Impact on existing functionality: This change introduces no functional impact to existing ColdFire or Mac/Qua= dra m68k emulation targets. The extraction logic gracefully defaults to sta= ndard mapping modes for platforms that do not implement a custom MMU interc= ept hook, preserving existing TLB behavior. Signed-off-by: 54weasels <54weasels@gmail.com> --- target/m68k/cpu.c | 4 ++-- target/m68k/cpu.h | 10 ++++++---- target/m68k/helper.c | 26 ++++++++++++++++++++++++++ target/m68k/translate.c | 10 ++++++---- 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c index 6012dc3186..5d90bb075e 100644 --- a/target/m68k/cpu.c +++ b/target/m68k/cpu.c @@ -52,8 +52,8 @@ static TCGTBCPUState m68k_get_tb_cpu_state(CPUState *cs) flags =3D (env->macsr >> 4) & TB_FLAGS_MACSR; if (env->sr & SR_S) { flags |=3D TB_FLAGS_MSR_S; - flags |=3D (env->sfc << (TB_FLAGS_SFC_S_BIT - 2)) & TB_FLAGS_SFC_S; - flags |=3D (env->dfc << (TB_FLAGS_DFC_S_BIT - 2)) & TB_FLAGS_DFC_S; + flags |=3D (env->sfc << TB_FLAGS_SFC_S_BIT) & TB_FLAGS_SFC_S; + flags |=3D (env->dfc << TB_FLAGS_DFC_S_BIT) & TB_FLAGS_DFC_S; } if (M68K_SR_TRACE(env->sr) =3D=3D M68K_SR_TRACE_ANY_INS) { flags |=3D TB_FLAGS_TRACE; diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h index 8f4dec4a40..aadaea770a 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -604,12 +604,14 @@ void m68k_cpu_transaction_failed(CPUState *cs, hwaddr= physaddr, vaddr addr, #define TB_FLAGS_MSR_S_BIT 13 #define TB_FLAGS_MSR_S (1 << TB_FLAGS_MSR_S_BIT) #define TB_FLAGS_SFC_S_BIT 14 -#define TB_FLAGS_SFC_S (1 << TB_FLAGS_SFC_S_BIT) -#define TB_FLAGS_DFC_S_BIT 15 -#define TB_FLAGS_DFC_S (1 << TB_FLAGS_DFC_S_BIT) -#define TB_FLAGS_TRACE 16 +#define TB_FLAGS_SFC_S (7 << TB_FLAGS_SFC_S_BIT) /* 3 Bits reserv= ed */ +#define TB_FLAGS_DFC_S_BIT 17 +#define TB_FLAGS_DFC_S (7 << TB_FLAGS_DFC_S_BIT) /* 3 Bits reserv= ed */ +#define TB_FLAGS_TRACE 20 #define TB_FLAGS_TRACE_BIT (1 << TB_FLAGS_TRACE) =20 +#define MMU_MOVES_FC_BASE 2 /* mmu_idx 2-9 correspond to FC 0-7 */ + void dump_mmu(CPUM68KState *env); =20 #endif diff --git a/target/m68k/helper.c b/target/m68k/helper.c index 93739ccda7..f3ee95441a 100644 --- a/target/m68k/helper.c +++ b/target/m68k/helper.c @@ -975,6 +975,32 @@ bool m68k_cpu_tlb_fill(CPUState *cs, vaddr address, in= t size, int ret; target_ulong page_size; =20 + if (qemu_access_type =3D=3D MMU_INST_FETCH) { + access_type =3D ACCESS_CODE; + } else { + access_type =3D ACCESS_DATA; + if (qemu_access_type =3D=3D MMU_DATA_STORE) { + access_type |=3D ACCESS_STORE; + } + } + + /* Decode explicit Function Codes from moves instructions */ + if (mmu_idx >=3D MMU_MOVES_FC_BASE) { + uint8_t fc =3D mmu_idx - MMU_MOVES_FC_BASE; + access_type |=3D (fc << 8); /* Pack explicit FC into access type */ + if (fc !=3D 1 && fc !=3D 2) { + access_type |=3D ACCESS_SUPER; + } + } else { + /* Standard memory accesses map logically to normal M68K FCs */ + if (mmu_idx =3D=3D MMU_KERNEL_IDX) { + access_type |=3D ACCESS_SUPER; + access_type |=3D ((qemu_access_type =3D=3D MMU_INST_FETCH ? 6 = : 5) << 8); + } else { + access_type |=3D ((qemu_access_type =3D=3D MMU_INST_FETCH ? 2 = : 1) << 8); + } + } + if ((env->mmu.tcr & M68K_TCR_ENABLED) =3D=3D 0) { /* MMU disabled */ tlb_set_page(cs, address & TARGET_PAGE_MASK, diff --git a/target/m68k/translate.c b/target/m68k/translate.c index c89ef213ed..5ca25a4881 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -163,10 +163,12 @@ static void do_writebacks(DisasContext *s) #define IS_USER(s) 1 #else #define IS_USER(s) (!(s->base.tb->flags & TB_FLAGS_MSR_S)) -#define SFC_INDEX(s) ((s->base.tb->flags & TB_FLAGS_SFC_S) ? \ - MMU_KERNEL_IDX : MMU_USER_IDX) -#define DFC_INDEX(s) ((s->base.tb->flags & TB_FLAGS_DFC_S) ? \ - MMU_KERNEL_IDX : MMU_USER_IDX) +#define SFC_INDEX(s) (MMU_MOVES_FC_BASE + \ + (((s)->base.tb->flags & TB_FLAGS_SFC_S) >> \ + TB_FLAGS_SFC_S_BIT)) +#define DFC_INDEX(s) (MMU_MOVES_FC_BASE + \ + (((s)->base.tb->flags & TB_FLAGS_DFC_S) >> \ + TB_FLAGS_DFC_S_BIT)) #endif =20 typedef void (*disas_proc)(CPUM68KState *env, DisasContext *s, uint16_t in= sn); --=20 2.50.1 (Apple Git-155) From nobody Sat Sep 26 22:14:28 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1788410857; cv=none; d=zohomail.com; s=zohoarc; b=P94Encp1ayJ0JvLzKUzT5iSLxmLqQW2n45ef+5OuzIJoJ32tCut8qrUQum+b+PW8bSCPXTOHmbA3+bs0/hhosSBrja2OQDVW55QkGsKi4gmXNOEukqCVn4OWw1ZrfW4Fou/K0WKR926BXEPswbRz/veQDH3ZRwkLT2jj/OaIiGU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788410857; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rQsPzQa7eqpjkTonKJlYkpSnhYjMbhwY9QKZd7KCfos=; b=GAYF93zuu9pfaNrtK/a503mlYKvrlICk8/4LbM/gWgy2y4cq43NBKEU/IG5tPOo8KMNG8mAUlJM5g+AxcB5Nn98vhUUZSfxZsuEbryng2CthfBzxzbu33Cbk7FIWSGUcKfvBYXufviMcPHS4FV9Wj0FuQzJ/omyqJWEJGIrC55o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from=<54weasels@gmail.com> (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788410857908592.8222289122183; Wed, 2 Sep 2026 21:47:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x1zLl-0002ri-AV; Thu, 03 Sep 2026 00:46:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <54weasels@gmail.com>) id 1x1zLj-0002r0-Ht for qemu-devel@nongnu.org; Thu, 03 Sep 2026 00:46:55 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <54weasels@gmail.com>) id 1x1zLh-0006Wm-7N for qemu-devel@nongnu.org; Thu, 03 Sep 2026 00:46:55 -0400 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-2d9db539a54so17432275ad.0 for ; Wed, 02 Sep 2026 21:46:52 -0700 (PDT) Received: from localhost.localdomain ([76.133.142.170]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1431994db8csm2337726c88.9.2026.09.02.21.46.50 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 02 Sep 2026 21:46:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788410811; x=1789015611; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=rQsPzQa7eqpjkTonKJlYkpSnhYjMbhwY9QKZd7KCfos=; b=jJZ/9K/HifO+Wkszn8EJSp26yLvRm9h8AIBpUASlHuVCyMhDlhX56p3Qf+YM4n+1y6 g0UQGJp73qZm+eXJWPbkXnlE/md3io6QQAzmLY/0B+srDsnotAStWI+meB9+l/v1UmOr na1PmOhQI//gUbfE1SwlCu2jvJPGPG6KG1neh3E/7sE666RcmyXx67J2VgvK8Cc0G5a5 e1fBIq3kOjxc5D8fER3lIrf15YumyouB7qnvcPQa8+1zTy79Y9GNzjHwoahEIzLsXp5Q kjVK0TJaeBQEEEm9CGH3DEepwRujc9phUuiJp65U5yiGhQ7UW7jN7pV6SMxz4GTtzKQ3 qA/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788410811; x=1789015611; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=rQsPzQa7eqpjkTonKJlYkpSnhYjMbhwY9QKZd7KCfos=; b=OkBoDf3Uvhhn8MNvI41k0BaTRbwvRR9xrlv5PuGTV79VJZmRnsZi9vb4rqUyBn9oUS MuZhVU9YZpRxgRV8sL1MY8xXTQNPi8QQcaF5Wf0nLz16fIerR+2aFHrurfWgyJUej8u4 3PqoeDprT46bemrlFRbzt4j6i1Gbx6jgGsmdzTvpLNkYGthDiNL7OlPU5NoYFvcC5bpa kXmk0OfAUr0QbZoW7v1Uy/VHPe1ISeZhNePsZzB4qMMZYvNQ9yVj1u6EswjHhER0zPxp 933yW3SWQhvKbjg3lLe7Odw61FpBbNr7+JPlcpQHKjWYg3Fzlzo3lcO2m4haPKFEqzLx aA9w== X-Gm-Message-State: AFuF++kkGWJpRzHPaJNuzl0gxSrHzL1RMbZHqtYdAVLP97FK78CKXGJ+ j4h1o1hMmbqG9Hnvscu0Ijpo5Z4uQMLi4EtPTwoMwS6Asi3oRLPWGjmI3tgTJhYH X-Gm-Gg: AYBFou1OOxqJNsImuqC63XfOg8o1+x66Ha87GQBDwSwAaZNkkgc0uzASGRCPBzZn76m PNzE8uttHzgs4jkGQfgOHlbHCiJKUoZOPwxzrZOtp7aWekGUzp+kcAKrmp3/huWV2+iGf4YlE8u D8Wj8aZjYgD4ISw3ySpjkgItO00b8T7ngJjA42uoYjk4y7fJKj2FErXXmZ2uGaCh0Ath4zYRb08 E/QsZzWciKmt909Phl+xorx2qNjTzKoAJD8daiM8LiiDzg08wlqm9c+ed3OC5wjHW7NsRZIiRF9 7/n0LpCaPbENCEjThYb/wzffEN2T+GIuiOpQjESQ9/FKVMO01CUkf94CNL7veVCY99n2rXeLS+1 R60vEzIm1anhsodv4ahEStutqpw/bdx94WvlRr6muUKSm1kmXFPXHV/gj0WpnvV0ha0PXT3do+n HcqXOQtaNBR+0LiEGJQTrmmIMOeTqpGxLbV5aEIUsDsWKNHZ2C6d8GHVMDSWcsFOk+SA6HpafiB suKk7t5LIhEsY70+A== X-Received: by 2002:a17:90b:1dd1:b0:398:a486:81ec with SMTP id 98e67ed59e1d1-39aedf5b05fmr16960751a91.11.1788410811114; Wed, 02 Sep 2026 21:46:51 -0700 (PDT) From: 54weasels <54weasels@gmail.com> To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, balaton@eik.bme.hu, 54weasels <54weasels@gmail.com> Subject: [PATCH v5 5/6] target/m68k: Implement custom MMU intercept hook Date: Wed, 2 Sep 2026 21:45:18 -0700 Message-ID: <20260903044626.24453-6-54weasels@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260903044626.24453-1-54weasels@gmail.com> References: <20260903044626.24453-1-54weasels@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::633; envelope-from=54weasels@gmail.com; helo=mail-pl1-x633.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, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1788410859667158500 Content-Type: text/plain; charset="utf-8" Why this change is made & How it will be used: Boards like the Sun-3 use an external custom MMU logic array rather than th= e standard 68851/68030 embedded MMU. This patch introduces a `custom_mmu_ge= t_physical_address` opaque hook, allowing board initialization code to inte= rcept TLB fills and delegate translation directly to the machine's external= MMU implementation. Impact on existing functionality: Zero impact on existing boards. If the hook is not explicitly registered by= the board initialization code, the standard 68k MMU translation pipeline e= xecutes normally. Signed-off-by: 54weasels <54weasels@gmail.com> --- target/m68k/cpu.h | 7 ++++ target/m68k/helper.c | 89 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h index aadaea770a..b850997a00 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -156,6 +156,13 @@ typedef struct CPUArchState { /* Fields up to this point are cleared by a CPU reset */ struct {} end_reset_fields; =20 + /* Custom MMU intercept logic, if any (e.g. for Sun-3) */ + void *custom_mmu_opaque; + int (*custom_mmu_get_physical_address)(void *env, hwaddr *physical, + int *prot, vaddr address, + int access_type, + hwaddr *page_size); + /* Fields from here on are preserved across CPU reset. */ uint64_t features; } CPUM68KState; diff --git a/target/m68k/helper.c b/target/m68k/helper.c index f3ee95441a..1eef6dcaaf 100644 --- a/target/m68k/helper.c +++ b/target/m68k/helper.c @@ -920,6 +920,21 @@ hwaddr m68k_cpu_get_phys_addr_debug(CPUState *cs, vadd= r addr) int access_type; target_ulong page_size; =20 + access_type =3D ACCESS_DATA | ACCESS_DEBUG; + if (env->sr & SR_S) { + access_type |=3D ACCESS_SUPER; + } + + if (env->custom_mmu_get_physical_address) { + hwaddr custom_page_size; + if (env->custom_mmu_get_physical_address(env, &phys_addr, &prot, a= ddr, + access_type, + &custom_page_size) =3D=3D= 0) { + return phys_addr; + } + return -1; + } + if ((env->mmu.tcr & M68K_TCR_ENABLED) =3D=3D 0) { /* MMU disabled */ return addr; @@ -1001,6 +1016,80 @@ bool m68k_cpu_tlb_fill(CPUState *cs, vaddr address, = int size, } } =20 + if (env->custom_mmu_get_physical_address) { + hwaddr custom_page_size; + + /* Delegate translation to external board-specific MMU if register= ed */ + ret =3D env->custom_mmu_get_physical_address(env, &physical, &prot, + address, access_type, + &custom_page_size); + + if (likely(ret =3D=3D 0)) { + tlb_set_page(cs, address & TARGET_PAGE_MASK, + physical & TARGET_PAGE_MASK, prot, + mmu_idx, custom_page_size); + return true; + } + + if (probe) { + return false; + } + + /* page fault */ + cs->exception_index =3D EXCP_ACCESS; + env->mmu.ar =3D address; + + if (m68k_feature(env, M68K_FEATURE_M68040)) { + env->mmu.ssw =3D M68K_ATC_040; + switch (size) { + case 1: + env->mmu.ssw |=3D M68K_BA_SIZE_BYTE; + break; + case 2: + env->mmu.ssw |=3D M68K_BA_SIZE_WORD; + break; + case 4: + env->mmu.ssw |=3D M68K_BA_SIZE_LONG; + break; + } + env->mmu.ssw |=3D M68K_TM_040_DATA; + } else { + /* M68020/030 Special Status Word (SSW) */ + uint16_t ssw =3D 0x0100; /* DF - Data Fault */ + switch (size) { + case 1: + ssw |=3D 0x0010; + break; + case 2: + ssw |=3D 0x0020; + break; + case 3: + ssw |=3D 0x0030; + break; + case 4: + ssw |=3D 0x0000; + break; + } + if (qemu_access_type !=3D MMU_DATA_STORE) { + ssw |=3D 0x0040; /* RW - Read */ + } + /* Function Code */ + uint8_t fc; + if (mmu_idx >=3D MMU_MOVES_FC_BASE) { + fc =3D mmu_idx - MMU_MOVES_FC_BASE; + } else { + if (mmu_idx =3D=3D MMU_KERNEL_IDX) { + fc =3D (qemu_access_type =3D=3D MMU_INST_FETCH) ? 6 : = 5; + } else { + fc =3D (qemu_access_type =3D=3D MMU_INST_FETCH) ? 2 : = 1; + } + } + ssw |=3D (fc & 7); + env->mmu.ssw =3D ssw; + } + cpu_loop_exit_restore(cs, retaddr); + } + if ((env->mmu.tcr & M68K_TCR_ENABLED) =3D=3D 0) { /* MMU disabled */ tlb_set_page(cs, address & TARGET_PAGE_MASK, --=20 2.50.1 (Apple Git-155) From nobody Sat Sep 26 22:14:28 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1788410867; cv=none; d=zohomail.com; s=zohoarc; b=TrXzuL5aY0qtK9reXdY9JYnqIds9cWNHNvsyYPyO9RDTe2G2xf+3JuECOREoTh6d0AW6VWJc2GAoOGZVcUQfronPlvAKdlFvOOHPTRQJlvlcwv0hYZDggeJok6d1rgui2OxyGui0CpH7x41W1vZHstiyH04aSnkmjFNGN6tsyM8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1788410867; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=CPJLhtJ7BvDbnWW6+Tdj8mg2WSX1fkZA9cVF1ZBf32k=; b=T+zKfOL+LsNpUlJh7R0D3EFAs07SOyk8oIS1b9ihmBl74lfu0/CiJcYNkaoVmIJEBmzAzfDcvO90nZqYL7o63YyCJ/FxJmTbbUPnj20LmwA/0AUELM0f+rhp52iCbHjxXlNMvZVrfPndy/8hLRsGxcPSCN5fnSrsmwq7Nrk1jkE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from=<54weasels@gmail.com> (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1788410867786877.3962621478511; Wed, 2 Sep 2026 21:47:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x1zLn-0002sJ-6o; Thu, 03 Sep 2026 00:46:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <54weasels@gmail.com>) id 1x1zLl-0002s3-KT for qemu-devel@nongnu.org; Thu, 03 Sep 2026 00:46:57 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <54weasels@gmail.com>) id 1x1zLj-0006X5-9A for qemu-devel@nongnu.org; Thu, 03 Sep 2026 00:46:57 -0400 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-38ec1402b05so1785667a91.2 for ; Wed, 02 Sep 2026 21:46:54 -0700 (PDT) Received: from localhost.localdomain ([76.133.142.170]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-1431994db8csm2337726c88.9.2026.09.02.21.46.52 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 02 Sep 2026 21:46:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788410813; x=1789015613; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=CPJLhtJ7BvDbnWW6+Tdj8mg2WSX1fkZA9cVF1ZBf32k=; b=DITs4Wze2CeWSsCfNOuTxYuuSM9+e/WmVS5oTqns/eUyyivzQoxeS34jDEVhXb7F8u MwqJEdP0oqcINJ2GBLQtFQvn6G/29gBUSnZMUVy4anH2HmcihFsvNhDC/F5cRkpp5ai1 JEUudOzxzMdEXsr+Y8CB5Z6cqeyqay14/OyhlKxzFq/oR65hhIEaWcBs6cgYajC7McqA FyYOct9sTveCG68YwSqSpmDxoWYvmKMQtOfeTyxIKwnSqmQFAB5j+42GobSGcyJva10B ICMXERqaMrJDMoH993vSQeXeJA3uIasS/CsWTzd4tVzRbLxUzcITpnMpJDMI1ovl32JW 0qWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788410813; x=1789015613; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=CPJLhtJ7BvDbnWW6+Tdj8mg2WSX1fkZA9cVF1ZBf32k=; b=SbGtGcG/rjUoM1Mbfp81iSU6ZG2f1kqxuWvc/H3MO3KcVJxHNuNa7I4Gq6vticazer V/0cGCI/ksFPAl2KyygPzHhZ8JK0dKf0hDhNndVSwL+i+D28M0WXjue80981eb5xAvS5 SbdKzq+xNXn08jBx6UC65o5j6j2xULZJN0bhFVvTmEqpYX/VBvhvlTqq+thhDI6r3/SA RQF3LNczjgIIlIYqLdCzThnhtWHW79CSXMYPKQPY+5O6dDN3xXpQ+moZ/or+7LMC4mzz fTzK+UuWmMpCqgYhkjed2pAvx3nyvsdHC2Wrrwu8E0IfSU038wRp7BzT1okc+EgCRSn9 XIHw== X-Gm-Message-State: AFuF++n8kVqS1U0YzIIOUs2QFGConfP/ZACQXBmSvHHof3D/kQudKA24 ji2XOMMuZKKDbr29PFk+j6tIQFgDuBX+dwHwS4mxId74g2mlqQkFoM4/5Myhtv4Q X-Gm-Gg: AYBFou1QSRIgyzBfbcM8pxE0BK0VraaOSYUn+tmgw+oC5yEN27IldMn7MLjAXOEaXex pqJubLcmEZaN+/ZWWZfSqrBgfT+3olGug66diGAavmkhrfsYBihUmALTmGlb5PKDRN2jieINTQZ HHEh1B+yonXt5W4bRq+Htv9WWzwSRG88gnGwYKnONZfz9IWHmi800CipX2R3Eome6TUTSuLz58l B28xMUD0WTXL1iyMaEBEwX/uqt2HYKWLVtPfnFk8qFZgO1DhKe8v+Tk6mS2EpXQDo5k6OVuPvjJ 8105VuO2tcK3fLPAOAxU3278YwGPiawQLPkP5qkS1nN/XJOv42Enh2pzufagIWuIE5iH3+evgEo SsyMllkvOohvYQTbhcCu2bz1woLpnJanXuxL85iRbrqYgJkadgxoCUphstzd3i+ZzGr+reoT5zF PspHsR7PZD4rY8IqI1TtZvdNVq6RHjKCZhO/ieLOc5Y5OxMsYzY1Enwqo12b2rdNtHSf6d7xjRR VGq3Uber1usAZmh2g== X-Received: by 2002:a17:90b:3b8d:b0:398:c292:ac80 with SMTP id 98e67ed59e1d1-39aedf55732mr13707299a91.10.1788410812915; Wed, 02 Sep 2026 21:46:52 -0700 (PDT) From: 54weasels <54weasels@gmail.com> To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, balaton@eik.bme.hu, 54weasels <54weasels@gmail.com> Subject: [PATCH v5 6/6] target/m68k: Implement Physical Bus Error and Stack Date: Wed, 2 Sep 2026 21:45:19 -0700 Message-ID: <20260903044626.24453-7-54weasels@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260903044626.24453-1-54weasels@gmail.com> References: <20260903044626.24453-1-54weasels@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1036; envelope-from=54weasels@gmail.com; helo=mail-pj1-x1036.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, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1788410869572158500 Content-Type: text/plain; charset="utf-8" Why this change is made & How it will be used: Physical memory timeouts (e.g., probing unpopulated memory locations) must = generate a Bus Error exception, resulting in Format 0xA or 0xB stack frames= on the 68020. The Sun-3 PROM probes memory sizes by intentionally causing = bus errors and analyzing the Special Status Word (SSW) on the stack frame. = This patch implements hardware-injected EXCP_ACCESS cycle generation and th= e corresponding 84-byte long stack frame teardown. Impact on existing functionality: Accurately populates the 68020 84-byte SSW stack frames. Older architecture= s (like 68000) safely ignore the hook and gracefully exit without generatin= g the advanced frames. Signed-off-by: 54weasels <54weasels@gmail.com> --- target/m68k/helper.c | 1 + target/m68k/op_helper.c | 161 +++++++++++++++++++++++++++------------- 2 files changed, 109 insertions(+), 53 deletions(-) diff --git a/target/m68k/helper.c b/target/m68k/helper.c index 1eef6dcaaf..abfbcead69 100644 --- a/target/m68k/helper.c +++ b/target/m68k/helper.c @@ -29,6 +29,7 @@ #include "system/memory.h" #include "gdbstub/helpers.h" #include "fpu/softfloat.h" +#include "qemu/log.h" #include "qemu/qemu-print.h" =20 #define SIGNBIT (1u << 31) diff --git a/target/m68k/op_helper.c b/target/m68k/op_helper.c index 30af4a2631..1d4b244416 100644 --- a/target/m68k/op_helper.c +++ b/target/m68k/op_helper.c @@ -26,6 +26,7 @@ #include "qemu/plugin.h" =20 #if !defined(CONFIG_USER_ONLY) +#include "system/runstate.h" =20 static void cf_rte(CPUM68KState *env) { @@ -74,6 +75,12 @@ throwaway: case 7: sp +=3D 52; break; + case 0xa: /* Short Bus Cycle Fault (Format 0xA) */ + sp +=3D 32 - 8; /* 32 bytes total - 8 bytes header =3D 24 byte= s */ + break; + case 0xb: /* Long Bus Cycle Fault (Format 0xB) */ + sp +=3D 92 - 8; /* 92 bytes total - 8 bytes header =3D 84 byte= s */ + break; } } env->aregs[7] =3D sp; @@ -343,56 +350,80 @@ static void m68k_interrupt_all(CPUM68KState *env, int= is_hw) switch (cs->exception_index) { case EXCP_ACCESS: if (env->mmu.fault) { - cpu_abort(cs, "DOUBLE MMU FAULT\n"); + qemu_log_mask(LOG_GUEST_ERROR, + "M68K: Double MMU Fault. Halting CPU and request= ing reset.\n"); + qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET); + cs->halted =3D 1; + cs->exception_index =3D EXCP_HLT; + cpu_loop_exit(cs); } env->mmu.fault =3D true; - /* push data 3 */ - sp -=3D 4; - cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); - /* push data 2 */ - sp -=3D 4; - cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); - /* push data 1 */ - sp -=3D 4; - cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); - /* write back 1 / push data 0 */ - sp -=3D 4; - cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); - /* write back 1 address */ - sp -=3D 4; - cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); - /* write back 2 data */ - sp -=3D 4; - cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); - /* write back 2 address */ - sp -=3D 4; - cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); - /* write back 3 data */ - sp -=3D 4; - cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); - /* write back 3 address */ - sp -=3D 4; - cpu_stl_be_mmuidx_ra(env, sp, env->mmu.ar, MMU_KERNEL_IDX, 0); - /* fault address */ - sp -=3D 4; - cpu_stl_be_mmuidx_ra(env, sp, env->mmu.ar, MMU_KERNEL_IDX, 0); - /* write back 1 status */ - sp -=3D 2; - cpu_stw_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); - /* write back 2 status */ - sp -=3D 2; - cpu_stw_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); - /* write back 3 status */ - sp -=3D 2; - cpu_stw_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); - /* special status word */ - sp -=3D 2; - cpu_stw_be_mmuidx_ra(env, sp, env->mmu.ssw, MMU_KERNEL_IDX, 0); - /* effective address */ - sp -=3D 4; - cpu_stl_be_mmuidx_ra(env, sp, env->mmu.ar, MMU_KERNEL_IDX, 0); - - do_stack_frame(env, &sp, 7, oldsr, 0, env->pc); + + if (m68k_feature(env, M68K_FEATURE_M68040)) { + /* push data 3 */ + sp -=3D 4; + cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); + /* push data 2 */ + sp -=3D 4; + cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); + /* push data 1 */ + sp -=3D 4; + cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); + /* write back 1 / push data 0 */ + sp -=3D 4; + cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); + /* write back 1 address */ + sp -=3D 4; + cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); + /* write back 2 data */ + sp -=3D 4; + cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); + /* write back 2 address */ + sp -=3D 4; + cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); + /* write back 3 data */ + sp -=3D 4; + cpu_stl_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); + /* write back 3 address */ + sp -=3D 4; + cpu_stl_be_mmuidx_ra(env, sp, env->mmu.ar, MMU_KERNEL_IDX, 0); + /* fault address */ + sp -=3D 4; + cpu_stl_be_mmuidx_ra(env, sp, env->mmu.ar, MMU_KERNEL_IDX, 0); + /* write back 1 status */ + sp -=3D 2; + cpu_stw_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); + /* write back 2 status */ + sp -=3D 2; + cpu_stw_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); + /* write back 3 status */ + sp -=3D 2; + cpu_stw_be_mmuidx_ra(env, sp, 0, MMU_KERNEL_IDX, 0); + /* special status word */ + sp -=3D 2; + cpu_stw_be_mmuidx_ra(env, sp, env->mmu.ssw, MMU_KERNEL_IDX, 0); + /* effective address */ + sp -=3D 4; + cpu_stl_be_mmuidx_ra(env, sp, env->mmu.ar, MMU_KERNEL_IDX, 0); + + do_stack_frame(env, &sp, 7, oldsr, 0, env->pc); + } else { + /* M68020 Long Bus Cycle Fault (Format 0xB) */ + /* + * 84 bytes of internal state are pushed before the generic + * 8-byte header + */ + sp -=3D 84; + for (int i =3D 0; i < 84; i +=3D 4) { + cpu_stl_be_mmuidx_ra(env, sp + i, 0, MMU_KERNEL_IDX, 0); + } + /* Offset 0x02 from internal frame: SSW */ + cpu_stw_be_mmuidx_ra(env, sp + 2, env->mmu.ssw, MMU_KERNEL_IDX= , 0); + /* Offset 0x08 from internal frame: Fault Address */ + cpu_stl_be_mmuidx_ra(env, sp + 8, env->mmu.ar, MMU_KERNEL_IDX,= 0); + + do_stack_frame(env, &sp, 0xb, oldsr, 0, env->pc); + } env->mmu.fault =3D false; if (qemu_loglevel_mask(CPU_LOG_INT)) { qemu_log(" " @@ -438,7 +469,9 @@ static void m68k_interrupt_all(CPUM68KState *env, int i= s_hw) =20 env->aregs[7] =3D sp; /* Jump to vector. */ + env->mmu.fault =3D true; env->pc =3D cpu_ldl_be_mmuidx_ra(env, env->vbr + vector, MMU_KERNEL_ID= X, 0); + env->mmu.fault =3D false; =20 do_plugin_vcpu_interrupt_cb(cs, last_pc); } @@ -510,12 +543,34 @@ void m68k_cpu_transaction_failed(CPUState *cs, hwaddr= physaddr, vaddr addr, if (access_type !=3D MMU_DATA_STORE) { env->mmu.ssw |=3D M68K_RW_040; } - - env->mmu.ar =3D addr; - - cs->exception_index =3D EXCP_ACCESS; - cpu_loop_exit(cs); + } else if (m68k_feature(env, M68K_FEATURE_M68020)) { + /* + * M68020 Long Bus Cycle Fault (Format 0xB). + * The Motorola 68020 hardware intrinsically generates a physical + * Bus Error exception whenever the system bus flags a transaction + * timeout or failure (e.g., attempting to read an unpopulated bus + * address). This natively injects the EXCP_ACCESS cycle to build + * the generic 84-byte exception stack frame. + */ + env->mmu.ssw =3D 0; + if (access_type =3D=3D MMU_INST_FETCH) { + env->mmu.ssw |=3D 0x1000; + } else if (access_type =3D=3D MMU_DATA_STORE) { + env->mmu.ssw |=3D 0x0040; + } else { + env->mmu.ssw |=3D 0x0080; + } + } else { + /* + * Older architectures (e.g. 68000) do not currently support + * hardware-injected transaction failures in QEMU. + */ + return; } + + env->mmu.ar =3D addr; + cs->exception_index =3D EXCP_ACCESS; + cpu_loop_exit(cs); } =20 bool m68k_cpu_exec_interrupt(CPUState *cs, int interrupt_request) --=20 2.50.1 (Apple Git-155)