From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646824301499125.93403144759827; Wed, 9 Mar 2022 03:11:41 -0800 (PST) Received: from localhost ([::1]:33544 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuEG-0000de-7N for importer@patchew.org; Wed, 09 Mar 2022 06:11:40 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40822) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBb-00067E-9X for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:08:55 -0500 Received: from [2001:41c9:1:41f::167] (port=35662 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBX-0005BU-AQ for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:08:53 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuAp-000CWr-SP; Wed, 09 Mar 2022 11:08:12 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:10 +0000 Message-Id: <20220309110831.18443-2-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-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:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 01/22] mos6522: add defines for IFR bit flags X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646824303232100003 These are intended to make it easier to see how the physical control lines are wired for each instance. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20220305150957.5053-2-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- include/hw/misc/mos6522.h | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/include/hw/misc/mos6522.h b/include/hw/misc/mos6522.h index fc95d22b0f..be5c90d24d 100644 --- a/include/hw/misc/mos6522.h +++ b/include/hw/misc/mos6522.h @@ -41,13 +41,21 @@ #define IER_SET 0x80 /* set bits in IER */ #define IER_CLR 0 /* clear bits in IER */ =20 -#define CA2_INT 0x01 -#define CA1_INT 0x02 -#define SR_INT 0x04 /* Shift register full/empty */ -#define CB2_INT 0x08 -#define CB1_INT 0x10 -#define T2_INT 0x20 /* Timer 2 interrupt */ -#define T1_INT 0x40 /* Timer 1 interrupt */ +#define CA2_INT_BIT 0 +#define CA1_INT_BIT 1 +#define SR_INT_BIT 2 /* Shift register full/empty */ +#define CB2_INT_BIT 3 +#define CB1_INT_BIT 4 +#define T2_INT_BIT 5 /* Timer 2 interrupt */ +#define T1_INT_BIT 6 /* Timer 1 interrupt */ + +#define CA2_INT BIT(CA2_INT_BIT) +#define CA1_INT BIT(CA1_INT_BIT) +#define SR_INT BIT(SR_INT_BIT) +#define CB2_INT BIT(CB2_INT_BIT) +#define CB1_INT BIT(CB1_INT_BIT) +#define T2_INT BIT(T2_INT_BIT) +#define T1_INT BIT(T1_INT_BIT) =20 /* Bits in ACR */ #define T1MODE 0xc0 /* Timer 1 mode */ --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646824468449207.32736599583438; Wed, 9 Mar 2022 03:14:28 -0800 (PST) Received: from localhost ([::1]:41982 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuGy-0006XA-CU for importer@patchew.org; Wed, 09 Mar 2022 06:14:28 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40824) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBb-00067F-9h for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:08:55 -0500 Received: from [2001:41c9:1:41f::167] (port=35664 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBZ-0005BX-3j for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:08:54 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuAu-000CWr-36; Wed, 09 Mar 2022 11:08:12 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:11 +0000 Message-Id: <20220309110831.18443-3-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 02/22] mac_via: use IFR bit flag constants for VIA1 IRQs X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646824470296100001 Content-Type: text/plain; charset="utf-8" This allows us to easily see how the physical control lines are mapped to t= he IFR bit flags. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Message-Id: <20220305150957.5053-3-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- include/hw/misc/mac_via.h | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h index b445565866..b0535c84da 100644 --- a/include/hw/misc/mac_via.h +++ b/include/hw/misc/mac_via.h @@ -18,19 +18,19 @@ #define VIA_SIZE 0x2000 =20 /* VIA 1 */ -#define VIA1_IRQ_ONE_SECOND_BIT 0 -#define VIA1_IRQ_60HZ_BIT 1 -#define VIA1_IRQ_ADB_READY_BIT 2 -#define VIA1_IRQ_ADB_DATA_BIT 3 -#define VIA1_IRQ_ADB_CLOCK_BIT 4 +#define VIA1_IRQ_ONE_SECOND_BIT CA2_INT_BIT +#define VIA1_IRQ_60HZ_BIT CA1_INT_BIT +#define VIA1_IRQ_ADB_READY_BIT SR_INT_BIT +#define VIA1_IRQ_ADB_DATA_BIT CB2_INT_BIT +#define VIA1_IRQ_ADB_CLOCK_BIT CB1_INT_BIT =20 #define VIA1_IRQ_NB 8 =20 -#define VIA1_IRQ_ONE_SECOND (1 << VIA1_IRQ_ONE_SECOND_BIT) -#define VIA1_IRQ_60HZ (1 << VIA1_IRQ_60HZ_BIT) -#define VIA1_IRQ_ADB_READY (1 << VIA1_IRQ_ADB_READY_BIT) -#define VIA1_IRQ_ADB_DATA (1 << VIA1_IRQ_ADB_DATA_BIT) -#define VIA1_IRQ_ADB_CLOCK (1 << VIA1_IRQ_ADB_CLOCK_BIT) +#define VIA1_IRQ_ONE_SECOND BIT(VIA1_IRQ_ONE_SECOND_BIT) +#define VIA1_IRQ_60HZ BIT(VIA1_IRQ_60HZ_BIT) +#define VIA1_IRQ_ADB_READY BIT(VIA1_IRQ_ADB_READY_BIT) +#define VIA1_IRQ_ADB_DATA BIT(VIA1_IRQ_ADB_DATA_BIT) +#define VIA1_IRQ_ADB_CLOCK BIT(VIA1_IRQ_ADB_CLOCK_BIT) =20 =20 #define TYPE_MOS6522_Q800_VIA1 "mos6522-q800-via1" --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646824304196132.47231598707936; Wed, 9 Mar 2022 03:11:44 -0800 (PST) Received: from localhost ([::1]:33802 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuEJ-0000oN-1S for importer@patchew.org; Wed, 09 Mar 2022 06:11:43 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40844) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBd-0006As-6Z for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:08:57 -0500 Received: from [2001:41c9:1:41f::167] (port=35672 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBb-0005Bp-O4 for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:08:56 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuAu-000CWr-Dq; Wed, 09 Mar 2022 11:08:16 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:12 +0000 Message-Id: <20220309110831.18443-4-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-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:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 03/22] mac_via: use IFR bit flag constants for VIA2 IRQs X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646824305566100001 This allows us to easily see how the physical control lines are mapped to t= he IFR bit flags. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20220305150957.5053-4-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- include/hw/misc/mac_via.h | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h index b0535c84da..0af346366e 100644 --- a/include/hw/misc/mac_via.h +++ b/include/hw/misc/mac_via.h @@ -80,19 +80,18 @@ struct MOS6522Q800VIA1State { =20 =20 /* VIA 2 */ -#define VIA2_IRQ_SCSI_DATA_BIT 0 -#define VIA2_IRQ_NUBUS_BIT 1 -#define VIA2_IRQ_UNUSED_BIT 2 -#define VIA2_IRQ_SCSI_BIT 3 -#define VIA2_IRQ_ASC_BIT 4 +#define VIA2_IRQ_SCSI_DATA_BIT CA2_INT_BIT +#define VIA2_IRQ_NUBUS_BIT CA1_INT_BIT +#define VIA2_IRQ_SCSI_BIT CB2_INT_BIT +#define VIA2_IRQ_ASC_BIT CB1_INT_BIT =20 #define VIA2_IRQ_NB 8 =20 -#define VIA2_IRQ_SCSI_DATA (1 << VIA2_IRQ_SCSI_DATA_BIT) -#define VIA2_IRQ_NUBUS (1 << VIA2_IRQ_NUBUS_BIT) -#define VIA2_IRQ_UNUSED (1 << VIA2_IRQ_SCSI_BIT) -#define VIA2_IRQ_SCSI (1 << VIA2_IRQ_UNUSED_BIT) -#define VIA2_IRQ_ASC (1 << VIA2_IRQ_ASC_BIT) +#define VIA2_IRQ_SCSI_DATA BIT(VIA2_IRQ_SCSI_DATA_BIT) +#define VIA2_IRQ_NUBUS BIT(VIA2_IRQ_NUBUS_BIT) +#define VIA2_IRQ_UNUSED BIT(VIA2_IRQ_SCSI_BIT) +#define VIA2_IRQ_SCSI BIT(VIA2_IRQ_UNUSED_BIT) +#define VIA2_IRQ_ASC BIT(VIA2_IRQ_ASC_BIT) =20 #define VIA2_NUBUS_IRQ_NB 7 =20 --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646824469500713.3506243480114; Wed, 9 Mar 2022 03:14:29 -0800 (PST) Received: from localhost ([::1]:42126 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuGy-0006dn-F1 for importer@patchew.org; Wed, 09 Mar 2022 06:14:28 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40862) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBj-0006Ix-61 for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:04 -0500 Received: from [2001:41c9:1:41f::167] (port=35680 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBf-0005CX-P3 for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:01 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuAy-000CWr-Js; Wed, 09 Mar 2022 11:08:20 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:13 +0000 Message-Id: <20220309110831.18443-5-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 04/22] mos6522: switch over to use qdev gpios for IRQs X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646824470498100003 Content-Type: text/plain; charset="utf-8" For historical reasons each mos6522 instance implements its own setting and update of the IFR flag bits using methods exposed by MOS6522DeviceClass. As of today this is no longer required, and it is now possible to implement the mos6522 IRQs as standard qdev gpios. Switch over to use qdev gpios for the mos6522 device and update all instanc= es accordingly. Signed-off-by: Mark Cave-Ayland Reviewed-by: Peter Maydell Reviewed-by: Laurent Vivier Message-Id: <20220305150957.5053-5-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/misc/mac_via.c | 56 +++++++-------------------------------- hw/misc/macio/cuda.c | 5 ++-- hw/misc/macio/pmu.c | 4 +-- hw/misc/mos6522.c | 15 +++++++++++ include/hw/misc/mac_via.h | 5 ---- include/hw/misc/mos6522.h | 2 ++ 6 files changed, 31 insertions(+), 56 deletions(-) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index 71b74c3372..80eb433044 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -325,10 +325,9 @@ static void via1_sixty_hz(void *opaque) { MOS6522Q800VIA1State *v1s =3D opaque; MOS6522State *s =3D MOS6522(v1s); - MOS6522DeviceClass *mdc =3D MOS6522_GET_CLASS(s); + qemu_irq irq =3D qdev_get_gpio_in(DEVICE(s), VIA1_IRQ_60HZ_BIT); =20 - s->ifr |=3D VIA1_IRQ_60HZ; - mdc->update_irq(s); + qemu_set_irq(irq, 1); =20 via1_sixty_hz_update(v1s); } @@ -337,44 +336,13 @@ static void via1_one_second(void *opaque) { MOS6522Q800VIA1State *v1s =3D opaque; MOS6522State *s =3D MOS6522(v1s); - MOS6522DeviceClass *mdc =3D MOS6522_GET_CLASS(s); + qemu_irq irq =3D qdev_get_gpio_in(DEVICE(s), VIA1_IRQ_ONE_SECOND_BIT); =20 - s->ifr |=3D VIA1_IRQ_ONE_SECOND; - mdc->update_irq(s); + qemu_set_irq(irq, 1); =20 via1_one_second_update(v1s); } =20 -static void via1_irq_request(void *opaque, int irq, int level) -{ - MOS6522Q800VIA1State *v1s =3D opaque; - MOS6522State *s =3D MOS6522(v1s); - MOS6522DeviceClass *mdc =3D MOS6522_GET_CLASS(s); - - if (level) { - s->ifr |=3D 1 << irq; - } else { - s->ifr &=3D ~(1 << irq); - } - - mdc->update_irq(s); -} - -static void via2_irq_request(void *opaque, int irq, int level) -{ - MOS6522Q800VIA2State *v2s =3D opaque; - MOS6522State *s =3D MOS6522(v2s); - MOS6522DeviceClass *mdc =3D MOS6522_GET_CLASS(s); - - if (level) { - s->ifr |=3D 1 << irq; - } else { - s->ifr &=3D ~(1 << irq); - } - - mdc->update_irq(s); -} - =20 static void pram_update(MOS6522Q800VIA1State *v1s) { @@ -1061,8 +1029,6 @@ static void mos6522_q800_via1_init(Object *obj) qbus_init((BusState *)&v1s->adb_bus, sizeof(v1s->adb_bus), TYPE_ADB_BUS, DEVICE(v1s), "adb.0"); =20 - qdev_init_gpio_in(DEVICE(obj), via1_irq_request, VIA1_IRQ_NB); - /* A/UX mode */ qdev_init_gpio_out(DEVICE(obj), &v1s->auxmode_irq, 1); } @@ -1150,22 +1116,20 @@ static void mos6522_q800_via2_reset(DeviceState *de= v) ms->a =3D 0x7f; } =20 -static void via2_nubus_irq_request(void *opaque, int irq, int level) +static void via2_nubus_irq_request(void *opaque, int n, int level) { MOS6522Q800VIA2State *v2s =3D opaque; MOS6522State *s =3D MOS6522(v2s); - MOS6522DeviceClass *mdc =3D MOS6522_GET_CLASS(s); + qemu_irq irq =3D qdev_get_gpio_in(DEVICE(s), VIA2_IRQ_NUBUS_BIT); =20 if (level) { /* Port A nubus IRQ inputs are active LOW */ - s->a &=3D ~(1 << irq); - s->ifr |=3D 1 << VIA2_IRQ_NUBUS_BIT; + s->a &=3D ~(1 << n); } else { - s->a |=3D (1 << irq); - s->ifr &=3D ~(1 << VIA2_IRQ_NUBUS_BIT); + s->a |=3D (1 << n); } =20 - mdc->update_irq(s); + qemu_set_irq(irq, level); } =20 static void mos6522_q800_via2_init(Object *obj) @@ -1177,8 +1141,6 @@ static void mos6522_q800_via2_init(Object *obj) "via2", VIA_SIZE); sysbus_init_mmio(sbd, &v2s->via_mem); =20 - qdev_init_gpio_in(DEVICE(obj), via2_irq_request, VIA2_IRQ_NB); - qdev_init_gpio_in_named(DEVICE(obj), via2_nubus_irq_request, "nubus-ir= q", VIA2_NUBUS_IRQ_NB); } diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c index 233daf1405..693fc82e05 100644 --- a/hw/misc/macio/cuda.c +++ b/hw/misc/macio/cuda.c @@ -24,6 +24,7 @@ */ =20 #include "qemu/osdep.h" +#include "hw/irq.h" #include "hw/ppc/mac.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" @@ -96,9 +97,9 @@ static void cuda_set_sr_int(void *opaque) CUDAState *s =3D opaque; MOS6522CUDAState *mcs =3D &s->mos6522_cuda; MOS6522State *ms =3D MOS6522(mcs); - MOS6522DeviceClass *mdc =3D MOS6522_GET_CLASS(ms); + qemu_irq irq =3D qdev_get_gpio_in(DEVICE(ms), SR_INT_BIT); =20 - mdc->set_sr_int(ms); + qemu_set_irq(irq, 1); } =20 static void cuda_delay_set_sr_int(CUDAState *s) diff --git a/hw/misc/macio/pmu.c b/hw/misc/macio/pmu.c index 76c608ee19..b210068ab7 100644 --- a/hw/misc/macio/pmu.c +++ b/hw/misc/macio/pmu.c @@ -75,9 +75,9 @@ static void via_set_sr_int(void *opaque) PMUState *s =3D opaque; MOS6522PMUState *mps =3D MOS6522_PMU(&s->mos6522_pmu); MOS6522State *ms =3D MOS6522(mps); - MOS6522DeviceClass *mdc =3D MOS6522_GET_CLASS(ms); + qemu_irq irq =3D qdev_get_gpio_in(DEVICE(ms), SR_INT_BIT); =20 - mdc->set_sr_int(ms); + qemu_set_irq(irq, 1); } =20 static void pmu_update_extirq(PMUState *s) diff --git a/hw/misc/mos6522.c b/hw/misc/mos6522.c index 1c57332b40..6be6853dc2 100644 --- a/hw/misc/mos6522.c +++ b/hw/misc/mos6522.c @@ -52,6 +52,19 @@ static void mos6522_update_irq(MOS6522State *s) } } =20 +static void mos6522_set_irq(void *opaque, int n, int level) +{ + MOS6522State *s =3D MOS6522(opaque); + + if (level) { + s->ifr |=3D 1 << n; + } else { + s->ifr &=3D ~(1 << n); + } + + mos6522_update_irq(s); +} + static uint64_t get_counter_value(MOS6522State *s, MOS6522Timer *ti) { MOS6522DeviceClass *mdc =3D MOS6522_GET_CLASS(s); @@ -488,6 +501,8 @@ static void mos6522_init(Object *obj) =20 s->timers[0].timer =3D timer_new_ns(QEMU_CLOCK_VIRTUAL, mos6522_timer1= , s); s->timers[1].timer =3D timer_new_ns(QEMU_CLOCK_VIRTUAL, mos6522_timer2= , s); + + qdev_init_gpio_in(DEVICE(obj), mos6522_set_irq, VIA_NUM_INTS); } =20 static void mos6522_finalize(Object *obj) diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h index 0af346366e..5fe7a7f592 100644 --- a/include/hw/misc/mac_via.h +++ b/include/hw/misc/mac_via.h @@ -24,8 +24,6 @@ #define VIA1_IRQ_ADB_DATA_BIT CB2_INT_BIT #define VIA1_IRQ_ADB_CLOCK_BIT CB1_INT_BIT =20 -#define VIA1_IRQ_NB 8 - #define VIA1_IRQ_ONE_SECOND BIT(VIA1_IRQ_ONE_SECOND_BIT) #define VIA1_IRQ_60HZ BIT(VIA1_IRQ_60HZ_BIT) #define VIA1_IRQ_ADB_READY BIT(VIA1_IRQ_ADB_READY_BIT) @@ -42,7 +40,6 @@ struct MOS6522Q800VIA1State { =20 MemoryRegion via_mem; =20 - qemu_irq irqs[VIA1_IRQ_NB]; qemu_irq auxmode_irq; uint8_t last_b; =20 @@ -85,8 +82,6 @@ struct MOS6522Q800VIA1State { #define VIA2_IRQ_SCSI_BIT CB2_INT_BIT #define VIA2_IRQ_ASC_BIT CB1_INT_BIT =20 -#define VIA2_IRQ_NB 8 - #define VIA2_IRQ_SCSI_DATA BIT(VIA2_IRQ_SCSI_DATA_BIT) #define VIA2_IRQ_NUBUS BIT(VIA2_IRQ_NUBUS_BIT) #define VIA2_IRQ_UNUSED BIT(VIA2_IRQ_SCSI_BIT) diff --git a/include/hw/misc/mos6522.h b/include/hw/misc/mos6522.h index be5c90d24d..f38ae2b0f0 100644 --- a/include/hw/misc/mos6522.h +++ b/include/hw/misc/mos6522.h @@ -57,6 +57,8 @@ #define T2_INT BIT(T2_INT_BIT) #define T1_INT BIT(T1_INT_BIT) =20 +#define VIA_NUM_INTS 5 + /* Bits in ACR */ #define T1MODE 0xc0 /* Timer 1 mode */ #define T1MODE_CONT 0x40 /* continuous interrupts */ --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646824464089423.23604245626007; Wed, 9 Mar 2022 03:14:24 -0800 (PST) Received: from localhost ([::1]:41700 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuGu-0006Ls-1y for importer@patchew.org; Wed, 09 Mar 2022 06:14:24 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40888) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBl-0006JT-A1 for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:08 -0500 Received: from [2001:41c9:1:41f::167] (port=35688 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBj-0005E8-Sr for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:05 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuB2-000CWr-Ly; Wed, 09 Mar 2022 11:08:24 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:14 +0000 Message-Id: <20220309110831.18443-6-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 05/22] mos6522: remove update_irq() and set_sr_int() methods from MOS6522DeviceClass X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646824465630100001 Content-Type: text/plain; charset="utf-8" Now that the mos6522 IRQs are managed using standard qdev gpios these metho= ds are no longer required. Signed-off-by: Mark Cave-Ayland Reviewed-by: Peter Maydell Reviewed-by: Laurent Vivier Message-Id: <20220305150957.5053-6-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/misc/mos6522.c | 9 --------- include/hw/misc/mos6522.h | 2 -- 2 files changed, 11 deletions(-) diff --git a/hw/misc/mos6522.c b/hw/misc/mos6522.c index 6be6853dc2..4c3147a7d1 100644 --- a/hw/misc/mos6522.c +++ b/hw/misc/mos6522.c @@ -208,13 +208,6 @@ static void mos6522_timer2(void *opaque) mos6522_update_irq(s); } =20 -static void mos6522_set_sr_int(MOS6522State *s) -{ - trace_mos6522_set_sr_int(); - s->ifr |=3D SR_INT; - mos6522_update_irq(s); -} - static uint64_t mos6522_get_counter_value(MOS6522State *s, MOS6522Timer *t= i) { return muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) - ti->load_time, @@ -527,10 +520,8 @@ static void mos6522_class_init(ObjectClass *oc, void *= data) dc->vmsd =3D &vmstate_mos6522; device_class_set_props(dc, mos6522_properties); mdc->parent_reset =3D dc->reset; - mdc->set_sr_int =3D mos6522_set_sr_int; mdc->portB_write =3D mos6522_portB_write; mdc->portA_write =3D mos6522_portA_write; - mdc->update_irq =3D mos6522_update_irq; mdc->get_timer1_counter_value =3D mos6522_get_counter_value; mdc->get_timer2_counter_value =3D mos6522_get_counter_value; mdc->get_timer1_load_time =3D mos6522_get_load_time; diff --git a/include/hw/misc/mos6522.h b/include/hw/misc/mos6522.h index f38ae2b0f0..f0a614898e 100644 --- a/include/hw/misc/mos6522.h +++ b/include/hw/misc/mos6522.h @@ -140,10 +140,8 @@ struct MOS6522DeviceClass { DeviceClass parent_class; =20 DeviceReset parent_reset; - void (*set_sr_int)(MOS6522State *dev); void (*portB_write)(MOS6522State *dev); void (*portA_write)(MOS6522State *dev); - void (*update_irq)(MOS6522State *dev); /* These are used to influence the CUDA MacOS timebase calibration */ uint64_t (*get_timer1_counter_value)(MOS6522State *dev, MOS6522Timer *= ti); uint64_t (*get_timer2_counter_value)(MOS6522State *dev, MOS6522Timer *= ti); --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646824697086739.8190840769316; Wed, 9 Mar 2022 03:18:17 -0800 (PST) Received: from localhost ([::1]:50460 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuKd-0004TV-Ki for importer@patchew.org; Wed, 09 Mar 2022 06:18:15 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40902) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBp-0006Jh-0T for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:12 -0500 Received: from [2001:41c9:1:41f::167] (port=35696 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBn-0005ES-He for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:08 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuB6-000CWr-Sg; Wed, 09 Mar 2022 11:08:28 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:15 +0000 Message-Id: <20220309110831.18443-7-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 06/22] mos6522: use device_class_set_parent_reset() to propagate reset to parent X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646824697870100003 Content-Type: text/plain; charset="utf-8" Switch from using a legacy approach to the more formal approach for propaga= ting device reset to the parent. Signed-off-by: Mark Cave-Ayland Reviewed-by: Peter Maydell Reviewed-by: Laurent Vivier Message-Id: <20220305150957.5053-7-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/misc/mac_via.c | 7 +++++-- hw/misc/macio/cuda.c | 3 ++- hw/misc/macio/pmu.c | 3 ++- hw/misc/mos6522.c | 1 - 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index 80eb433044..3f473c3fcf 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -1076,9 +1076,11 @@ static Property mos6522_q800_via1_properties[] =3D { static void mos6522_q800_via1_class_init(ObjectClass *oc, void *data) { DeviceClass *dc =3D DEVICE_CLASS(oc); + MOS6522DeviceClass *mdc =3D MOS6522_CLASS(oc); =20 dc->realize =3D mos6522_q800_via1_realize; - dc->reset =3D mos6522_q800_via1_reset; + device_class_set_parent_reset(dc, mos6522_q800_via1_reset, + &mdc->parent_reset); dc->vmsd =3D &vmstate_q800_via1; device_class_set_props(dc, mos6522_q800_via1_properties); } @@ -1161,7 +1163,8 @@ static void mos6522_q800_via2_class_init(ObjectClass = *oc, void *data) DeviceClass *dc =3D DEVICE_CLASS(oc); MOS6522DeviceClass *mdc =3D MOS6522_CLASS(oc); =20 - dc->reset =3D mos6522_q800_via2_reset; + device_class_set_parent_reset(dc, mos6522_q800_via2_reset, + &mdc->parent_reset); dc->vmsd =3D &vmstate_q800_via2; mdc->portB_write =3D mos6522_q800_via2_portB_write; } diff --git a/hw/misc/macio/cuda.c b/hw/misc/macio/cuda.c index 693fc82e05..1498113cfc 100644 --- a/hw/misc/macio/cuda.c +++ b/hw/misc/macio/cuda.c @@ -606,7 +606,8 @@ static void mos6522_cuda_class_init(ObjectClass *oc, vo= id *data) DeviceClass *dc =3D DEVICE_CLASS(oc); MOS6522DeviceClass *mdc =3D MOS6522_CLASS(oc); =20 - dc->reset =3D mos6522_cuda_reset; + device_class_set_parent_reset(dc, mos6522_cuda_reset, + &mdc->parent_reset); mdc->portB_write =3D mos6522_cuda_portB_write; mdc->get_timer1_counter_value =3D cuda_get_counter_value; mdc->get_timer2_counter_value =3D cuda_get_counter_value; diff --git a/hw/misc/macio/pmu.c b/hw/misc/macio/pmu.c index b210068ab7..5b1ec100e2 100644 --- a/hw/misc/macio/pmu.c +++ b/hw/misc/macio/pmu.c @@ -850,7 +850,8 @@ static void mos6522_pmu_class_init(ObjectClass *oc, voi= d *data) DeviceClass *dc =3D DEVICE_CLASS(oc); MOS6522DeviceClass *mdc =3D MOS6522_CLASS(oc); =20 - dc->reset =3D mos6522_pmu_reset; + device_class_set_parent_reset(dc, mos6522_pmu_reset, + &mdc->parent_reset); mdc->portB_write =3D mos6522_pmu_portB_write; mdc->portA_write =3D mos6522_pmu_portA_write; } diff --git a/hw/misc/mos6522.c b/hw/misc/mos6522.c index 4c3147a7d1..093cc83dcf 100644 --- a/hw/misc/mos6522.c +++ b/hw/misc/mos6522.c @@ -519,7 +519,6 @@ static void mos6522_class_init(ObjectClass *oc, void *d= ata) dc->reset =3D mos6522_reset; dc->vmsd =3D &vmstate_mos6522; device_class_set_props(dc, mos6522_properties); - mdc->parent_reset =3D dc->reset; mdc->portB_write =3D mos6522_portB_write; mdc->portA_write =3D mos6522_portA_write; mdc->get_timer1_counter_value =3D mos6522_get_counter_value; --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16468249108420.46590974964829; Wed, 9 Mar 2022 03:21:50 -0800 (PST) Received: from localhost ([::1]:58232 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuO5-0001IF-PV for importer@patchew.org; Wed, 09 Mar 2022 06:21:49 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40932) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBt-0006NU-4y for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:14 -0500 Received: from [2001:41c9:1:41f::167] (port=35704 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBr-0005Er-Gs for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:12 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuBA-000CWr-EW; Wed, 09 Mar 2022 11:08:32 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:16 +0000 Message-Id: <20220309110831.18443-8-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-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:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 07/22] mos6522: add register names to register read/write trace events X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646824911592100005 This helps to follow how the guest is programming the mos6522 when debuggin= g. Signed-off-by: Mark Cave-Ayland Reviewed-by: Peter Maydell Reviewed-by: Laurent Vivier Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20220305150957.5053-8-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/misc/mos6522.c | 13 ++++++++++--- hw/misc/trace-events | 4 ++-- include/hw/misc/mos6522.h | 2 ++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/hw/misc/mos6522.c b/hw/misc/mos6522.c index 093cc83dcf..9c8d4ca6ad 100644 --- a/hw/misc/mos6522.c +++ b/hw/misc/mos6522.c @@ -36,6 +36,12 @@ #include "qemu/module.h" #include "trace.h" =20 + +static const char *mos6522_reg_names[MOS6522_NUM_REGS] =3D { + "ORB", "ORA", "DDRB", "DDRA", "T1CL", "T1CH", "T1LL", "T1LH", + "T2CL", "T2CH", "SR", "ACR", "PCR", "IFR", "IER", "ANH" +}; + /* XXX: implement all timer modes */ =20 static void mos6522_timer1_update(MOS6522State *s, MOS6522Timer *ti, @@ -310,7 +316,7 @@ uint64_t mos6522_read(void *opaque, hwaddr addr, unsign= ed size) } =20 if (addr !=3D VIA_REG_IFR || val !=3D 0) { - trace_mos6522_read(addr, val); + trace_mos6522_read(addr, mos6522_reg_names[addr], val); } =20 return val; @@ -321,7 +327,7 @@ void mos6522_write(void *opaque, hwaddr addr, uint64_t = val, unsigned size) MOS6522State *s =3D opaque; MOS6522DeviceClass *mdc =3D MOS6522_GET_CLASS(s); =20 - trace_mos6522_write(addr, val); + trace_mos6522_write(addr, mos6522_reg_names[addr], val); =20 switch (addr) { case VIA_REG_B: @@ -484,7 +490,8 @@ static void mos6522_init(Object *obj) MOS6522State *s =3D MOS6522(obj); int i; =20 - memory_region_init_io(&s->mem, obj, &mos6522_ops, s, "mos6522", 0x10); + memory_region_init_io(&s->mem, obj, &mos6522_ops, s, "mos6522", + MOS6522_NUM_REGS); sysbus_init_mmio(sbd, &s->mem); sysbus_init_irq(sbd, &s->irq); =20 diff --git a/hw/misc/trace-events b/hw/misc/trace-events index fb5a389780..bd52cfc110 100644 --- a/hw/misc/trace-events +++ b/hw/misc/trace-events @@ -95,8 +95,8 @@ imx7_gpr_write(uint64_t offset, uint64_t value) "addr 0x%= 08" PRIx64 "value 0x%08 mos6522_set_counter(int index, unsigned int val) "T%d.counter=3D%d" mos6522_get_next_irq_time(uint16_t latch, int64_t d, int64_t delta) "latch= =3D%d counter=3D0x%"PRId64 " delta_next=3D0x%"PRId64 mos6522_set_sr_int(void) "set sr_int" -mos6522_write(uint64_t addr, uint64_t val) "reg=3D0x%"PRIx64 " val=3D0x%"P= RIx64 -mos6522_read(uint64_t addr, unsigned val) "reg=3D0x%"PRIx64 " val=3D0x%x" +mos6522_write(uint64_t addr, const char *name, uint64_t val) "reg=3D0x%"PR= Ix64 " [%s] val=3D0x%"PRIx64 +mos6522_read(uint64_t addr, const char *name, unsigned val) "reg=3D0x%"PRI= x64 " [%s] val=3D0x%x" =20 # npcm7xx_clk.c npcm7xx_clk_read(uint64_t offset, uint32_t value) " offset: 0x%04" PRIx64 = " value: 0x%08" PRIx32 diff --git a/include/hw/misc/mos6522.h b/include/hw/misc/mos6522.h index f0a614898e..bbaec4ede2 100644 --- a/include/hw/misc/mos6522.h +++ b/include/hw/misc/mos6522.h @@ -32,6 +32,8 @@ #include "hw/input/adb.h" #include "qom/object.h" =20 +#define MOS6522_NUM_REGS 16 + /* Bits in ACR */ #define SR_CTRL 0x1c /* Shift register control bits */ #define SR_EXT 0x0c /* Shift on external clock */ --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646825078610730.97287722855; Wed, 9 Mar 2022 03:24:38 -0800 (PST) Received: from localhost ([::1]:36510 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuQo-0005p8-Fa for importer@patchew.org; Wed, 09 Mar 2022 06:24:38 -0500 Received: from eggs.gnu.org ([209.51.188.92]:40964) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBx-0006PI-0u for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:18 -0500 Received: from [2001:41c9:1:41f::167] (port=35712 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBv-0005FS-At for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:16 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuBE-000CWr-FR; Wed, 09 Mar 2022 11:08:36 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:17 +0000 Message-Id: <20220309110831.18443-9-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 08/22] mos6522: add "info via" HMP command for debugging X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646825080666100001 Content-Type: text/plain; charset="utf-8" This displays detailed information about the device registers and timers to= aid debugging problems with timers and interrupts. Currently the QAPI generators for HumanReadableText don't work correctly if used in qapi/target-misc.json when a non-specified target is built, so for now manually add a hmp_info_via() wrapper until direct support for per-devi= ce HMP/QMP commands is implemented. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Message-Id: <20220305150957.5053-9-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hmp-commands-info.hx | 15 +++++ hw/misc/mos6522.c | 103 +++++++++++++++++++++++++++++++++++ include/hw/misc/mos6522.h | 2 + include/monitor/hmp-target.h | 1 + 4 files changed, 121 insertions(+) diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx index e90f20a107..adfa085a9b 100644 --- a/hmp-commands-info.hx +++ b/hmp-commands-info.hx @@ -879,3 +879,18 @@ SRST ``info sgx`` Show intel SGX information. ERST + +#if defined(TARGET_M68K) || defined(TARGET_PPC) + { + .name =3D "via", + .args_type =3D "", + .params =3D "", + .help =3D "show guest mos6522 VIA devices", + .cmd =3D hmp_info_via, + }, +#endif + +SRST + ``info via`` + Show guest mos6522 VIA devices. +ERST diff --git a/hw/misc/mos6522.c b/hw/misc/mos6522.c index 9c8d4ca6ad..2c20decca1 100644 --- a/hw/misc/mos6522.c +++ b/hw/misc/mos6522.c @@ -30,6 +30,9 @@ #include "hw/misc/mos6522.h" #include "hw/qdev-properties.h" #include "migration/vmstate.h" +#include "monitor/monitor.h" +#include "monitor/hmp.h" +#include "qapi/type-helpers.h" #include "qemu/timer.h" #include "qemu/cutils.h" #include "qemu/log.h" @@ -415,6 +418,106 @@ void mos6522_write(void *opaque, hwaddr addr, uint64_= t val, unsigned size) } } =20 +static int qmp_x_query_via_foreach(Object *obj, void *opaque) +{ + GString *buf =3D opaque; + + if (object_dynamic_cast(obj, TYPE_MOS6522)) { + MOS6522State *s =3D MOS6522(obj); + int64_t now =3D qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); + uint16_t t1counter =3D get_counter(s, &s->timers[0]); + uint16_t t2counter =3D get_counter(s, &s->timers[1]); + + g_string_append_printf(buf, "%s:\n", object_get_typename(obj)); + + g_string_append_printf(buf, " Registers:\n"); + g_string_append_printf(buf, " %-*s: 0x%x\n", 4, + mos6522_reg_names[0], s->b); + g_string_append_printf(buf, " %-*s: 0x%x\n", 4, + mos6522_reg_names[1], s->a); + g_string_append_printf(buf, " %-*s: 0x%x\n", 4, + mos6522_reg_names[2], s->dirb); + g_string_append_printf(buf, " %-*s: 0x%x\n", 4, + mos6522_reg_names[3], s->dira); + g_string_append_printf(buf, " %-*s: 0x%x\n", 4, + mos6522_reg_names[4], t1counter & 0xff); + g_string_append_printf(buf, " %-*s: 0x%x\n", 4, + mos6522_reg_names[5], t1counter >> 8); + g_string_append_printf(buf, " %-*s: 0x%x\n", 4, + mos6522_reg_names[6], + s->timers[0].latch & 0xff); + g_string_append_printf(buf, " %-*s: 0x%x\n", 4, + mos6522_reg_names[7], + s->timers[0].latch >> 8); + g_string_append_printf(buf, " %-*s: 0x%x\n", 4, + mos6522_reg_names[8], t2counter & 0xff); + g_string_append_printf(buf, " %-*s: 0x%x\n", 4, + mos6522_reg_names[9], t2counter >> 8); + g_string_append_printf(buf, " %-*s: 0x%x\n", 4, + mos6522_reg_names[10], s->sr); + g_string_append_printf(buf, " %-*s: 0x%x\n", 4, + mos6522_reg_names[11], s->acr); + g_string_append_printf(buf, " %-*s: 0x%x\n", 4, + mos6522_reg_names[12], s->pcr); + g_string_append_printf(buf, " %-*s: 0x%x\n", 4, + mos6522_reg_names[13], s->ifr); + g_string_append_printf(buf, " %-*s: 0x%x\n", 4, + mos6522_reg_names[14], s->ier); + + g_string_append_printf(buf, " Timers:\n"); + g_string_append_printf(buf, " Using current time now(ns)=3D%"PR= Id64 + "\n", now); + g_string_append_printf(buf, " T1 freq(hz)=3D%"PRId64 + " mode=3D%s" + " counter=3D0x%x" + " latch=3D0x%x\n" + " load_time(ns)=3D%"PRId64 + " next_irq_time(ns)=3D%"PRId64 "\n", + s->timers[0].frequency, + ((s->acr & T1MODE) =3D=3D T1MODE_CONT) ? "c= ontinuous" + : "one-s= hot", + t1counter, + s->timers[0].latch, + s->timers[0].load_time, + get_next_irq_time(s, &s->timers[0], now)); + g_string_append_printf(buf, " T2 freq(hz)=3D%"PRId64 + " mode=3D%s" + " counter=3D0x%x" + " latch=3D0x%x\n" + " load_time(ns)=3D%"PRId64 + " next_irq_time(ns)=3D%"PRId64 "\n", + s->timers[1].frequency, + "one-shot", + t2counter, + s->timers[1].latch, + s->timers[1].load_time, + get_next_irq_time(s, &s->timers[1], now)); + } + + return 0; +} + +static HumanReadableText *qmp_x_query_via(Error **errp) +{ + g_autoptr(GString) buf =3D g_string_new(""); + + object_child_foreach_recursive(object_get_root(), + qmp_x_query_via_foreach, buf); + + return human_readable_text_from_str(buf); +} + +void hmp_info_via(Monitor *mon, const QDict *qdict) +{ + Error *err =3D NULL; + g_autoptr(HumanReadableText) info =3D qmp_x_query_via(&err); + + if (hmp_handle_error(mon, err)) { + return; + } + monitor_printf(mon, "%s", info->human_readable_text); +} + static const MemoryRegionOps mos6522_ops =3D { .read =3D mos6522_read, .write =3D mos6522_write, diff --git a/include/hw/misc/mos6522.h b/include/hw/misc/mos6522.h index bbaec4ede2..193a3dc870 100644 --- a/include/hw/misc/mos6522.h +++ b/include/hw/misc/mos6522.h @@ -157,4 +157,6 @@ extern const VMStateDescription vmstate_mos6522; uint64_t mos6522_read(void *opaque, hwaddr addr, unsigned size); void mos6522_write(void *opaque, hwaddr addr, uint64_t val, unsigned size); =20 +void hmp_info_via(Monitor *mon, const QDict *qdict); + #endif /* MOS6522_H */ diff --git a/include/monitor/hmp-target.h b/include/monitor/hmp-target.h index ffdc15a34b..1891a19b21 100644 --- a/include/monitor/hmp-target.h +++ b/include/monitor/hmp-target.h @@ -50,5 +50,6 @@ void hmp_mce(Monitor *mon, const QDict *qdict); void hmp_info_local_apic(Monitor *mon, const QDict *qdict); void hmp_info_sev(Monitor *mon, const QDict *qdict); void hmp_info_sgx(Monitor *mon, const QDict *qdict); +void hmp_info_via(Monitor *mon, const QDict *qdict); =20 #endif /* MONITOR_HMP_TARGET_H */ --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646825318307231.0345024435245; Wed, 9 Mar 2022 03:28:38 -0800 (PST) Received: from localhost ([::1]:42172 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuUf-0001OP-BF for importer@patchew.org; Wed, 09 Mar 2022 06:28:37 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41010) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCB-0006Yw-2n for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:31 -0500 Received: from [2001:41c9:1:41f::167] (port=35720 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuBz-0005Fy-NF for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:22 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuBI-000CWr-BN; Wed, 09 Mar 2022 11:08:40 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:18 +0000 Message-Id: <20220309110831.18443-10-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 09/22] mos6522: record last_irq_levels in mos6522_set_irq() X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646825319027100001 Content-Type: text/plain; charset="utf-8" To detect edge-triggered IRQs it is necessary to store the last state of ea= ch IRQ in a last_irq_levels bitmap. Note: this is a migration break for machines which use mos6522 instances wh= ich are g3beige/mac99 (PPC) and q800 (m68k). Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Message-Id: <20220305150957.5053-10-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/misc/mos6522.c | 11 +++++++++-- include/hw/misc/mos6522.h | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/hw/misc/mos6522.c b/hw/misc/mos6522.c index 2c20decca1..c67123f864 100644 --- a/hw/misc/mos6522.c +++ b/hw/misc/mos6522.c @@ -72,6 +72,12 @@ static void mos6522_set_irq(void *opaque, int n, int lev= el) } =20 mos6522_update_irq(s); + + if (level) { + s->last_irq_levels |=3D 1 << n; + } else { + s->last_irq_levels &=3D ~(1 << n); + } } =20 static uint64_t get_counter_value(MOS6522State *s, MOS6522Timer *ti) @@ -544,8 +550,8 @@ static const VMStateDescription vmstate_mos6522_timer = =3D { =20 const VMStateDescription vmstate_mos6522 =3D { .name =3D "mos6522", - .version_id =3D 0, - .minimum_version_id =3D 0, + .version_id =3D 1, + .minimum_version_id =3D 1, .fields =3D (VMStateField[]) { VMSTATE_UINT8(a, MOS6522State), VMSTATE_UINT8(b, MOS6522State), @@ -556,6 +562,7 @@ const VMStateDescription vmstate_mos6522 =3D { VMSTATE_UINT8(pcr, MOS6522State), VMSTATE_UINT8(ifr, MOS6522State), VMSTATE_UINT8(ier, MOS6522State), + VMSTATE_UINT8(last_irq_levels, MOS6522State), VMSTATE_STRUCT_ARRAY(timers, MOS6522State, 2, 0, vmstate_mos6522_timer, MOS6522Timer), VMSTATE_END_OF_LIST() diff --git a/include/hw/misc/mos6522.h b/include/hw/misc/mos6522.h index 193a3dc870..babea99e06 100644 --- a/include/hw/misc/mos6522.h +++ b/include/hw/misc/mos6522.h @@ -133,6 +133,7 @@ struct MOS6522State { uint64_t frequency; =20 qemu_irq irq; + uint8_t last_irq_levels; }; =20 #define TYPE_MOS6522 "mos6522" --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646825467813364.3596872064785; Wed, 9 Mar 2022 03:31:07 -0800 (PST) Received: from localhost ([::1]:46436 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuX0-0004GX-QP for importer@patchew.org; Wed, 09 Mar 2022 06:31:06 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41032) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCC-0006c7-Cq for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:32 -0500 Received: from [2001:41c9:1:41f::167] (port=35728 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCA-0005GD-Qi for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:32 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuBM-000CWr-Ho; Wed, 09 Mar 2022 11:08:44 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:19 +0000 Message-Id: <20220309110831.18443-11-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-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:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 10/22] mac_via: make SCSI_DATA (DRQ) bit live rather than latched X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646825469638100001 The VIA2 on the Q800 machine is not a separate chip as in older Macs but in= stead is integrated into the on-board logic. From analysing the SCSI routines in = the MacOS toolbox ROM (and to a lesser extent NetBSD and Linux) the expectation= seems to be that the SCSI_DATA (DRQ) bit is live on the Q800 and not latched. Fortunately we can use the recently introduced mos6522 last_irq_levels vari= able which tracks the edge-triggered state to return the SCSI_DATA (DRQ) bit liv= e to the guest OS. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <20220305150957.5053-11-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/misc/mac_via.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index 3f473c3fcf..d8b35e6ca6 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -906,9 +906,24 @@ static uint64_t mos6522_q800_via2_read(void *opaque, h= waddr addr, unsigned size) { MOS6522Q800VIA2State *s =3D MOS6522_Q800_VIA2(opaque); MOS6522State *ms =3D MOS6522(s); + uint64_t val; =20 addr =3D (addr >> 9) & 0xf; - return mos6522_read(ms, addr, size); + val =3D mos6522_read(ms, addr, size); + + switch (addr) { + case VIA_REG_IFR: + /* + * On a Q800 an emulated VIA2 is integrated into the onboard logic= . The + * expectation of most OSs is that the DRQ bit is live, rather than + * latched as it would be on a real VIA so do the same here. + */ + val &=3D ~VIA2_IRQ_SCSI_DATA; + val |=3D (ms->last_irq_levels & VIA2_IRQ_SCSI_DATA); + break; + } + + return val; } =20 static void mos6522_q800_via2_write(void *opaque, hwaddr addr, uint64_t va= l, --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646824695166555.2914316601955; Wed, 9 Mar 2022 03:18:15 -0800 (PST) Received: from localhost ([::1]:50168 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuKb-0004GH-GE for importer@patchew.org; Wed, 09 Mar 2022 06:18:13 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41038) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCC-0006d7-RL for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:32 -0500 Received: from [2001:41c9:1:41f::167] (port=35736 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCA-0005GO-RS for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:32 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuBQ-000CWr-GN; Wed, 09 Mar 2022 11:08:48 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:20 +0000 Message-Id: <20220309110831.18443-12-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 11/22] mos6522: implement edge-triggering for CA1/2 and CB1/2 control line IRQs X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646824696335100001 Content-Type: text/plain; charset="utf-8" The mos6522 datasheet describes how the control lines IRQs are edge-trigger= ed according to the configuration in the PCR register. Implement the logic acc= ording to the datasheet so that the interrupt bits in IFR are latched when the edg= e is detected, and cleared when reading portA/portB or writing to IFR as necessa= ry. To maintain bisectibility this change also updates the SCSI, SCSI data, Nub= us and VIA2 60Hz/1Hz clocks in the q800 machine to be negative edge-triggered = as confirmed by the PCR programming in all of Linux, NetBSD and MacOS. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Message-Id: <20220305150957.5053-12-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/m68k/q800.c | 9 +++-- hw/misc/mac_via.c | 15 +++++-- hw/misc/mos6522.c | 82 +++++++++++++++++++++++++++++++++++++-- include/hw/misc/mos6522.h | 15 +++++++ 4 files changed, 109 insertions(+), 12 deletions(-) diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index 55dfe5036f..66ca5c0df6 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -533,10 +533,11 @@ static void q800_init(MachineState *machine) =20 sysbus =3D SYS_BUS_DEVICE(dev); sysbus_realize_and_unref(sysbus, &error_fatal); - sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(via2_dev, - VIA2_IRQ_SCSI_BIT)); - sysbus_connect_irq(sysbus, 1, qdev_get_gpio_in(via2_dev, - VIA2_IRQ_SCSI_DATA_BIT)= ); + /* SCSI and SCSI data IRQs are negative edge triggered */ + sysbus_connect_irq(sysbus, 0, qemu_irq_invert(qdev_get_gpio_in(via2_de= v, + 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); =20 diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index d8b35e6ca6..525e38ce93 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -327,7 +327,9 @@ static void via1_sixty_hz(void *opaque) MOS6522State *s =3D MOS6522(v1s); qemu_irq irq =3D qdev_get_gpio_in(DEVICE(s), VIA1_IRQ_60HZ_BIT); =20 - qemu_set_irq(irq, 1); + /* Negative edge trigger */ + qemu_irq_lower(irq); + qemu_irq_raise(irq); =20 via1_sixty_hz_update(v1s); } @@ -338,7 +340,9 @@ static void via1_one_second(void *opaque) MOS6522State *s =3D MOS6522(v1s); qemu_irq irq =3D qdev_get_gpio_in(DEVICE(s), VIA1_IRQ_ONE_SECOND_BIT); =20 - qemu_set_irq(irq, 1); + /* Negative edge trigger */ + qemu_irq_lower(irq); + qemu_irq_raise(irq); =20 via1_one_second_update(v1s); } @@ -917,9 +921,11 @@ static uint64_t mos6522_q800_via2_read(void *opaque, h= waddr addr, unsigned size) * On a Q800 an emulated VIA2 is integrated into the onboard logic= . The * expectation of most OSs is that the DRQ bit is live, rather than * latched as it would be on a real VIA so do the same here. + * + * Note: DRQ is negative edge triggered */ val &=3D ~VIA2_IRQ_SCSI_DATA; - val |=3D (ms->last_irq_levels & VIA2_IRQ_SCSI_DATA); + val |=3D (~ms->last_irq_levels & VIA2_IRQ_SCSI_DATA); break; } =20 @@ -1146,7 +1152,8 @@ static void via2_nubus_irq_request(void *opaque, int = n, int level) s->a |=3D (1 << n); } =20 - qemu_set_irq(irq, level); + /* Negative edge trigger */ + qemu_set_irq(irq, !level); } =20 static void mos6522_q800_via2_init(Object *obj) diff --git a/hw/misc/mos6522.c b/hw/misc/mos6522.c index c67123f864..f9e646350e 100644 --- a/hw/misc/mos6522.c +++ b/hw/misc/mos6522.c @@ -64,14 +64,62 @@ static void mos6522_update_irq(MOS6522State *s) static void mos6522_set_irq(void *opaque, int n, int level) { MOS6522State *s =3D MOS6522(opaque); + int last_level =3D !!(s->last_irq_levels & (1 << n)); + uint8_t last_ifr =3D s->ifr; + bool positive_edge =3D true; + int ctrl; + + /* + * SR_INT is managed by mos6522 instances and cleared upon SR + * read. It is only the external CA1/2 and CB1/2 lines that + * are edge-triggered and latched in IFR + */ + if (n !=3D SR_INT_BIT && level =3D=3D last_level) { + return; + } =20 - if (level) { + /* Detect negative edge trigger */ + if (last_level =3D=3D 1 && level =3D=3D 0) { + positive_edge =3D false; + } + + switch (n) { + case CA2_INT_BIT: + ctrl =3D (s->pcr & CA2_CTRL_MASK) >> CA2_CTRL_SHIFT; + if ((positive_edge && (ctrl & C2_POS)) || + (!positive_edge && !(ctrl & C2_POS))) { + s->ifr |=3D 1 << n; + } + break; + case CA1_INT_BIT: + ctrl =3D (s->pcr & CA1_CTRL_MASK) >> CA1_CTRL_SHIFT; + if ((positive_edge && (ctrl & C1_POS)) || + (!positive_edge && !(ctrl & C1_POS))) { + s->ifr |=3D 1 << n; + } + break; + case SR_INT_BIT: s->ifr |=3D 1 << n; - } else { - s->ifr &=3D ~(1 << n); + break; + case CB2_INT_BIT: + ctrl =3D (s->pcr & CB2_CTRL_MASK) >> CB2_CTRL_SHIFT; + if ((positive_edge && (ctrl & C2_POS)) || + (!positive_edge && !(ctrl & C2_POS))) { + s->ifr |=3D 1 << n; + } + break; + case CB1_INT_BIT: + ctrl =3D (s->pcr & CB1_CTRL_MASK) >> CB1_CTRL_SHIFT; + if ((positive_edge && (ctrl & C1_POS)) || + (!positive_edge && !(ctrl & C1_POS))) { + s->ifr |=3D 1 << n; + } + break; } =20 - mos6522_update_irq(s); + if (s->ifr !=3D last_ifr) { + mos6522_update_irq(s); + } =20 if (level) { s->last_irq_levels |=3D 1 << n; @@ -250,6 +298,7 @@ uint64_t mos6522_read(void *opaque, hwaddr addr, unsign= ed size) { MOS6522State *s =3D opaque; uint32_t val; + int ctrl; int64_t now =3D qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); =20 if (now >=3D s->timers[0].next_irq_time) { @@ -263,12 +312,24 @@ uint64_t mos6522_read(void *opaque, hwaddr addr, unsi= gned size) switch (addr) { case VIA_REG_B: val =3D s->b; + ctrl =3D (s->pcr & CB2_CTRL_MASK) >> CB2_CTRL_SHIFT; + if (!(ctrl & C2_IND)) { + s->ifr &=3D ~CB2_INT; + } + s->ifr &=3D ~CB1_INT; + mos6522_update_irq(s); break; case VIA_REG_A: qemu_log_mask(LOG_UNIMP, "Read access to register A with handshake"= ); /* fall through */ case VIA_REG_ANH: val =3D s->a; + ctrl =3D (s->pcr & CA2_CTRL_MASK) >> CA2_CTRL_SHIFT; + if (!(ctrl & C2_IND)) { + s->ifr &=3D ~CA2_INT; + } + s->ifr &=3D ~CA1_INT; + mos6522_update_irq(s); break; case VIA_REG_DIRB: val =3D s->dirb; @@ -335,6 +396,7 @@ void mos6522_write(void *opaque, hwaddr addr, uint64_t = val, unsigned size) { MOS6522State *s =3D opaque; MOS6522DeviceClass *mdc =3D MOS6522_GET_CLASS(s); + int ctrl; =20 trace_mos6522_write(addr, mos6522_reg_names[addr], val); =20 @@ -342,6 +404,12 @@ void mos6522_write(void *opaque, hwaddr addr, uint64_t= val, unsigned size) case VIA_REG_B: s->b =3D (s->b & ~s->dirb) | (val & s->dirb); mdc->portB_write(s); + ctrl =3D (s->pcr & CB2_CTRL_MASK) >> CB2_CTRL_SHIFT; + if (!(ctrl & C2_IND)) { + s->ifr &=3D ~CB2_INT; + } + s->ifr &=3D ~CB1_INT; + mos6522_update_irq(s); break; case VIA_REG_A: qemu_log_mask(LOG_UNIMP, "Write access to register A with handshake= "); @@ -349,6 +417,12 @@ void mos6522_write(void *opaque, hwaddr addr, uint64_t= val, unsigned size) case VIA_REG_ANH: s->a =3D (s->a & ~s->dira) | (val & s->dira); mdc->portA_write(s); + ctrl =3D (s->pcr & CA2_CTRL_MASK) >> CA2_CTRL_SHIFT; + if (!(ctrl & C2_IND)) { + s->ifr &=3D ~CA2_INT; + } + s->ifr &=3D ~CA1_INT; + mos6522_update_irq(s); break; case VIA_REG_DIRB: s->dirb =3D val; diff --git a/include/hw/misc/mos6522.h b/include/hw/misc/mos6522.h index babea99e06..0bc22a8395 100644 --- a/include/hw/misc/mos6522.h +++ b/include/hw/misc/mos6522.h @@ -65,6 +65,21 @@ #define T1MODE 0xc0 /* Timer 1 mode */ #define T1MODE_CONT 0x40 /* continuous interrupts */ =20 +/* Bits in PCR */ +#define CB2_CTRL_MASK 0xe0 +#define CB2_CTRL_SHIFT 5 +#define CB1_CTRL_MASK 0x10 +#define CB1_CTRL_SHIFT 4 +#define CA2_CTRL_MASK 0x0e +#define CA2_CTRL_SHIFT 1 +#define CA1_CTRL_MASK 0x1 +#define CA1_CTRL_SHIFT 0 + +#define C2_POS 0x2 +#define C2_IND 0x1 + +#define C1_POS 0x1 + /* VIA registers */ #define VIA_REG_B 0x00 #define VIA_REG_A 0x01 --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646824890550235.34363516746407; Wed, 9 Mar 2022 03:21:30 -0800 (PST) Received: from localhost ([::1]:58040 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuNl-00019l-5O for importer@patchew.org; Wed, 09 Mar 2022 06:21:29 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41044) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCD-0006f8-KV for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:33 -0500 Received: from [2001:41c9:1:41f::167] (port=35744 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCB-0005GU-FS for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:33 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuBU-000CWr-BZ; Wed, 09 Mar 2022 11:08:52 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:21 +0000 Message-Id: <20220309110831.18443-13-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 12/22] macio/pmu.c: remove redundant code X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646824892531100001 Content-Type: text/plain; charset="utf-8" Now that the logic related to edge-triggered interrupts is all contained wi= thin the mos6522 device the redundant implementation for the mac99 PMU device can be removed. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Message-Id: <20220305150957.5053-13-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/misc/macio/pmu.c | 33 --------------------------------- include/hw/misc/macio/pmu.h | 2 -- 2 files changed, 35 deletions(-) diff --git a/hw/misc/macio/pmu.c b/hw/misc/macio/pmu.c index 5b1ec100e2..336502a84b 100644 --- a/hw/misc/macio/pmu.c +++ b/hw/misc/macio/pmu.c @@ -57,19 +57,6 @@ =20 #define VIA_TIMER_FREQ (4700000 / 6) =20 -static void via_update_irq(PMUState *s) -{ - MOS6522PMUState *mps =3D MOS6522_PMU(&s->mos6522_pmu); - MOS6522State *ms =3D MOS6522(mps); - - bool new_state =3D !!(ms->ifr & ms->ier & (SR_INT | T1_INT | T2_INT)); - - if (new_state !=3D s->via_irq_state) { - s->via_irq_state =3D new_state; - qemu_set_irq(s->via_irq, new_state); - } -} - static void via_set_sr_int(void *opaque) { PMUState *s =3D opaque; @@ -808,28 +795,9 @@ static void mos6522_pmu_portB_write(MOS6522State *s) MOS6522PMUState *mps =3D container_of(s, MOS6522PMUState, parent_obj); PMUState *ps =3D container_of(mps, PMUState, mos6522_pmu); =20 - if ((s->pcr & 0xe0) =3D=3D 0x20 || (s->pcr & 0xe0) =3D=3D 0x60) { - s->ifr &=3D ~CB2_INT; - } - s->ifr &=3D ~CB1_INT; - - via_update_irq(ps); pmu_update(ps); } =20 -static void mos6522_pmu_portA_write(MOS6522State *s) -{ - MOS6522PMUState *mps =3D container_of(s, MOS6522PMUState, parent_obj); - PMUState *ps =3D container_of(mps, PMUState, mos6522_pmu); - - if ((s->pcr & 0x0e) =3D=3D 0x02 || (s->pcr & 0x0e) =3D=3D 0x06) { - s->ifr &=3D ~CA2_INT; - } - s->ifr &=3D ~CA1_INT; - - via_update_irq(ps); -} - static void mos6522_pmu_reset(DeviceState *dev) { MOS6522State *ms =3D MOS6522(dev); @@ -853,7 +821,6 @@ static void mos6522_pmu_class_init(ObjectClass *oc, voi= d *data) device_class_set_parent_reset(dc, mos6522_pmu_reset, &mdc->parent_reset); mdc->portB_write =3D mos6522_pmu_portB_write; - mdc->portA_write =3D mos6522_pmu_portA_write; } =20 static const TypeInfo mos6522_pmu_type_info =3D { diff --git a/include/hw/misc/macio/pmu.h b/include/hw/misc/macio/pmu.h index 78237d99a2..00fcdd23f5 100644 --- a/include/hw/misc/macio/pmu.h +++ b/include/hw/misc/macio/pmu.h @@ -193,8 +193,6 @@ struct PMUState { =20 MemoryRegion mem; uint64_t frequency; - qemu_irq via_irq; - bool via_irq_state; =20 /* PMU state */ MOS6522PMUState mos6522_pmu; --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646824316206420.72523003208596; Wed, 9 Mar 2022 03:11:56 -0800 (PST) Received: from localhost ([::1]:34924 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuEV-0001ae-3Q for importer@patchew.org; Wed, 09 Mar 2022 06:11:55 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41058) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCG-0006nD-KL for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:36 -0500 Received: from [2001:41c9:1:41f::167] (port=35752 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCF-0005HM-58 for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:36 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuBY-000CWr-I1; Wed, 09 Mar 2022 11:08:56 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:22 +0000 Message-Id: <20220309110831.18443-14-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 13/22] macfb: add VMStateDescription for MacfbNubusState and MacfbSysBusState X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646824317715100001 Content-Type: text/plain; charset="utf-8" Currently when QEMU tries to migrate the macfb framebuffer it crashes rando= mly because the opaque provided by the DeviceClass vmsd property for both devic= es is set to MacfbState rather than MacfbNubusState or MacfbSysBusState as appropriate. Resolve the issue by adding new VMStateDescriptions for MacfbNubusState and MacfbSysBusState which embed the existing vmstate_macfb VMStateDescription within them using VMSTATE_STRUCT. Signed-off-by: Mark Cave-Ayland Reviewed-by: Peter Maydell Reviewed-by: Laurent Vivier Message-Id: <20220305155530.9265-2-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/display/macfb.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/hw/display/macfb.c b/hw/display/macfb.c index c9b468c10e..66ceacf1ae 100644 --- a/hw/display/macfb.c +++ b/hw/display/macfb.c @@ -746,6 +746,16 @@ static Property macfb_sysbus_properties[] =3D { DEFINE_PROP_END_OF_LIST(), }; =20 +static const VMStateDescription vmstate_macfb_sysbus =3D { + .name =3D "macfb-sysbus", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (VMStateField[]) { + VMSTATE_STRUCT(macfb, MacfbSysBusState, 1, vmstate_macfb, MacfbSta= te), + VMSTATE_END_OF_LIST() + } +}; + static Property macfb_nubus_properties[] =3D { DEFINE_PROP_UINT32("width", MacfbNubusState, macfb.width, 640), DEFINE_PROP_UINT32("height", MacfbNubusState, macfb.height, 480), @@ -755,6 +765,16 @@ static Property macfb_nubus_properties[] =3D { DEFINE_PROP_END_OF_LIST(), }; =20 +static const VMStateDescription vmstate_macfb_nubus =3D { + .name =3D "macfb-nubus", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (VMStateField[]) { + VMSTATE_STRUCT(macfb, MacfbNubusState, 1, vmstate_macfb, MacfbStat= e), + VMSTATE_END_OF_LIST() + } +}; + static void macfb_sysbus_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -762,7 +782,7 @@ static void macfb_sysbus_class_init(ObjectClass *klass,= void *data) dc->realize =3D macfb_sysbus_realize; dc->desc =3D "SysBus Macintosh framebuffer"; dc->reset =3D macfb_sysbus_reset; - dc->vmsd =3D &vmstate_macfb; + dc->vmsd =3D &vmstate_macfb_sysbus; device_class_set_props(dc, macfb_sysbus_properties); } =20 @@ -777,7 +797,7 @@ static void macfb_nubus_class_init(ObjectClass *klass, = void *data) &ndc->parent_unrealize); dc->desc =3D "Nubus Macintosh framebuffer"; dc->reset =3D macfb_nubus_reset; - dc->vmsd =3D &vmstate_macfb; + dc->vmsd =3D &vmstate_macfb_nubus; set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories); device_class_set_props(dc, macfb_nubus_properties); } --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646825074180633.9833468000162; Wed, 9 Mar 2022 03:24:34 -0800 (PST) Received: from localhost ([::1]:36374 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuQh-0005jD-OG for importer@patchew.org; Wed, 09 Mar 2022 06:24:32 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41072) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCK-0006xJ-NE for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:44 -0500 Received: from [2001:41c9:1:41f::167] (port=35760 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCJ-0005Hb-9v for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:09:40 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuBc-000CWr-4b; Wed, 09 Mar 2022 11:09:00 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:23 +0000 Message-Id: <20220309110831.18443-15-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-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:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 14/22] macfb: don't use special irq_state and irq_mask variables in MacfbState X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646825076173100001 The current IRQ state and IRQ mask are handled exactly the same as standard register accesses, so store these values directly in the regs array rather than having separate variables for them. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier Message-Id: <20220305155530.9265-3-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/display/macfb.c | 15 +++++++-------- include/hw/display/macfb.h | 2 -- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/hw/display/macfb.c b/hw/display/macfb.c index 66ceacf1ae..fb54b460c1 100644 --- a/hw/display/macfb.c +++ b/hw/display/macfb.c @@ -476,7 +476,8 @@ static void macfb_update_display(void *opaque) =20 static void macfb_update_irq(MacfbState *s) { - uint32_t irq_state =3D s->irq_state & s->irq_mask; + uint32_t irq_state =3D s->regs[DAFB_INTR_STAT >> 2] & + s->regs[DAFB_INTR_MASK >> 2]; =20 if (irq_state) { qemu_irq_raise(s->irq); @@ -496,7 +497,7 @@ static void macfb_vbl_timer(void *opaque) MacfbState *s =3D opaque; int64_t next_vbl; =20 - s->irq_state |=3D DAFB_INTR_VBL; + s->regs[DAFB_INTR_STAT >> 2] |=3D DAFB_INTR_VBL; macfb_update_irq(s); =20 /* 60 Hz irq */ @@ -530,10 +531,8 @@ static uint64_t macfb_ctrl_read(void *opaque, case DAFB_MODE_VADDR2: case DAFB_MODE_CTRL1: case DAFB_MODE_CTRL2: - val =3D s->regs[addr >> 2]; - break; case DAFB_INTR_STAT: - val =3D s->irq_state; + val =3D s->regs[addr >> 2]; break; case DAFB_MODE_SENSE: val =3D macfb_sense_read(s); @@ -568,7 +567,7 @@ static void macfb_ctrl_write(void *opaque, macfb_sense_write(s, val); break; case DAFB_INTR_MASK: - s->irq_mask =3D val; + s->regs[addr >> 2] =3D val; if (val & DAFB_INTR_VBL) { next_vbl =3D macfb_next_vbl(); timer_mod(s->vbl_timer, next_vbl); @@ -577,12 +576,12 @@ static void macfb_ctrl_write(void *opaque, } break; case DAFB_INTR_CLEAR: - s->irq_state &=3D ~DAFB_INTR_VBL; + s->regs[DAFB_INTR_STAT >> 2] &=3D ~DAFB_INTR_VBL; macfb_update_irq(s); break; case DAFB_RESET: s->palette_current =3D 0; - s->irq_state &=3D ~DAFB_INTR_VBL; + s->regs[DAFB_INTR_STAT >> 2] &=3D ~DAFB_INTR_VBL; macfb_update_irq(s); break; case DAFB_LUT: diff --git a/include/hw/display/macfb.h b/include/hw/display/macfb.h index e52775aa21..6d9f0f7869 100644 --- a/include/hw/display/macfb.h +++ b/include/hw/display/macfb.h @@ -66,8 +66,6 @@ typedef struct MacfbState { uint32_t regs[MACFB_NUM_REGS]; MacFbMode *mode; =20 - uint32_t irq_state; - uint32_t irq_mask; QEMUTimer *vbl_timer; qemu_irq irq; } MacfbState; --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646825296398253.92394541735337; Wed, 9 Mar 2022 03:28:16 -0800 (PST) Received: from localhost ([::1]:41980 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuUJ-0001Gs-DG for importer@patchew.org; Wed, 09 Mar 2022 06:28:15 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41118) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCp-0007DG-O0 for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:11 -0500 Received: from [2001:41c9:1:41f::167] (port=35768 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCd-0005Hr-9G for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:08 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuBg-000CWr-Ct; Wed, 09 Mar 2022 11:09:04 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:24 +0000 Message-Id: <20220309110831.18443-16-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 15/22] macfb: increase number of registers saved in MacfbState X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646825298346100001 Content-Type: text/plain; charset="utf-8" The MacOS toolbox ROM accesses a number of addresses between 0x0 and 0x200 = during initialisation and resolution changes. Whilst the function of many of these registers is unknown, it is worth the minimal cost of saving these extra va= lues as part of migration to help future-proof the migration stream for the q800 ma= chine as it starts to stabilise. Note this is a migration break, but since there are upcoming incompatible c= hanges for the q800 machine (and migration does not even succeed without these pat= ches) then this is not an issue. Signed-off-by: Mark Cave-Ayland Reviewed-by: Peter Maydell Reviewed-by: Laurent Vivier Message-Id: <20220305155530.9265-4-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/display/macfb.c | 8 ++++++++ include/hw/display/macfb.h | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/hw/display/macfb.c b/hw/display/macfb.c index fb54b460c1..dfdae90144 100644 --- a/hw/display/macfb.c +++ b/hw/display/macfb.c @@ -537,6 +537,10 @@ static uint64_t macfb_ctrl_read(void *opaque, case DAFB_MODE_SENSE: val =3D macfb_sense_read(s); break; + default: + if (addr < MACFB_CTRL_TOPADDR) { + val =3D s->regs[addr >> 2]; + } } =20 trace_macfb_ctrl_read(addr, val, size); @@ -592,6 +596,10 @@ static void macfb_ctrl_write(void *opaque, macfb_invalidate_display(s); } break; + default: + if (addr < MACFB_CTRL_TOPADDR) { + s->regs[addr >> 2] =3D val; + } } =20 trace_macfb_ctrl_write(addr, val, size); diff --git a/include/hw/display/macfb.h b/include/hw/display/macfb.h index 6d9f0f7869..55a50d3fb0 100644 --- a/include/hw/display/macfb.h +++ b/include/hw/display/macfb.h @@ -48,7 +48,8 @@ typedef struct MacFbMode { uint32_t offset; } MacFbMode; =20 -#define MACFB_NUM_REGS 8 +#define MACFB_CTRL_TOPADDR 0x200 +#define MACFB_NUM_REGS (MACFB_CTRL_TOPADDR / sizeof(uint32_t)) =20 typedef struct MacfbState { MemoryRegion mem_vram; --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646825453141185.8490701320444; Wed, 9 Mar 2022 03:30:53 -0800 (PST) Received: from localhost ([::1]:46246 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuWp-00048Y-OS for importer@patchew.org; Wed, 09 Mar 2022 06:30:51 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41160) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCq-0007EY-TD for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:12 -0500 Received: from [2001:41c9:1:41f::167] (port=35774 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCp-0005I3-BP for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:12 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuBk-000CWr-BH; Wed, 09 Mar 2022 11:09:08 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:25 +0000 Message-Id: <20220309110831.18443-17-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 16/22] macfb: add VMStateDescription fields for display type and VBL timer X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646825455911100001 Content-Type: text/plain; charset="utf-8" These fields are required in the migration stream to restore macfb state correctly. Note this is a migration break, but since there are upcoming incompatible c= hanges for the q800 machine (and migration does not even succeed without these pat= ches) then this is not an issue. Signed-off-by: Mark Cave-Ayland Reviewed-by: Peter Maydell Reviewed-by: Laurent Vivier Message-Id: <20220305155530.9265-5-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/display/macfb.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/display/macfb.c b/hw/display/macfb.c index dfdae90144..7371986480 100644 --- a/hw/display/macfb.c +++ b/hw/display/macfb.c @@ -625,9 +625,11 @@ static const VMStateDescription vmstate_macfb =3D { .minimum_version_id =3D 1, .post_load =3D macfb_post_load, .fields =3D (VMStateField[]) { + VMSTATE_UINT8(type, MacfbState), VMSTATE_UINT8_ARRAY(color_palette, MacfbState, 256 * 3), VMSTATE_UINT32(palette_current, MacfbState), VMSTATE_UINT32_ARRAY(regs, MacfbState, MACFB_NUM_REGS), + VMSTATE_TIMER_PTR(vbl_timer, MacfbState), VMSTATE_END_OF_LIST() } }; --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646825635738192.83714026143969; Wed, 9 Mar 2022 03:33:55 -0800 (PST) Received: from localhost ([::1]:50518 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuZm-00077Q-2b for importer@patchew.org; Wed, 09 Mar 2022 06:33:54 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41162) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCq-0007Ey-W5 for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:13 -0500 Received: from [2001:41c9:1:41f::167] (port=35784 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCp-0005IG-BL for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:12 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuBo-000CWr-Vf; Wed, 09 Mar 2022 11:09:12 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:26 +0000 Message-Id: <20220309110831.18443-18-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 17/22] macfb: set initial value of mode control registers in macfb_common_realize() X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646825636116100001 Content-Type: text/plain; charset="utf-8" If booting Linux directly in the q800 machine using -kernel rather than usi= ng a MacOS toolbox ROM, the mode control registers are never initialised, causing macfb_mode_write() to fail to determine the current resolution after migration. Resolve this by always setting the initial values of the mode co= ntrol registers based upon the initial macfb properties during realize. Signed-off-by: Mark Cave-Ayland Reviewed-by: Peter Maydell Reviewed-by: Laurent Vivier Message-Id: <20220305155530.9265-6-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/display/macfb.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hw/display/macfb.c b/hw/display/macfb.c index 7371986480..2f8e016566 100644 --- a/hw/display/macfb.c +++ b/hw/display/macfb.c @@ -655,6 +655,14 @@ static bool macfb_common_realize(DeviceState *dev, Mac= fbState *s, Error **errp) return false; } =20 + /* + * Set mode control registers to match the mode found above so that + * macfb_mode_write() does the right thing if no MacOS toolbox ROM + * is present to initialise them + */ + s->regs[DAFB_MODE_CTRL1 >> 2] =3D s->mode->mode_ctrl1; + s->regs[DAFB_MODE_CTRL2 >> 2] =3D s->mode->mode_ctrl2; + s->con =3D graphic_console_init(dev, 0, &macfb_ops, s); surface =3D qemu_console_surface(s->con); =20 --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646824506694131.3918738282083; Wed, 9 Mar 2022 03:15:06 -0800 (PST) Received: from localhost ([::1]:43368 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuHZ-0007Tg-MN for importer@patchew.org; Wed, 09 Mar 2022 06:15:05 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41220) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCs-0007Hv-Hl for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:14 -0500 Received: from [2001:41c9:1:41f::167] (port=35792 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCp-0005IL-EK for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:14 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuBs-000CWr-UT; Wed, 09 Mar 2022 11:09:16 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:27 +0000 Message-Id: <20220309110831.18443-19-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-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:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 18/22] esp: introduce esp_set_pdma_cb() function X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646824508114100001 This function is to be used to set the current PDMA callback rather than accessing the ESPState pdma_cb function pointer directly. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier Message-Id: <20220305155530.9265-7-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/scsi/esp.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 58d0edbd56..d1640218c4 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -195,6 +195,11 @@ static void esp_pdma_write(ESPState *s, uint8_t val) esp_set_tc(s, dmalen); } =20 +static void esp_set_pdma_cb(ESPState *s, void (*cb)(ESPState *)) +{ + s->pdma_cb =3D cb; +} + static int esp_select(ESPState *s) { int target; @@ -356,7 +361,7 @@ static void handle_satn(ESPState *s) s->dma_cb =3D handle_satn; return; } - s->pdma_cb =3D satn_pdma_cb; + esp_set_pdma_cb(s, satn_pdma_cb); cmdlen =3D get_cmd(s, ESP_CMDFIFO_SZ); if (cmdlen > 0) { s->cmdfifo_cdb_offset =3D 1; @@ -387,7 +392,7 @@ static void handle_s_without_atn(ESPState *s) s->dma_cb =3D handle_s_without_atn; return; } - s->pdma_cb =3D s_without_satn_pdma_cb; + esp_set_pdma_cb(s, s_without_satn_pdma_cb); cmdlen =3D get_cmd(s, ESP_CMDFIFO_SZ); if (cmdlen > 0) { s->cmdfifo_cdb_offset =3D 0; @@ -422,7 +427,7 @@ static void handle_satn_stop(ESPState *s) s->dma_cb =3D handle_satn_stop; return; } - s->pdma_cb =3D satn_stop_pdma_cb; + esp_set_pdma_cb(s, satn_stop_pdma_cb); cmdlen =3D get_cmd(s, 1); if (cmdlen > 0) { trace_esp_handle_satn_stop(fifo8_num_used(&s->cmdfifo)); @@ -464,7 +469,7 @@ static void write_response(ESPState *s) s->rregs[ESP_RINTR] |=3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; } else { - s->pdma_cb =3D write_response_pdma_cb; + esp_set_pdma_cb(s, write_response_pdma_cb); esp_raise_drq(s); return; } @@ -604,7 +609,7 @@ static void esp_do_dma(ESPState *s) s->dma_memory_read(s->dma_opaque, buf, len); fifo8_push_all(&s->cmdfifo, buf, len); } else { - s->pdma_cb =3D do_dma_pdma_cb; + esp_set_pdma_cb(s, do_dma_pdma_cb); esp_raise_drq(s); return; } @@ -646,7 +651,7 @@ static void esp_do_dma(ESPState *s) if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, s->async_buf, len); } else { - s->pdma_cb =3D do_dma_pdma_cb; + esp_set_pdma_cb(s, do_dma_pdma_cb); esp_raise_drq(s); return; } @@ -678,7 +683,7 @@ static void esp_do_dma(ESPState *s) } =20 esp_set_tc(s, esp_get_tc(s) - len); - s->pdma_cb =3D do_dma_pdma_cb; + esp_set_pdma_cb(s, do_dma_pdma_cb); esp_raise_drq(s); =20 /* Indicate transfer to FIFO is complete */ --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646825785806527.8053183716221; Wed, 9 Mar 2022 03:36:25 -0800 (PST) Received: from localhost ([::1]:55122 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRucC-0001uW-LN for importer@patchew.org; Wed, 09 Mar 2022 06:36:24 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41216) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCs-0007H4-9a for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:14 -0500 Received: from [2001:41c9:1:41f::167] (port=35800 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCp-0005IZ-Ig for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:13 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuBw-000CWr-TQ; Wed, 09 Mar 2022 11:09:20 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:28 +0000 Message-Id: <20220309110831.18443-20-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-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:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 19/22] esp: introduce esp_pdma_cb() function X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646825787202100001 This function is to be used to execute the current PDMA callback rather than dereferencing the ESPState pdma_cb function pointer directly. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier Message-Id: <20220305155530.9265-8-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/scsi/esp.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index d1640218c4..035fb0d1f6 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -200,6 +200,11 @@ static void esp_set_pdma_cb(ESPState *s, void (*cb)(ES= PState *)) s->pdma_cb =3D cb; } =20 +static void esp_pdma_cb(ESPState *s) +{ + s->pdma_cb(s); +} + static int esp_select(ESPState *s) { int target; @@ -1268,7 +1273,7 @@ static void sysbus_esp_pdma_write(void *opaque, hwadd= r addr, esp_pdma_write(s, val); break; } - s->pdma_cb(s); + esp_pdma_cb(s); } =20 static uint64_t sysbus_esp_pdma_read(void *opaque, hwaddr addr, @@ -1290,7 +1295,7 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, hw= addr addr, break; } if (fifo8_num_used(&s->fifo) < 2) { - s->pdma_cb(s); + esp_pdma_cb(s); } return val; } --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646825955911913.9718990379755; Wed, 9 Mar 2022 03:39:15 -0800 (PST) Received: from localhost ([::1]:34860 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuev-0007Hr-OB for importer@patchew.org; Wed, 09 Mar 2022 06:39:14 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41328) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuD2-0007ah-LQ for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:24 -0500 Received: from [2001:41c9:1:41f::167] (port=35808 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCz-0005Jy-OZ for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:24 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuC0-000CWr-FZ; Wed, 09 Mar 2022 11:09:24 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:29 +0000 Message-Id: <20220309110831.18443-21-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-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:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 20/22] esp: convert ESPState pdma_cb from a function pointer to an integer X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646825957430100001 This prepares for the inclusion of the current PDMA callback in the migrati= on stream since the callback is referenced by an integer instead of a function pointer. Signed-off-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Laurent Vivier Message-Id: <20220305155530.9265-9-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/scsi/esp.c | 44 ++++++++++++++++++++++++++++++------------- include/hw/scsi/esp.h | 11 ++++++++++- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 035fb0d1f6..a818b2b07a 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -195,16 +195,11 @@ static void esp_pdma_write(ESPState *s, uint8_t val) esp_set_tc(s, dmalen); } =20 -static void esp_set_pdma_cb(ESPState *s, void (*cb)(ESPState *)) +static void esp_set_pdma_cb(ESPState *s, enum pdma_cb cb) { s->pdma_cb =3D cb; } =20 -static void esp_pdma_cb(ESPState *s) -{ - s->pdma_cb(s); -} - static int esp_select(ESPState *s) { int target; @@ -366,7 +361,7 @@ static void handle_satn(ESPState *s) s->dma_cb =3D handle_satn; return; } - esp_set_pdma_cb(s, satn_pdma_cb); + esp_set_pdma_cb(s, SATN_PDMA_CB); cmdlen =3D get_cmd(s, ESP_CMDFIFO_SZ); if (cmdlen > 0) { s->cmdfifo_cdb_offset =3D 1; @@ -397,7 +392,7 @@ static void handle_s_without_atn(ESPState *s) s->dma_cb =3D handle_s_without_atn; return; } - esp_set_pdma_cb(s, s_without_satn_pdma_cb); + esp_set_pdma_cb(s, S_WITHOUT_SATN_PDMA_CB); cmdlen =3D get_cmd(s, ESP_CMDFIFO_SZ); if (cmdlen > 0) { s->cmdfifo_cdb_offset =3D 0; @@ -432,7 +427,7 @@ static void handle_satn_stop(ESPState *s) s->dma_cb =3D handle_satn_stop; return; } - esp_set_pdma_cb(s, satn_stop_pdma_cb); + esp_set_pdma_cb(s, SATN_STOP_PDMA_CB); cmdlen =3D get_cmd(s, 1); if (cmdlen > 0) { trace_esp_handle_satn_stop(fifo8_num_used(&s->cmdfifo)); @@ -474,7 +469,7 @@ static void write_response(ESPState *s) s->rregs[ESP_RINTR] |=3D INTR_BS | INTR_FC; s->rregs[ESP_RSEQ] =3D SEQ_CD; } else { - esp_set_pdma_cb(s, write_response_pdma_cb); + esp_set_pdma_cb(s, WRITE_RESPONSE_PDMA_CB); esp_raise_drq(s); return; } @@ -614,7 +609,7 @@ static void esp_do_dma(ESPState *s) s->dma_memory_read(s->dma_opaque, buf, len); fifo8_push_all(&s->cmdfifo, buf, len); } else { - esp_set_pdma_cb(s, do_dma_pdma_cb); + esp_set_pdma_cb(s, DO_DMA_PDMA_CB); esp_raise_drq(s); return; } @@ -656,7 +651,7 @@ static void esp_do_dma(ESPState *s) if (s->dma_memory_read) { s->dma_memory_read(s->dma_opaque, s->async_buf, len); } else { - esp_set_pdma_cb(s, do_dma_pdma_cb); + esp_set_pdma_cb(s, DO_DMA_PDMA_CB); esp_raise_drq(s); return; } @@ -688,7 +683,7 @@ static void esp_do_dma(ESPState *s) } =20 esp_set_tc(s, esp_get_tc(s) - len); - esp_set_pdma_cb(s, do_dma_pdma_cb); + esp_set_pdma_cb(s, DO_DMA_PDMA_CB); esp_raise_drq(s); =20 /* Indicate transfer to FIFO is complete */ @@ -787,6 +782,29 @@ static void esp_do_nodma(ESPState *s) esp_raise_irq(s); } =20 +static void esp_pdma_cb(ESPState *s) +{ + switch (s->pdma_cb) { + case SATN_PDMA_CB: + satn_pdma_cb(s); + break; + case S_WITHOUT_SATN_PDMA_CB: + s_without_satn_pdma_cb(s); + break; + case SATN_STOP_PDMA_CB: + satn_stop_pdma_cb(s); + break; + case WRITE_RESPONSE_PDMA_CB: + write_response_pdma_cb(s); + break; + case DO_DMA_PDMA_CB: + do_dma_pdma_cb(s); + break; + default: + g_assert_not_reached(); + } +} + void esp_command_complete(SCSIRequest *req, size_t resid) { ESPState *s =3D req->hba_private; diff --git a/include/hw/scsi/esp.h b/include/hw/scsi/esp.h index b1ec27612f..13b17496f8 100644 --- a/include/hw/scsi/esp.h +++ b/include/hw/scsi/esp.h @@ -51,7 +51,7 @@ struct ESPState { ESPDMAMemoryReadWriteFunc dma_memory_write; void *dma_opaque; void (*dma_cb)(ESPState *s); - void (*pdma_cb)(ESPState *s); + uint8_t pdma_cb; =20 uint8_t mig_version_id; =20 @@ -150,6 +150,15 @@ struct SysBusESPState { #define TCHI_FAS100A 0x4 #define TCHI_AM53C974 0x12 =20 +/* PDMA callbacks */ +enum pdma_cb { + SATN_PDMA_CB =3D 0, + S_WITHOUT_SATN_PDMA_CB =3D 1, + SATN_STOP_PDMA_CB =3D 2, + WRITE_RESPONSE_PDMA_CB =3D 3, + DO_DMA_PDMA_CB =3D 4 +}; + void esp_dma_enable(ESPState *s, int irq, int level); void esp_request_cancelled(SCSIRequest *req); void esp_command_complete(SCSIRequest *req, size_t resid); --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646824752342781.2197722700033; Wed, 9 Mar 2022 03:19:12 -0800 (PST) Received: from localhost ([::1]:51930 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuLX-0005Vp-9i for importer@patchew.org; Wed, 09 Mar 2022 06:19:11 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41318) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuD1-0007Vn-AN for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:23 -0500 Received: from [2001:41c9:1:41f::167] (port=35816 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCz-0005Ux-OZ for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:22 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuC4-000CWr-KX; Wed, 09 Mar 2022 11:09:28 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:30 +0000 Message-Id: <20220309110831.18443-22-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 21/22] esp: include the current PDMA callback in the migration stream X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646824753071100001 Content-Type: text/plain; charset="utf-8" This involves (re)adding a PDMA-specific subsection to hold the reference t= o the current PDMA callback. Signed-off-by: Mark Cave-Ayland Reviewed-by: Peter Maydell Reviewed-by: Laurent Vivier Message-Id: <20220305155530.9265-10-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/scsi/esp.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index a818b2b07a..3f7cf30fa7 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -1209,6 +1209,33 @@ static int esp_post_load(void *opaque, int version_i= d) return 0; } =20 +/* + * PDMA (or pseudo-DMA) is only used on the Macintosh and requires the + * guest CPU to perform the transfers between the SCSI bus and memory + * itself. This is indicated by the dma_memory_read and dma_memory_write + * functions being NULL (in contrast to the ESP PCI device) whilst + * dma_enabled is still set. + */ + +static bool esp_pdma_needed(void *opaque) +{ + ESPState *s =3D ESP(opaque); + + return s->dma_memory_read =3D=3D NULL && s->dma_memory_write =3D=3D NU= LL && + s->dma_enabled; +} + +static const VMStateDescription vmstate_esp_pdma =3D { + .name =3D "esp/pdma", + .version_id =3D 0, + .minimum_version_id =3D 0, + .needed =3D esp_pdma_needed, + .fields =3D (VMStateField[]) { + VMSTATE_UINT8(pdma_cb, ESPState), + VMSTATE_END_OF_LIST() + } +}; + const VMStateDescription vmstate_esp =3D { .name =3D "esp", .version_id =3D 6, @@ -1243,6 +1270,10 @@ const VMStateDescription vmstate_esp =3D { VMSTATE_UINT8_TEST(lun, ESPState, esp_is_version_6), VMSTATE_END_OF_LIST() }, + .subsections =3D (const VMStateDescription * []) { + &vmstate_esp_pdma, + NULL + } }; =20 static void sysbus_esp_mem_write(void *opaque, hwaddr addr, --=20 2.20.1 From nobody Sat May 18 19:47:46 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646824700634965.1897840058742; Wed, 9 Mar 2022 03:18:20 -0800 (PST) Received: from localhost ([::1]:50584 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nRuKh-0004Yn-MS for importer@patchew.org; Wed, 09 Mar 2022 06:18:19 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41316) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuD1-0007Vf-9R for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:23 -0500 Received: from [2001:41c9:1:41f::167] (port=35822 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nRuCz-0005VI-O6 for qemu-devel@nongnu.org; Wed, 09 Mar 2022 06:10:22 -0500 Received: from [2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nRuC8-000CWr-7d; Wed, 09 Mar 2022 11:09:32 +0000 From: Mark Cave-Ayland To: peter.maydell@linaro.org, laurent@vivier.eu, qemu-devel@nongnu.org Date: Wed, 9 Mar 2022 11:08:31 +0000 Message-Id: <20220309110831.18443-23-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> References: <20220309110831.18443-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 2a00:23c4:8ba0:ca00:d4eb:dbd5:5a41:aefe X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PULL 22/22] esp: recreate ESPState current_req after migration X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2001:41c9:1:41f::167 (failed) 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.default.ilande.bv.iomart.io X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no 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" X-ZM-MESSAGEID: 1646824702366100001 Content-Type: text/plain; charset="utf-8" Since PDMA reads/writes are driven by the guest, it is possible that migrat= ion can occur whilst a SCSIRequest is still active. Fortunately active SCSIRequ= ests are already included in the migration stream and restarted post migration b= ut this still leaves the reference in ESPState uninitialised. Implement the SCSIBusInfo .load_request callback to obtain a reference to t= he currently active SCSIRequest and use it to recreate ESPState current_req after migration. Suggested-by: Paolo Bonzini Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Message-Id: <20220305155530.9265-11-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- hw/scsi/esp.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index 3f7cf30fa7..2d3c649567 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -1349,6 +1349,15 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, h= waddr addr, return val; } =20 +static void *esp_load_request(QEMUFile *f, SCSIRequest *req) +{ + ESPState *s =3D container_of(req->bus, ESPState, bus); + + scsi_req_ref(req); + s->current_req =3D req; + return s; +} + static const MemoryRegionOps sysbus_esp_pdma_ops =3D { .read =3D sysbus_esp_pdma_read, .write =3D sysbus_esp_pdma_write, @@ -1364,6 +1373,7 @@ static const struct SCSIBusInfo esp_scsi_info =3D { .max_target =3D ESP_MAX_DEVS, .max_lun =3D 7, =20 + .load_request =3D esp_load_request, .transfer_data =3D esp_transfer_data, .complete =3D esp_command_complete, .cancel =3D esp_request_cancelled --=20 2.20.1