From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962766586233.54148948838417; Wed, 24 May 2023 14:12:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vlZ-0001D6-CC; Wed, 24 May 2023 17:11:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlX-0001Ck-KD for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:27 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlO-0001wA-NP for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:27 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vlG-0005XR-Tw; Wed, 24 May 2023 22:11:15 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=JQPGoq5NqjtQQZ8R/mAs8jWKs55GwHHiilT7jUAWlyg=; b=pWo/8hivEKKIIqLl5JcR5bVZgP 3PM6lsBsBnIUBPSM0pK5HKH3vByBNz5c/tt/CwPdRA4SU+LGjKH+Omx53Lp+DIkUaHFvyQB3JVEZn AF7gkRxroULPpcaI/u3HOsIl4npsArV22kmBlXaaCRS1vOM9wvUD89lZvw6baMr7fgBvOJE7Ist26 UFV8tR07sDE8DgGM2N6N9R2446nk5EeudKK5WLxCxa5/eoOovr6SJv+FX+COBsSJmeL+EgPdvSiIg w7bw8M7VAsddlBe6qlLIfZOc6lFypupeHuv55isFPLrhJm8VnI6/cGYDLddGeeGOCR0wcl0dzz32V 0EZs0sSZSdNJfaKMGuZkikYZxsleFnuh44UQQgGRy3PXrTyUZsTJhBS+u57kOZ1mDQ1Zsx/kI/GiW ni/LtpEQZ1Y6PoXVAGgQMBWIDhHCkxKe6E0q9VjPA/skjReByOWYJ+SQfhuqzlNhSaRC90uKfXZv7 e+UhK42x8Cs+XdakKm86/wuoGrC80mNyh1v91io6C7AvC6PxC6RdV15BR9m1CkFihqqjwiEaoEbbq GOSqFBlcIx7dz6TOwO9WN2/czvTCDDyQDOFxAijOXh80MHiUzTRGtLM3PrE3VoKj4XfwrIXgzjD5n 4Wx/csvnNNL92ukoYOD5jofywyvP6rLKQ9CadWMVE=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:35 +0100 Message-Id: <20230524211104.686087-2-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 01/30] q800: fix up minor spacing issues in hw_compat_q800 GlobalProperty array X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, T_SPF_HELO_TEMPERROR=0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962767205100001 Content-Type: text/plain; charset="utf-8" Ensure there is a space before the final closing brace for all global properties. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/m68k/q800.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index b35ecafbc7..1aead224e2 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -719,14 +719,14 @@ static void q800_init(MachineState *machine) } =20 static GlobalProperty hw_compat_q800[] =3D { - { "scsi-hd", "quirk_mode_page_vendor_specific_apple", "on"}, + { "scsi-hd", "quirk_mode_page_vendor_specific_apple", "on" }, { "scsi-hd", "vendor", " SEAGATE" }, { "scsi-hd", "product", " ST225N" }, { "scsi-hd", "ver", "1.0 " }, - { "scsi-cd", "quirk_mode_page_apple_vendor", "on"}, - { "scsi-cd", "quirk_mode_sense_rom_use_dbd", "on"}, - { "scsi-cd", "quirk_mode_page_vendor_specific_apple", "on"}, - { "scsi-cd", "quirk_mode_page_truncated", "on"}, + { "scsi-cd", "quirk_mode_page_apple_vendor", "on" }, + { "scsi-cd", "quirk_mode_sense_rom_use_dbd", "on" }, + { "scsi-cd", "quirk_mode_page_vendor_specific_apple", "on" }, + { "scsi-cd", "quirk_mode_page_truncated", "on" }, { "scsi-cd", "vendor", "MATSHITA" }, { "scsi-cd", "product", "CD-ROM CR-8005" }, { "scsi-cd", "ver", "1.0k" }, --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962768464820.2184125461673; Wed, 24 May 2023 14:12:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vlV-0001CQ-Oo; Wed, 24 May 2023 17:11:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlU-0001CF-9g for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:24 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlS-0001ww-Ov for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:24 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vlL-0005XR-3L; Wed, 24 May 2023 22:11:19 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=sgrLlmEQFPE5n5gMOmYlFvRgIdJy4BPn5Xy9X7/sycU=; b=KU7pU2do2x0xTDLid6kRb02UHU Eb+wGPQzjm6MieK6LT6/y/RJLrtEDG1eHpFIDPBzGws5LoyMDwy853njG6N23sugrpKnDRnJreoOX OmgvQktPcRwGetlEZKPkBGZsbapldi1UBam9zDVcfPeRv5bIABmKc48ZzRCBwzQnvs++a31/BD3j3 aq7tiax074J96qPGma++Ip5bG2hos/Z2k9xHPxmySsidY1WwS+UfUFNlR9G4VxSk6LObVH6D7jtoY ev7nqeAs/jZMj5fnDQMFJO0qjwMB3IZglJOpAN97sPpyjU3wKzCSUwRcGiZzbTsal+uDWm3H/Xyt3 lZXARYBFuC7cr4CBqRr7Co7yB/0NWdbiZEs+QavIqkloAwkMQXZzu6rv+PP/obERqLfOxaoKPLJsX eTE6okeVfiTsDEk8gcfCEcuDU/+RTEdYLtoqbAgm+WXf2QnTx2wmprtA+2jmLRhuR2baDvsqlpYxT o4mPe0GqOV9iMlOpM5jOHQsR2TvxwOaID5J8oKRtv4E+cMhHDAGZTAIEF4Y9/jjFBIxhED++5NRf9 6capJqKgfycz9XpLNqa84WRBmK2TXc9nVUNwTaOF0Mdwzbu4zu4YIOWnilXhknPd1AHHekNLU91F7 ykvZGMs4/a4x+mO5s7w3DlJ20Oo7wCrtFQj23BKOA=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:36 +0100 Message-Id: <20230524211104.686087-3-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 02/30] q800: introduce Q800MachineState X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962769291100005 Content-Type: text/plain; charset="utf-8" This provides an overall container and owner for Machine-related objects su= ch as MemoryRegions. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- MAINTAINERS | 1 + hw/m68k/q800.c | 2 ++ include/hw/m68k/q800.h | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 include/hw/m68k/q800.h diff --git a/MAINTAINERS b/MAINTAINERS index 1c93ab0ee5..86a1b88863 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1234,6 +1234,7 @@ F: include/hw/misc/mac_via.h F: include/hw/nubus/* F: include/hw/display/macfb.h F: include/hw/block/swim.h +F: include/hw/m68k/q800.h =20 virt M: Laurent Vivier diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index 1aead224e2..bdccd93c7f 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -38,6 +38,7 @@ #include "standard-headers/asm-m68k/bootinfo.h" #include "standard-headers/asm-m68k/bootinfo-mac.h" #include "bootinfo.h" +#include "hw/m68k/q800.h" #include "hw/misc/mac_via.h" #include "hw/input/adb.h" #include "hw/nubus/mac-nubus-bridge.h" @@ -748,6 +749,7 @@ static void q800_machine_class_init(ObjectClass *oc, vo= id *data) static const TypeInfo q800_machine_typeinfo =3D { .name =3D MACHINE_TYPE_NAME("q800"), .parent =3D TYPE_MACHINE, + .instance_size =3D sizeof(Q800MachineState), .class_init =3D q800_machine_class_init, }; =20 diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h new file mode 100644 index 0000000000..560fd6f93d --- /dev/null +++ b/include/hw/m68k/q800.h @@ -0,0 +1,37 @@ +/* + * QEMU Motorla 680x0 Macintosh hardware System Emulator + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#ifndef HW_Q800_H +#define HW_Q800_H + +/* + * The main Q800 machine + */ + +struct Q800MachineState { + MachineState parent_obj; +}; + +#define TYPE_Q800_MACHINE MACHINE_TYPE_NAME("q800") +OBJECT_DECLARE_SIMPLE_TYPE(Q800MachineState, q800, Q800_MACHINE, MachineSt= ate) + +#endif --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 168496281929845.60305782013188; Wed, 24 May 2023 14:13:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vlb-0001Dc-2G; Wed, 24 May 2023 17:11:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlY-0001Cy-Lb for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:28 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlX-0001xh-3e for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:28 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vlP-0005XR-8I; Wed, 24 May 2023 22:11:23 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=zJXbXBIFRyKxZRHU1YwZtLM7uzSs0hYuUBhKs+2crCc=; b=BXrqe5kn9TuuMnYTUemdS3gG8W lx7UGkSrwq43z/urP4TP4Ged6GsuQjCKQq6/Vc7VcvMTcJ5SJpHjOGVrC1OcJtlVVvvykeHbtEGZo quHxFL+HTgenKAxp/Ac/B/0yW8CjnDDvn4pJ4T1WmZZLwoeZMCApiOtTncukrF22vviF5TOuk7vfN oq1ixsnQ2Ruk2rfzFovpgb4m80HvZCCt/WYdDg15dZiqIablYJw1a7MiEFaDBPkq7JwUV3O9DG1Ch qZbTh6q+pW2mauGR6GwwNgf3kWe/Hxvh2mdBLtfu5lMuONl7SS5/F1xJB5fH/rH2EJiYZlo8A+Pt3 ndqfl+yyFnXedA4sHRKaMc+EVd+RTvfgfz2GNtPwCNByIwysGsL9xuUVo6zh+YrklOVcysSXaiPQh hcH6e/CpIupf3nXLL922UJZoHnuPP69H1qSUcxNcx7fzAuF+DvEupnuT4bMkaR/fbR6HSHJ5uCVdA Ptnh2AL1uq5LtLE0D1VhSVmvi1NOck+GsP1G8duY5LbB/ajNVxVP3ENPwL0+7OwWdeHlOaUCpph5z FQCyd2scrTkx+7zMXS8Sz6fqmezspZpn523VSRYHCUCdOcdqOYJQ/3wQatI46KxA85ACFcauo/c1h +6EkugJRQ3jXAOxGfUy+0M5UcunZ73W/xfLUJHI3w=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:37 +0100 Message-Id: <20230524211104.686087-4-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 03/30] q800: rename q800_init() to q800_machine_init() X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962821475100011 Content-Type: text/plain; charset="utf-8" This will enable us later to distinguish between QOM initialisation and mac= hine initialisation. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/m68k/q800.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index bdccd93c7f..976da06231 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -361,7 +361,7 @@ static uint8_t fake_mac_rom[] =3D { 0x60, 0xFE /* bras [self] */ }; =20 -static void q800_init(MachineState *machine) +static void q800_machine_init(MachineState *machine) { M68kCPU *cpu =3D NULL; int linux_boot; @@ -737,8 +737,9 @@ static const size_t hw_compat_q800_len =3D G_N_ELEMENTS= (hw_compat_q800); static void q800_machine_class_init(ObjectClass *oc, void *data) { MachineClass *mc =3D MACHINE_CLASS(oc); + mc->desc =3D "Macintosh Quadra 800"; - mc->init =3D q800_init; + mc->init =3D q800_machine_init; mc->default_cpu_type =3D M68K_CPU_TYPE_NAME("m68040"); mc->max_cpus =3D 1; mc->block_default_type =3D IF_SCSI; --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962725489671.4344650122713; Wed, 24 May 2023 14:12:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vle-0001E8-KS; Wed, 24 May 2023 17:11:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlc-0001Df-L5 for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:32 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlb-0001yi-5G for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:32 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vlT-0005XR-DF; Wed, 24 May 2023 22:11:27 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=adm+eTHhzuXLH0ulibd9BmXFfZhQieMR40WhD6xOhBU=; b=zgeM/RPfIfNtUxdYu0A4NfeQkQ knvGaqrR7dumzIhAyImTkFdi95AU+vwzNAYw4liRNiM8rlTRsP4hWcq2xnDLTVh76LFNrGqUZkB1w KwwvdIqj/FRME9KtAxA1e2eeifquujXsRDhNOT+MelPMj3tv03EKqdkBNkHPsiJ+nRqHWW77TpNFz /pU/D6+cBZ7YLyMnFH5ifucoroWByppnj9gsHbvt/txmuU7NzaiTxZPkm7zODbG0qJW4nW7Cct9zz YoISdUJysNu+jpscqXpROhNcbvrHbTpZ/DxpdpFjUw/ADCq6Lt8CUXiU4NM3OQ8CPFYajZMkrh38P A9u4RE5lD0JFJMKnrOzoNTQth/1URZNgEr2LNw00GLhrE3fxX99LAb9HSwRCSB7ss6GvlNvqEYiRG GTSPnZSTGsbCkFrERjgFxw6b1RP8hr6rwoDhc1SE4MLvkz+/idMBVwzkBfkaer0EFCTqLHHN+Qusm 4yoY/pNWuRUX6S+s9O7Xj5ILWHPP4oKk3qZS7G8mU3bONJUQcYtx2vvyrkQYl/HOXdrDLkftsJhlz 1+nANw+cf4bMZDU7B/nT7hgwg2ohlnZkbw6iCf8aET7fIl9hIFqyX8Vieb749OJu6vQvWNH2pwESS 4/ysuNesBNUvFBj29htjVuEksNmdcgSpVBkgjqdkg=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:38 +0100 Message-Id: <20230524211104.686087-5-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 04/30] q800: move CPU object into Q800MachineState X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962727008100003 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/m68k/q800.c | 10 +++++----- include/hw/m68k/q800.h | 4 +++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index 976da06231..ee6175ceb4 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -363,7 +363,7 @@ static uint8_t fake_mac_rom[] =3D { =20 static void q800_machine_init(MachineState *machine) { - M68kCPU *cpu =3D NULL; + Q800MachineState *m =3D Q800_MACHINE(machine); int linux_boot; int32_t kernel_size; uint64_t elf_entry; @@ -406,8 +406,8 @@ static void q800_machine_init(MachineState *machine) } =20 /* init CPUs */ - cpu =3D M68K_CPU(cpu_create(machine->cpu_type)); - qemu_register_reset(main_cpu_reset, cpu); + m->cpu =3D M68K_CPU(cpu_create(machine->cpu_type)); + qemu_register_reset(main_cpu_reset, m->cpu); =20 /* RAM */ memory_region_add_subregion(get_system_memory(), 0, machine->ram); @@ -429,7 +429,7 @@ static void q800_machine_init(MachineState *machine) =20 /* IRQ Glue */ glue =3D qdev_new(TYPE_GLUE); - object_property_set_link(OBJECT(glue), "cpu", OBJECT(cpu), &error_abor= t); + object_property_set_link(OBJECT(glue), "cpu", OBJECT(m->cpu), &error_a= bort); sysbus_realize_and_unref(SYS_BUS_DEVICE(glue), &error_fatal); =20 /* VIA 1 */ @@ -604,7 +604,7 @@ static void q800_machine_init(MachineState *machine) =20 macfb_mode =3D (NUBUS_MACFB(dev)->macfb).mode; =20 - cs =3D CPU(cpu); + cs =3D CPU(m->cpu); if (linux_boot) { uint64_t high; void *param_blob, *param_ptr, *param_rng_seed; diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h index 560fd6f93d..5867c3ae33 100644 --- a/include/hw/m68k/q800.h +++ b/include/hw/m68k/q800.h @@ -29,9 +29,11 @@ =20 struct Q800MachineState { MachineState parent_obj; + + M68kCPU *cpu; }; =20 #define TYPE_Q800_MACHINE MACHINE_TYPE_NAME("q800") -OBJECT_DECLARE_SIMPLE_TYPE(Q800MachineState, q800, Q800_MACHINE, MachineSt= ate) +OBJECT_DECLARE_SIMPLE_TYPE(Q800MachineState, Q800_MACHINE) =20 #endif --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962780561694.661263967067; Wed, 24 May 2023 14:13:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vlh-0001Gq-7B; Wed, 24 May 2023 17:11:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlg-0001Gh-HS for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:36 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlf-0001zV-0q for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:36 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vlX-0005XR-HO; Wed, 24 May 2023 22:11:31 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=ESy5W09ulYQKyMhallGOOS2O81ly7AssHop62N/WGhM=; b=y9C2qdtXvWNIL9aAcS7PIJknkQ 6HkPK7JuLLqDpQcXsy0qeUrY1fHJ4sXx+o2W8t1xsIKcN0bUuHsIIAL7Edl1mFn33QdqkUf8uu3uf GNeVelyPc/fTQEA/jIBNVhJuPdhj55PWKUqSxRbsb3dFG4D7YRKRAzr4Epd3hC52UXG/3FYtNbV2Q xuTaI3CxD3/zV4kKlIhPvy/FBWLvgyFbhJBr/QRIcM9CqSxU3ZukWTFkiXrWo/ALkZhRD/gn2TzOD QK8JTbte4OC/Oo74cLyn5I4tyuWWO9TzwF13/NLcDooCNM/q0PD3KxxQ79o0Hey/d60/GveT2dQsM T5XxZ//i5K8BR7zhw4oEcI4Htk9R/SycJXiCEyXpkkqIEJOOIpmMH+5pMzfWZjtcTCBpdqAeBFTBH hhBoBvcQvMdffLBPXtVw7VXvhnWo36V0nrdHzx8Y76mnyEGloBo/Adljwqm9M1NRdq+H5EhQ6xiF7 GRblE+MitPOuP9apPQS3XTs37dK/TuCAqvxml/2+3x8dY8GWNn99KzZOmRPb2y0cz5CqIrLudrsXy laeM7nFS+Vzc7YOxRfkYQRtZgbKXAisp+vRVzU9pH3ayln1fPqEhoxhRqzLtB++8B90xwXnVToVjW z88oTgIYpubHhTprnkEfqz07CxUsJWM7MTaO/EA/0=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:39 +0100 Message-Id: <20230524211104.686087-6-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 05/30] q800: move ROM memory region to Q800MachineState X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962782786100003 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/m68k/q800.c | 13 +++++-------- include/hw/m68k/q800.h | 1 + 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index ee6175ceb4..6a000ceb75 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -371,7 +371,6 @@ static void q800_machine_init(MachineState *machine) int bios_size; ram_addr_t initrd_base; int32_t initrd_size; - MemoryRegion *rom; MemoryRegion *io; MemoryRegion *dp8393x_prom =3D g_new(MemoryRegion, 1); uint8_t *prom; @@ -643,11 +642,10 @@ static void q800_machine_init(MachineState *machine) BOOTINFO1(param_ptr, BI_MAC_VROW, macfb_mode->stride); BOOTINFO1(param_ptr, BI_MAC_SCCBASE, SCC_BASE); =20 - rom =3D g_malloc(sizeof(*rom)); - memory_region_init_ram_ptr(rom, NULL, "m68k_fake_mac.rom", + memory_region_init_ram_ptr(&m->rom, NULL, "m68k_fake_mac.rom", sizeof(fake_mac_rom), fake_mac_rom); - memory_region_set_readonly(rom, true); - memory_region_add_subregion(get_system_memory(), MACROM_ADDR, rom); + memory_region_set_readonly(&m->rom, true); + memory_region_add_subregion(get_system_memory(), MACROM_ADDR, &m->= rom); =20 if (kernel_cmdline) { BOOTINFOSTR(param_ptr, BI_COMMAND_LINE, @@ -689,11 +687,10 @@ static void q800_machine_init(MachineState *machine) } else { uint8_t *ptr; /* allocate and load BIOS */ - rom =3D g_malloc(sizeof(*rom)); - memory_region_init_rom(rom, NULL, "m68k_mac.rom", MACROM_SIZE, + memory_region_init_rom(&m->rom, NULL, "m68k_mac.rom", MACROM_SIZE, &error_abort); filename =3D qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); - memory_region_add_subregion(get_system_memory(), MACROM_ADDR, rom); + memory_region_add_subregion(get_system_memory(), MACROM_ADDR, &m->= rom); =20 /* Load MacROM binary */ if (filename) { diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h index 5867c3ae33..2f3c720b8d 100644 --- a/include/hw/m68k/q800.h +++ b/include/hw/m68k/q800.h @@ -31,6 +31,7 @@ struct Q800MachineState { MachineState parent_obj; =20 M68kCPU *cpu; + MemoryRegion rom; }; =20 #define TYPE_Q800_MACHINE MACHINE_TYPE_NAME("q800") --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962739404699.0781208761678; Wed, 24 May 2023 14:12:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vlq-0001MH-W2; Wed, 24 May 2023 17:11:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlm-0001Jg-GO for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:46 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlk-00020L-So for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:42 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vlb-0005XR-Ln; Wed, 24 May 2023 22:11:35 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=KXym8r0zdjDqyJagv36tD73OWSTKwv/2Jq9YH/crFwk=; b=Mj8ufHCkixK4gFJPXACtRhDXpW MWNDaNyHcABaeGTiexPyKTr/2U4Fkze85GY2LDfqDJAvPmLvWv336ZlHoMBq7nG2XwNm2yRqbY+0C z75m7BdekvTskUseaaLuTMh9aUGzEgP6h2Xbn+N1CRQvHFcvZwNYbOcGbfM1cFqP3LCDR9u8eBkhy PKG8K5PK1t+rqYSOowe2JitaTW+EhU0awrnf48UC4uVNIY9vs6Gb59Mdr0KOxZZCsV9te7pNO5GZL LeFffvwnV9+A9IH0PnX3HYts+yWrJI3Xbrp9abAE4GRc/xQxM/HJdoCaWSuQk6EHpPeXI/ywE7o0b zxXAsJyityUOw2bla5deDhZJV7fn6OTx3o4KVZEl0Dp/X3fxT6C+xCXKbUZuwu98+66NShKxfoeok dXtr/Vu4KqFynGs9R6f0YgRp8PxuNjW8mBmdjjlPSthyGrS3sRdUFEkuzWRlbKTktsGTHH2lXY9RP vvBx6CSM39ywlOE0IjgX1ZIb/tIMFsGUjko0OKOgSBwMEepKVk7EjQZNJ68phcZmXILmo7er8XhzM jRopYJWP3dqTVHfLvKdIvISCbTh5NJWqEkqJVohs2giBki9pJWyjY8F6PaxBkVt0o/ENQewrt3hNh bEtQyf1TZkuvmRiEqQB4orpMvp7KlSvMC81+tuEso=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:40 +0100 Message-Id: <20230524211104.686087-7-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 06/30] q800: move GLUE device to Q800MachineState X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962741212100003 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/m68k/q800.c | 20 ++++++++++---------- include/hw/m68k/q800.h | 1 + 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index 6a000ceb75..c22a98d616 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -392,7 +392,6 @@ static void q800_machine_init(MachineState *machine) SysBusDevice *sysbus; BusState *adb_bus; NubusBus *nubus; - DeviceState *glue; DriveInfo *dinfo; uint8_t rng_seed[32]; =20 @@ -427,9 +426,10 @@ static void q800_machine_init(MachineState *machine) } =20 /* IRQ Glue */ - glue =3D qdev_new(TYPE_GLUE); - object_property_set_link(OBJECT(glue), "cpu", OBJECT(m->cpu), &error_a= bort); - sysbus_realize_and_unref(SYS_BUS_DEVICE(glue), &error_fatal); + m->glue =3D qdev_new(TYPE_GLUE); + object_property_set_link(OBJECT(m->glue), "cpu", OBJECT(m->cpu), + &error_abort); + sysbus_realize_and_unref(SYS_BUS_DEVICE(m->glue), &error_fatal); =20 /* VIA 1 */ via1_dev =3D qdev_new(TYPE_MOS6522_Q800_VIA1); @@ -440,10 +440,10 @@ static void q800_machine_init(MachineState *machine) sysbus =3D SYS_BUS_DEVICE(via1_dev); sysbus_realize_and_unref(sysbus, &error_fatal); sysbus_mmio_map(sysbus, 1, VIA_BASE); - sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(glue, GLUE_IRQ_IN_VIA1)= ); + sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(m->glue, GLUE_IRQ_IN_VI= A1)); /* A/UX mode */ qdev_connect_gpio_out(via1_dev, 0, - qdev_get_gpio_in_named(glue, "auxmode", 0)); + qdev_get_gpio_in_named(m->glue, "auxmode", 0)); =20 adb_bus =3D qdev_get_child_bus(via1_dev, "adb.0"); dev =3D qdev_new(TYPE_ADB_KEYBOARD); @@ -456,7 +456,7 @@ static void q800_machine_init(MachineState *machine) sysbus =3D SYS_BUS_DEVICE(via2_dev); sysbus_realize_and_unref(sysbus, &error_fatal); sysbus_mmio_map(sysbus, 1, VIA_BASE + VIA_SIZE); - sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(glue, GLUE_IRQ_IN_VIA2)= ); + sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(m->glue, GLUE_IRQ_IN_VI= A2)); =20 /* MACSONIC */ =20 @@ -489,7 +489,7 @@ static void q800_machine_init(MachineState *machine) sysbus =3D SYS_BUS_DEVICE(dev); sysbus_realize_and_unref(sysbus, &error_fatal); sysbus_mmio_map(sysbus, 0, SONIC_BASE); - sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(glue, GLUE_IRQ_IN_SONIC= )); + sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(m->glue, GLUE_IRQ_IN_SO= NIC)); =20 memory_region_init_rom(dp8393x_prom, NULL, "dp8393x-q800.prom", SONIC_PROM_SIZE, &error_fatal); @@ -526,7 +526,7 @@ static void q800_machine_init(MachineState *machine) sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(escc_orgate, 0)); sysbus_connect_irq(sysbus, 1, qdev_get_gpio_in(escc_orgate, 1)); qdev_connect_gpio_out(DEVICE(escc_orgate), 0, - qdev_get_gpio_in(glue, GLUE_IRQ_IN_ESCC)); + qdev_get_gpio_in(m->glue, GLUE_IRQ_IN_ESCC)); sysbus_mmio_map(sysbus, 0, SCC_BASE); =20 /* SCSI */ @@ -581,7 +581,7 @@ static void q800_machine_init(MachineState *machine) * Since the framebuffer in slot 0x9 uses a separate IRQ, wire the unu= sed * IRQ via GLUE for use by SONIC Ethernet in classic mode */ - qdev_connect_gpio_out(glue, GLUE_IRQ_NUBUS_9, + qdev_connect_gpio_out(m->glue, GLUE_IRQ_NUBUS_9, qdev_get_gpio_in_named(via2_dev, "nubus-irq", VIA2_NUBUS_IRQ_9)); =20 diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h index 2f3c720b8d..de02af53be 100644 --- a/include/hw/m68k/q800.h +++ b/include/hw/m68k/q800.h @@ -32,6 +32,7 @@ struct Q800MachineState { =20 M68kCPU *cpu; MemoryRegion rom; + DeviceState *glue; }; =20 #define TYPE_Q800_MACHINE MACHINE_TYPE_NAME("q800") --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 168496279939848.435486139273166; Wed, 24 May 2023 14:13:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vlr-0001MO-Lv; Wed, 24 May 2023 17:11:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlq-0001M4-I9 for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:46 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vln-000217-Do for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:44 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vlf-0005XR-Qi; Wed, 24 May 2023 22:11:39 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=irRG+bHrvmlstOvyXSCZUdMjneFA2b0o7w8rGrdcOTw=; b=QEkwIWEXbSnuDlPJn9RYRqoYEe z/7iWJX0p6Fl7fl2G9JBXrrDIrQ0nNQwWJLBwshZRRox+o0NCMYH239ehpMer9q8dUzu1j/FmjxB5 bbwY2kYJ0xZXncl8EVAdcFLZvID/+vAoYuTtIymVlVU9T/xKuL1yW/is20egdXJFibaxscPLgs5aP ltduGIMz5pd15I8xgMhmfjx/gD/cK3r7uhPYz580k2G832eG3VawjkmViBQVblqBC+4yKZjRtBcOu Jcd7FfNkGyt52eZEr+Uu7ug2KPc+gDwGERgWuc6LwStoLTV+H1NcGIMJOBGe4hdewcIrBHINAarll hQBC8hAag3tnrqbljl1ovupBylGpvCog16K6jujdw6HsZ0YiAWRzYiKhz9gtFQM31cEQBApootb/n 1ddwKKy/S5XN5kJk3milVFi47t4NzlPM6dcZ7ojSgOjalr8njsIfyZuDJPkdevVylyqR5VAYEx747 ZNrpAglkOZblkUmE7M/8paXV065yJ1tcKjw8VDGsyw0vUzy+yjETGNzNneSXowj+LfzIo/IaCHzup kxrAq28Aba02VdDpzhfhQjVrX0RS8dJXYZNLxfKssVbM2dptB2tkytjTfqBcOclDEJU596KgFVxlK xjEIBu77LPW0viLgWTTScdLwUa5hDh63cwB1iOJDs=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:41 +0100 Message-Id: <20230524211104.686087-8-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 07/30] q800: introduce mac-io container memory region X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962800797100003 Content-Type: text/plain; charset="utf-8" Move all devices from the IO region to within the container in preparation for updating the IO aliasing mechanism. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/m68k/q800.c | 6 ++++++ include/hw/m68k/q800.h | 1 + 2 files changed, 7 insertions(+) diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index c22a98d616..6399631ed0 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -410,6 +410,12 @@ static void q800_machine_init(MachineState *machine) /* RAM */ memory_region_add_subregion(get_system_memory(), 0, machine->ram); =20 + /* + * Create container for all IO devices + */ + memory_region_init(&m->macio, NULL, "mac-io", IO_SLICE); + memory_region_add_subregion(get_system_memory(), IO_BASE, &m->macio); + /* * Memory from IO_BASE to IO_BASE + IO_SLICE is repeated * from IO_BASE + IO_SLICE to IO_BASE + IO_SIZE diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h index de02af53be..156872a124 100644 --- a/include/hw/m68k/q800.h +++ b/include/hw/m68k/q800.h @@ -33,6 +33,7 @@ struct Q800MachineState { M68kCPU *cpu; MemoryRegion rom; DeviceState *glue; + MemoryRegion macio; }; =20 #define TYPE_Q800_MACHINE MACHINE_TYPE_NAME("q800") --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962793993754.4353843891911; Wed, 24 May 2023 14:13:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vlx-0001ex-9W; Wed, 24 May 2023 17:11:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlu-0001dT-Os for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:50 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vls-00023R-Nq for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:50 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vlj-0005XR-Vh; Wed, 24 May 2023 22:11:44 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=PaN63a+muP6bgRkTmCFbY2yYHIacIBY9Jl09NCkLQFw=; b=aG5aXWpa3UnJ9o7Qb8wCxd7kM6 U3zZOEne6kQHKWe0Wq53M7w69YRaUTpS1yRKyt61hqIE53k2u8symN8Ccvlk2RQVoaQCOmY6b7qkX MJ1BYqCv2udShnj9Zyj0QXt+oYWf8WGLuiXMqtpvD2HwWq3Q1Ilkv6Vp+Jgbhgfu3qfzah2lUeHIe tD943HoqdWHt6ga52yYTFSFDDTr+KnCYzZoIKqv6LqH9Z0qJWeFIcQuxaq8q4uVVD9Je7MXPTDquk Medl3gMEmFMYDtGG1TPfkbqSht0I2M31t+PtawpAr4wCZhZ+f2joeiEYwGu5yKmwkyhVal15O5nOD kJp7ZvegT3J12e1fKKBPjfHg1A+zIxsgWpM6U0MxXloYBMhsXxTsSqroRDnTfJZh+NF3zoDgMJxES T6AalYmRxfLpo7fdR6EMtcKp9yhMh7D8aX+AvMERF7QLdQ7VoP88CWQhFeDeeQgwTdZU/J+m8W9P2 08Tp8eNn4Xe/xNw8iNcWdjLger1MzQE02Caffxf/5lAMSMqcuI0eWxcranHhd6pgdyJ6fTIdA48s6 VPhUAUAYd5/Zq3og6yEt4NmfNqh/KER4zaFV3D7mawFtoP/QNjK4+fUeto1+eLgDajWY8LTnAKrYS r6GIH5Nn/IWxexXI7lOBfAT8gRb8KrWOp+NLfY0+k=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:42 +0100 Message-Id: <20230524211104.686087-9-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 08/30] q800: reimplement mac-io region aliasing using IO memory region X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962794257100009 Content-Type: text/plain; charset="utf-8" The current use of aliased memory regions causes us 2 problems: firstly the output of "info qom-tree" is absolutely huge and difficult to read, and secondly we have already reached the internal limit for memory regions as adding any new memory region into the mac-io region causes QEMU to assert with "phys_section_add: Assertion `map->sections_nb < TARGET_PAGE_SIZE' failed". Implement the mac-io region aliasing using a single IO memory region that applies IO_SLICE_MASK representing the maximum size of the aliased region a= nd then forwarding the access to the existing mac-io memory region using the address space API. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/m68k/q800.c | 100 +++++++++++++++++++++++++++++++++-------- include/hw/m68k/q800.h | 1 + 2 files changed, 82 insertions(+), 19 deletions(-) diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index 6399631ed0..f15f1eaff9 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -59,6 +59,7 @@ =20 #define IO_BASE 0x50000000 #define IO_SLICE 0x00040000 +#define IO_SLICE_MASK (IO_SLICE - 1) #define IO_SIZE 0x04000000 =20 #define VIA_BASE (IO_BASE + 0x00000) @@ -361,6 +362,68 @@ static uint8_t fake_mac_rom[] =3D { 0x60, 0xFE /* bras [self] */ }; =20 +static MemTxResult macio_alias_read(void *opaque, hwaddr addr, uint64_t *d= ata, + unsigned size, MemTxAttrs attrs) +{ + MemTxResult r; + uint32_t val; + + addr &=3D IO_SLICE_MASK; + addr |=3D IO_BASE; + + switch (size) { + case 4: + val =3D address_space_ldl_be(&address_space_memory, addr, attrs, &= r); + break; + case 2: + val =3D address_space_lduw_be(&address_space_memory, addr, attrs, = &r); + break; + case 1: + val =3D address_space_ldub(&address_space_memory, addr, attrs, &r); + break; + default: + g_assert_not_reached(); + } + + *data =3D val; + return r; +} + +static MemTxResult macio_alias_write(void *opaque, hwaddr addr, uint64_t v= alue, + unsigned size, MemTxAttrs attrs) +{ + MemTxResult r; + + addr &=3D IO_SLICE_MASK; + addr |=3D IO_BASE; + + switch (size) { + case 4: + address_space_stl_be(&address_space_memory, addr, value, attrs, &r= ); + break; + case 2: + address_space_stw_be(&address_space_memory, addr, value, attrs, &r= ); + break; + case 1: + address_space_stb(&address_space_memory, addr, value, attrs, &r); + break; + default: + g_assert_not_reached(); + } + + return r; +} + +static const MemoryRegionOps macio_alias_ops =3D { + .read_with_attrs =3D macio_alias_read, + .write_with_attrs =3D macio_alias_write, + .endianness =3D DEVICE_BIG_ENDIAN, + .valid =3D { + .min_access_size =3D 1, + .max_access_size =3D 4, + }, +}; + static void q800_machine_init(MachineState *machine) { Q800MachineState *m =3D Q800_MACHINE(machine); @@ -371,10 +434,8 @@ static void q800_machine_init(MachineState *machine) int bios_size; ram_addr_t initrd_base; int32_t initrd_size; - MemoryRegion *io; MemoryRegion *dp8393x_prom =3D g_new(MemoryRegion, 1); uint8_t *prom; - const int io_slice_nb =3D (IO_SIZE / IO_SLICE) - 1; int i, checksum; MacFbMode *macfb_mode; ram_addr_t ram_size =3D machine->ram_size; @@ -420,16 +481,10 @@ static void q800_machine_init(MachineState *machine) * Memory from IO_BASE to IO_BASE + IO_SLICE is repeated * from IO_BASE + IO_SLICE to IO_BASE + IO_SIZE */ - io =3D g_new(MemoryRegion, io_slice_nb); - for (i =3D 0; i < io_slice_nb; i++) { - char *name =3D g_strdup_printf("mac_m68k.io[%d]", i + 1); - - memory_region_init_alias(&io[i], NULL, name, get_system_memory(), - IO_BASE, IO_SLICE); - memory_region_add_subregion(get_system_memory(), - IO_BASE + (i + 1) * IO_SLICE, &io[i]); - g_free(name); - } + memory_region_init_io(&m->macio_alias, NULL, &macio_alias_ops, &m->mac= io, + "mac-io.alias", IO_SIZE - IO_SLICE); + memory_region_add_subregion(get_system_memory(), IO_BASE + IO_SLICE, + &m->macio_alias); =20 /* IRQ Glue */ m->glue =3D qdev_new(TYPE_GLUE); @@ -445,7 +500,8 @@ static void q800_machine_init(MachineState *machine) } sysbus =3D SYS_BUS_DEVICE(via1_dev); sysbus_realize_and_unref(sysbus, &error_fatal); - sysbus_mmio_map(sysbus, 1, VIA_BASE); + memory_region_add_subregion(&m->macio, VIA_BASE - IO_BASE, + sysbus_mmio_get_region(sysbus, 1)); sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(m->glue, GLUE_IRQ_IN_VI= A1)); /* A/UX mode */ qdev_connect_gpio_out(via1_dev, 0, @@ -461,7 +517,8 @@ static void q800_machine_init(MachineState *machine) via2_dev =3D qdev_new(TYPE_MOS6522_Q800_VIA2); sysbus =3D SYS_BUS_DEVICE(via2_dev); sysbus_realize_and_unref(sysbus, &error_fatal); - sysbus_mmio_map(sysbus, 1, VIA_BASE + VIA_SIZE); + memory_region_add_subregion(&m->macio, VIA_BASE - IO_BASE + VIA_SIZE, + sysbus_mmio_get_region(sysbus, 1)); sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(m->glue, GLUE_IRQ_IN_VI= A2)); =20 /* MACSONIC */ @@ -494,7 +551,8 @@ static void q800_machine_init(MachineState *machine) OBJECT(get_system_memory()), &error_abort); sysbus =3D SYS_BUS_DEVICE(dev); sysbus_realize_and_unref(sysbus, &error_fatal); - sysbus_mmio_map(sysbus, 0, SONIC_BASE); + memory_region_add_subregion(&m->macio, SONIC_BASE - IO_BASE, + sysbus_mmio_get_region(sysbus, 0)); sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(m->glue, GLUE_IRQ_IN_SO= NIC)); =20 memory_region_init_rom(dp8393x_prom, NULL, "dp8393x-q800.prom", @@ -533,7 +591,8 @@ static void q800_machine_init(MachineState *machine) sysbus_connect_irq(sysbus, 1, qdev_get_gpio_in(escc_orgate, 1)); qdev_connect_gpio_out(DEVICE(escc_orgate), 0, qdev_get_gpio_in(m->glue, GLUE_IRQ_IN_ESCC)); - sysbus_mmio_map(sysbus, 0, SCC_BASE); + memory_region_add_subregion(&m->macio, SCC_BASE - IO_BASE, + sysbus_mmio_get_region(sysbus, 0)); =20 /* SCSI */ =20 @@ -553,8 +612,10 @@ static void q800_machine_init(MachineState *machine) VIA2_IRQ_SCSI_BIT))); sysbus_connect_irq(sysbus, 1, qemu_irq_invert(qdev_get_gpio_in(via2_de= v, VIA2_IRQ_SCSI_DATA_BIT))= ); - sysbus_mmio_map(sysbus, 0, ESP_BASE); - sysbus_mmio_map(sysbus, 1, ESP_PDMA); + memory_region_add_subregion(&m->macio, ESP_BASE - IO_BASE, + sysbus_mmio_get_region(sysbus, 0)); + memory_region_add_subregion(&m->macio, ESP_PDMA - IO_BASE, + sysbus_mmio_get_region(sysbus, 1)); =20 scsi_bus_legacy_handle_cmdline(&esp->bus); =20 @@ -562,7 +623,8 @@ static void q800_machine_init(MachineState *machine) =20 dev =3D qdev_new(TYPE_SWIM); sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); - sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, SWIM_BASE); + memory_region_add_subregion(&m->macio, SWIM_BASE - IO_BASE, + sysbus_mmio_get_region(SYS_BUS_DEVICE(dev)= , 0)); =20 /* NuBus */ =20 diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h index 156872a124..8d788a7072 100644 --- a/include/hw/m68k/q800.h +++ b/include/hw/m68k/q800.h @@ -34,6 +34,7 @@ struct Q800MachineState { MemoryRegion rom; DeviceState *glue; MemoryRegion macio; + MemoryRegion macio_alias; }; =20 #define TYPE_Q800_MACHINE MACHINE_TYPE_NAME("q800") --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962823629385.11299144695613; Wed, 24 May 2023 14:13:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vm1-0001mB-OX; Wed, 24 May 2023 17:11:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlz-0001fu-9u for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:56 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vlw-00024H-Ld for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:54 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vlo-0005XR-6x; Wed, 24 May 2023 22:11:48 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=ybnhHBt7nAOxT+qTBxIJyjzbTLkpWAmJkwqDVnfZvOo=; b=LxklmB2cuYcplHSY/cneM0nh7v Y+PIHVH8bafHLXVpCLDgA0NMw6X8mvXQPWIA+rFc1niPDsy4nO5NEwXegnpA7D45CL/hQeUHoatAL NHX24gJVsBlwHKAmF96QmPFD0t3/shOzs6Cpg8s66+QGQp0lnOvpAKc0CYuxMUhLe1o1UScWcqa9g fsIeUbvcs2dfKeraAH1JMng3B2aldg97/jXaLkhiiaoh0jaqQBN9ItrLWYzEsrTZDCeLQTDWZ/5ND kH+iKJeUnILvlNb4Ucll5ySGnmW5xlZDtMvMhGy01Qf1OnpNCUhTn+kP1E8OcY4c7VvFH8+CXFhQ9 5l/cyZKGexR1zxEsYvID+5z8jrU6s0mbA6vRCMVZR4ejFqAoHTdCc9v5fTwsfDAJArBKG3p2NDxG+ /Aq5/qCaLDtYmNhtCact556Urs+8ybWcsfYIJhz6tGStGneIJ8i7EAOJUZoPxqZAwFTlF5FmiZpjI MGYn4IsYrfe/9O3nXRDFmaYzI/6tkMoknIHRHFyfGaA6X+Yzqn+VVc30hTNqwXSQGyjP1jUheHDFo /eDLxXOPinFXra4A/FsBBbs92RUWle6YzY5NX2zmrg80o0QFi63Ef79bqOeBWI9mvMStQ67uB23Qk keEn7akZ8tmghe+aCxJfaouCaYUkDwZ1H7A1qrCEk=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:43 +0100 Message-Id: <20230524211104.686087-10-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 09/30] q800: add djMEMC memory controller X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962824461100003 Content-Type: text/plain; charset="utf-8" The djMEMC controller is used to store information related to the physical = memory configuration. Co-developed-by: Laurent Vivier Signed-off-by: Mark Cave-Ayland --- MAINTAINERS | 2 + hw/m68k/Kconfig | 1 + hw/m68k/q800.c | 9 +++ hw/misc/Kconfig | 3 + hw/misc/djmemc.c | 154 +++++++++++++++++++++++++++++++++++++++ hw/misc/meson.build | 1 + hw/misc/trace-events | 4 + include/hw/m68k/q800.h | 2 + include/hw/misc/djmemc.h | 46 ++++++++++++ 9 files changed, 222 insertions(+) create mode 100644 hw/misc/djmemc.c create mode 100644 include/hw/misc/djmemc.h diff --git a/MAINTAINERS b/MAINTAINERS index 86a1b88863..21ec70d00a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1227,6 +1227,7 @@ F: hw/misc/mac_via.c F: hw/nubus/* F: hw/display/macfb.c F: hw/block/swim.c +F: hw/misc/djmemc.c F: hw/m68k/bootinfo.h F: include/standard-headers/asm-m68k/bootinfo.h F: include/standard-headers/asm-m68k/bootinfo-mac.h @@ -1235,6 +1236,7 @@ F: include/hw/nubus/* F: include/hw/display/macfb.h F: include/hw/block/swim.h F: include/hw/m68k/q800.h +F: include/hw/misc/djmemc.c =20 virt M: Laurent Vivier diff --git a/hw/m68k/Kconfig b/hw/m68k/Kconfig index f839f8a030..330cfdfa2d 100644 --- a/hw/m68k/Kconfig +++ b/hw/m68k/Kconfig @@ -23,6 +23,7 @@ config Q800 select ESP select DP8393X select OR_IRQ + select DJMEMC =20 config M68K_VIRT bool diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index f15f1eaff9..456407898e 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -40,6 +40,7 @@ #include "bootinfo.h" #include "hw/m68k/q800.h" #include "hw/misc/mac_via.h" +#include "hw/misc/djmemc.h" #include "hw/input/adb.h" #include "hw/nubus/mac-nubus-bridge.h" #include "hw/display/macfb.h" @@ -66,6 +67,7 @@ #define SONIC_PROM_BASE (IO_BASE + 0x08000) #define SONIC_BASE (IO_BASE + 0x0a000) #define SCC_BASE (IO_BASE + 0x0c020) +#define DJMEMC_BASE (IO_BASE + 0x0e000) #define ESP_BASE (IO_BASE + 0x10000) #define ESP_PDMA (IO_BASE + 0x10100) #define ASC_BASE (IO_BASE + 0x14000) @@ -492,6 +494,13 @@ static void q800_machine_init(MachineState *machine) &error_abort); sysbus_realize_and_unref(SYS_BUS_DEVICE(m->glue), &error_fatal); =20 + /* djMEMC memory controller */ + m->djmemc =3D qdev_new(TYPE_DJMEMC); + sysbus =3D SYS_BUS_DEVICE(m->djmemc); + sysbus_realize_and_unref(sysbus, &error_fatal); + memory_region_add_subregion(&m->macio, DJMEMC_BASE - IO_BASE, + sysbus_mmio_get_region(sysbus, 0)); + /* VIA 1 */ via1_dev =3D qdev_new(TYPE_MOS6522_Q800_VIA1); dinfo =3D drive_get(IF_MTD, 0, 0); diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index 2ef5781ef8..7eaf955f88 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -180,4 +180,7 @@ config AXP209_PMU bool depends on I2C =20 +config DJMEMC + bool + source macio/Kconfig diff --git a/hw/misc/djmemc.c b/hw/misc/djmemc.c new file mode 100644 index 0000000000..597e0d446c --- /dev/null +++ b/hw/misc/djmemc.c @@ -0,0 +1,154 @@ +/* + * djMEMC, macintosh memory and interrupt controller + * (Quadra 610/650/800 & Centris 610/650) + * + * https://mac68k.info/wiki/display/mac68k/djMEMC+Information + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "migration/vmstate.h" +#include "hw/misc/djmemc.h" +#include "hw/qdev-properties.h" +#include "trace.h" + + +#define DJMEMC_INTERLEAVECONF 0x0 +#define DJMEMC_BANK0CONF 0x4 +#define DJMEMC_BANK1CONF 0x8 +#define DJMEMC_BANK2CONF 0xc +#define DJMEMC_BANK3CONF 0x10 +#define DJMEMC_BANK4CONF 0x14 +#define DJMEMC_BANK5CONF 0x18 +#define DJMEMC_BANK6CONF 0x1c +#define DJMEMC_BANK7CONF 0x20 +#define DJMEMC_BANK8CONF 0x24 +#define DJMEMC_BANK9CONF 0x28 +#define DJMEMC_MEMTOP 0x2c +#define DJMEMC_CONFIG 0x30 +#define DJMEMC_REFRESH 0x34 + + +static uint64_t djmemc_read(void *opaque, hwaddr addr, unsigned size) +{ + DJMEMCState *s =3D opaque; + uint64_t val =3D 0; + + switch (addr) { + case DJMEMC_INTERLEAVECONF: + case DJMEMC_BANK0CONF ... DJMEMC_BANK9CONF: + case DJMEMC_MEMTOP: + case DJMEMC_CONFIG: + case DJMEMC_REFRESH: + val =3D s->regs[addr >> 2]; + break; + default: + qemu_log_mask(LOG_UNIMP, "djMEMC: unimplemented read addr=3D0x%"PR= Ix64 + " val=3D0x%"PRIx64 " size=3D%d\n", + addr, val, size); + } + + trace_djmemc_read(addr, size, val); + return val; +} + +static void djmemc_write(void *opaque, hwaddr addr, uint64_t val, + unsigned size) +{ + DJMEMCState *s =3D opaque; + + trace_djmemc_write(addr, size, val); + + switch (addr) { + case DJMEMC_INTERLEAVECONF: + case DJMEMC_BANK0CONF ... DJMEMC_BANK9CONF: + case DJMEMC_MEMTOP: + case DJMEMC_CONFIG: + case DJMEMC_REFRESH: + s->regs[addr >> 2] =3D val; + break; + default: + qemu_log_mask(LOG_UNIMP, "djMEMC: unimplemented write addr=3D0x%"P= RIx64 + " val=3D0x%"PRIx64 " size=3D%d\n", + addr, val, size); + } +} + +static const MemoryRegionOps djmemc_mmio_ops =3D { + .read =3D djmemc_read, + .write =3D djmemc_write, + .impl =3D { + .min_access_size =3D 4, + .max_access_size =3D 4, + }, + .endianness =3D DEVICE_BIG_ENDIAN, +}; + +static void djmemc_init(Object *obj) +{ + DJMEMCState *s =3D DJMEMC(obj); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); + + memory_region_init_io(&s->mem_regs, obj, &djmemc_mmio_ops, s, "djMEMC", + DJMEMC_SIZE); + sysbus_init_mmio(sbd, &s->mem_regs); +} + +static void djmemc_reset_hold(Object *obj) +{ + DJMEMCState *s =3D DJMEMC(obj); + + memset(s->regs, 0, sizeof(s->regs)); +} + +static const VMStateDescription vmstate_djmemc =3D { + .name =3D "djMEMC", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (VMStateField[]) { + VMSTATE_UINT32_ARRAY(regs, DJMEMCState, DJMEMC_NUM_REGS), + VMSTATE_END_OF_LIST() + } +}; + +static void djmemc_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(oc); + ResettableClass *rc =3D RESETTABLE_CLASS(oc); + + rc->phases.hold =3D djmemc_reset_hold; + dc->vmsd =3D &vmstate_djmemc; +} + +static const TypeInfo djmemc_info =3D { + .name =3D TYPE_DJMEMC, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(DJMEMCState), + .instance_init =3D djmemc_init, + .class_init =3D djmemc_class_init, +}; + +static void djmemc_register_types(void) +{ + type_register_static(&djmemc_info); +} + +type_init(djmemc_register_types) diff --git a/hw/misc/meson.build b/hw/misc/meson.build index a40245ad44..a2b5ca6fbc 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -20,6 +20,7 @@ softmmu_ss.add(when: 'CONFIG_ARM_V7M', if_true: files('ar= mv7m_ras.c')) =20 # Mac devices softmmu_ss.add(when: 'CONFIG_MOS6522', if_true: files('mos6522.c')) +softmmu_ss.add(when: 'CONFIG_DJMEMC', if_true: files('djmemc.c')) =20 # virt devices softmmu_ss.add(when: 'CONFIG_VIRT_CTRL', if_true: files('virt_ctrl.c')) diff --git a/hw/misc/trace-events b/hw/misc/trace-events index c47876a902..bed14bd559 100644 --- a/hw/misc/trace-events +++ b/hw/misc/trace-events @@ -279,3 +279,7 @@ virt_ctrl_instance_init(void *dev) "ctrl: %p" lasi_chip_mem_valid(uint64_t addr, uint32_t val) "access to addr 0x%"PRIx6= 4" is %d" lasi_chip_read(uint64_t addr, uint32_t val) "addr 0x%"PRIx64" val 0x%08x" lasi_chip_write(uint64_t addr, uint32_t val) "addr 0x%"PRIx64" val 0x%08x" + +# djmemc.c +djmemc_read(int reg, unsigned size, uint64_t value) "reg=3D0x%x size=3D%u = value=3D0x%"PRIx64 +djmemc_write(int reg, unsigned size, uint64_t value) "reg=3D0x%x size=3D%u= value=3D0x%"PRIx64 diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h index 8d788a7072..d0e37cc665 100644 --- a/include/hw/m68k/q800.h +++ b/include/hw/m68k/q800.h @@ -33,6 +33,8 @@ struct Q800MachineState { M68kCPU *cpu; MemoryRegion rom; DeviceState *glue; + DeviceState *djmemc; + MemoryRegion macio; MemoryRegion macio_alias; }; diff --git a/include/hw/misc/djmemc.h b/include/hw/misc/djmemc.h new file mode 100644 index 0000000000..77776b0736 --- /dev/null +++ b/include/hw/misc/djmemc.h @@ -0,0 +1,46 @@ +/* + * djMEMC, macintosh memory and interrupt controller + * (Quadra 610/650/800 & Centris 610/650) + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#ifndef HW_MISC_DJMEMC_H +#define HW_MISC_DJMEMC_H + +#include "hw/sysbus.h" + +#define DJMEMC_SIZE 0x2000 +#define DJMEMC_NUM_REGS (0x38 / sizeof(uint32_t)) + +#define DJMEMC_MAXBANKS 10 + +struct DJMEMCState { + SysBusDevice parent_obj; + + MemoryRegion mem_regs; + + /* Memory controller */ + uint32_t regs[DJMEMC_NUM_REGS]; +}; + +#define TYPE_DJMEMC "djMEMC" +OBJECT_DECLARE_SIMPLE_TYPE(DJMEMCState, DJMEMC); + +#endif --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962817958195.85703282284453; Wed, 24 May 2023 14:13:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vm7-0001ua-JY; Wed, 24 May 2023 17:12:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vm1-0001n4-Vu for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:58 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vm0-000250-2u for qemu-devel@nongnu.org; Wed, 24 May 2023 17:11:57 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vls-0005XR-CL; Wed, 24 May 2023 22:11:52 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=6aML2WGpeCVXnlZ44aLvkE6+dZ7w5IDnEmwQGAZDfNU=; b=aPXfBIInDVY0U7m4wrjB5kg+gk HKmnKwQFFwAJbL26Woxs2YjL3JKs2XkpdQjekKJAhHgSXwwu5iPo0MMGLh2fJTzXRWuc2Xtq9Gaoe JthBH/neDeiTqf4H/FWNXckPppcRN0qHAcVSq5KP0RETsMUgAdBCoFa5kagPkK5cvf8KIjLSzXY81 J0g6+ixx9KIFRGxjmRmtMdNjsjyLps98yXEkum1PLylybtJhDnvLGV+cMk5ozx4Hqs/Oxj6dV9dwg bBRngfdMK2w0pXVe6eNBFzDfYeihG7do6zVNKQlBv8mVW2Y/3Il4YbtKSqBOY8rZ4mCEx9cIDi53P mqWxxr0a4AxTBiPjhVaDyEZSruvxfOJjS6YosRDA6bfAdFJMysItzbabz6BH8sPseV+2jaCVCzxoG fGlr52IeQQrW/itueeW74Z0NCFDOsSjSKKz0IbJIYPEczhgQ5rubmFG7U8pC4vTmyWl6H5SDS4q7G 1Y8g1HsFwFjvi9lTulYLghUasiSUlBqDfxG7Ty3yXGQo+SlR4XfqdkgchZRhlbOl0XcqdwI22EvO6 LQFbpvuSByxgj1uKU2yDsFuzjzUbtoO53LkqHTm3538m6HaBjYkip1OOZdSmP9WgOgjVfkspMkDW3 Zis/PYqICtFC/7lKLk8utp6hlv48zGStDbKChewrs=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:44 +0100 Message-Id: <20230524211104.686087-11-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 10/30] q800: add machine id register X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962820379100006 Content-Type: text/plain; charset="utf-8" MacOS reads this address to identify the hardware. This is a basic implementation returning the ID of Quadra 800. Details: http://mess.redump.net/mess/driver_info/mac_technical_notes "There are 3 ID schemes [...] The third and most scalable is a machine ID register at 0x5ffffffc. The top word must be 0xa55a to be valid. Then bits 15-11 are 0 for consumer Macs, 1 for portables, 2 for high-end 68k, and 3 for high-end PowerPC. Bit 10 is 1 if additional ID bits appear elsewhere (e.g. in VIA1). The rest of the bits are a per-model identifier. Model Lower 16 bits of ID ... Quadra/Centris 610/650/800 0x2BAD" Co-developed-by: Laurent Vivier Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/m68k/q800.c | 29 +++++++++++++++++++++++++++++ include/hw/m68k/q800.h | 1 + 2 files changed, 30 insertions(+) diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index 456407898e..c1d4b98cc0 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -91,6 +91,9 @@ #define Q800_NUBUS_SLOTS_AVAILABLE (BIT(0x9) | BIT(0xc) | BIT(0xd) | \ BIT(0xe)) =20 +/* Quadra 800 machine ID */ +#define Q800_MACHINE_ID 0xa55a2bad + /* * The GLUE (General Logic Unit) is an Apple custom integrated circuit chip * that performs a variety of functions (RAM management, clock generation,= ...). @@ -426,6 +429,27 @@ static const MemoryRegionOps macio_alias_ops =3D { }, }; =20 +static uint64_t machine_id_read(void *opaque, hwaddr addr, unsigned size) +{ + return Q800_MACHINE_ID; +} + +static void machine_id_write(void *opaque, hwaddr addr, uint64_t val, + unsigned size) +{ + return; +} + +static const MemoryRegionOps machine_id_ops =3D { + .read =3D machine_id_read, + .write =3D machine_id_write, + .endianness =3D DEVICE_BIG_ENDIAN, + .valid =3D { + .min_access_size =3D 4, + .max_access_size =3D 4, + }, +}; + static void q800_machine_init(MachineState *machine) { Q800MachineState *m =3D Q800_MACHINE(machine); @@ -488,6 +512,11 @@ static void q800_machine_init(MachineState *machine) memory_region_add_subregion(get_system_memory(), IO_BASE + IO_SLICE, &m->macio_alias); =20 + memory_region_init_io(&m->machine_id, NULL, &machine_id_ops, NULL, + "Machine ID", 4); + memory_region_add_subregion(get_system_memory(), 0x5ffffffc, + &m->machine_id); + /* IRQ Glue */ m->glue =3D qdev_new(TYPE_GLUE); object_property_set_link(OBJECT(m->glue), "cpu", OBJECT(m->cpu), diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h index d0e37cc665..e57aec849a 100644 --- a/include/hw/m68k/q800.h +++ b/include/hw/m68k/q800.h @@ -37,6 +37,7 @@ struct Q800MachineState { =20 MemoryRegion macio; MemoryRegion macio_alias; + MemoryRegion machine_id; }; =20 #define TYPE_Q800_MACHINE MACHINE_TYPE_NAME("q800") --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 168496273990131.50450073554748; Wed, 24 May 2023 14:12:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vmF-0002db-JZ; Wed, 24 May 2023 17:12:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmE-0002WM-DV for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:10 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vm3-00025p-TM for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:07 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vlw-0005XR-Hr; Wed, 24 May 2023 22:11:56 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=v0u3ughJnnH4tmiVQkkBhXmwI2doRXhHtAxcgsOwuGI=; b=km6hQQfIJVaAy+MxMVgea16LT7 oR6NnHwL/xPMz14FEEG1l2hnkwEtYkjfj8ucC8/9Ziu0LBO5FZ6TfpjmJ6NatrtZ3L3ABTyD8G9T5 yhAgp0LiyaOfFRMcbkgNxUpTNt81Tg0pM9wDtNLjgGmU+OAFnkoZGeCGrG+9JaDQq9UBwdvg+phxF EN/jQGHeRf1FvGkpkXELsDPOiwCyVnrh5oensvsT1t2xA/dNDtA7YpfiwDKeEFVo4/Moq4agb2pg2 CamhcjlWXsQkVSeDHOxLxcccf2o9R6o122jfKBS4D+fXYL2CkqkTuVkT1PbpILeElIFaUJ6iG17pv wjYiwCJ5dARsI5UP01dtulfkmuhhJ5N/nV+I+KUFAvXWPVjLwUEReFKf3POfRNqCas38+2UrJmW0o 5GencNhl5ExwcrO4kpEygm1yk2u0zEsDgJwD5STSJdVOuGwL32BLYhpJOFKULlaMhNbB9Xzd+Lrkz AzkbkiRoRFt/h26vpFKn+Meoisz+4QehIqSLPdKmyIir2cBsR+fekaFb9Rh0pJ7JG2neSJi7aKdy0 BUlNV7XYYSwLZdATWGGrpVWmUbAgkpNX0CBxEP2yIhT2fwrRUcrZtDsDAv2VdpfMdmO7Bk69H+OYA ZiO/0VXDv5eRcPMcfsOp8/Ut7ljb8DdTliYq7Ntxc=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:45 +0100 Message-Id: <20230524211104.686087-12-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 11/30] q800: implement additional machine id bits on VIA1 port A X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962741198100002 Content-Type: text/plain; charset="utf-8" Co-developed-by: Laurent Vivier Signed-off-by: Mark Cave-Ayland --- hw/misc/mac_via.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index 076d18e5fd..f90a22a067 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -114,6 +114,9 @@ #define VIA1A_CPUID1 0x04 /* CPU id bit 0 on RBV, others */ #define VIA1A_CPUID2 0x10 /* CPU id bit 0 on RBV, others */ #define VIA1A_CPUID3 0x40 /* CPU id bit 0 on RBV, others */ +#define VIA1A_CPUID_MASK (VIA1A_CPUID0 | VIA1A_CPUID1 | \ + VIA1A_CPUID2 | VIA1A_CPUID3) +#define VIA1A_CPUID_Q800 (VIA1A_CPUID0 | VIA1A_CPUID2) =20 /* * Info on VIA1B is from Macintosh Family Hardware & MkLinux. @@ -871,9 +874,18 @@ static uint64_t mos6522_q800_via1_read(void *opaque, h= waddr addr, unsigned size) { MOS6522Q800VIA1State *s =3D MOS6522_Q800_VIA1(opaque); MOS6522State *ms =3D MOS6522(s); + uint64_t ret; =20 addr =3D (addr >> 9) & 0xf; - return mos6522_read(ms, addr, size); + ret =3D mos6522_read(ms, addr, size); + switch (addr) { + case VIA_REG_A: + case VIA_REG_ANH: + /* Quadra 800 Id */ + ret =3D (ret & ~VIA1A_CPUID_MASK) | VIA1A_CPUID_Q800; + break; + } + return ret; } =20 static void mos6522_q800_via1_write(void *opaque, hwaddr addr, uint64_t va= l, --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962790417130.53634672668113; Wed, 24 May 2023 14:13:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vmH-0002gO-MU; Wed, 24 May 2023 17:12:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmB-0002Sd-5v for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:10 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vm9-00026I-0b for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:06 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vm0-0005XR-AQ; Wed, 24 May 2023 22:12:00 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=62FC76QptiCbwxg2J+eqp9rZfvowmFqf4yMKVoifQjw=; b=Nlhao42SfotoM2R+giURil+2nj k7A6oK+2TprXzSIxwz6DIK7jMCEBaXeVBBFtC2en4E9UItLQNrWHYTplgPxYsUBPuCBjXyiikDSAB QDzjR1G5cydySgLxsGwgLMnG3LYUOuyThgzmtiARhnDEvV2D8V7PrBzZXY25xrJcbE4dT7CYUuW/H JCOaSPtdAFMyy51t74k3hfPdDAhfaWIzq2XiGn70hOy6s4Qhbik5wV0D33r7bwKhZIh2TVtZp7hzr F5KjxM+1JeAirYi2AHP8Hh1pVSoRRHUzsN4P+gySRznTTIsrmdZ3VACKb+7XcgMk24PxGya2EUUQs jtE+otqrLtLMM9lxmporPtSf39saWxR+vfMCiPRw6Rz3Jfpf1pMoXpVXt3qvdRoDiZ2ss58EaOh27 iHN1wjnOUfDCXZ1kr5uGSMTQ4XVTMINIvaglIDrTVduy/BWxjZwnSRJP2o+5ppnX7QLeUc+/RKann UX3kARM/r7NZPa/uWgji4iHMIjOurjY9o6FiBabWQv0u0ijtNExKhGEGQkyZMWcBlVR5cuQYvQDVE lBDhEXCysny8WmSsMVB0Vkcx7HLh6oEDYPS1adl0pEa4/Zel5qR9eqlRKecSgI8ehtY6anzxJvWdx AiqF1YOe5Fy907bUSHMR6znEZLsFPdgEyP7I9kZoM=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:46 +0100 Message-Id: <20230524211104.686087-13-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 12/30] q800: add IOSB subsystem X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962792262100002 Content-Type: text/plain; charset="utf-8" It is needed because it defines the BIOSConfig area. Co-developed-by: Laurent Vivier Signed-off-by: Mark Cave-Ayland --- MAINTAINERS | 2 + hw/m68k/Kconfig | 1 + hw/m68k/q800.c | 10 +++ hw/misc/Kconfig | 3 + hw/misc/iosb.c | 156 +++++++++++++++++++++++++++++++++++++++++ hw/misc/meson.build | 1 + hw/misc/trace-events | 4 ++ include/hw/misc/iosb.h | 41 +++++++++++ 8 files changed, 218 insertions(+) create mode 100644 hw/misc/iosb.c create mode 100644 include/hw/misc/iosb.h diff --git a/MAINTAINERS b/MAINTAINERS index 21ec70d00a..f151aaf99f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1228,6 +1228,7 @@ F: hw/nubus/* F: hw/display/macfb.c F: hw/block/swim.c F: hw/misc/djmemc.c +F: hw/misc/iosb.c F: hw/m68k/bootinfo.h F: include/standard-headers/asm-m68k/bootinfo.h F: include/standard-headers/asm-m68k/bootinfo-mac.h @@ -1237,6 +1238,7 @@ F: include/hw/display/macfb.h F: include/hw/block/swim.h F: include/hw/m68k/q800.h F: include/hw/misc/djmemc.c +F: include/hw/misc/iosb.c =20 virt M: Laurent Vivier diff --git a/hw/m68k/Kconfig b/hw/m68k/Kconfig index 330cfdfa2d..64fa70a0db 100644 --- a/hw/m68k/Kconfig +++ b/hw/m68k/Kconfig @@ -24,6 +24,7 @@ config Q800 select DP8393X select OR_IRQ select DJMEMC + select IOSB =20 config M68K_VIRT bool diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index c1d4b98cc0..8310670ec2 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -41,6 +41,7 @@ #include "hw/m68k/q800.h" #include "hw/misc/mac_via.h" #include "hw/misc/djmemc.h" +#include "hw/misc/iosb.h" #include "hw/input/adb.h" #include "hw/nubus/mac-nubus-bridge.h" #include "hw/display/macfb.h" @@ -71,6 +72,7 @@ #define ESP_BASE (IO_BASE + 0x10000) #define ESP_PDMA (IO_BASE + 0x10100) #define ASC_BASE (IO_BASE + 0x14000) +#define IOSB_BASE (IO_BASE + 0x18000) #define SWIM_BASE (IO_BASE + 0x1E000) =20 #define SONIC_PROM_SIZE 0x1000 @@ -530,6 +532,14 @@ static void q800_machine_init(MachineState *machine) memory_region_add_subregion(&m->macio, DJMEMC_BASE - IO_BASE, sysbus_mmio_get_region(sysbus, 0)); =20 + /* IOSB subsystem */ + + dev =3D qdev_new(TYPE_IOSB); + sysbus =3D SYS_BUS_DEVICE(dev); + sysbus_realize_and_unref(sysbus, &error_fatal); + memory_region_add_subregion(&m->macio, IOSB_BASE - IO_BASE, + sysbus_mmio_get_region(sysbus, 0)); + /* VIA 1 */ via1_dev =3D qdev_new(TYPE_MOS6522_Q800_VIA1); dinfo =3D drive_get(IF_MTD, 0, 0); diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index 7eaf955f88..c6c38102b1 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -183,4 +183,7 @@ config AXP209_PMU config DJMEMC bool =20 +config IOSB + bool + source macio/Kconfig diff --git a/hw/misc/iosb.c b/hw/misc/iosb.c new file mode 100644 index 0000000000..f4f9b22d89 --- /dev/null +++ b/hw/misc/iosb.c @@ -0,0 +1,156 @@ +/* + * QEMU IOSB emulation + * + * Copyright (c) 2019 Laurent Vivier + * Copyright (c) 2022 Mark Cave-Ayland + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#include "qemu/osdep.h" +#include "qemu/log.h" +#include "migration/vmstate.h" +#include "hw/sysbus.h" +#include "hw/misc/iosb.h" +#include "trace.h" + +#define IOSB_SIZE 0x2000 + +#define IOSB_CONFIG 0x0 +#define IOSB_CONFIG2 0x100 +#define IOSB_SONIC_SCSI 0x200 +#define IOSB_REVISION 0x300 +#define IOSB_SCSI_RESID 0x400 +#define IOSB_BRIGHTNESS 0x500 +#define IOSB_TIMEOUT 0x600 + + +static uint64_t iosb_read(void *opaque, hwaddr addr, + unsigned size) +{ + IOSBState *s =3D IOSB(opaque); + uint64_t val =3D 0; + + switch (addr) { + case IOSB_CONFIG: + case IOSB_CONFIG2: + case IOSB_SONIC_SCSI: + case IOSB_REVISION: + case IOSB_SCSI_RESID: + case IOSB_BRIGHTNESS: + case IOSB_TIMEOUT: + val =3D s->regs[addr >> 8]; + break; + default: + qemu_log_mask(LOG_UNIMP, "IOSB: unimplemented read addr=3D0x%"PRIx= 64 + " val=3D0x%"PRIx64 " size=3D%d\n", + addr, val, size); + } + + trace_iosb_read(addr, size, val); + return val; +} + +static void iosb_write(void *opaque, hwaddr addr, uint64_t val, + unsigned size) +{ + IOSBState *s =3D IOSB(opaque); + + switch (addr) { + case IOSB_CONFIG: + case IOSB_CONFIG2: + case IOSB_SONIC_SCSI: + case IOSB_REVISION: + case IOSB_SCSI_RESID: + case IOSB_BRIGHTNESS: + case IOSB_TIMEOUT: + s->regs[addr >> 8] =3D val; + break; + default: + qemu_log_mask(LOG_UNIMP, "IOSB: unimplemented write addr=3D0x%"PRI= x64 + " val=3D0x%"PRIx64 " size=3D%d\n", + addr, val, size); + } + + trace_iosb_write(addr, size, val); +} + +static const MemoryRegionOps iosb_mmio_ops =3D { + .read =3D iosb_read, + .write =3D iosb_write, + .endianness =3D DEVICE_BIG_ENDIAN, + .impl =3D { + .min_access_size =3D 1, + .max_access_size =3D 4, + }, +}; + +static void iosb_reset_hold(Object *obj) +{ + IOSBState *s =3D IOSB(obj); + + memset(s->regs, 0, sizeof(s->regs)); + + /* BCLK 33 MHz */ + s->regs[IOSB_CONFIG >> 8] =3D 1; +} + +static void iosb_init(Object *obj) +{ + IOSBState *s =3D IOSB(obj); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); + + memory_region_init_io(&s->mem_regs, obj, &iosb_mmio_ops, s, "IOSB", + IOSB_SIZE); + sysbus_init_mmio(sbd, &s->mem_regs); +} + +static const VMStateDescription vmstate_iosb =3D { + .name =3D "IOSB", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (VMStateField[]) { + VMSTATE_UINT32_ARRAY(regs, IOSBState, IOSB_REGS), + VMSTATE_END_OF_LIST() + } +}; + +static void iosb_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(oc); + ResettableClass *rc =3D RESETTABLE_CLASS(oc); + + rc->phases.hold =3D iosb_reset_hold; + dc->vmsd =3D &vmstate_iosb; +} + +static const TypeInfo iosb_info =3D { + .name =3D TYPE_IOSB, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(IOSBState), + .instance_init =3D iosb_init, + .class_init =3D iosb_class_init, +}; + +static void iosb_register_types(void) +{ + type_register_static(&iosb_info); +} + +type_init(iosb_register_types) diff --git a/hw/misc/meson.build b/hw/misc/meson.build index a2b5ca6fbc..fee56a2a9e 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -21,6 +21,7 @@ softmmu_ss.add(when: 'CONFIG_ARM_V7M', if_true: files('ar= mv7m_ras.c')) # Mac devices softmmu_ss.add(when: 'CONFIG_MOS6522', if_true: files('mos6522.c')) softmmu_ss.add(when: 'CONFIG_DJMEMC', if_true: files('djmemc.c')) +softmmu_ss.add(when: 'CONFIG_IOSB', if_true: files('iosb.c')) =20 # virt devices softmmu_ss.add(when: 'CONFIG_VIRT_CTRL', if_true: files('virt_ctrl.c')) diff --git a/hw/misc/trace-events b/hw/misc/trace-events index bed14bd559..85d2601de9 100644 --- a/hw/misc/trace-events +++ b/hw/misc/trace-events @@ -283,3 +283,7 @@ lasi_chip_write(uint64_t addr, uint32_t val) "addr 0x%"= PRIx64" val 0x%08x" # djmemc.c djmemc_read(int reg, unsigned size, uint64_t value) "reg=3D0x%x size=3D%u = value=3D0x%"PRIx64 djmemc_write(int reg, unsigned size, uint64_t value) "reg=3D0x%x size=3D%u= value=3D0x%"PRIx64 + +# iosb.c +iosb_read(int reg, unsigned size, uint64_t value) "reg=3D%d size=3D%u valu= e=3D0x%"PRIx64 +iosb_write(int reg, unsigned size, uint64_t value) "reg=3D%d size=3D%u val= ue=3D0x%"PRIx64 diff --git a/include/hw/misc/iosb.h b/include/hw/misc/iosb.h new file mode 100644 index 0000000000..09d9f3a32b --- /dev/null +++ b/include/hw/misc/iosb.h @@ -0,0 +1,41 @@ +/* + * QEMU IOSB emulation + * + * Copyright (c) 2019 Laurent Vivier + * Copyright (c) 2022 Mark Cave-Ayland + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#ifndef HW_MEM_IOSB_H +#define HW_MEM_IOSB_H + +#define IOSB_REGS 7 + +struct IOSBState { + SysBusDevice parent_obj; + + MemoryRegion mem_regs; + uint32_t regs[IOSB_REGS]; +}; + +#define TYPE_IOSB "IOSB" +OBJECT_DECLARE_SIMPLE_TYPE(IOSBState, IOSB); + +#endif --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962891524968.0636481178208; Wed, 24 May 2023 14:14:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vmI-0002i0-6r; Wed, 24 May 2023 17:12:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmF-0002ea-QN for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:11 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmE-00027H-6v for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:11 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vm4-0005XR-Ge; Wed, 24 May 2023 22:12:04 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=1eGvyhO8DEv9nzoj+qD2t88LY4O3C3sOFmnQjH5m238=; b=ChNZNqJMd9srND0b7+NlSo/CUh 4P0FhPLDCk3qcmNEYUdZtBTFTPIUPyaJkuM3009CxZB0wtnbt8HBZWx/34sRzK6Vh+o3BVeOxr1nm AGJYgOcHiug55yvU4OGhMx2MW2Su59WKE23sumg6CGBB+Pageb5Uyn3jqij0bbdmCtbV7MheMBIx0 Dq1tHF0hGLW5Ecsq/YbzakkMSOjl6wGVZvNQvt6p20nvLJf0sWAp/rwW9EoAGzp3ykuiYQ7r/sqNK xXAIaHkpfWRHJgPkqIySCX1mfu9nvzSGPc1G58lzgfDlLXU8vs8HkFtkmfcW1m0SejXHTVV2JxyiJ pLeLrnvmpUYdmrhyMzE/K5GlpueraGQ4hfjIGd2SW7201I6XASmydXWa2Y6P8Tf+bJ6ZksdbCsbgI j0e0xlxKQusxG0bm7cftNPwLNDfCruT2VaqE/YCaGdjhWMT2Skihshost3ZWnRY8rlnFIR3khJfA1 weY+lnNU1/LKPDaVbnbySHM4qbIRQOXvRdGvlkS9eF0qXN3tNX8aLSknlgLkUNcDu1uyTG36+NaKS pKyyA8H4knKgCaRJ6oIBpWaXPAC+iBs13L6YqJq2r3E1v+zQQyT4pqCII0pldSozrZCPduZ6uWFbK /6o7fVcQzJEy9+KifpxdMN6IK/jRcZ3da5IupqSr4=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:47 +0100 Message-Id: <20230524211104.686087-14-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 13/30] q800: allow accesses to RAM area even if less memory is available X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962893141100005 Content-Type: text/plain; charset="utf-8" MacOS attempts a series of writes and reads over the entire RAM area in ord= er to determine the amount of RAM within the machine. Allow accesses to the entire RAM area ignoring writes and always reading zero for areas where the= re is no physical RAM installed to allow MacOS to detect the memory size witho= ut faulting. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/m68k/q800.c | 30 +++++++++++++++++++++++++++++- include/hw/m68k/q800.h | 1 + 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index 8310670ec2..d12aeaa20e 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -86,6 +86,9 @@ =20 #define MAC_CLOCK 3686418 =20 +/* Size of whole RAM area */ +#define RAM_SIZE 0x40000000 + /* * Slot 0x9 is reserved for use by the in-built framebuffer whilst only * slots 0xc, 0xd and 0xe physically exist on the Quadra 800 @@ -452,6 +455,27 @@ static const MemoryRegionOps machine_id_ops =3D { }, }; =20 +static uint64_t ramio_read(void *opaque, hwaddr addr, unsigned size) +{ + return 0x0; +} + +static void ramio_write(void *opaque, hwaddr addr, uint64_t val, + unsigned size) +{ + return; +} + +static const MemoryRegionOps ramio_ops =3D { + .read =3D ramio_read, + .write =3D ramio_write, + .endianness =3D DEVICE_BIG_ENDIAN, + .valid =3D { + .min_access_size =3D 1, + .max_access_size =3D 4, + }, +}; + static void q800_machine_init(MachineState *machine) { Q800MachineState *m =3D Q800_MACHINE(machine); @@ -497,7 +521,11 @@ static void q800_machine_init(MachineState *machine) qemu_register_reset(main_cpu_reset, m->cpu); =20 /* RAM */ - memory_region_add_subregion(get_system_memory(), 0, machine->ram); + memory_region_init_io(&m->ramio, NULL, &ramio_ops, &m->ramio, + "ram", RAM_SIZE); + memory_region_add_subregion(get_system_memory(), 0x0, &m->ramio); + + memory_region_add_subregion(&m->ramio, 0, machine->ram); =20 /* * Create container for all IO devices diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h index e57aec849a..0602d07d3d 100644 --- a/include/hw/m68k/q800.h +++ b/include/hw/m68k/q800.h @@ -34,6 +34,7 @@ struct Q800MachineState { MemoryRegion rom; DeviceState *glue; DeviceState *djmemc; + MemoryRegion ramio; =20 MemoryRegion macio; MemoryRegion macio_alias; --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962789068842.1345546388367; Wed, 24 May 2023 14:13:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vmg-0002sE-34; Wed, 24 May 2023 17:12:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmK-0002ir-Ga for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:16 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmG-000283-Ax for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:16 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vm8-0005XR-M5; Wed, 24 May 2023 22:12:08 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:Content-Type: MIME-Version:References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To: Cc:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=R3TuP+W/Vc7mJivGtHeuJs5OMlf/rZb26T9EpLNNhjQ=; b=x9wwEjAczPiM9OOJg6ABxCF+0Q 5THrT+LnQqVM1iG4AAWla0uCeFTOjIZJV1gNnfM3pQlzAF/wrxxoGa2L+8HbNrNiTvSQXHju/d13N TRXbrdraICmH6H+i23fLFwMLF9H8cGMm3h0rKxg1lQL+9STatrDUJIlrX+0c/tHtpaYcGP5F2yZwe 3+T1H8ZrtWi3uryjNeDphvJ6Iwl/KbwcdoEgE+m0ihQuk0k0KuV3AgaqdUzo/u4FEQC2VgO4n9akB +l9WDSjj0/b9QcBxjvs23F7hcTgfWgtJDsJiF2TJGS7AV3dW8/GGdgpf6oTvqaLLLjWk96Vg6oXgH GmsePantPHV+hxaB1Ai6CMVMIUo17+BV+KeOxRcUMeUMyndw1+D1osEYtkSpEcUcmfeYQkMY5DG6x 6dlOS4kxWz7GdiVMMu7LF2I1CthSLWVwR513iRzfqEvTmb62uDJpcVdqn5MOJfL4pkMbHfmjABLfq m29Ij+3gtKvQgDwTGQ8HnKKrx/IG4Si1qVW18oi1kRMf500jVcgsJSv9xXyHys/bRPXXAi4fGzFTm GitxYsm+LLBnefm3dR044UpCjYeBkERTS7avCmjJJmDBgcy5BXvgWYuYkswhCp6niDe4ZKQmHT14f H3apsjFygy95y247yxxQMrSCIURx5LUc3qbYB06CQ=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:48 +0100 Message-Id: <20230524211104.686087-15-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 14/30] audio: add Apple Sound Chip (ASC) emulation X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962789316100001 The Apple Sound Chip was primarily used by the Macintosh II to generate sou= nd in hardware which was previously handled by the toolbox ROM with software interrupts. Implement both the standard ASC and also the enhanced ASC (EASC) functional= ity which is used in the Quadra 800. Note that whilst real ASC hardware uses AUDIO_FORMAT_S8, this implementatio= n uses AUDIO_FORMAT_U8 instead because AUDIO_FORMAT_S8 is rarely used and not supp= orted by some audio backends like PulseAudio and DirectSound when played directly= with -audiodev out.mixing-engine=3Doff. Co-developed-by: Laurent Vivier Co-developed-by: Volker R=C3=BCmelin Signed-off-by: Mark Cave-Ayland Reviewed-by: Volker R=C3=BCmelin --- MAINTAINERS | 2 + hw/audio/Kconfig | 3 + hw/audio/asc.c | 688 +++++++++++++++++++++++++++++++++++++++++ hw/audio/meson.build | 1 + hw/audio/trace-events | 10 + hw/m68k/Kconfig | 1 + include/hw/audio/asc.h | 75 +++++ 7 files changed, 780 insertions(+) create mode 100644 hw/audio/asc.c create mode 100644 include/hw/audio/asc.h diff --git a/MAINTAINERS b/MAINTAINERS index f151aaf99f..1b79ab7965 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1229,6 +1229,7 @@ F: hw/display/macfb.c F: hw/block/swim.c F: hw/misc/djmemc.c F: hw/misc/iosb.c +F: hw/audio/asc.c F: hw/m68k/bootinfo.h F: include/standard-headers/asm-m68k/bootinfo.h F: include/standard-headers/asm-m68k/bootinfo-mac.h @@ -1239,6 +1240,7 @@ F: include/hw/block/swim.h F: include/hw/m68k/q800.h F: include/hw/misc/djmemc.c F: include/hw/misc/iosb.c +F: include/hw/audio/asc.h =20 virt M: Laurent Vivier diff --git a/hw/audio/Kconfig b/hw/audio/Kconfig index e76c69ca7e..d0993514a1 100644 --- a/hw/audio/Kconfig +++ b/hw/audio/Kconfig @@ -47,3 +47,6 @@ config PL041 =20 config CS4231 bool + +config ASC + bool diff --git a/hw/audio/asc.c b/hw/audio/asc.c new file mode 100644 index 0000000000..04194b1e43 --- /dev/null +++ b/hw/audio/asc.c @@ -0,0 +1,688 @@ +/* + * QEMU Apple Sound Chip emulation + * + * Apple Sound Chip (ASC) 344S0063 + * Enhanced Apple Sound Chip (EASC) 343S1063 + * + * Copyright (c) 2012-2018 Laurent Vivier + * Copyright (c) 2022 Mark Cave-Ayland + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include "hw/sysbus.h" +#include "hw/irq.h" +#include "audio/audio.h" +#include "hw/audio/asc.h" +#include "hw/qdev-properties.h" +#include "migration/vmstate.h" +#include "trace.h" + +/* + * Linux doesn't provide information about ASC, see arch/m68k/mac/macboing= .c + * and arch/m68k/include/asm/mac_asc.h + * + * best information is coming from MAME: + * https://github.com/mamedev/mame/blob/master/src/devices/sound/asc.h + * https://github.com/mamedev/mame/blob/master/src/devices/sound/asc.cpp + * Emulation by R. Belmont + * or MESS: + * http://mess.redump.net/mess/driver_info/easc + * + * 0x800: VERSION + * 0x801: MODE + * 1=3DFIFO mode, + * 2=3Dwavetable mode + * 0x802: CONTROL + * bit 0=3Danalog or PWM output, + * 1=3Dstereo/mono, + * 7=3Dprocessing time exceeded + * 0x803: FIFO MODE + * bit 7=3Dclear FIFO, + * bit 1=3D"non-ROM companding", + * bit 0=3D"ROM companding") + * 0x804: FIFO IRQ STATUS + * bit 0=3Dch A 1/2 full, + * 1=3Dch A full, + * 2=3Dch B 1/2 full, + * 3=3Dch B full) + * 0x805: WAVETABLE CONTROL + * bits 0-3 wavetables 0-3 start + * 0x806: VOLUME + * bits 2-4 =3D 3 bit internal ASC volume, + * bits 5-7 =3D volume control sent to Sony sound chip + * 0x807: CLOCK RATE + * 0 =3D Mac 22257 Hz, + * 1 =3D undefined, + * 2 =3D 22050 Hz, + * 3 =3D 44100 Hz + * 0x80a: PLAY REC A + * 0x80f: TEST + * bits 6-7 =3D digital test, + * bits 4-5 =3D analog test + * 0x810: WAVETABLE 0 PHASE + * big-endian 9.15 fixed-point, only 24 bits valid + * 0x814: WAVETABLE 0 INCREMENT + * big-endian 9.15 fixed-point, only 24 bits valid + * 0x818: WAVETABLE 1 PHASE + * 0x81C: WAVETABLE 1 INCREMENT + * 0x820: WAVETABLE 2 PHASE + * 0x824: WAVETABLE 2 INCREMENT + * 0x828: WAVETABLE 3 PHASE + * 0x82C: WAVETABLE 3 INCREMENT + * 0x830: UNKNOWN START + * NetBSD writes Wavetable data here (are there more + * wavetables/channels than we know about?) + * 0x857: UNKNOWN END + */ + +#define ASC_SIZE 0x2000 + +enum { + ASC_VERSION =3D 0x00, + ASC_MODE =3D 0x01, + ASC_CONTROL =3D 0x02, + ASC_FIFOMODE =3D 0x03, + ASC_FIFOIRQ =3D 0x04, + ASC_WAVECTRL =3D 0x05, + ASC_VOLUME =3D 0x06, + ASC_CLOCK =3D 0x07, + ASC_PLAYRECA =3D 0x0a, + ASC_TEST =3D 0x0f, + ASC_WAVETABLE =3D 0x10 +}; + +#define ASC_FIFO_STATUS_HALF_FULL 1 +#define ASC_FIFO_STATUS_FULL_EMPTY 2 + +#define ASC_EXTREGS_FIFOCTRL 0x8 +#define ASC_EXTREGS_INTCTRL 0x9 +#define ASC_EXTREGS_CDXA_DECOMP_FILT 0x10 + + +static void asc_raise_irq(ASCState *s) +{ + qemu_set_irq(s->irq, 1); +} + +static void asc_lower_irq(ASCState *s) +{ + qemu_set_irq(s->irq, 0); +} + +static uint8_t asc_fifo_get(ASCFIFOState *fs) +{ + ASCState *s =3D container_of(fs, ASCState, fifos[fs->index]); + bool fifo_half_irq_enabled =3D fs->extregs[ASC_EXTREGS_INTCTRL] & 1; + uint8_t val; + + assert(fs->cnt); + + val =3D fs->fifo[fs->rptr]; + trace_asc_fifo_get('A' + fs->index, fs->rptr, fs->cnt, val); + + fs->rptr++; + fs->rptr &=3D 0x3ff; + fs->cnt--; + + if (fs->cnt <=3D 0x1ff) { + /* FIFO less than half full */ + fs->int_status |=3D ASC_FIFO_STATUS_HALF_FULL; + } else { + /* FIFO more than half full */ + fs->int_status &=3D ~ASC_FIFO_STATUS_HALF_FULL; + } + + if (fs->cnt =3D=3D 0x1ff && fifo_half_irq_enabled) { + /* Raise FIFO half full IRQ */ + asc_raise_irq(s); + } + + if (fs->cnt =3D=3D 0) { + /* Raise FIFO empty IRQ */ + fs->int_status |=3D ASC_FIFO_STATUS_FULL_EMPTY; + asc_raise_irq(s); + } + + return val; +} + +static int generate_fifo(ASCState *s, int maxsamples) +{ + uint8_t *buf =3D s->mixbuf; + int i, limit, count =3D 0; + + limit =3D MIN(MAX(s->fifos[0].cnt, s->fifos[1].cnt), maxsamples); + + /* + * If starting a new run with no FIFO data present, update the IRQ and + * continue + */ + if (limit =3D=3D 0 && s->fifos[0].int_status =3D=3D 0 && + s->fifos[1].int_status =3D=3D 0) { + s->fifos[0].int_status |=3D ASC_FIFO_STATUS_HALF_FULL | + ASC_FIFO_STATUS_FULL_EMPTY; + s->fifos[1].int_status |=3D ASC_FIFO_STATUS_HALF_FULL | + ASC_FIFO_STATUS_FULL_EMPTY; + + asc_raise_irq(s); + return 0; + } + + while (count < limit) { + uint8_t val; + int16_t d, f0, f1; + int32_t t; + int shift, filter; + bool hasdata =3D true; + + for (i =3D 0; i < 2; i++) { + ASCFIFOState *fs =3D &s->fifos[i]; + + switch (fs->extregs[ASC_EXTREGS_FIFOCTRL] & 0x83) { + case 0x82: + /* + * CD-XA BRR mode: exit if there isn't enough data in the = FIFO + * for a complete 15 byte packet + */ + if (fs->xa_cnt =3D=3D -1 && fs->cnt < 15) { + hasdata =3D false; + continue; + } + + if (fs->xa_cnt =3D=3D -1) { + /* Start of packet, get flags */ + fs->xa_flags =3D asc_fifo_get(fs); + fs->xa_cnt =3D 0; + } + + shift =3D fs->xa_flags & 0xf; + filter =3D fs->xa_flags >> 4; + f0 =3D (int8_t)fs->extregs[ASC_EXTREGS_CDXA_DECOMP_FILT + + (filter << 1) + 1]; + f1 =3D (int8_t)fs->extregs[ASC_EXTREGS_CDXA_DECOMP_FILT + + (filter << 1)]; + if ((fs->xa_cnt & 1) =3D=3D 0) { + fs->xa_val =3D asc_fifo_get(fs); + d =3D (fs->xa_val & 0xf) << 12; + } else { + d =3D (fs->xa_val & 0xf0) << 8; + } + t =3D (d >> shift) + (((fs->xa_last[0] * f0) + + (fs->xa_last[1] * f1) + 32) >> 6); + if (t < -32768) { + t =3D -32768; + } else if (t > 32768) { + t =3D 32768; + } + + /* + * CD-XA BRR generates 16-bit signed output, so convert to + * 8-bit before writing to buffer. Does real hardware do t= he + * same? + */ + buf[count * 2 + i] =3D (uint8_t)(t / 256) ^ 0x80; + fs->xa_cnt++; + + fs->xa_last[1] =3D fs->xa_last[0]; + fs->xa_last[0] =3D (int16_t)t; + + if (fs->xa_cnt =3D=3D 28) { + /* End of packet */ + fs->xa_cnt =3D -1; + } + break; + + default: + /* fallthrough */ + case 0x80: + /* Raw mode */ + if (fs->cnt) { + val =3D asc_fifo_get(fs); + } else { + val =3D 0x80; + } + + buf[count * 2 + i] =3D val; + break; + } + } + + if (!hasdata) { + break; + } + + count++; + } + + return count; +} + +static int generate_wavetable(ASCState *s, int maxsamples) +{ + uint8_t *buf =3D s->mixbuf; + int channel, count =3D 0; + + while (count < maxsamples) { + uint32_t left =3D 0, right =3D 0; + uint8_t sample; + + for (channel =3D 0; channel < 4; channel++) { + ASCFIFOState *fs =3D &s->fifos[channel >> 1]; + int chanreg =3D ASC_WAVETABLE + (channel << 3); + uint32_t phase, incr, offset; + + phase =3D ldl_be_p(&s->regs[chanreg]); + incr =3D ldl_be_p(&s->regs[chanreg + sizeof(uint32_t)]); + + phase +=3D incr; + offset =3D (phase >> 15) & 0x1ff; + sample =3D fs->fifo[0x200 * (channel >> 1) + offset]; + + stl_be_p(&s->regs[chanreg], phase); + + left +=3D sample; + right +=3D sample; + } + + buf[count * 2] =3D left >> 2; + buf[count * 2 + 1] =3D right >> 2; + + count++; + } + + return count; +} + +static void asc_out_cb(void *opaque, int free_b) +{ + ASCState *s =3D opaque; + int samples; + + samples =3D MIN(s->samples, free_b >> s->shift); + if (!samples) { + return; + } + + switch (s->regs[ASC_MODE] & 3) { + default: + /* Off */ + samples =3D 0; + break; + case 1: + /* FIFO mode */ + samples =3D generate_fifo(s, samples); + break; + case 2: + /* Wave table mode */ + samples =3D generate_wavetable(s, samples); + break; + } + + if (!samples) { + return; + } + + AUD_write(s->voice, s->mixbuf, samples << s->shift); +} + +static uint64_t asc_fifo_read(void *opaque, hwaddr addr, + unsigned size) +{ + ASCFIFOState *fs =3D opaque; + + trace_asc_read_fifo('A' + fs->index, addr, size, fs->fifo[addr]); + return fs->fifo[addr]; +} + +static void asc_fifo_write(void *opaque, hwaddr addr, uint64_t value, + unsigned size) +{ + ASCFIFOState *fs =3D opaque; + ASCState *s =3D container_of(fs, ASCState, fifos[fs->index]); + bool fifo_half_irq_enabled =3D fs->extregs[ASC_EXTREGS_INTCTRL] & 1; + + trace_asc_write_fifo('A' + fs->index, addr, size, fs->wptr, fs->cnt, v= alue); + + if (s->regs[ASC_MODE] =3D=3D 1) { + fs->fifo[fs->wptr++] =3D value; + fs->wptr &=3D 0x3ff; + fs->cnt++; + + if (fs->cnt <=3D 0x1ff) { + /* FIFO less than half full */ + fs->int_status |=3D ASC_FIFO_STATUS_HALF_FULL; + } else { + /* FIFO at least half full */ + fs->int_status &=3D ~ASC_FIFO_STATUS_HALF_FULL; + } + + if (fs->cnt =3D=3D 0x200 && fifo_half_irq_enabled) { + /* Raise FIFO half full interrupt */ + asc_raise_irq(s); + } + + if (fs->cnt =3D=3D 0x3ff) { + /* Raise FIFO full interrupt */ + fs->int_status |=3D ASC_FIFO_STATUS_FULL_EMPTY; + asc_raise_irq(s); + } + } else { + fs->fifo[addr] =3D value; + } + return; +} + +static const MemoryRegionOps asc_fifo_ops =3D { + .read =3D asc_fifo_read, + .write =3D asc_fifo_write, + .impl =3D { + .min_access_size =3D 1, + .max_access_size =3D 1, + }, + .endianness =3D DEVICE_BIG_ENDIAN, +}; + +static void asc_fifo_reset(ASCFIFOState *fs); + +static uint64_t asc_read(void *opaque, hwaddr addr, + unsigned size) +{ + ASCState *s =3D opaque; + uint64_t prev, value; + + switch (addr) { + case ASC_VERSION: + switch (s->type) { + default: + case ASC_TYPE_ASC: + value =3D 0; + break; + case ASC_TYPE_EASC: + value =3D 0xb0; + break; + } + break; + case ASC_FIFOIRQ: + prev =3D (s->fifos[0].int_status & 0x3) | + (s->fifos[1].int_status & 0x3) << 2; + + s->fifos[0].int_status =3D 0; + s->fifos[1].int_status =3D 0; + asc_lower_irq(s); + value =3D prev; + break; + default: + value =3D s->regs[addr]; + break; + } + + trace_asc_read_reg(addr, size, value); + return value; +} + +static void asc_write(void *opaque, hwaddr addr, uint64_t value, + unsigned size) +{ + ASCState *s =3D opaque; + + switch (addr) { + case ASC_MODE: + value &=3D 3; + if (value !=3D s->regs[ASC_MODE]) { + asc_fifo_reset(&s->fifos[0]); + asc_fifo_reset(&s->fifos[1]); + asc_lower_irq(s); + if (value !=3D 0) { + AUD_set_active_out(s->voice, 1); + } else { + AUD_set_active_out(s->voice, 0); + } + } + break; + case ASC_FIFOMODE: + if (value & 0x80) { + asc_fifo_reset(&s->fifos[0]); + asc_fifo_reset(&s->fifos[1]); + asc_lower_irq(s); + } + break; + case ASC_WAVECTRL: + break; + case ASC_VOLUME: + { + int vol =3D (value & 0xe0); + + AUD_set_volume_out(s->voice, 0, vol, vol); + break; + } + } + + trace_asc_write_reg(addr, size, value); + s->regs[addr] =3D value; +} + +static const MemoryRegionOps asc_regs_ops =3D { + .read =3D asc_read, + .write =3D asc_write, + .endianness =3D DEVICE_BIG_ENDIAN, + .impl =3D { + .min_access_size =3D 1, + .max_access_size =3D 1, + } +}; + +static uint64_t asc_ext_read(void *opaque, hwaddr addr, + unsigned size) +{ + ASCFIFOState *fs =3D opaque; + uint64_t value; + + value =3D fs->extregs[addr]; + + trace_asc_read_extreg('A' + fs->index, addr, size, value); + return value; +} + +static void asc_ext_write(void *opaque, hwaddr addr, uint64_t value, + unsigned size) +{ + ASCFIFOState *fs =3D opaque; + + trace_asc_write_extreg('A' + fs->index, addr, size, value); + + fs->extregs[addr] =3D value; +} + +static const MemoryRegionOps asc_extregs_ops =3D { + .read =3D asc_ext_read, + .write =3D asc_ext_write, + .impl =3D { + .min_access_size =3D 1, + .max_access_size =3D 1, + }, + .endianness =3D DEVICE_BIG_ENDIAN, +}; + +static int asc_post_load(void *opaque, int version) +{ + ASCState *s =3D ASC(opaque); + + if (s->regs[ASC_MODE] !=3D 0) { + AUD_set_active_out(s->voice, 1); + } + + return 0; +} + +static const VMStateDescription vmstate_asc_fifo =3D { + .name =3D "apple-sound-chip.fifo", + .version_id =3D 0, + .minimum_version_id =3D 0, + .fields =3D (VMStateField[]) { + VMSTATE_UINT8_ARRAY(fifo, ASCFIFOState, ASC_FIFO_SIZE), + VMSTATE_UINT8(int_status, ASCFIFOState), + VMSTATE_INT32(cnt, ASCFIFOState), + VMSTATE_INT32(wptr, ASCFIFOState), + VMSTATE_INT32(rptr, ASCFIFOState), + VMSTATE_UINT8_ARRAY(extregs, ASCFIFOState, ASC_EXTREG_SIZE), + VMSTATE_INT32(xa_cnt, ASCFIFOState), + VMSTATE_UINT8(xa_val, ASCFIFOState), + VMSTATE_UINT8(xa_flags, ASCFIFOState), + VMSTATE_INT16_ARRAY(xa_last, ASCFIFOState, 2), + VMSTATE_END_OF_LIST() + } +}; + +static const VMStateDescription vmstate_asc =3D { + .name =3D "apple-sound-chip", + .version_id =3D 0, + .minimum_version_id =3D 0, + .post_load =3D asc_post_load, + .fields =3D (VMStateField[]) { + VMSTATE_STRUCT_ARRAY(fifos, ASCState, 2, 0, vmstate_asc_fifo, + ASCFIFOState), + VMSTATE_UINT8_ARRAY(regs, ASCState, ASC_REG_SIZE), + VMSTATE_END_OF_LIST() + } +}; + +static void asc_fifo_reset(ASCFIFOState *fs) +{ + fs->wptr =3D 0; + fs->rptr =3D 0; + fs->cnt =3D 0; + fs->xa_cnt =3D -1; + fs->int_status =3D 0; +} + +static void asc_fifo_init(ASCFIFOState *fs, int index) +{ + ASCState *s =3D container_of(fs, ASCState, fifos[index]); + char *name; + + fs->index =3D index; + name =3D g_strdup_printf("asc.fifo%c", 'A' + index); + memory_region_init_io(&fs->mem_fifo, OBJECT(s), &asc_fifo_ops, fs, + name, ASC_FIFO_SIZE); + g_free(name); + + name =3D g_strdup_printf("asc.extregs%c", 'A' + index); + memory_region_init_io(&fs->mem_extregs, OBJECT(s), &asc_extregs_ops, + fs, name, ASC_EXTREG_SIZE); + g_free(name); +} + +static void asc_reset(DeviceState *d) +{ + ASCState *s =3D ASC(d); + + AUD_set_active_out(s->voice, 0); + + memset(s->regs, 0, sizeof(s->regs)); + asc_fifo_reset(&s->fifos[0]); + asc_fifo_reset(&s->fifos[1]); + + if (s->type =3D=3D ASC_TYPE_ASC) { + /* FIFO half full IRQs enabled by default */ + s->fifos[0].extregs[ASC_EXTREGS_INTCTRL] =3D 1; + s->fifos[1].extregs[ASC_EXTREGS_INTCTRL] =3D 1; + } +} + +static void asc_unrealize(DeviceState *dev) +{ + ASCState *s =3D ASC(dev); + + g_free(s->mixbuf); + + AUD_remove_card(&s->card); +} + +static void asc_realize(DeviceState *dev, Error **errp) +{ + ASCState *s =3D ASC(dev); + struct audsettings as; + + AUD_register_card("Apple Sound Chip", &s->card); + + as.freq =3D 22257; + as.nchannels =3D 2; + as.fmt =3D AUDIO_FORMAT_U8; + as.endianness =3D AUDIO_HOST_ENDIANNESS; + + s->voice =3D AUD_open_out(&s->card, s->voice, "asc.out", s, asc_out_cb, + &as); + s->shift =3D 1; + s->samples =3D AUD_get_buffer_size_out(s->voice) >> s->shift; + s->mixbuf =3D g_malloc0(s->samples << s->shift); + + /* Add easc registers if required */ + if (s->type =3D=3D ASC_TYPE_EASC) { + memory_region_add_subregion(&s->asc, ASC_EXTREG_OFFSET, + &s->fifos[0].mem_extregs); + memory_region_add_subregion(&s->asc, + ASC_EXTREG_OFFSET + ASC_EXTREG_SIZE, + &s->fifos[1].mem_extregs); + } +} + +static void asc_init(Object *obj) +{ + ASCState *s =3D ASC(obj); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); + + memory_region_init(&s->asc, OBJECT(obj), "asc", ASC_SIZE); + + asc_fifo_init(&s->fifos[0], 0); + asc_fifo_init(&s->fifos[1], 1); + + memory_region_add_subregion(&s->asc, ASC_FIFO_OFFSET, + &s->fifos[0].mem_fifo); + memory_region_add_subregion(&s->asc, + ASC_FIFO_OFFSET + ASC_FIFO_SIZE, + &s->fifos[1].mem_fifo); + + memory_region_init_io(&s->mem_regs, OBJECT(obj), &asc_regs_ops, s, + "asc.regs", ASC_REG_SIZE); + memory_region_add_subregion(&s->asc, ASC_REG_OFFSET, &s->mem_regs); + + sysbus_init_irq(sbd, &s->irq); + sysbus_init_mmio(sbd, &s->asc); +} + +static Property asc_properties[] =3D { + DEFINE_AUDIO_PROPERTIES(ASCState, card), + DEFINE_PROP_UINT8("asctype", ASCState, type, ASC_TYPE_ASC), + DEFINE_PROP_END_OF_LIST(), +}; + +static void asc_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(oc); + + dc->realize =3D asc_realize; + dc->unrealize =3D asc_unrealize; + set_bit(DEVICE_CATEGORY_SOUND, dc->categories); + dc->reset =3D asc_reset; + dc->vmsd =3D &vmstate_asc; + device_class_set_props(dc, asc_properties); +} + +static const TypeInfo asc_info =3D { + .name =3D TYPE_ASC, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(ASCState), + .instance_init =3D asc_init, + .class_init =3D asc_class_init, +}; + +static void asc_register_types(void) +{ + type_register_static(&asc_info); +} + +type_init(asc_register_types) diff --git a/hw/audio/meson.build b/hw/audio/meson.build index e48a9fc73d..2de764912f 100644 --- a/hw/audio/meson.build +++ b/hw/audio/meson.build @@ -1,6 +1,7 @@ softmmu_ss.add(files('soundhw.c')) softmmu_ss.add(when: 'CONFIG_AC97', if_true: files('ac97.c')) softmmu_ss.add(when: 'CONFIG_ADLIB', if_true: files('fmopl.c', 'adlib.c')) +softmmu_ss.add(when: 'CONFIG_ASC', if_true: files('asc.c')) softmmu_ss.add(when: 'CONFIG_CS4231', if_true: files('cs4231.c')) softmmu_ss.add(when: 'CONFIG_CS4231A', if_true: files('cs4231a.c')) softmmu_ss.add(when: 'CONFIG_ES1370', if_true: files('es1370.c')) diff --git a/hw/audio/trace-events b/hw/audio/trace-events index 4dec48a4fd..89ef2996e5 100644 --- a/hw/audio/trace-events +++ b/hw/audio/trace-events @@ -17,3 +17,13 @@ via_ac97_codec_write(uint8_t addr, uint16_t val) "0x%x <= - 0x%x" via_ac97_sgd_fetch(uint32_t curr, uint32_t addr, char stop, char eol, char= flag, uint32_t len) "curr=3D0x%x addr=3D0x%x %c%c%c len=3D%d" via_ac97_sgd_read(uint64_t addr, unsigned size, uint64_t val) "0x%"PRIx64"= %d -> 0x%"PRIx64 via_ac97_sgd_write(uint64_t addr, unsigned size, uint64_t val) "0x%"PRIx64= " %d <- 0x%"PRIx64 + +# asc.c +asc_read_fifo(const char fifo, int reg, unsigned size, uint64_t value) "fi= fo %c reg=3D0x%03x size=3D%u value=3D0x%"PRIx64 +asc_read_reg(int reg, unsigned size, uint64_t value) "reg=3D0x%03x size=3D= %u value=3D0x%"PRIx64 +asc_read_extreg(const char fifo, int reg, unsigned size, uint64_t value) "= fifo %c reg=3D0x%03x size=3D%u value=3D0x%"PRIx64 +asc_fifo_get(const char fifo, int rptr, int cnt, uint64_t value) "fifo %c = rptr=3D0x%x cnt=3D0x%x value=3D0x%"PRIx64 +asc_write_fifo(const char fifo, int reg, unsigned size, int wrptr, int cnt= , uint64_t value) "fifo %c reg=3D0x%03x size=3D%u wptr=3D0x%x cnt=3D0x%x va= lue=3D0x%"PRIx64 +asc_write_reg(int reg, unsigned size, uint64_t value) "reg=3D0x%03x size= =3D%u value=3D0x%"PRIx64 +asc_write_extreg(const char fifo, int reg, unsigned size, uint64_t value) = "fifo %c reg=3D0x%03x size=3D%u value=3D0x%"PRIx64 +asc_update_irq(int irq, int a, int b) "set IRQ to %d (A: 0x%x B: 0x%x)" diff --git a/hw/m68k/Kconfig b/hw/m68k/Kconfig index 64fa70a0db..d88741ec9d 100644 --- a/hw/m68k/Kconfig +++ b/hw/m68k/Kconfig @@ -25,6 +25,7 @@ config Q800 select OR_IRQ select DJMEMC select IOSB + select ASC =20 config M68K_VIRT bool diff --git a/include/hw/audio/asc.h b/include/hw/audio/asc.h new file mode 100644 index 0000000000..d69aa4ade1 --- /dev/null +++ b/include/hw/audio/asc.h @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2012-2018 Laurent Vivier + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#ifndef HW_AUDIO_ASC_H +#define HW_AUDIO_ASC_H + +#include "qemu/osdep.h" +#include "hw/sysbus.h" +#include "audio/audio.h" + +enum { + ASC_TYPE_ASC =3D 0, /* original discrete Apple Sound Chip */ + ASC_TYPE_EASC =3D 1 /* discrete Enhanced Apple Sound Chip */ +}; + +#define ASC_FIFO_OFFSET 0x0 +#define ASC_FIFO_SIZE 0x400 + +#define ASC_REG_OFFSET 0x800 +#define ASC_REG_SIZE 0x60 + +#define ASC_EXTREG_OFFSET 0xf00 +#define ASC_EXTREG_SIZE 0x20 + +typedef struct ASCFIFOState { + int index; + + MemoryRegion mem_fifo; + uint8_t fifo[ASC_FIFO_SIZE]; + uint8_t int_status; + + int cnt; + int wptr; + int rptr; + + MemoryRegion mem_extregs; + uint8_t extregs[ASC_EXTREG_SIZE]; + + int xa_cnt; + uint8_t xa_val; + uint8_t xa_flags; + int16_t xa_last[2]; +} ASCFIFOState; + +struct ASCState { + SysBusDevice parent_obj; + + uint8_t type; + MemoryRegion asc; + MemoryRegion mem_fifo; + MemoryRegion mem_regs; + MemoryRegion mem_extregs; + + QEMUSoundCard card; + SWVoiceOut *voice; + uint8_t *mixbuf; + int samples; + int shift; + + qemu_irq irq; + + ASCFIFOState fifos[2]; + + uint8_t regs[ASC_REG_SIZE]; +}; + +#define TYPE_ASC "apple-sound-chip" +OBJECT_DECLARE_SIMPLE_TYPE(ASCState, ASC) + +#endif --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962915015815.7825993779974; Wed, 24 May 2023 14:15:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vmo-0003Qd-63; Wed, 24 May 2023 17:12:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmQ-0002rB-Mf for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:24 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmP-00028q-4z for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:22 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vmC-0005XR-Tw; Wed, 24 May 2023 22:12:13 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=Z7enXzJkiwGsDmHfTS9mzVlu1dkU2r/QMHKFybHGZg4=; b=wciHGVq2JjEFczP+TQGepabt93 IGmAU6GY/EBRqLa7A+uhdCW4wanJy2UtgT204E95JPDCOGzFAZZj83+80y1jy654OgiABAD0ZBAn6 ucf77WhOtJ/T0H3cgKwE6Mnp0Swd8oO8CDjnZp5+es3DSwkMfkGRBfajXpo0hPC9Sy1DRPwjjIb8x 3Wla0iiyUuTGCIWwbmq8+N/r4OIGorWBuvTl8ukIasownZ9leJbDvf1L/wnAATsrBTRsYKIoTFAko PGV9M2bEQkI1YuKlqFL83YfKJlB0QdEesHVnupCSXZvSqR+2ogeNIDq4FMP6KgthnJ8zM5xua0mj1 6Wf+bYCO+VysP+3sP2BkFL0TZ4rL/JT0WlJTSa+T7ETtgKwoSFx+n/ljmO0Nu0kCN7wc4LHwQApIN dZClpvgJyi03oFcuTSJX41KMaexV0606c/wmen/WIeTSAk/De6d8kphYrc7C4QudiHtANf0HvP80b r48nhXZFAqXcEe0KVND+DcP5aNTwwvNiEprvQzIgQNol5EmwV1YQrl0L2yCtWLOwBNag2in8cSnJy bgJM1i4l06ewfWcY7/I3+/A5SaZMf4CIe7IfoVb3Nc6am94eq/1tBo4jsVLutI0LWVP779QxQwF3H nRmzHwaRamQLvd1moCyTwP7RwGMcRx58BGtleyWR8=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:49 +0100 Message-Id: <20230524211104.686087-16-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 15/30] asc: generate silence if FIFO empty but engine still running X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962915795100001 Content-Type: text/plain; charset="utf-8" MacOS (un)helpfully leaves the FIFO engine running even when all the sample= s have been written to the hardware, and expects the FIFO status flags and IRQ to = be updated continuously. Since not all audio backends guarantee an all-zero output when no data is provided, explicitly generate an all-zero output when this condition occurs= to avoid the audio backends re-using their internal buffers and looping audio = once the FIFOs are empty. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Reviewed-by: Volker R=C3=BCmelin --- hw/audio/asc.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/hw/audio/asc.c b/hw/audio/asc.c index 04194b1e43..c5173a8d35 100644 --- a/hw/audio/asc.c +++ b/hw/audio/asc.c @@ -158,8 +158,10 @@ static int generate_fifo(ASCState *s, int maxsamples) limit =3D MIN(MAX(s->fifos[0].cnt, s->fifos[1].cnt), maxsamples); =20 /* - * If starting a new run with no FIFO data present, update the IRQ and - * continue + * MacOS (un)helpfully leaves the FIFO engine running even when it has + * finished writing out samples. Since not all audio backends guarante= e an + * all-zero output when no data is provided, zero out the sample buffer + * and then update the FIFO flags and IRQ as normal and continue */ if (limit =3D=3D 0 && s->fifos[0].int_status =3D=3D 0 && s->fifos[1].int_status =3D=3D 0) { @@ -168,8 +170,9 @@ static int generate_fifo(ASCState *s, int maxsamples) s->fifos[1].int_status |=3D ASC_FIFO_STATUS_HALF_FULL | ASC_FIFO_STATUS_FULL_EMPTY; =20 + memset(buf, 0x80, maxsamples << s->shift); asc_raise_irq(s); - return 0; + return maxsamples; } =20 while (count < limit) { --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962930705567.4083287607435; Wed, 24 May 2023 14:15:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vn3-0004rT-6Z; Wed, 24 May 2023 17:13:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vma-0002xu-NL for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:43 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmZ-00029c-5g for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:32 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vmH-0005XR-3C; Wed, 24 May 2023 22:12:16 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=yvZ1GAxwjmjw2T6FTdcBJ1u00zsXrh8YestBqWC4eNg=; b=HYRV9yv8ZZtLbDJt91uHx4aUZK KArVo0RzrR/y/FhLvGCe9VaZGuuib0fYwAlFGKeNpeJMtBA0Fecu37nVxakdDyeXo2fIEZiHM7VcY BqCkpGlUKMeqeEBQxfvTeK8d0AmwjOuXNwHwWFf9GHxeGaaAE/LdBoBNoFL/1XNasXQGk60HCpouk P3oqXPw0LzO6tJg0lXqrvjnwUoEi3Am/V1HT+Qrl74fEQ4JbQWDhNYNyiBei0XwNV/LUqle/v8Mne rOsuIyRjzHvSmHIcyOrJq1SszxiojWDWWrYdojdnIoTlo/MTGX8wlOAXMczJpRb3dTdDi4aUFfbK/ h/ucT+VDCJnLLzY9NRe+GrMhFt+cf5zkjBSc1qWOCYtUa98QVCf3V4z4A34CPWvBqrhtFrn4/Mag+ ca8Ja6JV05EVdGrPqAcojxbxSxMVt5DMLehRGIch/BW36nLPkj2ErFfQ+F7u2OezL9m4xclkffDSU +lspbkrsi2msq9Y83MgvSowB/pRBYH/Lf9Tg5JQac5+L1e+99EqmSHxMRl3GTPF3oSscL595HboTu Fk8zHytCZZ2yslKoAhWdVhTJdip2MnVJsnaietHdNbh+PQB9OpjZX1nCthE73rzA+Yj1rEWfMqMvg JRXGlUgO1X3BNXiVi9VZXIkMdodPD5HG3ZVTcHJII=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:50 +0100 Message-Id: <20230524211104.686087-17-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 16/30] q800: add Apple Sound Chip (ASC) audio to machine X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962931879100001 Content-Type: text/plain; charset="utf-8" The Quadra 800 has the enhanced ASC (EASC) audio chip which supports both t= he legacy IRQ routing through VIA2 and also "A/UX" mode routing direct to the CPU. Co-developed-by: Laurent Vivier Signed-off-by: Mark Cave-Ayland --- hw/m68k/q800.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index d12aeaa20e..ed862f9e9d 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -43,6 +43,7 @@ #include "hw/misc/djmemc.h" #include "hw/misc/iosb.h" #include "hw/input/adb.h" +#include "hw/audio/asc.h" #include "hw/nubus/mac-nubus-bridge.h" #include "hw/display/macfb.h" #include "hw/block/swim.h" @@ -115,7 +116,7 @@ struct GLUEState { M68kCPU *cpu; uint8_t ipr; uint8_t auxmode; - qemu_irq irqs[1]; + qemu_irq irqs[2]; QEMUTimer *nmi_release; }; =20 @@ -124,8 +125,10 @@ struct GLUEState { #define GLUE_IRQ_IN_SONIC 2 #define GLUE_IRQ_IN_ESCC 3 #define GLUE_IRQ_IN_NMI 4 +#define GLUE_IRQ_IN_ASC 5 =20 #define GLUE_IRQ_NUBUS_9 0 +#define GLUE_IRQ_ASC 1 =20 /* * The GLUE logic on the Quadra 800 supports 2 different IRQ routing modes @@ -187,6 +190,11 @@ static void GLUE_set_irq(void *opaque, int irq, int le= vel) irq =3D 6; break; =20 + case GLUE_IRQ_IN_ASC: + /* Route to VIA2 instead, negative edge-triggered */ + qemu_set_irq(s->irqs[GLUE_IRQ_ASC], !level); + return; + default: g_assert_not_reached(); } @@ -213,6 +221,10 @@ static void GLUE_set_irq(void *opaque, int irq, int le= vel) irq =3D 6; break; =20 + case GLUE_IRQ_IN_ASC: + irq =3D 4; + break; + default: g_assert_not_reached(); } @@ -304,7 +316,7 @@ static void glue_init(Object *obj) qdev_init_gpio_in(dev, GLUE_set_irq, 8); qdev_init_gpio_in_named(dev, glue_auxmode_set_irq, "auxmode", 1); =20 - qdev_init_gpio_out(dev, s->irqs, 1); + qdev_init_gpio_out(dev, s->irqs, 2); =20 /* NMI release timer */ s->nmi_release =3D timer_new_ms(QEMU_CLOCK_VIRTUAL, glue_nmi_release, = s); @@ -695,6 +707,20 @@ static void q800_machine_init(MachineState *machine) =20 scsi_bus_legacy_handle_cmdline(&esp->bus); =20 + /* Apple Sound Chip */ + + dev =3D qdev_new(TYPE_ASC); + qdev_prop_set_uint8(dev, "asctype", ASC_TYPE_EASC); + sysbus =3D SYS_BUS_DEVICE(dev); + sysbus_realize_and_unref(sysbus, &error_fatal); + memory_region_add_subregion(&m->macio, ASC_BASE - IO_BASE, + sysbus_mmio_get_region(SYS_BUS_DEVICE(dev)= , 0)); + sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(m->glue, GLUE_IRQ_IN_AS= C)); + + /* Wire ASC IRQ via GLUE for use in classic mode */ + qdev_connect_gpio_out(m->glue, GLUE_IRQ_ASC, + qdev_get_gpio_in(via2_dev, VIA2_IRQ_ASC_BIT)); + /* SWIM floppy controller */ =20 dev =3D qdev_new(TYPE_SWIM); --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962866007854.9397360619029; Wed, 24 May 2023 14:14:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vmo-0003Uq-Ik; Wed, 24 May 2023 17:12:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vma-0002xv-QG for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:43 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmZ-00029j-97 for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:32 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vmK-0005XR-TW; Wed, 24 May 2023 22:12:17 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=DzV8atBkeXtd7KUj1w2o2/ZfWsO29RXJehptBwu+h7E=; b=vx3t11SJ9YJRvwTu0WU5M53qZO 3sbvOJVJe8Sj30L2amkhjqovjeUzbBnQL8/TQO6Tz9ETqeWaGuCi2OaL3/DNr4DC6v99vSlG6V5UX SBGgrasBCHXAmhMTSIHDwHxl6Zjkzv95kajCNoz2sGVwA0Y+3UAnmvA+1Ztikl8EPHnijoMysvd8Z JXbcnEWjsn5ThTYGzeKg8Yhi/NeWEE4YXehrsRuze2HkPfYRpFNQNdJnyFySjhNnW4r14YoQHelHu hoY5AQui7QHxGnBQNOKI1NmbFbFcEJKwMDaO5NoR4bzKPyIhHNxLwrT9IhzM+5MWsvvhA6Wblvudr eZqunFNJGYz+G3l3zX40rqe9mSonDMJSwyCPDCeQlaX5gpsX0HF9OX53nKDACE1gLhVPORS57ImLW lInJJzaan7+tVJMgrfPreM72vG3fZSRyea+KT4+sUsaoaupkJaxQActllGaU4GuO2jKTklmftXY1L i8v5y/AUdNchUdNeLKKNAzjBZbuEVYme1tqK2V21dTZR2TQFiGWbhmxjp46heXyeFtklMP0VYf2AN esVx9JOKzinZdqOc9uiMGxbD1LLqHBLXQn7K4Dcc2WyHrulkKbs2djLjfAcdymyN2Ck5xZeDmy+j2 0vgw9nLA0x6WuTwcaxgRf0LIZ0VE8mm4kUE6qLJN4=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:51 +0100 Message-Id: <20230524211104.686087-18-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 17/30] q800: add easc bool machine class property to switch between ASC and EASC X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962867659100003 Content-Type: text/plain; charset="utf-8" This determines whether the Apple Sound Chip (ASC) is set to enhanced mode (default) or to original mode. The real Q800 hardware used an EASC chip how= ever a lot of older software only works with the older ASC chip. Adding this as a machine parameter allows QEMU to be used as an developer a= id for testing and migrating code from ASC to EASC. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/m68k/q800.c | 30 +++++++++++++++++++++++++++++- include/hw/m68k/q800.h | 1 + 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index ed862f9e9d..1af1a06f64 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -710,7 +710,8 @@ static void q800_machine_init(MachineState *machine) /* Apple Sound Chip */ =20 dev =3D qdev_new(TYPE_ASC); - qdev_prop_set_uint8(dev, "asctype", ASC_TYPE_EASC); + qdev_prop_set_uint8(dev, "asctype", m->easc ? ASC_TYPE_EASC + : ASC_TYPE_ASC); sysbus =3D SYS_BUS_DEVICE(dev); sysbus_realize_and_unref(sysbus, &error_fatal); memory_region_add_subregion(&m->macio, ASC_BASE - IO_BASE, @@ -886,6 +887,28 @@ static void q800_machine_init(MachineState *machine) } } =20 +static bool q800_get_easc(Object *obj, Error **errp) +{ + Q800MachineState *ms =3D Q800_MACHINE(obj); + + return ms->easc; +} + +static void q800_set_easc(Object *obj, bool value, Error **errp) +{ + Q800MachineState *ms =3D Q800_MACHINE(obj); + + ms->easc =3D value; +} + +static void q800_init(Object *obj) +{ + Q800MachineState *ms =3D Q800_MACHINE(obj); + + /* Default to EASC */ + ms->easc =3D true; +} + static GlobalProperty hw_compat_q800[] =3D { { "scsi-hd", "quirk_mode_page_vendor_specific_apple", "on" }, { "scsi-hd", "vendor", " SEAGATE" }, @@ -912,11 +935,16 @@ static void q800_machine_class_init(ObjectClass *oc, = void *data) mc->block_default_type =3D IF_SCSI; mc->default_ram_id =3D "m68k_mac.ram"; compat_props_add(mc->compat_props, hw_compat_q800, hw_compat_q800_len); + + object_class_property_add_bool(oc, "easc", q800_get_easc, q800_set_eas= c); + object_class_property_set_description(oc, "easc", + "Set to off to use ASC rather than EASC"); } =20 static const TypeInfo q800_machine_typeinfo =3D { .name =3D MACHINE_TYPE_NAME("q800"), .parent =3D TYPE_MACHINE, + .instance_init =3D q800_init, .instance_size =3D sizeof(Q800MachineState), .class_init =3D q800_machine_class_init, }; diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h index 0602d07d3d..0144be5e6e 100644 --- a/include/hw/m68k/q800.h +++ b/include/hw/m68k/q800.h @@ -30,6 +30,7 @@ struct Q800MachineState { MachineState parent_obj; =20 + bool easc; M68kCPU *cpu; MemoryRegion rom; DeviceState *glue; --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962806968850.7836803012093; Wed, 24 May 2023 14:13:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vmx-00044L-Sy; Wed, 24 May 2023 17:12:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmk-00034c-Em for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:43 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmg-0002B3-91 for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:39 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vmL-0005XR-7Z; Wed, 24 May 2023 22:12:21 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=3tWH303321WAcL09/DeykWySrm0JwC/AP9A1pDKJM+Q=; b=UlDVcQzKRWoK591IrJ9+5aFea5 evJHxlChPvnnHYAICGq8qZ6/PvuhmW+mreLD86BkSy15Q5MofiJXMpW5unejCowjXn8gq1YpAFgKy 4FqpbwIOgq4j41HmaMHKBLoNYenMs/i1v1exOrZLE4W3fIWehwzlDPMAcKjEp01jw0usjSRbU5piQ c17qRw0fKjg7P5QbeEkZMaMV/rVGa9q+lga93wv1h/GHJQHqfm4m5bH/pGXjR7PlVpx7e+ijvZLe1 YzmNCd+OXo/UiD+Wglvb5J6xUTETK8aH4BQekGsCXZyo4Pqg256azzJG5EBAcns4F1A2FKnCYg159 6ESxBLYpHK4shvZTisPRF69EUdf56o1hgdsNQrm0n/zVqUYD1heCeI+EZMZkFIvAccrOJUzRDUOEG rKXSayPl620J77DMU0WjFvlN0cSfQS6ZCZEgymE5Sy+Joos5OJ3zy7INSEyKkn81w3Kdg+suVFHUq MBf4otYcj99vF4PHmukGx15puHSSKszpf0nacTd+KSM73k3LfKMAhlH1Z7WxypWzT5m/VRYucvNWF gLIDPuyCcvF+8mAV4K+DtntvyWY2Nw98ODA7y+BkXJoK/kQsyPDEgtUZjGwV/sqmczRgfVNKVJ65b WqkcwEyyuyk1WFR7dSXC4c8IelkpkXV+EKIofq4kM=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:52 +0100 Message-Id: <20230524211104.686087-19-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 18/30] swim: add trace events for IWM and ISM registers X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962807376100002 Content-Type: text/plain; charset="utf-8" Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- hw/block/swim.c | 14 ++++++++++++++ hw/block/trace-events | 7 +++++++ 2 files changed, 21 insertions(+) diff --git a/hw/block/swim.c b/hw/block/swim.c index 333da08ce0..7df36ea139 100644 --- a/hw/block/swim.c +++ b/hw/block/swim.c @@ -19,6 +19,7 @@ #include "hw/block/block.h" #include "hw/block/swim.h" #include "hw/qdev-properties.h" +#include "trace.h" =20 /* IWM registers */ =20 @@ -125,6 +126,13 @@ #define SWIM_HEDSEL 0x20 #define SWIM_MOTON 0x80 =20 +static const char *swim_reg_names[] =3D { + "WRITE_DATA", "WRITE_MARK", "WRITE_CRC", "WRITE_PARAMETER", + "WRITE_PHASE", "WRITE_SETUP", "WRITE_MODE0", "WRITE_MODE1", + "READ_DATA", "READ_MARK", "READ_ERROR", "READ_PARAMETER", + "READ_PHASE", "READ_SETUP", "READ_STATUS", "READ_HANDSHAKE" +}; + static void fd_recalibrate(FDrive *drive) { } @@ -267,6 +275,7 @@ static void iwmctrl_write(void *opaque, hwaddr reg, uin= t64_t value, reg >>=3D REG_SHIFT; =20 swimctrl->regs[reg >> 1] =3D reg & 1; + trace_swim_iwmctrl_write((reg >> 1), size, (reg & 1)); =20 if (swimctrl->regs[IWM_Q6] && swimctrl->regs[IWM_Q7]) { @@ -297,6 +306,7 @@ static void iwmctrl_write(void *opaque, hwaddr reg, uin= t64_t value, if (value =3D=3D 0x57) { swimctrl->mode =3D SWIM_MODE_SWIM; swimctrl->iwm_switch =3D 0; + trace_swim_iwm_switch(); } break; } @@ -312,6 +322,7 @@ static uint64_t iwmctrl_read(void *opaque, hwaddr reg, = unsigned size) =20 swimctrl->regs[reg >> 1] =3D reg & 1; =20 + trace_swim_iwmctrl_read((reg >> 1), size, (reg & 1)); return 0; } =20 @@ -327,6 +338,8 @@ static void swimctrl_write(void *opaque, hwaddr reg, ui= nt64_t value, =20 reg >>=3D REG_SHIFT; =20 + trace_swim_swimctrl_write(reg, swim_reg_names[reg], size, value); + switch (reg) { case SWIM_WRITE_PHASE: swimctrl->swim_phase =3D value; @@ -376,6 +389,7 @@ static uint64_t swimctrl_read(void *opaque, hwaddr reg,= unsigned size) break; } =20 + trace_swim_swimctrl_read(reg, swim_reg_names[reg], size, value); return value; } =20 diff --git a/hw/block/trace-events b/hw/block/trace-events index 34be8b9135..c041ec45e3 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -90,3 +90,10 @@ m25p80_read_data(void *s, uint32_t pos, uint8_t v) "[%p]= Read data 0x%"PRIx32"=3D0 m25p80_read_sfdp(void *s, uint32_t addr, uint8_t v) "[%p] Read SFDP 0x%"PR= Ix32"=3D0x%"PRIx8 m25p80_binding(void *s) "[%p] Binding to IF_MTD drive" m25p80_binding_no_bdrv(void *s) "[%p] No BDRV - binding to RAM" + +# swim.c +swim_swimctrl_read(int reg, const char *name, unsigned size, uint64_t valu= e) "reg=3D%d [%s] size=3D%u value=3D0x%"PRIx64 +swim_swimctrl_write(int reg, const char *name, unsigned size, uint64_t val= ue) "reg=3D%d [%s] size=3D%u value=3D0x%"PRIx64 +swim_iwmctrl_read(int reg, unsigned size, uint64_t value) "reg=3D%d size= =3D%u value=3D0x%"PRIx64 +swim_iwmctrl_write(int reg, unsigned size, uint64_t value) "reg=3D%d size= =3D%u value=3D0x%"PRIx64 +swim_iwm_switch(void) "switch from IWM to SWIM mode" --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962924541422.6334172928824; Wed, 24 May 2023 14:15:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vmq-0003ge-J6; Wed, 24 May 2023 17:12:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmk-00034h-E1 for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:43 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmg-0002Bi-UF for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:40 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vmP-0005XR-Dw; Wed, 24 May 2023 22:12:25 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=zOhZLwEDp32Ne1rl6hj6hFHC8KllbzzMFDD8NAHcqpE=; b=Tu/jGB+ELKb08DC3AMRo9wa43C VY/kfHKugggvlylvQohtIWRldmzMubkPytprusoHEhp0Xctcuc7DMaxH/kBEYWg/4Np5tGJBOM4IB tkrKD7LMq56fN72j965cXLEodo8saf6Z9jQfDJVUCIGkSlgL8VUoWUNikD8rDWTZuNgpFuLMDdGup UL7NMG3+mPBHosRkOeFEOg8+LmeMZLIIgK7MI3auGF6Ctov9qHoJWyiA8vzANUNUR6NAGtrTuU0cn uG3lopSmpAljfZWoHix8G0tKxrqfzQvUiqI/6ih5w95yDCTt3lJvLF7g4AfxXeU8n2gQGaGEmeyUd jkrRDAm5aL4WQ+JmtrhrPM5sNZNaCKBWQZFUOvLB4VfZA3vz3IcwCL/QF/VBsct2w+Vt/tT4JEMTL ujnKRNRd90uGP+gngMWqkz16Rv/n6cu501LGqbmBobCi4mCtz15NpHCFRzAKw4AS6xu9By3QKPv/h qxDUIIpq6Ng1Lu6B6wOucbFZaCGYJOgdb4nnHV+UVIn8Urx9MvGXt/XFEYoKK9tCjQ0tkI1ipT0yv LlBmfnWZxOVoaCbuNmOCXo1cIL04kEhEmvw+nVEoM3maYvoGI7vqq/5aNS88zifHV8GqvuLjkeGHd A/zhl+jm323rqgau6Ov/b3l6l9ljp8rx4/6NW4oZs=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:53 +0100 Message-Id: <20230524211104.686087-20-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 19/30] swim: split into separate IWM and ISM register blocks X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962925894100002 Content-Type: text/plain; charset="utf-8" The swim chip provides an implementation of both Apple's IWM and ISM floppy= disk controllers. Split the existing implementation into separate register banks= for each controller, whilst also switching the IWM registers from 16-bit to 8-b= it as implemented in real hardware. Signed-off-by: Mark Cave-Ayland --- hw/block/swim.c | 85 ++++++++++++++++++++++++----------------- hw/block/trace-events | 4 +- include/hw/block/swim.h | 15 +++----- 3 files changed, 58 insertions(+), 46 deletions(-) diff --git a/hw/block/swim.c b/hw/block/swim.c index 7df36ea139..735b335883 100644 --- a/hw/block/swim.c +++ b/hw/block/swim.c @@ -126,7 +126,14 @@ #define SWIM_HEDSEL 0x20 #define SWIM_MOTON 0x80 =20 -static const char *swim_reg_names[] =3D { +static const char *iwm_reg_names[] =3D { + "PH0L", "PH0H", "PH1L", "PH1H", + "PH2L", "PH2H", "PH3L", "PH3H", + "MTROFF", "MTRON", "INTDRIVE", "EXTDRIVE", + "Q6L", "Q6H", "Q7L", "Q7H" +}; + +static const char *ism_reg_names[] =3D { "WRITE_DATA", "WRITE_MARK", "WRITE_CRC", "WRITE_PARAMETER", "WRITE_PHASE", "WRITE_SETUP", "WRITE_MODE0", "WRITE_MODE1", "READ_DATA", "READ_MARK", "READ_ERROR", "READ_PARAMETER", @@ -274,12 +281,11 @@ static void iwmctrl_write(void *opaque, hwaddr reg, u= int64_t value, =20 reg >>=3D REG_SHIFT; =20 - swimctrl->regs[reg >> 1] =3D reg & 1; - trace_swim_iwmctrl_write((reg >> 1), size, (reg & 1)); + swimctrl->iwmregs[reg] =3D value; + trace_swim_iwmctrl_write(reg, iwm_reg_names[reg], size, value); =20 - if (swimctrl->regs[IWM_Q6] && - swimctrl->regs[IWM_Q7]) { - if (swimctrl->regs[IWM_MTR]) { + if (swimctrl->iwmregs[IWM_Q7H]) { + if (swimctrl->iwmregs[IWM_MTRON]) { /* data register */ swimctrl->iwm_data =3D value; } else { @@ -307,6 +313,12 @@ static void iwmctrl_write(void *opaque, hwaddr reg, ui= nt64_t value, swimctrl->mode =3D SWIM_MODE_SWIM; swimctrl->iwm_switch =3D 0; trace_swim_iwm_switch(); + + /* Switch to ISM registers */ + memory_region_del_subregion(&swimctrl->swim, + &swimctrl->iwm); + memory_region_add_subregion(&swimctrl->swim, 0x0, + &swimctrl->ism); } break; } @@ -317,28 +329,30 @@ static void iwmctrl_write(void *opaque, hwaddr reg, u= int64_t value, static uint64_t iwmctrl_read(void *opaque, hwaddr reg, unsigned size) { SWIMCtrl *swimctrl =3D opaque; + uint16_t value; =20 reg >>=3D REG_SHIFT; =20 - swimctrl->regs[reg >> 1] =3D reg & 1; + value =3D swimctrl->iwmregs[reg]; + trace_swim_iwmctrl_read(reg, iwm_reg_names[reg], size, value); =20 - trace_swim_iwmctrl_read((reg >> 1), size, (reg & 1)); - return 0; + return value; } =20 -static void swimctrl_write(void *opaque, hwaddr reg, uint64_t value, - unsigned size) +static const MemoryRegionOps swimctrl_iwm_ops =3D { + .write =3D iwmctrl_write, + .read =3D iwmctrl_read, + .endianness =3D DEVICE_BIG_ENDIAN, +}; + +static void ismctrl_write(void *opaque, hwaddr reg, uint64_t value, + unsigned size) { SWIMCtrl *swimctrl =3D opaque; =20 - if (swimctrl->mode =3D=3D SWIM_MODE_IWM) { - iwmctrl_write(opaque, reg, value, size); - return; - } - reg >>=3D REG_SHIFT; =20 - trace_swim_swimctrl_write(reg, swim_reg_names[reg], size, value); + trace_swim_swimctrl_write(reg, ism_reg_names[reg], size, value); =20 switch (reg) { case SWIM_WRITE_PHASE: @@ -359,15 +373,11 @@ static void swimctrl_write(void *opaque, hwaddr reg, = uint64_t value, } } =20 -static uint64_t swimctrl_read(void *opaque, hwaddr reg, unsigned size) +static uint64_t ismctrl_read(void *opaque, hwaddr reg, unsigned size) { SWIMCtrl *swimctrl =3D opaque; uint32_t value =3D 0; =20 - if (swimctrl->mode =3D=3D SWIM_MODE_IWM) { - return iwmctrl_read(opaque, reg, size); - } - reg >>=3D REG_SHIFT; =20 switch (reg) { @@ -389,14 +399,14 @@ static uint64_t swimctrl_read(void *opaque, hwaddr re= g, unsigned size) break; } =20 - trace_swim_swimctrl_read(reg, swim_reg_names[reg], size, value); + trace_swim_swimctrl_read(reg, ism_reg_names[reg], size, value); return value; } =20 -static const MemoryRegionOps swimctrl_mem_ops =3D { - .write =3D swimctrl_write, - .read =3D swimctrl_read, - .endianness =3D DEVICE_NATIVE_ENDIAN, +static const MemoryRegionOps swimctrl_ism_ops =3D { + .write =3D ismctrl_write, + .read =3D ismctrl_read, + .endianness =3D DEVICE_BIG_ENDIAN, }; =20 static void sysbus_swim_reset(DeviceState *d) @@ -407,13 +417,13 @@ static void sysbus_swim_reset(DeviceState *d) =20 ctrl->mode =3D 0; ctrl->iwm_switch =3D 0; - for (i =3D 0; i < 8; i++) { - ctrl->regs[i] =3D 0; - } ctrl->iwm_data =3D 0; ctrl->iwm_mode =3D 0; + memset(ctrl->iwmregs, 0, 16); + ctrl->swim_phase =3D 0; ctrl->swim_mode =3D 0; + memset(ctrl->ismregs, 0, 16); for (i =3D 0; i < SWIM_MAX_FD; i++) { fd_recalibrate(&ctrl->drives[i]); } @@ -425,9 +435,12 @@ static void sysbus_swim_init(Object *obj) Swim *sbs =3D SWIM(obj); SWIMCtrl *swimctrl =3D &sbs->ctrl; =20 - memory_region_init_io(&swimctrl->iomem, obj, &swimctrl_mem_ops, swimct= rl, - "swim", 0x2000); - sysbus_init_mmio(sbd, &swimctrl->iomem); + memory_region_init(&swimctrl->swim, obj, "swim", 0x2000); + memory_region_init_io(&swimctrl->iwm, obj, &swimctrl_iwm_ops, swimctrl, + "iwm", 0x2000); + memory_region_init_io(&swimctrl->ism, obj, &swimctrl_ism_ops, swimctrl, + "ism", 0x2000); + sysbus_init_mmio(sbd, &swimctrl->swim); } =20 static void sysbus_swim_realize(DeviceState *dev, Error **errp) @@ -437,6 +450,9 @@ static void sysbus_swim_realize(DeviceState *dev, Error= **errp) =20 qbus_init(&swimctrl->bus, sizeof(SWIMBus), TYPE_SWIM_BUS, dev, NULL); swimctrl->bus.ctrl =3D swimctrl; + + /* Default register set is IWM */ + memory_region_add_subregion(&swimctrl->swim, 0x0, &swimctrl->iwm); } =20 static const VMStateDescription vmstate_fdrive =3D { @@ -456,10 +472,11 @@ static const VMStateDescription vmstate_swim =3D { VMSTATE_INT32(mode, SWIMCtrl), /* IWM mode */ VMSTATE_INT32(iwm_switch, SWIMCtrl), - VMSTATE_UINT16_ARRAY(regs, SWIMCtrl, 8), + VMSTATE_UINT8_ARRAY(iwmregs, SWIMCtrl, 16), VMSTATE_UINT8(iwm_data, SWIMCtrl), VMSTATE_UINT8(iwm_mode, SWIMCtrl), /* SWIM mode */ + VMSTATE_UINT8_ARRAY(ismregs, SWIMCtrl, 16), VMSTATE_UINT8(swim_phase, SWIMCtrl), VMSTATE_UINT8(swim_mode, SWIMCtrl), /* Drives */ diff --git a/hw/block/trace-events b/hw/block/trace-events index c041ec45e3..ea84ad6c77 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -94,6 +94,6 @@ m25p80_binding_no_bdrv(void *s) "[%p] No BDRV - binding t= o RAM" # swim.c swim_swimctrl_read(int reg, const char *name, unsigned size, uint64_t valu= e) "reg=3D%d [%s] size=3D%u value=3D0x%"PRIx64 swim_swimctrl_write(int reg, const char *name, unsigned size, uint64_t val= ue) "reg=3D%d [%s] size=3D%u value=3D0x%"PRIx64 -swim_iwmctrl_read(int reg, unsigned size, uint64_t value) "reg=3D%d size= =3D%u value=3D0x%"PRIx64 -swim_iwmctrl_write(int reg, unsigned size, uint64_t value) "reg=3D%d size= =3D%u value=3D0x%"PRIx64 +swim_iwmctrl_read(int reg, const char *name, unsigned size, uint64_t value= ) "reg=3D%d [%s] size=3D%u value=3D0x%"PRIx64 +swim_iwmctrl_write(int reg, const char *name, unsigned size, uint64_t valu= e) "reg=3D%d [%s] size=3D%u value=3D0x%"PRIx64 swim_iwm_switch(void) "switch from IWM to SWIM mode" diff --git a/include/hw/block/swim.h b/include/hw/block/swim.h index 9b3dcb029d..1bc7635d02 100644 --- a/include/hw/block/swim.h +++ b/include/hw/block/swim.h @@ -43,23 +43,18 @@ typedef struct FDrive { } FDrive; =20 struct SWIMCtrl { - MemoryRegion iomem; + MemoryRegion swim; + MemoryRegion iwm; + MemoryRegion ism; FDrive drives[SWIM_MAX_FD]; int mode; /* IWM mode */ int iwm_switch; - uint16_t regs[8]; -#define IWM_PH0 0 -#define IWM_PH1 1 -#define IWM_PH2 2 -#define IWM_PH3 3 -#define IWM_MTR 4 -#define IWM_DRIVE 5 -#define IWM_Q6 6 -#define IWM_Q7 7 + uint8_t iwmregs[16]; uint8_t iwm_data; uint8_t iwm_mode; /* SWIM mode */ + uint8_t ismregs[16]; uint8_t swim_phase; uint8_t swim_mode; SWIMBus bus; --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16849628196784.819819301516418; Wed, 24 May 2023 14:13:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vn0-0004TJ-8x; Wed, 24 May 2023 17:12:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmu-0003sm-8i for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:54 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmr-0002CS-CL for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:52 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vmT-0005XR-KU; Wed, 24 May 2023 22:12:29 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=LxPU5Duv7NJYWzvnoLQ2MvbWwxzTGsFNAOCjbXc14eI=; b=GeGOR9eBVi7Gs6TaboVIItGSYh ZnwxDZRZji9XAgrR1pQkoWoF9rrttrFNpCtONOlWGYU6uVoI+vycsgVcfz9urLaAN6XKKzeeALpPt 6mmqhaimRdYlk39i1Zy2xuMW8/4gAPeESaFjzrly+eQqDSIvrugsmkXiaWYQOosJ8+CvDJkzp6aXe m79xKWOLz8eY1WPcRSD4wUiJ91mUp2Je2baWzWIAXoP7DjUrAxwv2xpKj9I3amabkT1Vt8zclnNHM 4Am5yWJB+AlstSvK4ri6droIcJnCg5SHXnPbVdL1WCcVeF4AJ1sPzKvSU8LrBMa4236Ak13bKo0zz w+YDUi25EgWeYEJOWX0LzGrbrNeDzpzHG8VQFBee8PQB1P901OGlABWg8JyntfwGm4xZNQpAtdJYw zpjDBAWPMpgynWGZHP8UJwDn+127w9QeFKLOkPpdEYJCNkyIMkjyDMfkoGSU8lK0LPcvfX28mV6Ys eWI/GjiMJjDgmlklsjecZ/ax6GjhdbLn5c7dus94e9Hh8x4y3iAun7L0BBXb7uJD2moURqjrHlOvw aUefA7cZaCya1roaNhq5q42+VdRaykZK1LFhKb10G50dVfzeOFGg6oLjJejAlmXWcq6EEs6T7KWBN 9D42e3D6JWFwQdWXQN2GnJ7YMiDRO9dKRqb0kVH9E=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:54 +0100 Message-Id: <20230524211104.686087-21-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 20/30] swim: update IWM/ISM register block decoding X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962821478100012 Content-Type: text/plain; charset="utf-8" Update the IWM/ISM register block decoding to match the description given i= n the "SWIM Chip Users Reference". This allows us to validate the device response= to the guest OS which currently only does just enough to indicate that the flo= ppy drive is unavailable. Signed-off-by: Mark Cave-Ayland --- hw/block/swim.c | 212 +++++++++++++++++++++++++--------------- hw/block/trace-events | 7 +- include/hw/block/swim.h | 8 +- 3 files changed, 143 insertions(+), 84 deletions(-) diff --git a/hw/block/swim.c b/hw/block/swim.c index 735b335883..fd65c59f8a 100644 --- a/hw/block/swim.c +++ b/hw/block/swim.c @@ -21,24 +21,28 @@ #include "hw/qdev-properties.h" #include "trace.h" =20 + +/* IWM latch bits */ + +#define IWMLB_PHASE0 0 +#define IWMLB_PHASE1 1 +#define IWMLB_PHASE2 2 +#define IWMLB_PHASE3 3 +#define IWMLB_MOTORON 4 +#define IWMLB_DRIVESEL 5 +#define IWMLB_L6 6 +#define IWMLB_L7 7 + /* IWM registers */ =20 -#define IWM_PH0L 0 -#define IWM_PH0H 1 -#define IWM_PH1L 2 -#define IWM_PH1H 3 -#define IWM_PH2L 4 -#define IWM_PH2H 5 -#define IWM_PH3L 6 -#define IWM_PH3H 7 -#define IWM_MTROFF 8 -#define IWM_MTRON 9 -#define IWM_INTDRIVE 10 -#define IWM_EXTDRIVE 11 -#define IWM_Q6L 12 -#define IWM_Q6H 13 -#define IWM_Q7L 14 -#define IWM_Q7H 15 +#define IWM_READALLONES 0 +#define IWM_READDATA 1 +#define IWM_READSTATUS0 2 +#define IWM_READSTATUS1 3 +#define IWM_READWHANDSHAKE0 4 +#define IWM_READWHANDSHAKE1 5 +#define IWM_WRITESETMODE 6 +#define IWM_WRITEDATA 7 =20 /* SWIM registers */ =20 @@ -62,8 +66,9 @@ =20 #define REG_SHIFT 9 =20 -#define SWIM_MODE_IWM 0 -#define SWIM_MODE_SWIM 1 +#define SWIM_MODE_STATUS_BIT 6 +#define SWIM_MODE_IWM 0 +#define SWIM_MODE_ISM 1 =20 /* bits in phase register */ =20 @@ -127,10 +132,8 @@ #define SWIM_MOTON 0x80 =20 static const char *iwm_reg_names[] =3D { - "PH0L", "PH0H", "PH1L", "PH1H", - "PH2L", "PH2H", "PH3L", "PH3H", - "MTROFF", "MTRON", "INTDRIVE", "EXTDRIVE", - "Q6L", "Q6H", "Q7L", "Q7H" + "READALLONES", "READDATA", "READSTATUS0", "READSTATUS1", + "READWHANDSHAKE0", "READWHANDSHAKE1", "WRITESETMODE", "WRITEDATA" }; =20 static const char *ism_reg_names[] =3D { @@ -274,68 +277,99 @@ static const TypeInfo swim_bus_info =3D { .instance_size =3D sizeof(SWIMBus), }; =20 -static void iwmctrl_write(void *opaque, hwaddr reg, uint64_t value, +static void iwmctrl_write(void *opaque, hwaddr addr, uint64_t value, unsigned size) { SWIMCtrl *swimctrl =3D opaque; + uint8_t latch, reg, ism_bit; =20 - reg >>=3D REG_SHIFT; + addr >>=3D REG_SHIFT; + + /* A3-A1 select a latch, A0 specifies the value */ + latch =3D (addr >> 1) & 7; + if (addr & 1) { + swimctrl->iwm_latches |=3D (1 << latch); + } else { + swimctrl->iwm_latches &=3D ~(1 << latch); + } + + reg =3D (swimctrl->iwm_latches & 0xc0) >> 5 | + (swimctrl->iwm_latches & 0x10) >> 4; =20 swimctrl->iwmregs[reg] =3D value; trace_swim_iwmctrl_write(reg, iwm_reg_names[reg], size, value); =20 - if (swimctrl->iwmregs[IWM_Q7H]) { - if (swimctrl->iwmregs[IWM_MTRON]) { - /* data register */ - swimctrl->iwm_data =3D value; - } else { - /* mode register */ - swimctrl->iwm_mode =3D value; - /* detect sequence to switch from IWM mode to SWIM mode */ - switch (swimctrl->iwm_switch) { - case 0: - if (value =3D=3D 0x57) { - swimctrl->iwm_switch++; - } - break; - case 1: - if (value =3D=3D 0x17) { - swimctrl->iwm_switch++; - } - break; - case 2: - if (value =3D=3D 0x57) { - swimctrl->iwm_switch++; - } - break; - case 3: - if (value =3D=3D 0x57) { - swimctrl->mode =3D SWIM_MODE_SWIM; - swimctrl->iwm_switch =3D 0; - trace_swim_iwm_switch(); - - /* Switch to ISM registers */ - memory_region_del_subregion(&swimctrl->swim, - &swimctrl->iwm); - memory_region_add_subregion(&swimctrl->swim, 0x0, - &swimctrl->ism); - } - break; + switch (reg) { + case IWM_WRITESETMODE: + /* detect sequence to switch from IWM mode to SWIM mode */ + ism_bit =3D (value & (1 << SWIM_MODE_STATUS_BIT)); + + switch (swimctrl->iwm_switch) { + case 0: + if (ism_bit) { /* 1 */ + swimctrl->iwm_switch++; + } + break; + case 1: + if (!ism_bit) { /* 0 */ + swimctrl->iwm_switch++; + } + break; + case 2: + if (ism_bit) { /* 1 */ + swimctrl->iwm_switch++; } + break; + case 3: + if (ism_bit) { /* 1 */ + swimctrl->iwm_switch++; + + swimctrl->mode =3D SWIM_MODE_ISM; + swimctrl->swim_mode |=3D (1 << SWIM_MODE_STATUS_BIT); + swimctrl->iwm_switch =3D 0; + trace_swim_switch_to_ism(); + + /* Switch to ISM registers */ + memory_region_del_subregion(&swimctrl->swim, &swimctrl->iw= m); + memory_region_add_subregion(&swimctrl->swim, 0x0, + &swimctrl->ism); + } + break; } + break; + default: + break; } } =20 -static uint64_t iwmctrl_read(void *opaque, hwaddr reg, unsigned size) +static uint64_t iwmctrl_read(void *opaque, hwaddr addr, unsigned size) { SWIMCtrl *swimctrl =3D opaque; - uint16_t value; + uint8_t latch, reg, value; =20 - reg >>=3D REG_SHIFT; + addr >>=3D REG_SHIFT; =20 - value =3D swimctrl->iwmregs[reg]; - trace_swim_iwmctrl_read(reg, iwm_reg_names[reg], size, value); + /* A3-A1 select a latch, A0 specifies the value */ + latch =3D (addr >> 1) & 7; + if (addr & 1) { + swimctrl->iwm_latches |=3D (1 << latch); + } else { + swimctrl->iwm_latches &=3D ~(1 << latch); + } + + reg =3D (swimctrl->iwm_latches & 0xc0) >> 5 | + (swimctrl->iwm_latches & 0x10) >> 4; + + switch (reg) { + case IWM_READALLONES: + value =3D 0xff; + break; + default: + value =3D 0; + break; + } =20 + trace_swim_iwmctrl_read(reg, iwm_reg_names[reg], size, value); return value; } =20 @@ -352,7 +386,7 @@ static void ismctrl_write(void *opaque, hwaddr reg, uin= t64_t value, =20 reg >>=3D REG_SHIFT; =20 - trace_swim_swimctrl_write(reg, ism_reg_names[reg], size, value); + trace_swim_ismctrl_write(reg, ism_reg_names[reg], size, value); =20 switch (reg) { case SWIM_WRITE_PHASE: @@ -360,14 +394,31 @@ static void ismctrl_write(void *opaque, hwaddr reg, u= int64_t value, break; case SWIM_WRITE_MODE0: swimctrl->swim_mode &=3D ~value; + /* Any access to MODE0 register resets PRAM index */ + swimctrl->pram_idx =3D 0; + + if (!(swimctrl->swim_mode & (1 << SWIM_MODE_STATUS_BIT))) { + /* Clearing the mode bit switches to IWM mode */ + swimctrl->mode =3D SWIM_MODE_IWM; + swimctrl->iwm_latches =3D 0; + trace_swim_switch_to_iwm(); + + /* Switch to IWM registers */ + memory_region_del_subregion(&swimctrl->swim, &swimctrl->ism); + memory_region_add_subregion(&swimctrl->swim, 0x0, + &swimctrl->iwm); + } break; case SWIM_WRITE_MODE1: swimctrl->swim_mode |=3D value; break; + case SWIM_WRITE_PARAMETER: + swimctrl->pram[swimctrl->pram_idx++] =3D value; + swimctrl->pram_idx &=3D 0xf; + break; case SWIM_WRITE_DATA: case SWIM_WRITE_MARK: case SWIM_WRITE_CRC: - case SWIM_WRITE_PARAMETER: case SWIM_WRITE_SETUP: break; } @@ -390,16 +441,24 @@ static uint64_t ismctrl_read(void *opaque, hwaddr reg= , unsigned size) value =3D SWIM_SENSE; } break; + case SWIM_READ_PARAMETER: + value =3D swimctrl->pram[swimctrl->pram_idx++]; + swimctrl->pram_idx &=3D 0xf; + break; + case SWIM_READ_STATUS: + value =3D swimctrl->swim_status & ~(1 << SWIM_MODE_STATUS_BIT); + if (swimctrl->swim_mode =3D=3D SWIM_MODE_ISM) { + value |=3D (1 << SWIM_MODE_STATUS_BIT); + } + break; case SWIM_READ_DATA: case SWIM_READ_MARK: case SWIM_READ_ERROR: - case SWIM_READ_PARAMETER: case SWIM_READ_SETUP: - case SWIM_READ_STATUS: break; } =20 - trace_swim_swimctrl_read(reg, ism_reg_names[reg], size, value); + trace_swim_ismctrl_read(reg, ism_reg_names[reg], size, value); return value; } =20 @@ -417,13 +476,11 @@ static void sysbus_swim_reset(DeviceState *d) =20 ctrl->mode =3D 0; ctrl->iwm_switch =3D 0; - ctrl->iwm_data =3D 0; - ctrl->iwm_mode =3D 0; - memset(ctrl->iwmregs, 0, 16); + memset(ctrl->iwmregs, 0, sizeof(ctrl->iwmregs)); =20 ctrl->swim_phase =3D 0; ctrl->swim_mode =3D 0; - memset(ctrl->ismregs, 0, 16); + memset(ctrl->ismregs, 0, sizeof(ctrl->ismregs)); for (i =3D 0; i < SWIM_MAX_FD; i++) { fd_recalibrate(&ctrl->drives[i]); } @@ -472,9 +529,8 @@ static const VMStateDescription vmstate_swim =3D { VMSTATE_INT32(mode, SWIMCtrl), /* IWM mode */ VMSTATE_INT32(iwm_switch, SWIMCtrl), - VMSTATE_UINT8_ARRAY(iwmregs, SWIMCtrl, 16), - VMSTATE_UINT8(iwm_data, SWIMCtrl), - VMSTATE_UINT8(iwm_mode, SWIMCtrl), + VMSTATE_UINT8(iwm_latches, SWIMCtrl), + VMSTATE_UINT8_ARRAY(iwmregs, SWIMCtrl, 8), /* SWIM mode */ VMSTATE_UINT8_ARRAY(ismregs, SWIMCtrl, 16), VMSTATE_UINT8(swim_phase, SWIMCtrl), diff --git a/hw/block/trace-events b/hw/block/trace-events index ea84ad6c77..bab21d3a1c 100644 --- a/hw/block/trace-events +++ b/hw/block/trace-events @@ -92,8 +92,9 @@ m25p80_binding(void *s) "[%p] Binding to IF_MTD drive" m25p80_binding_no_bdrv(void *s) "[%p] No BDRV - binding to RAM" =20 # swim.c -swim_swimctrl_read(int reg, const char *name, unsigned size, uint64_t valu= e) "reg=3D%d [%s] size=3D%u value=3D0x%"PRIx64 -swim_swimctrl_write(int reg, const char *name, unsigned size, uint64_t val= ue) "reg=3D%d [%s] size=3D%u value=3D0x%"PRIx64 +swim_ismctrl_read(int reg, const char *name, unsigned size, uint64_t value= ) "reg=3D%d [%s] size=3D%u value=3D0x%"PRIx64 +swim_ismctrl_write(int reg, const char *name, unsigned size, uint64_t valu= e) "reg=3D%d [%s] size=3D%u value=3D0x%"PRIx64 swim_iwmctrl_read(int reg, const char *name, unsigned size, uint64_t value= ) "reg=3D%d [%s] size=3D%u value=3D0x%"PRIx64 swim_iwmctrl_write(int reg, const char *name, unsigned size, uint64_t valu= e) "reg=3D%d [%s] size=3D%u value=3D0x%"PRIx64 -swim_iwm_switch(void) "switch from IWM to SWIM mode" +swim_switch_to_ism(void) "switch from IWM to ISM mode" +swim_switch_to_iwm(void) "switch from ISM to IWM mode" diff --git a/include/hw/block/swim.h b/include/hw/block/swim.h index 1bc7635d02..5f567e8d59 100644 --- a/include/hw/block/swim.h +++ b/include/hw/block/swim.h @@ -50,13 +50,15 @@ struct SWIMCtrl { int mode; /* IWM mode */ int iwm_switch; - uint8_t iwmregs[16]; - uint8_t iwm_data; - uint8_t iwm_mode; + uint8_t iwm_latches; + uint8_t iwmregs[8]; /* SWIM mode */ uint8_t ismregs[16]; uint8_t swim_phase; uint8_t swim_mode; + uint8_t swim_status; + uint8_t pram[16]; + uint8_t pram_idx; SWIMBus bus; }; =20 --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962893131512.7977545735705; Wed, 24 May 2023 14:14:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vmy-0004EU-QW; Wed, 24 May 2023 17:12:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmu-0003sl-4P for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:54 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmr-0002Ch-Er for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:51 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vmX-0005XR-Qn; Wed, 24 May 2023 22:12:30 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=GfY0p9OelWPUq+bTwKJjO83VLXJQ5wtlD5pD9cTkdYQ=; b=ajCyGfUKap1Y9bGwutZJBf5gZb BKt/yCchO8pId+GY1lUwgR6+jJh3OvQD0JELlICQ+EQTlwLTrcNrokBPab96B0ec0IPk/4kvetG+3 GXi27Z+3gBRK8lBRG6E2A6KrmPBYc7yZ6pf2+0p/23GNALCTBTOUDL6Ne8ipZX7BrLr7aZOJWDDtV yBbMA5u0r8aJ6NWWSw762702BChwkZ0h/R9XbbQUfhb05IFMfeiKpHykteAxk88zNOkvXBhnNZYdw NuF7BrwdWsRbtbbyuYoqCPv09JvMun9F1WrcZTO+9GJUZnknEv2uiVZfC5/zFr/fEpxJ+9ZBceXFs WK0tFOg9kGbZf9yabkkJvk3s00xKaBGbUMAu85oPVcpQBqC/UIZJ755jSkboflegWQn3VON3yNiRU rPvgcGmIkrTfwOuv4xOda8FPW26vJakSC0aeXubrsFkLTr2ohpxWs0amHnwH/PaxvhbEIIeZVtSAY P9439zvDkbk3aFwHIlwTcY69f1I3XbJfK/ZzVqKk1ozLp8ViOVon/w3iytcUO8pygIpwH7/BAsLK2 dsjLwX707iZ91tBiUPVA6NvPMzWDK7tlGvuv0qk2hcFq5QF6hs70PzbMkzBxIMXmjSMgeHKU1/LZc yraOZxSZFfUAx9Wnwy/9HDxXrAXiss2T2ZaoIM38s=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:55 +0100 Message-Id: <20230524211104.686087-22-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 21/30] mac_via: work around underflow in TimeDBRA timing loop in SETUPTIMEK X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962893681100009 Content-Type: text/plain; charset="utf-8" The MacOS toolbox ROM calculates the number of branches that can be executed per millisecond as part of its timer calibration. Since modern hosts are considerably quicker than original hardware, the negative counter reaches z= ero before the calibration completes leading to division by zero later in CALCULATESLOD. Instead of trying to fudge the timing loop (which won't work for TimeDBRA/T= imeSCCDB anyhow), use the pattern of access to the VIA1 registers to detect when SET= UPTIMEK has finished executing and write some well-known good timer values to TimeD= BRA and TimeSCCDB taken from real hardware with a suitable scaling factor. Signed-off-by: Mark Cave-Ayland --- hw/misc/mac_via.c | 115 ++++++++++++++++++++++++++++++++++++++ hw/misc/trace-events | 1 + include/hw/misc/mac_via.h | 3 + 3 files changed, 119 insertions(+) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index f90a22a067..62f0988537 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -16,6 +16,7 @@ */ =20 #include "qemu/osdep.h" +#include "exec/address-spaces.h" #include "migration/vmstate.h" #include "hw/sysbus.h" #include "hw/irq.h" @@ -870,6 +871,112 @@ static void via1_auxmode_update(MOS6522Q800VIA1State = *v1s) } } =20 +/* + * Addresses and real values for TimeDBRA/TimeSCCB to allow timer calibrat= ion + * to succeed (NOTE: both values have been multiplied by 3 to cope with the + * speed of QEMU execution on a modern host + */ +#define MACOS_TIMEDBRA 0xd00 +#define MACOS_TIMESCCB 0xd02 + +#define MACOS_TIMEDBRA_VALUE (0x2a00 * 3) +#define MACOS_TIMESCCB_VALUE (0x079d * 3) + +static bool via1_is_toolbox_timer_calibrated(void) +{ + /* + * Indicate whether the MacOS toolbox has been calibrated by checking + * for the value of our magic constants + */ + uint16_t timedbra =3D lduw_be_phys(&address_space_memory, MACOS_TIMEDB= RA); + uint16_t timesccdb =3D lduw_be_phys(&address_space_memory, MACOS_TIMES= CCB); + + return (timedbra =3D=3D MACOS_TIMEDBRA_VALUE && + timesccdb =3D=3D MACOS_TIMESCCB_VALUE); +} + +static void via1_timer_calibration_hack(MOS6522Q800VIA1State *v1s, int add= r, + uint8_t val) +{ + /* + * Work around timer calibration to ensure we that we have non-zero and + * known good values for TIMEDRBA and TIMESCCDB. + * + * This works by attempting to detect the reset and calibration sequen= ce + * of writes to VIA1 + */ + int old_timer_hack_state =3D v1s->timer_hack_state; + + switch (v1s->timer_hack_state) { + case 0: + if (addr =3D=3D VIA_REG_PCR && val =3D=3D 0x22) { + /* VIA_REG_PCR: configure VIA1 edge triggering */ + v1s->timer_hack_state =3D 1; + } + break; + case 1: + if (addr =3D=3D VIA_REG_T2CL && val =3D=3D 0xc) { + /* VIA_REG_T2CL: low byte of 1ms counter */ + if (!via1_is_toolbox_timer_calibrated()) { + v1s->timer_hack_state =3D 2; + } else { + v1s->timer_hack_state =3D 0; + } + } + break; + case 2: + if (addr =3D=3D VIA_REG_T2CH && val =3D=3D 0x3) { + /* + * VIA_REG_T2CH: high byte of 1ms counter (very likely at the + * start of SETUPTIMEK) + */ + if (!via1_is_toolbox_timer_calibrated()) { + v1s->timer_hack_state =3D 3; + } else { + v1s->timer_hack_state =3D 0; + } + } + break; + case 3: + if (addr =3D=3D VIA_REG_IER && val =3D=3D 0x20) { + /* + * VIA_REG_IER: update at end of SETUPTIMEK + * + * Timer calibration has finished: unfortunately the values in + * TIMEDBRA (0xd00) and TIMESCCDB (0xd02) are so far out they + * cause divide by zero errors. + * + * Update them with values obtained from a real Q800 but with + * a x3 scaling factor which seems to work well + */ + stw_be_phys(&address_space_memory, MACOS_TIMEDBRA, + MACOS_TIMEDBRA_VALUE); + stw_be_phys(&address_space_memory, MACOS_TIMESCCB, + MACOS_TIMESCCB_VALUE); + + v1s->timer_hack_state =3D 4; + } + break; + case 4: + /* + * This is the normal post-calibration timer state: we should + * generally remain here unless we detect the A/UX calibration + * loop, or a write to VIA_REG_PCR suggesting a reset + */ + if (addr =3D=3D VIA_REG_PCR && val =3D=3D 0x22) { + /* Looks like there has been a reset? */ + v1s->timer_hack_state =3D 1; + } + break; + default: + g_assert_not_reached(); + } + + if (old_timer_hack_state !=3D v1s->timer_hack_state) { + trace_via1_timer_hack_state(v1s->timer_hack_state); + } +} + static uint64_t mos6522_q800_via1_read(void *opaque, hwaddr addr, unsigned= size) { MOS6522Q800VIA1State *s =3D MOS6522_Q800_VIA1(opaque); @@ -895,6 +1002,9 @@ static void mos6522_q800_via1_write(void *opaque, hwad= dr addr, uint64_t val, MOS6522State *ms =3D MOS6522(v1s); =20 addr =3D (addr >> 9) & 0xf; + + via1_timer_calibration_hack(v1s, addr, val); + mos6522_write(ms, addr, val, size); =20 switch (addr) { @@ -1007,6 +1117,9 @@ static void mos6522_q800_via1_reset_hold(Object *obj) adb_set_autopoll_enabled(adb_bus, true); v1s->cmd =3D REG_EMPTY; v1s->alt =3D REG_EMPTY; + + /* Timer calibration hack */ + v1s->timer_hack_state =3D 0; } =20 static void mos6522_q800_via1_realize(DeviceState *dev, Error **errp) @@ -1099,6 +1212,8 @@ static const VMStateDescription vmstate_q800_via1 =3D= { VMSTATE_INT64(next_second, MOS6522Q800VIA1State), VMSTATE_TIMER_PTR(sixty_hz_timer, MOS6522Q800VIA1State), VMSTATE_INT64(next_sixty_hz, MOS6522Q800VIA1State), + /* Timer hack */ + VMSTATE_INT32(timer_hack_state, MOS6522Q800VIA1State), VMSTATE_END_OF_LIST() } }; diff --git a/hw/misc/trace-events b/hw/misc/trace-events index 85d2601de9..d3a9295d2f 100644 --- a/hw/misc/trace-events +++ b/hw/misc/trace-events @@ -250,6 +250,7 @@ via1_adb_send(const char *state, uint8_t data, const ch= ar *vadbint) "state %s da via1_adb_receive(const char *state, uint8_t data, const char *vadbint, int= status, int index, int size) "state %s data=3D0x%02x vADBInt=3D%s status= =3D0x%x index=3D%d size=3D%d" via1_adb_poll(uint8_t data, const char *vadbint, int status, int index, in= t size) "data=3D0x%02x vADBInt=3D%s status=3D0x%x index=3D%d size=3D%d" via1_auxmode(int mode) "setting auxmode to %d" +via1_timer_hack_state(int state) "setting timer_hack_state to %d" =20 # grlib_ahb_apb_pnp.c grlib_ahb_pnp_read(uint64_t addr, unsigned size, uint32_t value) "AHB PnP = read addr:0x%03"PRIx64" size:%u data:0x%08x" diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h index 422da43bf9..63cdcf7c69 100644 --- a/include/hw/misc/mac_via.h +++ b/include/hw/misc/mac_via.h @@ -74,6 +74,9 @@ struct MOS6522Q800VIA1State { int64_t next_second; QEMUTimer *sixty_hz_timer; int64_t next_sixty_hz; + + /* SETUPTIMEK hack */ + int timer_hack_state; }; =20 =20 --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962846946233.5855059833043; Wed, 24 May 2023 14:14:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vmy-00049Z-D4; Wed, 24 May 2023 17:12:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmt-0003qW-IO for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:53 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmq-0002Cn-VV for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:51 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vmY-0005XR-78; Wed, 24 May 2023 22:12:30 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=L7nuLEQTrkwuy5/EBzvC3FEBlp1hMl0MRLYUJtTKR+0=; b=0ODWCGKW8fqJPoM9csPWA7NhrR rl4DMlg2Kv+NgMrj2ze/IjAI0BPFi2qQnxrwRZZXIRIGNZ4MheCLeQLZd9ygGlxpV8qTpbBUlz0Yn UBs7EqPp5LFZrfnZe6xOEuaxVBFuyexE3A6hVJ3q2y9CZz5FUb8RCYOZnPQAjCXMH3610nwX6Y69N LgqcyRDB1xmDtrdbKZRxamud6QmyL8YDu6FaWuhS3Et/WZ3FCYtxur4FghSXW8C6R4d17hkNocimD fcC5ch9/NIdIECFXgkJpi5xUWPgA90UPR2zz5TVkcHamJVPFzEu1VVmlG7eYZ9K46cmMSqczZxV95 mlbOVKVbLnUwOW+0J2FeBDCaVLLP39tqz8cho8Mq+ZuVHcMD7saShXZWDURNHAi+mUSKO6RXBuN9D uzTejfTmaYuYQQ8qHrqJMp5+FZ701LpO5rTzZhu4jrG3yfV0YH0m64w4FrKRj3cMOtLLhlz2KxisQ WvneGzJleLhDFn5aSSN6OpdAPsf2uZ4q8V78SCVi9i5v2VZ/6BRY5gcnWOtEyiM9AVXoGgvG+PeLn uf4K90/HWx1NoW75qhG1MBM7rlJRUQClZHjasGGWBUsADtG6olMeSSxiHmuLWnVjEEPtGExy6Hq2J sXtyY7taor3aY0U2ejIGdaka7a8AE3FkUtsYUolws=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:56 +0100 Message-Id: <20230524211104.686087-23-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 22/30] mac_via: fix rtc command decoding from PRAM addresses 0x0 to 0xf X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962847588100005 Content-Type: text/plain; charset="utf-8" A comparison between the rtc command table included in the comment and the = code itself shows that the decoding for PRAM addresses 0x0 to 0xf is being done = on the raw command, and not the shifted version held in value. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/misc/mac_via.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index 62f0988537..d7067030db 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -403,7 +403,7 @@ static int via1_rtc_compact_cmd(uint8_t value) } else if ((value & 0x1c) =3D=3D 0x08) { /* RAM address 0x10 to 0x13 */ return read | (REG_PRAM_ADDR + 0x10 + (value & 0x03)); - } else if ((value & 0x43) =3D=3D 0x41) { + } else if ((value & 0x10) =3D=3D 0x10) { /* RAM address 0x00 to 0x0f */ return read | (REG_PRAM_ADDR + (value & 0x0f)); } --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962873056387.09372868617254; Wed, 24 May 2023 14:14:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vn0-0004YT-KK; Wed, 24 May 2023 17:12:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmt-0003qX-QL for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:54 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmr-0002DV-Di for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:51 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vmY-0005XR-HH; Wed, 24 May 2023 22:12:34 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=Etj0Y/r26aMyxSkJBfiWqE18oDsTFfbbtn7h/espvPI=; b=03i7o82CJhL3NZ3L2uF69BbF9O GPDdAt1LBDd8JYy7ySIsy57bRoUBnPRvdGCWzVYNRIJbigFeGzUJ5hG5QckWxCoo+8k46eEJxzu55 LNPMJQOmhKS20kfQn7nNOXs7ETC8PmSuqRl6n4JyrWV2fKCXZUQaKlIl4fbreF2njmlAiMV+ywB3x xEkcKeK1jsNJq3Sh3oinKUSvc7EgHnUbBtI8+WlcCpvXwBk+mUG1Qpi0O7r7g5Od3d5WnsmEo6+04 m57crFBVWFl5bgPu31Rpubu093shNTUy7KDPt1a/f/YJSqU1+d0FwEXHjF39z6q9TbCFGMY2dwQHc LRln2vZ6uoM1Fg3Vgeap9H3rk4ETtByoThpLauiyWLNt2aFd86NP2N47w51b855zJVZk/yEDEfsZn tYy9V4aGwdeFRc1Ab11wIzjgrNv3CpKUohlkC84DFrKWoxnL37geIQBwniPu9GODZ1eMTnPRX/dIQ 1TQ30W8OEsRlTgmDplV4yV/VVKrm6zQPO/eAOY2Q0GGSqyXXi5GPNEarjnk7QBSIKlaz0JThddr28 e8/YrLwCD2GLQO4k5epnObtNHXzQ7JXJt/YMHlW42dNHUW2fe4/XBLtSL0fIi5xAUp4wW0mBA0MkP Bb/6X6IgOp2d2nR/zUowRn7CQhs1ygp4SoAETkz9g=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:57 +0100 Message-Id: <20230524211104.686087-24-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 23/30] mac_via: fix rtc command decoding for the PRAM seconds registers X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962881744100001 Content-Type: text/plain; charset="utf-8" Analysis of the MacOS toolbox ROM code shows that on startup it attempts 2 separate reads of the seconds registers with commands 0x9d...0x91 followed = by 0x8d..0x81 without resetting the command to its initial value. The PRAM sec= onds value is only accepted when the values of the 2 separate reads match. From this we conclude that bit 4 of the rtc command is not decoded or we do= n't care about its value when reading the PRAM seconds registers. Implement this decoding change so that both reads return successfully which allows the Mac= OS toolbox ROM to correctly set the date/time. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/misc/mac_via.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index d7067030db..5d5334b0f6 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -366,10 +366,10 @@ static void pram_update(MOS6522Q800VIA1State *v1s) * * Command byte Register addressed by the command * - * z0000001 Seconds register 0 (lowest-order byte) - * z0000101 Seconds register 1 - * z0001001 Seconds register 2 - * z0001101 Seconds register 3 (highest-order byte) + * z00x0001 Seconds register 0 (lowest-order byte) + * z00x0101 Seconds register 1 + * z00x1001 Seconds register 2 + * z00x1101 Seconds register 3 (highest-order byte) * 00110001 Test register (write-only) * 00110101 Write-Protect Register (write-only) * z010aa01 RAM address 100aa ($10-$13) (first 20 bytes only) @@ -377,6 +377,7 @@ static void pram_update(MOS6522Q800VIA1State *v1s) * z0111aaa Extended memory designator and sector number * * For a read request, z=3D1, for a write z=3D0 + * The letter x indicates don't care * The letter a indicates bits whose value depend on what parameter * RAM byte you want to address */ @@ -393,7 +394,7 @@ static int via1_rtc_compact_cmd(uint8_t value) } if ((value & 0x03) =3D=3D 0x01) { value >>=3D 2; - if ((value & 0x1c) =3D=3D 0) { + if ((value & 0x18) =3D=3D 0) { /* seconds registers */ return read | (REG_0 + (value & 0x03)); } else if ((value =3D=3D 0x0c) && !read) { --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962847227692.1997513719659; Wed, 24 May 2023 14:14:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vn1-0004fW-JZ; Wed, 24 May 2023 17:12:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmw-0003vv-9c for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:54 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmu-0002Ef-3d for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:53 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vmc-0005XR-L9; Wed, 24 May 2023 22:12:38 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=1H9aTnPvfzwWG0TePJOatxdz3yLOREQRSdwo9qmO90o=; b=maoT5hujIY3+Bt+KM0mQuNiKDP HgOuCBzu/jsYzPupClT+Zz7ZEeMPgDVHz1czIA1sqiBBKk5apUVKm37stc/DQF2pgfi0eSO4QLI1X mQbNSGFVWBjopWYx4x021rdufTIM2UGqcbgvVMU2FyZAhFwhiBC5csU1d6VSVnGx5QOd3ibcT5Dlp n6CXiEBf+ORA3BM8rg9GkLmP/5rG2NVweX7u364rppXCequM43LWQqmxpr1Q1HTLsgack4tRDJAF1 fZnE695lhFH45kBhOjpf/vTDL39MiU2HYlRdFCaqa0R4RQ1SYJsJspzNM8LrW3RYOZEAGAM7/bFiE JAFOJUZo0BAPoaizHeyQVIoCoCZYp6WQYgB5NmcOn2FGFpdOb4KeR8dWX0UQbW71/Y3HEqaF5iZRf qbHArWPhFP+LecGVgds9lCsk8YfsfjlL04jNJQIIz74zA+pWxoE1DtjWlkjZ6Vo+NIPzz5WrwUtZO DiDQn6NZjggT22JEka9GU/UOn0BCVZS4xNeVSEHj0w5j4r9xefSJ3qD9DFSr7qXI6Wyo3WAcHbUFr 5sP35lTwM2TWvQ1Uqznf7oPo5B0UNxULBYJspBnrv/1CS31htSLSoZUq67ab4R8Ew0j1JKeYXj7+P qjzUv0OevG2KIzqLJfq8ov7Lmb+Sta/lg4JvtAXTE=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:58 +0100 Message-Id: <20230524211104.686087-25-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 24/30] mac_via: workaround NetBSD ADB bus enumeration issue X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962847633100007 Content-Type: text/plain; charset="utf-8" NetBSD assumes it can send its first ADB command after sending the ADB_BUSR= ESET command in ADB_STATE_NEW without changing the state back to ADB_STATE_IDLE first as detailed in the ADB protocol. Add a workaround to detect this condition at the start of ADB enumeration and send the next command written to SR after a ADB_BUSRESET onto the bus regardless, even if we don't detect a state transition to ADB_STATE_NEW. Signed-off-by: Mark Cave-Ayland --- hw/misc/mac_via.c | 34 ++++++++++++++++++++++++++++++++++ hw/misc/trace-events | 1 + 2 files changed, 35 insertions(+) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index 5d5334b0f6..564db8337e 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -1001,6 +1001,8 @@ static void mos6522_q800_via1_write(void *opaque, hwa= ddr addr, uint64_t val, { MOS6522Q800VIA1State *v1s =3D MOS6522_Q800_VIA1(opaque); MOS6522State *ms =3D MOS6522(v1s); + int oldstate, state; + int oldsr =3D ms->sr; =20 addr =3D (addr >> 9) & 0xf; =20 @@ -1016,6 +1018,38 @@ static void mos6522_q800_via1_write(void *opaque, hw= addr addr, uint64_t val, =20 v1s->last_b =3D ms->b; break; + + case VIA_REG_SR: + { + /* + * NetBSD assumes it can send its first ADB command after send= ing + * the ADB_BUSRESET command in ADB_STATE_NEW without changing = the + * state back to ADB_STATE_IDLE first as detailed in the ADB + * protocol. + * + * Add a workaround to detect this condition at the start of A= DB + * enumeration and send the next command written to SR after a + * ADB_BUSRESET onto the bus regardless, even if we don't dete= ct a + * state transition to ADB_STATE_NEW. + * + * Note that in my tests the NetBSD state machine takes one ADB + * operation to recover which means the probe for an ADB devic= e at + * address 1 always fails. However since the first device is at + * address 2 then this will work fine, without having to come = up + * with a more complicated and invasive solution. + */ + oldstate =3D (v1s->last_b & VIA1B_vADB_StateMask) >> + VIA1B_vADB_StateShift; + state =3D (ms->b & VIA1B_vADB_StateMask) >> VIA1B_vADB_StateSh= ift; + + if (oldstate =3D=3D ADB_STATE_NEW && state =3D=3D ADB_STATE_NE= W && + (ms->acr & VIA1ACR_vShiftOut) && + oldsr =3D=3D 0 /* ADB_BUSRESET */) { + trace_via1_adb_netbsd_enum_hack(); + adb_via_send(v1s, state, ms->sr); + } + } + break; } } =20 diff --git a/hw/misc/trace-events b/hw/misc/trace-events index d3a9295d2f..7206bd5d93 100644 --- a/hw/misc/trace-events +++ b/hw/misc/trace-events @@ -249,6 +249,7 @@ via1_rtc_cmd_pram_sect_write(int sector, int offset, in= t addr, int value) "secto via1_adb_send(const char *state, uint8_t data, const char *vadbint) "state= %s data=3D0x%02x vADBInt=3D%s" via1_adb_receive(const char *state, uint8_t data, const char *vadbint, int= status, int index, int size) "state %s data=3D0x%02x vADBInt=3D%s status= =3D0x%x index=3D%d size=3D%d" via1_adb_poll(uint8_t data, const char *vadbint, int status, int index, in= t size) "data=3D0x%02x vADBInt=3D%s status=3D0x%x index=3D%d size=3D%d" +via1_adb_netbsd_enum_hack(void) "using NetBSD enum hack" via1_auxmode(int mode) "setting auxmode to %d" via1_timer_hack_state(int state) "setting timer_hack_state to %d" =20 --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962893588800.1443723631581; Wed, 24 May 2023 14:14:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vn2-0004ql-Rr; Wed, 24 May 2023 17:13:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmx-0003yl-99 for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:55 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmu-0002Eh-JS for qemu-devel@nongnu.org; Wed, 24 May 2023 17:12:54 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vmg-0005XR-PV; Wed, 24 May 2023 22:12:38 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=vam29yBPBh0lOubxJpuNVSNbAJq8rVDtEoBvrF74F0Y=; b=lhrKdiWJaXuQGL3QQ2yQCriUiD S5/aUu7uWncWDVMZVxTRN9yH0UVvNlqIMpbXBeol2hgSGIcPh51CZK7rTkKQWkY6ySxnPPwHhP0Qz O2XEWOgQimCsPvIq5ZmKbt33L0gpAVegrasRh+YBhIwbESnxbBRvBpQfhf1ELfvwZrMWihM1JewQD /r4HCXJkB5YtPxIdYOGSYQrKL9u/4U7KWgaCQKy2MqDKAyKVCsu4kKomSJ3hU6uHiVIFs+Ey9few/ Z/vcdqJ0Aq9r61wj5JYbICzLWovSJnTETtbUeMOyVJ+/V+TLo1PqcqLSGIES1J9Sqnw0yIN40PL02 g2eUDkZhKTOfKUVfOI8NwENGNdZo7JpFBli+8/6XoM8hxXUjewThK40AFTVD71LKtKpRC98jwnh5D jZ7t0T+fy3zKn/PfplEAfKZ6CYhSuXJULrB5aADPzuCkjtQBVb9V+3k5Bfl1k7rTa1IVc/M0S27Kg 5WQpYunbGfce6l2wuJPRGmBnyLr9+E4dPRl8Z5uvR3zVzH782uuLAn/a/LScrZyKB1HggzFq8vj5B 9h/+P317EBtNCf4MY/1hYni3/PdSR2u/Zkk1kNe1wopfsiki9ZVYGths9WnFZ24XmLJ1R8Z3IfpmZ oQOu+MQ/gfWMLMFScG3y97IDAPkwIughMrXkZVmdU=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:10:59 +0100 Message-Id: <20230524211104.686087-26-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 25/30] mac_via: implement ADB_STATE_IDLE state if shift register in input mode X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962895668100013 Content-Type: text/plain; charset="utf-8" NetBSD switches directly to IDLE state without switching the shift register= to input mode. Duplicate the existing ADB_STATE_IDLE logic in input mode from = when the shift register is in output mode which allows the ADB autopoll handler = to handle the response. Signed-off-by: Mark Cave-Ayland --- hw/misc/mac_via.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index 564db8337e..c1d2866ec9 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -702,6 +702,12 @@ static void adb_via_send(MOS6522Q800VIA1State *v1s, in= t state, uint8_t data) break; =20 case ADB_STATE_IDLE: + ms->b |=3D VIA1B_vADBInt; + adb_autopoll_unblock(adb_bus); + + trace_via1_adb_send("IDLE", data, + (ms->b & VIA1B_vADBInt) ? "+" : "-"); + return; } =20 --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962806155756.308369364924; Wed, 24 May 2023 14:13:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vn9-00061W-Jl; Wed, 24 May 2023 17:13:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vn6-0005Oj-JL for qemu-devel@nongnu.org; Wed, 24 May 2023 17:13:04 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vmy-0002Gx-Ud for qemu-devel@nongnu.org; Wed, 24 May 2023 17:13:04 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vmh-0005XR-1V; Wed, 24 May 2023 22:12:43 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=fLAdXF7hBFU36EAoDz3XPbgtNfxOXf//b9bgf2h8ozQ=; b=jkOUrMH8Nx2lLFiQwzCA47vO4U 4B4p59xwiNFEHdP1mARjLZVxGj8YqSINMxfcmORSL+9ufXKqb8rH0hHJHkpXgKqlUL4oC6V9pjIW6 wIfH1UqOSOxVJUpvj3GycYqY9m1gUi1Pk7x7MWHwLASqdX3Iv5/OcheeRUPv7yTqbXCVbdWukciL7 KA8HecuHhexXmCT6T5ETMYx3k/mt4kceNbMXLFvDs0ODGzlOd4jHVnwvdXnHXj7YTpChCtnU1ptsu ZParkVJ8MzBw7QNZTiDvg4UbKBC1JBflhnWMHerW/oDLj+w5uDSsGFzxWbfwRts5VExRhSVHLyQJk HOelYx9koPv9PaInJ1kJRTIvZEDNbBY/tQ75g5wUlPcwfKunVSEVX8rQd3d5t4xl9uErcj+67xCsG j34MBCThOzcE8f7yUhbBI1kP1Sf5HIlgqGktEttS88bsbbezp471NlVyvd1EqiAvjYNxNjTLPC0p+ Mz0Zkgtkdrt3VZP+e1Rk9yIFggF7Th9e+2NuaEh/oz6tj/sSCYPl47EaiZOp9F5hIjsV/SGbId8hp ncuCxqntgeH290434M/s7hXHi9u/6o3k94z9zqep28nl8hOWulzUKpQzG1mPUrVUsB/IxEpKCtfjW vhz9yj4TcDSD4hq2fvhGDbeHRwhg4jcvsxH/Nxzn8=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:11:00 +0100 Message-Id: <20230524211104.686087-27-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 26/30] mac_via: always clear ADB interrupt when switching to A/UX mode X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962808318100007 Content-Type: text/plain; charset="utf-8" When the NetBSD kernel initialises it can leave the ADB interrupt asserted depending upon where in the ADB poll cycle the MacOS ADB interrupt handler is when the NetBSD kernel disables interrupts. The NetBSD ADB driver uses the ADB interrupt state to determine if the ADB is busy and refuses to send ADB commands unless it is clear. To ensure that this doesn't happen, always clear the ADB interrupt when switching to A/UX mode to ensure that the bus enumeration always occurs. Signed-off-by: Mark Cave-Ayland --- hw/misc/mac_via.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index c1d2866ec9..ee44cb4437 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -875,6 +875,15 @@ static void via1_auxmode_update(MOS6522Q800VIA1State *= v1s) if (irq !=3D oldirq) { trace_via1_auxmode(irq); qemu_set_irq(v1s->auxmode_irq, irq); + + /* + * Clear the ADB interrupt. MacOS can leave VIA1B_vADBInt asserted + * (low) if a poll sequence doesn't complete before NetBSD disables + * interrupts upon boot. Fortunately NetBSD switches to the so-cal= led + * "A/UX" interrupt mode after it initialises, so we can use this = as + * a convenient place to clear the ADB interrupt for now. + */ + s->b |=3D VIA1B_vADBInt; } } =20 --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 168496279269171.30284939903902; Wed, 24 May 2023 14:13:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vn5-0005Gd-Pq; Wed, 24 May 2023 17:13:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vn3-0004ul-8b for qemu-devel@nongnu.org; Wed, 24 May 2023 17:13:01 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vn0-0002H5-1u for qemu-devel@nongnu.org; Wed, 24 May 2023 17:13:00 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vml-0005XR-6U; Wed, 24 May 2023 22:12:43 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=Bto7ry5odXfABcKODlJmXnSA6aGzrCs70PRGGFISC1Q=; b=TJllyv8STvq9w6UJN8iipPyXwy ncTFfuMfnAEUWi9BIrpPkTaNHHPTpnjWvg7JNbthte2RVgeyZRj+8XlQo0P66Q9KVevbVbeU/dl+V /Sli8wuLBYo2ZU8e6+3VlLWMYpax4admdF5T3blFu46AxpF586CEyxMpcPV+Cjg9uhpkOc48DC4Jl CJNI43tmAisQDEaC4r4pRzkln+T5DMq5c04/kBcBHACesetbRj+gMi7i5yDwKqo/En8gCGUkIdnt3 IdZDeLphZKzCMu0pAUs0NlFAIGz4oMYVGJx6aHCi8/Z24BVBwHyGVgFpyJsT9NjPdkyxVmEDyNu4j XwYR6QIROxu01gJQ0UyUZS0BpmjTGx33n+OS20l9LBRbZ2CB/zvLiVM57/hta6dRvTIcLZnxO81Ze GcqrjN3wjtnB2YxjiG2s12YBvP5x1465FN8NQQQO5bnSrEZ5i18mu9sRsLUJogpNRsj5hI/Wan85G njWfnp83+atmIQKh5Br98CEnBPd2OSrA2ggkgKMwwHWUQChzfdL8tVewo9ccJkOkTY+zeOKoIH3O7 BJ3kkxHyLGYiJhiukwWH7WvOMrJMCE+SZlUqG+qf0LLluTAFYTq9kErGe+G8zdlt2voIKc1otMxOH s8WXOgqlcedFfuP4vkgCny9MempYLzSpthsge4ohI=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:11:01 +0100 Message-Id: <20230524211104.686087-28-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 27/30] q800: add ESCC alias at 0xc000 X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962793278100005 Content-Type: text/plain; charset="utf-8" Tests on real Q800 hardware show that the ESCC is addressable at multiple l= ocations within the ESCC memory region - at least 0xc000, 0xc020 (as expected by the= MacOS toolbox ROM) and 0xc040. All released NetBSD kernels before 10 use the 0xc000 address which causes a= fatal error when running the MacOS booter. Add a single memory region alias at 0x= c000 to enable NetBSD kernels to start booting under QEMU. Signed-off-by: Mark Cave-Ayland --- hw/m68k/q800.c | 6 ++++++ include/hw/m68k/q800.h | 1 + 2 files changed, 7 insertions(+) diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index 1af1a06f64..3acdb5dd8d 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -682,6 +682,12 @@ static void q800_machine_init(MachineState *machine) memory_region_add_subregion(&m->macio, SCC_BASE - IO_BASE, sysbus_mmio_get_region(sysbus, 0)); =20 + /* Create alias for NetBSD */ + memory_region_init_alias(&m->escc_alias, NULL, "escc-alias", + sysbus_mmio_get_region(sysbus, 0), 0, 0x8); + memory_region_add_subregion(&m->macio, SCC_BASE - IO_BASE - 0x20, + &m->escc_alias); + /* SCSI */ =20 dev =3D qdev_new(TYPE_SYSBUS_ESP); diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h index 0144be5e6e..3039b24d30 100644 --- a/include/hw/m68k/q800.h +++ b/include/hw/m68k/q800.h @@ -40,6 +40,7 @@ struct Q800MachineState { MemoryRegion macio; MemoryRegion macio_alias; MemoryRegion machine_id; + MemoryRegion escc_alias; }; =20 #define TYPE_Q800_MACHINE MACHINE_TYPE_NAME("q800") --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962884835158.69520047313688; Wed, 24 May 2023 14:14:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vn6-0005Nb-LN; Wed, 24 May 2023 17:13:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vn4-00056q-Rq for qemu-devel@nongnu.org; Wed, 24 May 2023 17:13:02 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vn3-0002IC-1p for qemu-devel@nongnu.org; Wed, 24 May 2023 17:13:02 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vml-0005XR-Fh; Wed, 24 May 2023 22:12:47 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=oTUynNDW4q72tx7pBULR2VftiLKf74kO1Fi88EOKivA=; b=RTr2BLW2BhnnZtjVralwge1zq+ 1LouL2uUdfIINYZDMUH9lAqH1EL1Z6AK1Ic0T4cucyLT3eiQLKt3C5LH1+W9znoeU4AkegRWYr87l 44UrNOfrQocUljv2f/rfoBQc1XhyMEAI1yUmKbi3LvV4b+BPIIBhFnw+ljZ3JsQWMB12KE8b2xWii Oqr8TqQnmFFUTy28y/Sgfx+i9XO8q1iXkSLdI+2fV5fkFSPtQrFpad6puRkzLWMBxIW5bEE0Mnn3Q J8nNKlZSHF6Bxhn8lqcr1dgVtwgYH2hwnfZ5cB1W7WodAv4jwQJrGb2QC8TpRoLU68gepgc5UdbgT FapKkBO2/N6v9egBeLIWfszAWhne3X5Or/vsx/1gTxn0P4OL7pWbLVc9IKJrN1ZmPPDgWbk3ve+Kp Fr870Pet9We34uA5tJX2mZ1WyxVOt20Tcq8NXOefIOKzafF7VJVDPFyL2q9iTZIbQ6nfVipnrNdfv vznd4Ogv2oe37LE/OGof3yODPa0Nff57CDurMO0r2zzHiJR8u16fvDhKMUg4oboK+p5Gi9cgjkcsZ dCdz0RyiX26wdRO/+kxbnMLSTu/gEPAJFHRminM6NCtcaKXMxLwngrGtchWfgQM5cjtnMfM4eEM1a qG0bB66GHwCMA4FaqRWi5aDba8OVFv+zwCa8dEtfU=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:11:02 +0100 Message-Id: <20230524211104.686087-29-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 28/30] q800: add alias for MacOS toolbox ROM at 0x40000000 X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962885558100001 Content-Type: text/plain; charset="utf-8" According to the Apple Quadra 800 Developer Note document, the Quadra 800 R= OM consists of 2 ROM code sections based at offsets 0x0 and 0x800000. A/UX att= empts to access the toolbox ROM at the lower offset during startup, so provide a memory alias to allow the access to succeed. Signed-off-by: Mark Cave-Ayland --- hw/m68k/q800.c | 5 +++++ include/hw/m68k/q800.h | 1 + 2 files changed, 6 insertions(+) diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index 3acdb5dd8d..bf4acb5db7 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -869,6 +869,11 @@ static void q800_machine_init(MachineState *machine) filename =3D qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); memory_region_add_subregion(get_system_memory(), MACROM_ADDR, &m->= rom); =20 + memory_region_init_alias(&m->rom_alias, NULL, "m68k_mac.rom-alias", + &m->rom, 0, MACROM_SIZE); + memory_region_add_subregion(get_system_memory(), 0x40000000, + &m->rom_alias); + /* Load MacROM binary */ if (filename) { bios_size =3D load_image_targphys(filename, MACROM_ADDR, MACRO= M_SIZE); diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h index 3039b24d30..1a0dbb5ecd 100644 --- a/include/hw/m68k/q800.h +++ b/include/hw/m68k/q800.h @@ -33,6 +33,7 @@ struct Q800MachineState { bool easc; M68kCPU *cpu; MemoryRegion rom; + MemoryRegion rom_alias; DeviceState *glue; DeviceState *djmemc; MemoryRegion ramio; --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962818426748.1149895320721; Wed, 24 May 2023 14:13:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vnB-0006Fw-6U; Wed, 24 May 2023 17:13:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vn9-0005vj-4u for qemu-devel@nongnu.org; Wed, 24 May 2023 17:13:07 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vn7-0002JR-AD for qemu-devel@nongnu.org; Wed, 24 May 2023 17:13:06 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vmp-0005XR-KN; Wed, 24 May 2023 22:12:51 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=U2U5OEm7QFAvoVpU8mTDsKr9yywgDGzYKhTMIGnYMbc=; b=DmIrvLiDSRLD2EFKib04b61NiK WqS7IiLkYXI5nBZixsfpT8OC5pXyzrKQ1YmPAEn1cx0p5A/r4gnLuQkng8XnpEs23X7oLaDK1RNuG 7vtQ+/cj7dgs2ty0AzZkIKlLcd8OKgohsit2NZuVv4D05/F4XgmxcibJoimm6A76f1aeDsEEOsU/a lTNfb8CvAxgsGzx1l9o2ewP4Jk6lvTSWShNSAOUlBLXHU8q8dt67RXn/1Qz006UM2+cu6OIKqwwdu 14jJezhpvdsdGGVPYnckIqI8jViCCHBfIRz4ADRaVeaDtjciUYhtn40v0zsVqyZKkxgGJQOrmnUpp 9uXd52gH9ICGmApmYU4+5bYMcUSugbB+hWwXRIgPAPAa1ZO78EhG1UQ9i4qk0N4p2zNuBDgBHvmyi gnHuVMF0nCf6wIjRP5tuybThJV/rwndIbIjNUEBgPKFsuCSMlA4qCV8bHk0Pok5CtPUBKNQeM20xX 04WEi9qb6rFcKPY0tkzA9BbUPegophkYjzjN81+CYjosBOfDBttccdeqh815NDryYQgkLSj63AO4R rR9oYYa9jxMbV+1eZiJDHP0S8CCkcYISn3A8FmOLbmqJEoLYWH/pVtVA7JFmYXRQle8sv0CUqGzjx QYTL2MKAaaTS8fyL68YmmsAq8agmQiFP4gvNyc7cI=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:11:03 +0100 Message-Id: <20230524211104.686087-30-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 29/30] mac_via: extend timer calibration hack to work with A/UX X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962820397100007 Content-Type: text/plain; charset="utf-8" The A/UX timer calibration loop runs continuously until 2 consecutive itera= tions differ by at least 0x492 timer ticks. Modern hosts execute the timer calibr= ation loop so fast that this situation never occurs causing a hang on boot. Use a similar method to Shoebill which is to randomly add 0x500 to the T2 counter value during calibration to enable it to eventually succeed. Signed-off-by: Mark Cave-Ayland --- hw/misc/mac_via.c | 55 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index ee44cb4437..4ec1ee18dd 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -973,6 +973,7 @@ static void via1_timer_calibration_hack(MOS6522Q800VIA1= State *v1s, int addr, v1s->timer_hack_state =3D 4; } break; + case 4: /* * This is the normal post-calibration timer state: we should @@ -983,6 +984,38 @@ static void via1_timer_calibration_hack(MOS6522Q800VIA= 1State *v1s, int addr, /* Looks like there has been a reset? */ v1s->timer_hack_state =3D 1; } + + if (addr =3D=3D VIA_REG_T2CL && val =3D=3D 0xf0) { + /* VIA_REG_T2CH: high byte of counter (A/UX) */ + v1s->timer_hack_state =3D 5; + } + break; + case 5: + if (addr =3D=3D VIA_REG_T2CH && val =3D=3D 0x3c) { + /* VIA_REG_T2CL: low byte of counter (A/UX) */ + v1s->timer_hack_state =3D 6; + } else { + v1s->timer_hack_state =3D 0; + } + break; + case 6: + if ((addr =3D=3D VIA_REG_IER && val =3D=3D 0x20) || addr =3D=3D VI= A_REG_T2CH) { + /* End of A/UX timer calibration routine, or another write */ + v1s->timer_hack_state =3D 7; + } else { + v1s->timer_hack_state =3D 0; + } + break; + case 7: + /* + * This is the normal post-calibration timer state once both the + * MacOS toolbox and A/UX have been calibrated, until we see a wri= te + * to VIA_REG_PCR to suggest a reset + */ + if (addr =3D=3D VIA_REG_PCR && val =3D=3D 0x22) { + /* Looks like there has been a reset? */ + v1s->timer_hack_state =3D 1; + } break; default: g_assert_not_reached(); @@ -995,8 +1028,9 @@ static void via1_timer_calibration_hack(MOS6522Q800VIA= 1State *v1s, int addr, =20 static uint64_t mos6522_q800_via1_read(void *opaque, hwaddr addr, unsigned= size) { - MOS6522Q800VIA1State *s =3D MOS6522_Q800_VIA1(opaque); - MOS6522State *ms =3D MOS6522(s); + MOS6522Q800VIA1State *v1s =3D MOS6522_Q800_VIA1(opaque); + MOS6522State *ms =3D MOS6522(v1s); + int64_t now; uint64_t ret; =20 addr =3D (addr >> 9) & 0xf; @@ -1007,6 +1041,23 @@ static uint64_t mos6522_q800_via1_read(void *opaque,= hwaddr addr, unsigned size) /* Quadra 800 Id */ ret =3D (ret & ~VIA1A_CPUID_MASK) | VIA1A_CPUID_Q800; break; + case VIA_REG_T2CH: + if (v1s->timer_hack_state =3D=3D 6) { + /* + * The A/UX timer calibration loop runs continuously until 2 + * consecutive iterations differ by at least 0x492 timer ticks. + * Modern hosts execute the timer calibration loop so fast that + * this situation never occurs causing a hang on boot. Use a + * similar method to Shoebill which is to randomly add 0x500 to + * the T2 counter value during calibration to enable it to + * eventually succeed. + */ + now =3D qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); + if (now & 1) { + ret +=3D 0x5; + } + } + break; } return ret; } --=20 2.30.2 From nobody Fri Apr 19 07:46:54 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=ilande.co.uk Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1684962884687193.07738178143813; Wed, 24 May 2023 14:14:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1vnH-0007Hk-JW; Wed, 24 May 2023 17:13:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vnF-00070m-Pm for qemu-devel@nongnu.org; Wed, 24 May 2023 17:13:13 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1vnC-0002KI-Mb for qemu-devel@nongnu.org; Wed, 24 May 2023 17:13:13 -0400 Received: from [2a00:23c4:8bac:6900:b726:cf58:4c12:f013] (helo=kentang.home) by mail.ilande.co.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q1vmt-0005XR-Q6; Wed, 24 May 2023 22:12:56 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=ilande.co.uk; s=20220518; h=Subject:Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:To:From:Sender:Reply-To:Cc: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=W0B8qcuLZ3opG8CQ/3oV6l6s2KGTedCPNPswvMXxdxA=; b=vEPtHr0yzkVJ+xuUR+gWiFHxB4 5EKkUMTcciSXOb5cxY4JVxWj09dSMARUc3xtra28CB58DAMSZGxhrzLWspreZok5vmSXLeiBHOlF1 VIWc2/eT4yHE82ZXMVGT7P3P7FBby42+anVa1UZ9s4TqXveKYqBRxb0IoBzVsYDQgI42MJ1HZxqah GmKHHfzjZTIDlCyekt85kQEF6NDTJLUvpjf7YktWwxnTMbbZ6RF60yqSeOt/2TI7I8eWPbdJDtqDO Y8C1CSi6aj29E18SVs4B2HUSPt6RlCv9Swc0jIY8d21eqZTg8btAQcavf8efXXseSt6j84tSJerVg UUrpRzSmPB745uYKQIquN1iAMcHS7r98Dolv+O+qhQqkLPB9dmzRBLdhf3JrAcf9Ih0fglKJKDmwg HX2FGMSu8pwBKt0qngh4yn0iV82gDmXeNB4YCZb2g2VWvwyX1SZkfmUZFxu+ed6oxu/rExpIdgFI/ Y9Barex60g6pHW0Tenj/zKaBbqx3wOW4iMJ9IwNhNSK253lIaJridEpxXod/Opt4IThL73XauIos3 hKStmx7Pe1yiZfg7U4ipiwWaSYpRTRUQ1Eqt/7/Xh/d98aWnSXMLZc5nkHhPSzZo6Rr/DoxF8dpxM mPiLGzzBVUi1jjyzFRlYpyMbc118oG4jyxB6liKxc=; From: Mark Cave-Ayland To: laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 24 May 2023 22:11:04 +0100 Message-Id: <20230524211104.686087-31-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> References: <20230524211104.686087-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8bac:6900:b726:cf58:4c12:f013 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 30/30] mac_via: work around QEMU unaligned MMIO access bug X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.ilande.co.uk) 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=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.ilande.co.uk 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, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 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: 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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1684962885636100002 Content-Type: text/plain; charset="utf-8" During the kernel timer calibration routine A/UX performs an unaligned acce= ss across the T1CL and T1CH registers to read the entire 16-bit value in a single memory access. This triggers a bug in the QEMU softtlb implementation whereby the 2 separa= te accesses are combined incorrectly losing the high byte of the counter (see https://gitlab.com/qemu-project/qemu/-/issues/360 for more detail). Since A/UX requires a minimum difference of 0x500 between 2 subsequent reads to succeed then this causes the timer calibration routine to get stuck in an infinite loop. Add a temporary workaround for the QEMU unaligned MMIO access bug whereby these special accesses are detected and the 8-byte result copied into both halves of the 16-bit access which allows the existing softtlb implementation to return the correct result. Signed-off-by: Mark Cave-Ayland --- hw/m68k/q800.c | 1 + hw/misc/mac_via.c | 42 +++++++++++++++++++++++++++++++++++++++ hw/misc/trace-events | 1 + include/hw/misc/mac_via.h | 4 +++- 4 files changed, 47 insertions(+), 1 deletion(-) diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index bf4acb5db7..918cc8f695 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -443,6 +443,7 @@ static const MemoryRegionOps macio_alias_ops =3D { .valid =3D { .min_access_size =3D 1, .max_access_size =3D 4, + .unaligned =3D true, /* For VIA1 via1_unaligned_hack_state() */ }, }; =20 diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index 4ec1ee18dd..45c8dee9f4 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -1026,12 +1026,47 @@ static void via1_timer_calibration_hack(MOS6522Q800= VIA1State *v1s, int addr, } } =20 +static bool via1_unaligned_hack_state(MOS6522Q800VIA1State *v1s, hwaddr ad= dr, + int size) +{ + /* + * Workaround for bug in QEMU whereby load_helper() doesn't correctly + * handle combining unaligned memory accesses: see QEMU issue + * https://gitlab.com/qemu-project/qemu/-/issues/360 for all the + * details. + * + * Its only known use is during the A/UX timer calibration loop which + * runs on kernel startup. + */ + switch (v1s->unaligned_hack_state) { + case 0: + /* First half of unaligned access */ + if (addr =3D=3D 0x11fe && size =3D=3D 2) { + v1s->unaligned_hack_state =3D 1; + trace_via1_unaligned_hack_state(v1s->unaligned_hack_state); + return true; + } + return false; + case 1: + /* Second half of unaligned access */ + if (addr =3D=3D 0x1200 && size =3D=3D 2) { + v1s->unaligned_hack_state =3D 0; + trace_via1_unaligned_hack_state(v1s->unaligned_hack_state); + return true; + } + return false; + default: + g_assert_not_reached(); + } +} + static uint64_t mos6522_q800_via1_read(void *opaque, hwaddr addr, unsigned= size) { MOS6522Q800VIA1State *v1s =3D MOS6522_Q800_VIA1(opaque); MOS6522State *ms =3D MOS6522(v1s); int64_t now; uint64_t ret; + hwaddr oldaddr =3D addr; =20 addr =3D (addr >> 9) & 0xf; ret =3D mos6522_read(ms, addr, size); @@ -1059,6 +1094,12 @@ static uint64_t mos6522_q800_via1_read(void *opaque,= hwaddr addr, unsigned size) } break; } + + if (via1_unaligned_hack_state(v1s, oldaddr, size)) { + /* Splat return byte into word to fix unaligned access combine */ + ret |=3D ret << 8; + } + return ret; } =20 @@ -1126,6 +1167,7 @@ static const MemoryRegionOps mos6522_q800_via1_ops = =3D { .valid =3D { .min_access_size =3D 1, .max_access_size =3D 4, + .unaligned =3D true, /* For VIA1 via1_unaligned_hack_state() */ }, }; =20 diff --git a/hw/misc/trace-events b/hw/misc/trace-events index 7206bd5d93..8867cef356 100644 --- a/hw/misc/trace-events +++ b/hw/misc/trace-events @@ -252,6 +252,7 @@ via1_adb_poll(uint8_t data, const char *vadbint, int st= atus, int index, int size via1_adb_netbsd_enum_hack(void) "using NetBSD enum hack" via1_auxmode(int mode) "setting auxmode to %d" via1_timer_hack_state(int state) "setting timer_hack_state to %d" +via1_unaligned_hack_state(int state) "setting unaligned_hack_state to %d" =20 # grlib_ahb_apb_pnp.c grlib_ahb_pnp_read(uint64_t addr, unsigned size, uint32_t value) "AHB PnP = read addr:0x%03"PRIx64" size:%u data:0x%08x" diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h index 63cdcf7c69..0a12737552 100644 --- a/include/hw/misc/mac_via.h +++ b/include/hw/misc/mac_via.h @@ -77,8 +77,10 @@ struct MOS6522Q800VIA1State { =20 /* SETUPTIMEK hack */ int timer_hack_state; -}; =20 + /* Unaligned access hack */ + int unaligned_hack_state; +}; =20 /* VIA 2 */ #define VIA2_IRQ_SCSI_DATA_BIT CA2_INT_BIT --=20 2.30.2