From nobody Mon Sep 28 00:10:03 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=1787019842; cv=none; d=zohomail.com; s=zohoarc; b=WTcbvXdsM6NlUJcfIbq+n7FLqh2oA16AOCoGyQecSW+AK88iaR39OGqC0oN/BoUAgaADVZDcUnFItIMLe82cdlm4QxXSHoPRdqbFlBGysjyQPeNgUD+3r1/ZLqmzGMEAOImbLsQ70DlNM54ohOgAR6+DFj4l0q0FrZSJzEQ8F8A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787019842; 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=mOzBRR9is3JNPkpZ9N3u/DPsGnfUKKhLAGdsvNZf0V8=; b=Qy5Ut2cHkrRDYwykC8mb0oiIsnZIWRAVoSb0VySeMjxno5+n5bHHrsySRehggHPizxCX71aroyig1zZfiARFv61k4n3PeybjaDYv2ZG6G9H5SOlGOf/LxGzQxMoJUC3wdQjmp+CErKvt3k6Lo5qkCvpRkYLmhSDeUilkrDK7bx0= 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 1787019842589849.1332912344747; Mon, 17 Aug 2026 19:24:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww9Tx-0007U9-T1; Mon, 17 Aug 2026 22:23:17 -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 1ww9Tr-0007Sr-V3 for qemu-devel@nongnu.org; Mon, 17 Aug 2026 22:23:11 -0400 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]) 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 1ww9Tp-0008K2-HQ for qemu-devel@nongnu.org; Mon, 17 Aug 2026 22:23:11 -0400 Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-382ef647e20so3953191a91.1 for ; Mon, 17 Aug 2026 19:23:08 -0700 (PDT) Received: from newsled.lan ([76.133.142.170]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3267c389363sm10897816eec.23.2026.08.17.19.23.06 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 17 Aug 2026 19:23:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787019787; x=1787624587; 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=mOzBRR9is3JNPkpZ9N3u/DPsGnfUKKhLAGdsvNZf0V8=; b=n54jiZcpLlhgRiKx/roMQFbHl6olZx5IP/ceYxlQ1Sus6gV9catXdI/9ELAkIPGN+m Pu/apd64tZHQLhcP8Tym5SWMZxB0CvEJ1XQqJvIJncK3f6yzLew0w304pqM+OsRA0hwp PrYbvNOXdOyTDG82RgVCf/D/wYad8cRqL20u+zvV4x0T0GfW28LdwioEZ87IByXpMI/k vmoRe8VwdUviSuQX6dO1GKGO1eKgE3np3Bx43IDZBXoFcyt85FAUwqzjMVtWbltM9i6I lsBmbfKZT+LFKuKi5OPE/AOByIQ3RFedvuga4v7vzUJ5nUxT1nzsutvd/ojmDDvLNCtW tRfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787019787; x=1787624587; 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=mOzBRR9is3JNPkpZ9N3u/DPsGnfUKKhLAGdsvNZf0V8=; b=f/HMMB9fN6a1wYfX/Vk1oIe+8oR3hol5bdhbvX6kKQDfN3bVU6kY4KXt6O+iBEsvFs 5mss2HMHbHK4XSZ+XbLmrjnI8U0QRA02yK+yA5BkT7jwOLV4gYQwQzZfI+IlbZYxLCgF X6zxXo5dsgSnThbfPaDsPgBpHTWGYrAAGdLBdEXwa66aRmay962pyh1lWpGEWxnGBxaq /GRlrEpML+WQGFXuabBsO+lHNk1rgm0CKSU9jroZY/dwmuoDuRF8qePkMHcsSQ5r26nS 3Ld9Phh/FLGPke3ZXSllCuL3hnADqa8XuhPx80ndExFpIV/4wKQ+LNkNT/F5j380Bcq2 i6aw== X-Gm-Message-State: AOJu0YxH6ZSJmU/8SZWCRqh65eWu0Nd9L/v4whAbvsINPJVzQzDD6EmE 9Pi1V+PGf3QXF8pTX41ywNDoydpXW6tHr1M7uMKVBd5kld+RCI6fhktUUPmvEg== X-Gm-Gg: AR+sD13+1QcfqMFAdSGt+Hj0//FQDSYdrNuy13RXHVBRDoJb35/ZLA0eGoCv7VRi4cQ qLSz2r+dsijhB2x0tm6unFbekRaVKGgDuxVowOv+5y4f31TLGARiO0DDkdHqioTPSiBXfjuT75K engCajenZfuyf8hzihKE2mHiQyC5imY2yLnKd8hOZO7EFMQ+UyLC4cgVMmGRFBoi/pfxdM8428z C85QzRBtWsCeymcmf65fG+ZbfCUlKSwqBfKtKjnkWuwXqd6vPYrB9LwiNFUsfuxLXj6Yjj2mXt2 2O7xqDnwfjTLiwuuW2rq62WOkcXysI7v0mCVOPjKdR7P3FAAW0LGmJBHRpofd4WI9MQatte37SC cEOoRzhO7gXZjwqh9zXzNHU+pUUWubLb3dNZ0Q+1y8w8VAiwY9GQbOel04Wx6YermqQUmXgywbr 0xbHf+Nu201Mlzn6hL+FQGTKlBZL9kPFRZmcaT8l2gJiTQLjmNB6EGe6wLorwBesVyNLzhf5Y9h 1b6G4PzHkkpIks= X-Received: by 2002:a17:90b:134f:b0:38f:de97:b06 with SMTP id 98e67ed59e1d1-3933bf4aca5mr32441924a91.5.1787019787509; Mon, 17 Aug 2026 19:23:07 -0700 (PDT) From: 54weasels <54weasels@gmail.com> To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, 54weasels <54weasels@gmail.com> Subject: [PATCH v4 1/6] target/m68k: Add dummy CAAR register Date: Mon, 17 Aug 2026 19:22:17 -0700 Message-ID: <20260818022225.31801-2-54weasels@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260818022225.31801-1-54weasels@gmail.com> References: <20260818022225.31801-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::1034; envelope-from=54weasels@gmail.com; helo=mail-pj1-x1034.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: 1787019843318158500 Content-Type: text/plain; charset="utf-8" High level description: 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. Context: This patch was originally submitted as part of the monolithic Sun-= 3 Machine Emulation series (https://patchew.org/QEMU/20260503015756.99176-1= -54weasels@gmail.com/) and has been split into atomic components. --- 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 Mon Sep 28 00:10:03 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=1787019849; cv=none; d=zohomail.com; s=zohoarc; b=Mh/TQ//zv0tK+Mv0eN3O4EUW5mg6BQzIbmkFeXtD01o3LHps0tvT3wXCjZUj4BADsRIPlCOO7phxKd7ir66vI+i0a0HeuFxeOZbzaSW9mnfZoCgi1z9g6rSrbptGvLUjVZfwebIb482trvdTVIvL1BdLmsk6+UfCFzNPSPlAjag= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787019849; 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=BhVD7+/45V1IEQ+bx2PiJcdOXSF4+dl06ha5CDBLiP8=; b=SiQjhTG7VtRUUHG5Tz0BquoCI3f4Txejm6Z5pOK7jTrIBRd5DVHDZBuHc/iNzf9P1O33XsSr4CWmfaIQHBniQqL3FLCtRQIcSSlZIcXALVkYYBCGgXMOXAGSTGExfvAJKSpvTDU+mm5XAWFJEa6l2/9z8eJbeY65ldKeZMy8X1s= 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 1787019849539297.8643066961321; Mon, 17 Aug 2026 19:24:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww9Tz-0007V7-BL; Mon, 17 Aug 2026 22:23:19 -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 1ww9Tu-0007U4-5m for qemu-devel@nongnu.org; Mon, 17 Aug 2026 22:23:14 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) 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 1ww9Tr-0008KM-NL for qemu-devel@nongnu.org; Mon, 17 Aug 2026 22:23:13 -0400 Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-38f620399a0so3575755a91.2 for ; Mon, 17 Aug 2026 19:23:10 -0700 (PDT) Received: from newsled.lan ([76.133.142.170]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3267c389363sm10897816eec.23.2026.08.17.19.23.08 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 17 Aug 2026 19:23:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787019789; x=1787624589; 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=BhVD7+/45V1IEQ+bx2PiJcdOXSF4+dl06ha5CDBLiP8=; b=r2hCJDv7msHoEnJ148vgyUyCSZBvi3MNt429+xqYlB2zODWar4qUSD048Rh/yOSb9k ZVcSVdE0BMBpCHl2efwQ4KHtG7F7zTGgTKaSXVqp2LBiKX4mHWJs0EWBcmHq2RMzrqmg TiXPdi9vNU9y3uv0Mb7iiJXCF892LHEp6oveWLfA8gcoz0vg+9B4DBn8CgSUxbW/k7tX C7ZIB3vwfajvxny6z1xYfJzgrzpYMFXNbVpQC7WvicbVw8A4hj0s9GAaB8CXQy8586qW e/4tUUpk52RSpI4tJQvjyo+B9XHsIyJqMWl1bppotZsSSpEl59OSEXrSComZwiRWk+Hs DlKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787019789; x=1787624589; 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=BhVD7+/45V1IEQ+bx2PiJcdOXSF4+dl06ha5CDBLiP8=; b=g8BNu+bSGu9u3zjrcuyIebvmPzlEXOeC4vFLxCukf30s4LNnFqtabJLwdtYKGkNyTR xS9pNrkYw39Rz4zt3XfIDTTqJm2pN4IKDZEjCMPOry6EVKNPFiCkBw7a6DGX0BnlSiTv qF7SGA1NxSSVArTpO4ZDHQ4MtKZRL1NlUwh27QNFGlepDoUqAIyfpWzjfvWRGTmNwPGI UQCU8CNeacai+m4m+VBYS4f837upYrPO73ZXBjQI75rNmFpZ+fO26+laDAzudzQGg20m jVCw6pBe95lb/GABtmd3GqQu4FL5JY7WvNTAG6TewGRyWOEwGeF3BgsSE7WUs/J5Rw0L 0PsQ== X-Gm-Message-State: AOJu0YxlMfcH/wzDY+fpksE8qu/nFAmJNss2Hub0cXDmhDwl9oRWkqkY TVSPhENS1ZxZiCRQzLClforPuGEFYLYxpotCfiwLMldI3B7ADSjYTcdaMDQVcw== X-Gm-Gg: AR+sD133wK5ubDJkSMpAB1k5LAOShPoxrHhNclDJ5jLOpUJjllfF/gFJt2JQylNDHHM 4BGqIUvVksQFLTzd0tPXgjuzBQtW5RZy/PbgkYpeiarxnsSnrX5MzsX0VYkKdkVFt8wmvsamM2L r99c4X3FttVzJCn4lEp1JHyGSBHEtarPHo/dxYWpsktvHDbSxFJ7CrehrUcv1smrjOE4cAZAnNO QUjkcVnGOdsTQJu2SEeHp6UQrX3uYLnMsigJ3Q9ZGcGu76hEgBsnoQWaTfeWZ5Jz+XJk9UQMRZ7 xiva+O9BmU3MvbVYYO0Jcysj4kpTkMrJDWLX9AdyxDDagQ2nIeaE6AKRvTvHGSbpgYI+m0rwevl agkEh16wg9buDDujUnTv0Qx14j67na2ZPIKJ/iZ5cjvvN5yLlad8Zzh1CaqMjy49SYvo74BTfaZ +mzl03veLPt77ifuRjq5kzYCWHW4pIv3Ugs6/4ZQCSKDk5eMrB6MjYvcBvP9K8bac9p0plmMgO7 QIm X-Received: by 2002:a17:90b:582e:b0:395:4de4:92be with SMTP id 98e67ed59e1d1-3955a79ccb7mr5664872a91.13.1787019789276; Mon, 17 Aug 2026 19:23:09 -0700 (PDT) From: 54weasels <54weasels@gmail.com> To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, 54weasels <54weasels@gmail.com> Subject: [PATCH v4 2/6] target/m68k: Fix fsave/frestore for 68881 FPU Date: Mon, 17 Aug 2026 19:22:18 -0700 Message-ID: <20260818022225.31801-3-54weasels@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260818022225.31801-1-54weasels@gmail.com> References: <20260818022225.31801-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::102e; envelope-from=54weasels@gmail.com; helo=mail-pj1-x102e.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: 1787019851270158500 Content-Type: text/plain; charset="utf-8" High level description: 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. Context: This patch was originally submitted as part of the monolithic Sun-= 3 Machine Emulation series (https://patchew.org/QEMU/20260503015756.99176-1= -54weasels@gmail.com/) and has been split into atomic components. --- target/m68k/translate.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/target/m68k/translate.c b/target/m68k/translate.c index 138c89d3e5..bdf619883c 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -5364,11 +5364,19 @@ 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_M68040) || + m68k_feature(s->env, M68K_FEATURE_FPU)) { SRC_EA(env, addr, OS_LONG, 0, NULL); - /* FIXME: check the state frame */ + if (m68k_feature(s->env, M68K_FEATURE_M68040)) { + /* FIXME: check the state frame */ + } else { + /* + * 68881/68882 FRESTORE: read the state frame + * (NULL frame is 4 bytes) + */ + } } else { - disas_undef(env, s, insn); + disas_undef_fpu(env, s, insn); } } =20 @@ -5383,8 +5391,12 @@ DISAS_INSN(fsave) /* always write IDLE */ TCGv idle =3D tcg_constant_i32(0x41000000); DEST_EA(env, insn, OS_LONG, idle, NULL); + } else if (m68k_feature(s->env, M68K_FEATURE_FPU)) { + /* 68881/68882 FSAVE: always write NULL frame */ + TCGv null_frame =3D tcg_constant_i32(0x00000000); + DEST_EA(env, insn, OS_LONG, null_frame, NULL); } else { - disas_undef(env, s, insn); + disas_undef_fpu(env, s, insn); } } #endif --=20 2.50.1 (Apple Git-155) From nobody Mon Sep 28 00:10:03 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=1787019842; cv=none; d=zohomail.com; s=zohoarc; b=geiv9n0Rq3qwYdC5oLCxcHEfuQSdactYS+u42e3KwIZnasJ917eq4K1v/Mo+ZxB2jRvhUhU4n/tvZCgnI5I7WK/nQ+Za9wDFRFXokflxBwTHfOP/xsBc6KCu2eYNuLa8bU8k/qvMJP33BiIATY1Fzh7ukOpZHlOrOxNUstUxhYA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787019842; 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=Pj2T67/7p/2P+wnOytOC2N0z0hs811CESlM1zZEhJ7c=; b=HBh6e46ypjDLnfvB4ijivDJlwTiq7SqeSz7MjpfyofswdorrH0CWcKqoLjk2pn2TVSSRrqPV2fqzpSXIzUTiAADXTJUCwIEvjXh+QgZvL5hxKv3RxksoXpY+yn10q5X4ccideRmX9d8+45v8f+IPptMkRMYA4G9XAynOrwT8lkU= 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 1787019842762324.96855369602156; Mon, 17 Aug 2026 19:24:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww9Tz-0007VR-VB; Mon, 17 Aug 2026 22:23:19 -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 1ww9Ty-0007UU-0v for qemu-devel@nongnu.org; Mon, 17 Aug 2026 22:23:18 -0400 Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]) 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 1ww9Ts-0008Ka-1J for qemu-devel@nongnu.org; Mon, 17 Aug 2026 22:23:14 -0400 Received: by mail-pg1-x52e.google.com with SMTP id 41be03b00d2f7-cc1469c1b83so217682a12.1 for ; Mon, 17 Aug 2026 19:23:11 -0700 (PDT) Received: from newsled.lan ([76.133.142.170]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3267c389363sm10897816eec.23.2026.08.17.19.23.10 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 17 Aug 2026 19:23:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787019791; x=1787624591; 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=Pj2T67/7p/2P+wnOytOC2N0z0hs811CESlM1zZEhJ7c=; b=Ji9PHXPON74hyfq6KhKCFePitw3oyjeG5TMe2gCZzDH+ljJ6LzN4lHERcMlODFbfQq KowZImJYqUEhl1f7NtLlTZEDVBcVxtGV9x71Jl+Z95ROczwMcT2/3C6HGDvnmaFqJw16 +JOjN+wiTthMWlAdd04C8xeKIj/wr+escOC4zhjD5n8JqnYWipeLzWm+BfN1EFRUkVnF IUHZzroD418uuULSah8KezV8vNECSPPnfWLCnV9AOC0ZEjG5CApxnl2hHqVL/al8lWQ8 MeyD8CYBTUfqb/XpAgR60b0h+1suQozxuicBtRmH0FOnoK/xYrzZ4nIfvZswLVRBUd0X wd/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787019791; x=1787624591; 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=Pj2T67/7p/2P+wnOytOC2N0z0hs811CESlM1zZEhJ7c=; b=Vb7Pdn2NvIpQg8nIfKMbjMpOPEmEJN9y/z32nxEk/YnF2y4wFGl4cFKpNp2eF/5iEE p0ElOnmSEM21VuN/TzRmlIpBlVDWvSAm8z2/ai9val8z8hT8KhlxYq3/bblRbUPdeABX 4Rk7TdR11wqdRxp1WkG+oEVkjGkOwIf9D+FhrudBSMphirc5WHfIfT5he7joaSh2c5MD Y/ltyZWU6MyR0g9XA5E1P8BqfFqwETSgoCf1mohnP7GCcj1fYto8r4b5ibOxOnFjMCCh xnT87EQfQigo5AahTm0SIgtbosgn8tgh95NmL+Bu19It5iOziVJ9MBAA5oDv+3iRLy1v iWqA== X-Gm-Message-State: AOJu0Yx1AfzykFsyxKvaBRgfx/C/o8nr1S6ES7UPo+ASBhkf1pVtOWOC 3rM1f7ZC010k+0nPKbnrckOEvLsp5qh+a9IDgDg4oryj5NPdgjcBRGLxr56gNg== X-Gm-Gg: AR+sD124jaim3fgGi5OVt62eDqZ1syIPgnRxnC1w3rsN1Rr7hrLJD1KvMvzN+UV0CbW XMns+HpmhTPQoTBA9AvUaw8AcLc+RhgAJkZ2v0snE4zWJaNVofXtHiMgv97AcqsEKJz7QbciIlj /bhzZYycVjCLxDZGmEmM9GfcZhci5TALV6PU8ChRe8rZ+nROijE6r2UGTZVq0CzGyMdoolNA87O +4RkVoqmDc2JV0ofLcl/7RTy8DyVIwFjYYbPx80Y/gUkY96z1g2lSKv7D0XghE22CXgSJuRIA9k 6pLTJ9DNv2Bd6EAXYcSpk8Z3OEDNGlrovaz2ncnoRQ4wTraAw0irPd1OPhdaKtHK+j/FUXyCoMc ATxXrU2tJQvEkUhjE3XP8DVyH5HYuvXvZ/2VHn+czGfwPhOpqwF8llNeIFYTfFMcfXbB+fK1XJg N/yBkg0scB6pk015uQRC9diKQ+Qu+MmsAmsPP1Rmap3jLaZ0KrfbFro4qxthE6LWJFvMvCTcKHy mQe4Vr1InY/4jA= X-Received: by 2002:a05:6a21:3382:b0:3bf:a638:4371 with SMTP id adf61e73a8af0-3ccda782278mr4683042637.10.1787019790653; Mon, 17 Aug 2026 19:23:10 -0700 (PDT) From: 54weasels <54weasels@gmail.com> To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, 54weasels <54weasels@gmail.com> Subject: [PATCH v4 3/6] target/m68k: Fix NMI pending for Level 7 interrupts Date: Mon, 17 Aug 2026 19:22:19 -0700 Message-ID: <20260818022225.31801-4-54weasels@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260818022225.31801-1-54weasels@gmail.com> References: <20260818022225.31801-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::52e; envelope-from=54weasels@gmail.com; helo=mail-pg1-x52e.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: 1787019845185158500 Content-Type: text/plain; charset="utf-8" High level description: 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. Context: This patch was originally submitted as part of the monolithic Sun-= 3 Machine Emulation series (https://patchew.org/QEMU/20260503015756.99176-1= -54weasels@gmail.com/) and has been split into atomic components. --- target/m68k/cpu.h | 1 + target/m68k/helper.c | 6 ++++++ target/m68k/op_helper.c | 14 ++++++-------- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h index 7cf3791108..058777b891 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -148,6 +148,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 Mon Sep 28 00:10:03 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=1787019850; cv=none; d=zohomail.com; s=zohoarc; b=bZRxl1VIHHK/8UUuxA1+Ep1VgbJBGxYgH5xxEXgKoBxiGDT0E9uEGefvkuUtBGnxyIUYvb8KzyxYSIELPLfMM7LAd9F8pdj1tlKDyqcCmFcJIrvr2s21WrimlJpSKvLY4Z3YJA/X/ycxFgG29o4WKUGeQKrZ9q+dkJ0ktokmLtw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787019850; 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=HhJoO4/xR3OHq4n8jQsS/DwR0a2h9k9Ytg5OxG8RSFI=; b=UDl3uaJBmrRuCDX9Dq62uEZYVVcd8KejMIum5SwGuov+YQ7hAgS3n04Z4/15OzIr+I1SpwnYrmH5gShrwbxCWutxY5WXpwyK1CIqJsUH0VTL4ok2jVVoylAtbLxMSngky0x2jr7ZrpnoF8Quir3RtpfGVUUJ8aSXgSiPD7tj0bA= 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 1787019850204328.78645557036896; Mon, 17 Aug 2026 19:24:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww9Tz-0007VK-Pm; Mon, 17 Aug 2026 22:23:19 -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 1ww9Ty-0007UV-0t for qemu-devel@nongnu.org; Mon, 17 Aug 2026 22:23:18 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]) 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 1ww9Tt-0008L9-TV for qemu-devel@nongnu.org; Mon, 17 Aug 2026 22:23:15 -0400 Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-38f0f132f56so430665a91.0 for ; Mon, 17 Aug 2026 19:23:13 -0700 (PDT) Received: from newsled.lan ([76.133.142.170]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3267c389363sm10897816eec.23.2026.08.17.19.23.11 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 17 Aug 2026 19:23:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787019792; x=1787624592; 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=HhJoO4/xR3OHq4n8jQsS/DwR0a2h9k9Ytg5OxG8RSFI=; b=cP1g9hqt3tJAfOz5+Z0kd6FbKhrijhSPTqnhYZ8J2O9P4XptfvRyH0vsnOFpLntGID eOZ3M0dPOrOcbY/NRQWQGmGfI1tEr9KvGnxGB8J6smQK0pq99sGOB82/GMH5qvLtuhhF 0qTGDmad0/a/hm3hN32aJ4rdp8aHEcCzyPdE4izNc+U098/4VmD/LsXewA4vfhKupkKd Wm00nhU8fO0LY/ERcwBQrZ75YQz+89zMSGvzX3maDL2fHDGlDXTQzNDSpyljR+ECialM GWIW5pd+UAdUKUsn9rx9IcTIeUuuVcsMIygeHmxh7ywSySvbeiz5G++1ryPyMlYMq7jp NF1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787019792; x=1787624592; 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=HhJoO4/xR3OHq4n8jQsS/DwR0a2h9k9Ytg5OxG8RSFI=; b=LkQTMlesWP2fkTWGfXKn2r7MkmHyxENXrU/HDqZDIN4UmHHIeg5X5S66zVf7o3jRdg THFs4C8561r3eHEyJC3BGzPeSIlQZBFuQLuRZMbLrzlBYQWK+vZWmVqBdOEYQm/qU08Q CdKTT0a/9cgjZo2z8f2VHSxmI9xGNuhmVFZjlDpwi4H/DrTFsVBHq5ciyonXqbO9bef8 xnifTxzqkR2cXJFd7ifXVn178I8afCFVPy2FPy4S20QXeMs/BeCWUmNmVL9Rc96qYejA +T++d0sOGQqzjERmLBIy5MYrOqGPH9VCacCtBT3d25vc30ePpZGG/EZLWSV3RAMbb54L 35dg== X-Gm-Message-State: AOJu0YxabnLGFuMKZRSiRvBwOAJQbVaGNtnip50id+yTvb9wjbR9MSuU c7EkFA7ooQIUSIlRkr2EB1S4bmwQDMsubF4F1HI7ZBY2ulS3SM0v3x40H0gXCA== X-Gm-Gg: AR+sD12TK6ynEvRvn/PikbOtG0yt55ADpR8lX4zBJZQCGMXx/jE2oRF/nFxKGMuTXNR ERiFUtEKQW24Ehf9zWiEwWPrdV97x65SZqECP5ylbgzVQqa71qcxE+gawbIoNIgx5Z4HKN+j04p ProhvHBXfooKEPi/s6qQdAYs4puecyg/BAvpNjO558spbBhUsrnbo2UPFqnc1fXHM1X4m2snkPm Dv7M+JLhOTBTJkEUulxuNwc3rIMq1oIheekddOTTowaKv4K42Jz15aFX8YWZr7ZzeTZoSN0EBWj 8tMw9J36o0Op2Yg9yvfWW4qriTHd6OyK+dqf6CV7s17yoTy51GaXkYASyBql3YGPpJHp1t3gCvO RhFQA7C3ULTNm/LXTfWO/DYFqja/rIpWUqH1L1Dwmw63CJuoXr4WmNQBb5HtqsbtlFVIpZUoZ7e 2EH5WTpSLVEVmbWHpyJHkj++/BTKsed2IxB80/Xg70tFoU5ixjanAA56Ny64EPeGOF1y6E6RMIg Z3p X-Received: by 2002:a17:90b:2e42:b0:38f:657:6823 with SMTP id 98e67ed59e1d1-395638b424amr1821729a91.8.1787019792339; Mon, 17 Aug 2026 19:23:12 -0700 (PDT) From: 54weasels <54weasels@gmail.com> To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, 54weasels <54weasels@gmail.com> Subject: [PATCH v4 4/6] target/m68k: Extract Function Codes during TLB fills Date: Mon, 17 Aug 2026 19:22:20 -0700 Message-ID: <20260818022225.31801-5-54weasels@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260818022225.31801-1-54weasels@gmail.com> References: <20260818022225.31801-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::102f; envelope-from=54weasels@gmail.com; helo=mail-pj1-x102f.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: 1787019851320158500 Content-Type: text/plain; charset="utf-8" High level description: 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. Context: This patch was originally submitted as part of the monolithic Sun-= 3 Machine Emulation series (https://patchew.org/QEMU/20260503015756.99176-1= -54weasels@gmail.com/) and has been split into atomic components. --- 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 ce2707dee5..f97f20e999 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 058777b891..42d34502fc 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -601,12 +601,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 bdf619883c..6aa4c5fafd 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 Mon Sep 28 00:10:04 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=1787019842; cv=none; d=zohomail.com; s=zohoarc; b=KsmY4XGRSr7rwQjMYthLszzSD82L/7Ve+z0A0PORMV/DJR2AHunBK/EkIyNEwhxFOEvIEnd4KqyEQ37drmo7hTvbGZ0l88xGaxPtSCn6OWQzFrOXtIYh2MkZ6DCB3oV2PtHQoRErXfFXFFCD/54xMNUNWtAjM/+EGUZc/Ar/G4g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787019842; 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=JkyOCPkyAxST0wESByKfCzgjt9wC3k6oCK82FLVpN/s=; b=J2aD3AiM5tTEO7bIl5iJERvXRpR/1TanVFGwsu7GWT7mxqmlRGw2UdY6FmIn/VoNpVZTwjCGGpB+X3kw8I4PvjUIW1UCgHi+q34a7DwhSxvVelhd2qZIpmp1QVrAGVPb9TjahmlPRVUWvZCNt586yCovJidlrlSXDJJZUsiRsBA= 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 1787019842289216.2494898495786; Mon, 17 Aug 2026 19:24:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww9U1-0007Vz-C5; Mon, 17 Aug 2026 22:23:21 -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 1ww9Tz-0007VD-Gf for qemu-devel@nongnu.org; Mon, 17 Aug 2026 22:23:19 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]) 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 1ww9Tx-0008LW-CZ for qemu-devel@nongnu.org; Mon, 17 Aug 2026 22:23:19 -0400 Received: by mail-pj1-x1033.google.com with SMTP id 98e67ed59e1d1-38125cebfdaso6005381a91.1 for ; Mon, 17 Aug 2026 19:23:15 -0700 (PDT) Received: from newsled.lan ([76.133.142.170]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3267c389363sm10897816eec.23.2026.08.17.19.23.13 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 17 Aug 2026 19:23:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787019794; x=1787624594; 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=JkyOCPkyAxST0wESByKfCzgjt9wC3k6oCK82FLVpN/s=; b=PBTEZ/4x5AIcFbz4wi7doXHXrW1u4U4K9AvYzW/yX8o+xZstKl9F37JobXlvdf970z QJM0nMmlclKpGan6SmZOmhkiXUDyd02l1rxcmQYw24bsAmVLJQFxkg3HWQeQb3TUqfXO Q7yNxcXDxurAYfTg/aMZWPer/91ffGWPqHjS3Lo/oMEeh79cIrz64qkU1a2sMZAacQCn rcNUsYYLUvQqprhkc0t0x6goL5D7vmlv22ukZTJHzGSEfnV+D1e9MAA1B6mQtbURPmoZ JVbZFJCZ1saJsBkMiSzBn/fl/hslXOfsvDOipA4vY/xjQ5CcqSI+3gCG7DbXkgWsgriM tlkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787019794; x=1787624594; 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=JkyOCPkyAxST0wESByKfCzgjt9wC3k6oCK82FLVpN/s=; b=NkDAQl3K4Qbvm8OQXZzrWn4n4vLd4yTcwQWm03TfVNCwPY4vLPk434ER8o5RgbcElx wNhLYuPz+7YyfUJJMIK0F522D6BcBNWQ5j4CcP2zXCREXGcWBI8/tCU5QXA6sQOQby1Y vU6PzSTaZFuGJhcESXD71dnDgISebwHlzOrRATo9czFGHO3hT56tw2Q11XxvfIitjgwD 9GrzHi+cgUt2JNEcIO6AHKa2VNMzMloQ/BfZSGhgUaD5RnK3ehF7la/S6UsERuiNMo2p O6LIyfGHE5+BV5c4wCX4dglTZB7DsYDf7hQJyCW3B8iq99iJbL9lN1ED2+W+XicAuRnG X1+A== X-Gm-Message-State: AOJu0Ywvctv2x8EEsvhDKaN7lnwoAHtXmaBfy7u3Httz7dEA8AKPmzR7 pwOKAiKJpa0LfmYiTRP+E4tTEDkAQfC4a2Vh/xCXV5wuIovqZab50qk/O5ZxMw== X-Gm-Gg: AR+sD12aUVPMnrAbSWfLZSJDRPempCp/jeD4+Ii4hhHCCpsam0Eq2MWx9Axk43bK0ww bX43VRX8RvURoMclUY2MbTzq/UqUuunBMfWpXPuV/WUoIlfB5bhNWmQ+SHfh8zuknBAMPK/5VbC nJ8fhnbdJTDY/9Ba5HlTB42C+t8M0xgjJlq1x9/YUN3LCSZy6faXk0Z/efFTR4o1rIpFtl+9g1M FchhUE0EzfhVqXahCi9YtvaR60cGf+mrr8RAvKCyKp2JeShsseHLQXKglyYRuYCaiZlTu3GQjpl nvq/shpqF9r76i+7XodoVi9EW5krVsTSxxTKrC09sffvMj5kuFPevAb5XYz6hyuALJhURFq/Woj RUQLu5tpUdAwXcmfliMOv4SyOciGiOtKhI+WhAKS2q0NvZN1t9Eo2HWjqqIgtPRAaPgv5hpOkSV ZIWel51gEchfnhn6euK31J730ZljclNWFXDrjnMIe/W7mXTfj3cKKdmEEHVKz13QHtiN0VHe3IE Ezm X-Received: by 2002:a17:90a:38a1:b0:395:543a:cf3b with SMTP id 98e67ed59e1d1-395543ad373mr5859668a91.2.1787019793766; Mon, 17 Aug 2026 19:23:13 -0700 (PDT) From: 54weasels <54weasels@gmail.com> To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, 54weasels <54weasels@gmail.com> Subject: [PATCH v4 5/6] target/m68k: Implement custom MMU intercept hook Date: Mon, 17 Aug 2026 19:22:21 -0700 Message-ID: <20260818022225.31801-6-54weasels@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260818022225.31801-1-54weasels@gmail.com> References: <20260818022225.31801-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::1033; envelope-from=54weasels@gmail.com; helo=mail-pj1-x1033.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: 1787019843346158500 Content-Type: text/plain; charset="utf-8" High level description: 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. Context: This patch was originally submitted as part of the monolithic Sun-= 3 Machine Emulation series (https://patchew.org/QEMU/20260503015756.99176-1= -54weasels@gmail.com/) and has been split into atomic components. --- 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 42d34502fc..d4ecb1c3ef 100644 --- a/target/m68k/cpu.h +++ b/target/m68k/cpu.h @@ -153,6 +153,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 Mon Sep 28 00:10:04 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=1787019843; cv=none; d=zohomail.com; s=zohoarc; b=PEpxYcMznRF9LQr2/f2bAtZnutib3VSWLY+u/nUINQVGRgNSyKA3Zf6pvq+ZdJ/Kkcuxb4oUKazvmv97/Dsj2SIPm0iHD8qxNvRK+dk6+VB8Z16qPij94r4kOku//W1m0l5CxszkzLYKObmbrVqAXfr/87r48qO9xOL6Qty1pI4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787019843; 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=Q/KWBh97lxNNolqPEZ3B0lZqp0Q3PZSRmsAh+Ol8ZPc=; b=aHREAoCAaiC4SjkTTYSfuQFfOHiLxVIlPrBDacnZVDL7/BqLKpPTTBs//py/nb9rKyl/qda58n0Ox00I2bZEO1caAL3FDpdSVN+FwhRmXmX58ixwxYId5kYNR4qMoPzw3sJgz+TeKej4hUwbxOwQLsz0lx4sBHlr2lwN4e3fPTI= 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 1787019843543733.0633687067606; Mon, 17 Aug 2026 19:24:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ww9U2-0007WG-7S; Mon, 17 Aug 2026 22:23:22 -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 1ww9U1-0007Vs-0H for qemu-devel@nongnu.org; Mon, 17 Aug 2026 22:23:21 -0400 Received: from mail-pl1-x636.google.com ([2607:f8b0:4864:20::636]) 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 1ww9Tx-0008Lo-Vs for qemu-devel@nongnu.org; Mon, 17 Aug 2026 22:23:20 -0400 Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-2ceab75934dso49854465ad.2 for ; Mon, 17 Aug 2026 19:23:17 -0700 (PDT) Received: from newsled.lan ([76.133.142.170]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3267c389363sm10897816eec.23.2026.08.17.19.23.15 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 17 Aug 2026 19:23:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787019796; x=1787624596; 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=Q/KWBh97lxNNolqPEZ3B0lZqp0Q3PZSRmsAh+Ol8ZPc=; b=SgRtXVPsAAoMQD3BQJhHncxpiQZkoQ/bfPepYW+lYhftzuKQd3fE8PpmXqhZ6Lw59a HXr4RWxUIpZFkP9J4/zIuWWqFrd/pMaZWG1xc/98HD24R7cn+GKNBO8n0WpZPw9Kdsg+ bT+UsDH7Dt5Bj0mIxeBPSNDuAxG6+KAOwEApXyNz3mkWK2lJs444ryprGu0YG4zI0Ax7 hEVcfnEnQKO+iY0FInCGzbi3SoE+1nQZSe0DgZAUnUn7UaPN/m8xfI04RikdrQ2mJJYU /f0uuSIxtY8UBszKFkhQlDSL+L1sb/mJd4elqjgtrtJelGdrtJAZQoJnSDEQSopI+lBI zjwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787019796; x=1787624596; 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=Q/KWBh97lxNNolqPEZ3B0lZqp0Q3PZSRmsAh+Ol8ZPc=; b=nkFCU4z0/bURGR2WVUrNjbI3O7lUDLLbUxlSV9g80ElwCSXuHC8Iku5elUb8sbwaGQ 8Gv8ygBtJSupJv13wY4B89OrPlrVMduvYXFaTJ8UjGT4IY46h5b59AgxICy0+T71joE8 Znzubf/6vxXWFdrFrVpaIBf3WZvv8+rW/AZERJNspbUBvMG1XVcqBusL9to/R7nGO7Mb sRrqjMGy38B3CZxkyPBVBbTdw/5mAyi26PnW9Ke2TZP91dittScXx+eJUUFT0/hGHkY0 mU03XmomhaksRm1a+VVLGeGyT6X3Nv4/s9bryIWp1B/fDsMKxHpVSdAWxEh8XM+k5xQS xRYw== X-Gm-Message-State: AOJu0YwIcm1yQEhIXSoDs0bHvUXNv3RZlRMjlUVOtAmEm2fxGSZufk07 kqqG/pDHrMInlbvB/8d6Valf1tJaxkrTrkN1Uw7Fho4w3ggrm0M2n+u/c2gfAw== X-Gm-Gg: AR+sD12EPIXfzuZJNeSHbhKGjREaytTtTw7ZI+3a53xIujVkEJG+RMHnxEHyJXo78uG LP3Jaleg18VJMXHxvTvR4C7U7ZXevVDVYnEfdmot19KuSv3+0atdaiH4gMswSirk3gLRaxrVO5W 0D4XtFwYlsRDf3gtm/eZVPsm1xtYDbcqgcl/j19VTbXTkjiAHnklz4KthavxgO7E+P2W3/U0iyb hHnjx2ZLO19YXCbtHSDU/+FoZtnYVrqfXqIptnFM/r6Oswp8lWBhRTZlrsGDFzLroXq77SgcNNP /VmB4RJgpK6mUkgaL9nNG9SaUICy6cpu2J2mtMFTm+it3euBligbk/Z+IkLwLDwazFSHXz9fSRU cYzvKZCzbsREWveXsU5JFw2mYNz88l5pZnHOp/5EVmxx4Ln1ei8dIz+0WkvAtFyBGxmeaPve44/ i1QBIT3q6ELrba24LrBfwrD05csgL6LLNLleQ3z89EMK0E9kSTyl8zsqa50pRF0t2NIOG2PRlK7 1kj X-Received: by 2002:a17:903:46c3:b0:2ce:9c48:22d3 with SMTP id d9443c01a7336-2d3b0e4384amr353363885ad.11.1787019796364; Mon, 17 Aug 2026 19:23:16 -0700 (PDT) From: 54weasels <54weasels@gmail.com> To: qemu-devel@nongnu.org Cc: laurent@vivier.eu, 54weasels <54weasels@gmail.com> Subject: [PATCH v4 6/6] target/m68k: Implement Physical Bus Error and Stack Date: Mon, 17 Aug 2026 19:22:22 -0700 Message-ID: <20260818022225.31801-7-54weasels@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260818022225.31801-1-54weasels@gmail.com> References: <20260818022225.31801-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::636; envelope-from=54weasels@gmail.com; helo=mail-pl1-x636.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: 1787019845244158500 Content-Type: text/plain; charset="utf-8" High level description: 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. Context: This patch was originally submitted as part of the monolithic Sun-= 3 Machine Emulation series (https://patchew.org/QEMU/20260503015756.99176-1= -54weasels@gmail.com/) and has been split into atomic components. --- 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)