From nobody Sun May 19 13:34:33 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 ARC-Seal: i=1; a=rsa-sha256; t=1615457244; cv=none; d=zohomail.com; s=zohoarc; b=GB7RHGcoxGZoK+lgvK5XIm6Ayr0laB5ncvFSP3rqs73/xxRsBiDrBV/nPD6NtwCP1GS+uzO3X13YwRNLrgN36OfGLcfOGmxaiBz6GhZwTQkE0YNMC5TF9rmvGXPSbiQMU7dBStvnh899wgshx7w7dyd9cX5Kbg9MU6GQKgxzwI0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615457244; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gFzlDBTRsmPJymJL9bObtRRYyUxFuMPWNCGoCBABXqg=; b=f3G0oYYj49e+l3Cd8ScjAm9UDkDBqjP7cwnK6ioPe0UqPfPeIDFG8O5zO1PVsbE0e2TPIWFZDVg8N/qu3s9gZhqbvZeag3cIso20SgRqGpgS/OhMwLYSTA+SLTcOPFD6xvQvvUzHhlOGN26qxuU5hR6hslCT+NJz7UlNGzuNuN8= ARC-Authentication-Results: i=1; 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 1615457244214401.8168307870669; Thu, 11 Mar 2021 02:07:24 -0800 (PST) Received: from localhost ([::1]:47844 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lKIDw-00077y-8i for importer@patchew.org; Thu, 11 Mar 2021 05:07:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37388) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKIC1-0005Fc-GH for qemu-devel@nongnu.org; Thu, 11 Mar 2021 05:05:21 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:52278 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKIBz-0004KT-Io for qemu-devel@nongnu.org; Thu, 11 Mar 2021 05:05:21 -0500 Received: from host86-140-100-136.range86-140.btcentralplus.com ([86.140.100.136] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lKIBv-0001He-7v; Thu, 11 Mar 2021 10:05:20 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, laurent@vivier.eu Date: Thu, 11 Mar 2021 10:04:59 +0000 Message-Id: <20210311100505.22596-2-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210311100505.22596-1-mark.cave-ayland@ilande.co.uk> References: <20210311100505.22596-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.140.100.136 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v2 1/7] mac_via: switch rtc pram trace-events to use hex rather than decimal for addresses 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.uk0.bigv.io) 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.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 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" Content-Type: text/plain; charset="utf-8" Since all the documentation uses the hex offsets, this makes it much easier to see what is going on. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/misc/trace-events | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/misc/trace-events b/hw/misc/trace-events index 4b15db8ca4..81a45f7fa3 100644 --- a/hw/misc/trace-events +++ b/hw/misc/trace-events @@ -225,8 +225,8 @@ via1_rtc_cmd_test_write(int value) "value=3D0x%02x" via1_rtc_cmd_wprotect_write(int value) "value=3D0x%02x" via1_rtc_cmd_pram_read(int addr, int value) "addr=3D%u value=3D0x%02x" via1_rtc_cmd_pram_write(int addr, int value) "addr=3D%u value=3D0x%02x" -via1_rtc_cmd_pram_sect_read(int sector, int offset, int addr, int value) "= sector=3D%u offset=3D%u addr=3D%d value=3D0x%02x" -via1_rtc_cmd_pram_sect_write(int sector, int offset, int addr, int value) = "sector=3D%u offset=3D%u addr=3D%d value=3D0x%02x" +via1_rtc_cmd_pram_sect_read(int sector, int offset, int addr, int value) "= sector=3D%u offset=3D%u addr=3D0x%x value=3D0x%02x" +via1_rtc_cmd_pram_sect_write(int sector, int offset, int addr, int value) = "sector=3D%u offset=3D%u addr=3D0x%x value=3D0x%02x" via1_adb_send(const char *state, uint8_t data, const char *vadbint) "state= %s data=3D0x%02x vADBInt=3D%s" via1_adb_receive(const char *state, uint8_t data, const char *vadbint, int= status, int index, int size) "state %s data=3D0x%02x vADBInt=3D%s status= =3D0x%x index=3D%d size=3D%d" via1_adb_poll(uint8_t data, const char *vadbint, int status, int index, in= t size) "data=3D0x%02x vADBInt=3D%s status=3D0x%x index=3D%d size=3D%d" --=20 2.20.1 From nobody Sun May 19 13:34:33 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 ARC-Seal: i=1; a=rsa-sha256; t=1615457313; cv=none; d=zohomail.com; s=zohoarc; b=h+2pBbaKPMsW8AVUYaZbtHhpoPaYPmAOhUML4DQZy3w9lT+E603OLkQHj4LFgTQVuuNkhdKQnB4Cfho7ki5UYgE+tdAKs7PROVlOtP0IvUwgqd3hR+oMUYqWrWMMa1Vv0cSdB42JL6wDYjAtxvsZX4RJmCzAvXlNvx6P7n3wwfs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615457313; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=IIrgewagHEqLTRJ9eIS+XKeViE1fLIdO8NO7BGKFYT4=; b=QFOyPjmboDYV+LjqeZQo2ctKo0nClQv6FgHPtjCxj9bPLT9IfGsWev4aeifsjq81GBTFQxAg5yVJZ+H3UsCNtOSh62FPPGU730Fu7PJ7dEr6z2tToXWjFdcd4Q57rse+3b0C2XESEWrzqD6YbpRo3wC1oDh1wwdupH8xBBTx3wk= ARC-Authentication-Results: i=1; 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 161545731358959.38949675990682; Thu, 11 Mar 2021 02:08:33 -0800 (PST) Received: from localhost ([::1]:48068 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lKIE2-0007Dw-KR for importer@patchew.org; Thu, 11 Mar 2021 05:07:26 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37450) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKIC7-0005Nh-BN for qemu-devel@nongnu.org; Thu, 11 Mar 2021 05:05:27 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:52284 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKIC4-0004Oi-7F for qemu-devel@nongnu.org; Thu, 11 Mar 2021 05:05:27 -0500 Received: from host86-140-100-136.range86-140.btcentralplus.com ([86.140.100.136] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lKIC0-0001He-O3; Thu, 11 Mar 2021 10:05:25 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, laurent@vivier.eu Date: Thu, 11 Mar 2021 10:05:00 +0000 Message-Id: <20210311100505.22596-3-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210311100505.22596-1-mark.cave-ayland@ilande.co.uk> References: <20210311100505.22596-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.140.100.136 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v2 2/7] mac_via: fix up adb_via_receive() 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.uk0.bigv.io) 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.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 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" Content-Type: text/plain; charset="utf-8" The use of the post-increment operator on adb_data_in_index meant that the trace-event was accidentally displaying the next byte in the incoming ADB data buffer rather than the current byte. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/misc/mac_via.c | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index 488d086a17..0f6586e102 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -816,33 +816,37 @@ static void adb_via_receive(MacVIAState *s, int state= , uint8_t *data) switch (s->adb_data_in_index) { case 0: /* First EVEN byte: vADBInt indicates bus timeout */ - trace_via1_adb_receive(state =3D=3D ADB_STATE_EVEN ? "EVEN" : = " ODD", - *data, (ms->b & VIA1B_vADBInt) ? "+" : = "-", - adb_bus->status, s->adb_data_in_index, - s->adb_data_in_size); - - *data =3D s->adb_data_in[s->adb_data_in_index++]; + *data =3D s->adb_data_in[s->adb_data_in_index]; if (adb_bus->status & ADB_STATUS_BUSTIMEOUT) { ms->b &=3D ~VIA1B_vADBInt; } else { ms->b |=3D VIA1B_vADBInt; } - break; =20 - case 1: - /* First ODD byte: vADBInt indicates SRQ */ trace_via1_adb_receive(state =3D=3D ADB_STATE_EVEN ? "EVEN" : = " ODD", *data, (ms->b & VIA1B_vADBInt) ? "+" : = "-", adb_bus->status, s->adb_data_in_index, s->adb_data_in_size); =20 - *data =3D s->adb_data_in[s->adb_data_in_index++]; + s->adb_data_in_index++; + break; + + case 1: + /* First ODD byte: vADBInt indicates SRQ */ + *data =3D s->adb_data_in[s->adb_data_in_index]; pending =3D adb_bus->pending & ~(1 << (s->adb_autopoll_cmd >> = 4)); if (pending) { ms->b &=3D ~VIA1B_vADBInt; } else { ms->b |=3D VIA1B_vADBInt; } + + trace_via1_adb_receive(state =3D=3D ADB_STATE_EVEN ? "EVEN" : = " ODD", + *data, (ms->b & VIA1B_vADBInt) ? "+" : = "-", + adb_bus->status, s->adb_data_in_index, + s->adb_data_in_size); + + s->adb_data_in_index++; break; =20 default: @@ -852,14 +856,9 @@ static void adb_via_receive(MacVIAState *s, int state,= uint8_t *data) * end of the poll reply, so provide these extra bytes below to * keep it happy */ - trace_via1_adb_receive(state =3D=3D ADB_STATE_EVEN ? "EVEN" : = " ODD", - *data, (ms->b & VIA1B_vADBInt) ? "+" : = "-", - adb_bus->status, s->adb_data_in_index, - s->adb_data_in_size); - if (s->adb_data_in_index < s->adb_data_in_size) { /* Next data byte */ - *data =3D s->adb_data_in[s->adb_data_in_index++]; + *data =3D s->adb_data_in[s->adb_data_in_index]; ms->b |=3D VIA1B_vADBInt; } else if (s->adb_data_in_index =3D=3D s->adb_data_in_size) { if (adb_bus->status & ADB_STATUS_BUSTIMEOUT) { @@ -869,7 +868,6 @@ static void adb_via_receive(MacVIAState *s, int state, = uint8_t *data) /* Return 0x0 after reply */ *data =3D 0; } - s->adb_data_in_index++; ms->b &=3D ~VIA1B_vADBInt; } else { /* Bus timeout (no more data) */ @@ -878,6 +876,15 @@ static void adb_via_receive(MacVIAState *s, int state,= uint8_t *data) adb_bus->status =3D 0; adb_autopoll_unblock(adb_bus); } + + trace_via1_adb_receive(state =3D=3D ADB_STATE_EVEN ? "EVEN" : = " ODD", + *data, (ms->b & VIA1B_vADBInt) ? "+" : = "-", + adb_bus->status, s->adb_data_in_index, + s->adb_data_in_size); + + if (s->adb_data_in_index <=3D s->adb_data_in_size) { + s->adb_data_in_index++; + } break; } =20 --=20 2.20.1 From nobody Sun May 19 13:34:33 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 ARC-Seal: i=1; a=rsa-sha256; t=1615457494; cv=none; d=zohomail.com; s=zohoarc; b=QFb4usNXnqahKsBH5GGIMjz9LlNPfs0i9KHCtqrJ2CbBp3UV+mgHZTNuM7F/4vUcYUZCK6CzOb9IdES1cGgBI+U6rRS9vYeNlyiR2xSaw2UcrZgQ86+tKGn3fe+hHApll4CN89qUvTHjehRwum5YKFJeroQZsMudO1PhscdWEso= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615457494; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=WevK80GRcvYGNMyxXTeIWL41RWeCF3koJ4dgANAElvc=; b=KR96+QUgEKwGAvdGVvxZlY0UjLFxyyuLBANBp34WJDbxet+A4VWPZHPtgl8jfNO5THm7Juy6AC5LsgjakQImBbOhrTU5fMXZqpQHceL0RmMdhsmsdSQjqMDNDSzXuHw7I//8nXKURUWIiHzDnmpE0lWMJCTABaBU3JxyjK6BJ+M= ARC-Authentication-Results: i=1; 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 161545749438711.006047039616988; Thu, 11 Mar 2021 02:11:34 -0800 (PST) Received: from localhost ([::1]:58720 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lKII1-0003IH-9t for importer@patchew.org; Thu, 11 Mar 2021 05:11:33 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37484) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKICC-0005Yw-JE for qemu-devel@nongnu.org; Thu, 11 Mar 2021 05:05:32 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:52292 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKICA-0004WP-CO for qemu-devel@nongnu.org; Thu, 11 Mar 2021 05:05:32 -0500 Received: from host86-140-100-136.range86-140.btcentralplus.com ([86.140.100.136] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lKIC5-0001He-HD; Thu, 11 Mar 2021 10:05:31 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, laurent@vivier.eu Date: Thu, 11 Mar 2021 10:05:01 +0000 Message-Id: <20210311100505.22596-4-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210311100505.22596-1-mark.cave-ayland@ilande.co.uk> References: <20210311100505.22596-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.140.100.136 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v2 3/7] mac_via: allow long accesses to VIA registers 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.uk0.bigv.io) 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.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 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" Content-Type: text/plain; charset="utf-8" The MacOS SCSI driver uses a long access to read the VIA registers rather t= han just a single byte during the message out phase. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/misc/mac_via.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index 0f6586e102..f38d6e2f6e 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -966,7 +966,7 @@ static const MemoryRegionOps mos6522_q800_via1_ops =3D { .endianness =3D DEVICE_BIG_ENDIAN, .valid =3D { .min_access_size =3D 1, - .max_access_size =3D 1, + .max_access_size =3D 4, }, }; =20 @@ -995,7 +995,7 @@ static const MemoryRegionOps mos6522_q800_via2_ops =3D { .endianness =3D DEVICE_BIG_ENDIAN, .valid =3D { .min_access_size =3D 1, - .max_access_size =3D 1, + .max_access_size =3D 4, }, }; =20 --=20 2.20.1 From nobody Sun May 19 13:34:33 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 ARC-Seal: i=1; a=rsa-sha256; t=1615457590; cv=none; d=zohomail.com; s=zohoarc; b=YLRoCx9l2NvxqvIz8sGNbayLL23ua3l+8p4Pkfjes1EgiSRCKsrjdhEuFHOqWXn4ZhvYo4IRhhHZxoRJHR6CQL1NzxlcVh9WwFwhxGs2dwE6mxi4ghaD32T03KdWHpAPhSWpdJDXuNjRvF/8QTmMsFtQmAxnmA6qFwF5Vq/jusc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615457590; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=TowoN42KP3VXUku176pJqBXpsbdB+6WXN+5Jm63BCRU=; b=KqzQV3k8KkKXoRyuOd+d3qnLR03o7xz1+3QwQHHX5X/RbSi50CRw9FTyfGIbWx6uhAC3ENG/5tySgYxPT97Md3ghfsg0OooV8UXSX9t+54PyK8nylZn0FAWL708jMnpa3EIorewuAoNYXkaCLYrme7yhnXhezN8Eupx1ZryWld4= ARC-Authentication-Results: i=1; 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 1615457590781801.8014058874134; Thu, 11 Mar 2021 02:13:10 -0800 (PST) Received: from localhost ([::1]:35500 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lKIJZ-0005Uk-Hp for importer@patchew.org; Thu, 11 Mar 2021 05:13:09 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37512) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKICH-0005iK-38 for qemu-devel@nongnu.org; Thu, 11 Mar 2021 05:05:37 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:52298 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKICF-0004ax-31 for qemu-devel@nongnu.org; Thu, 11 Mar 2021 05:05:36 -0500 Received: from host86-140-100-136.range86-140.btcentralplus.com ([86.140.100.136] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lKICB-0001He-Po; Thu, 11 Mar 2021 10:05:36 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, laurent@vivier.eu Date: Thu, 11 Mar 2021 10:05:02 +0000 Message-Id: <20210311100505.22596-5-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210311100505.22596-1-mark.cave-ayland@ilande.co.uk> References: <20210311100505.22596-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.140.100.136 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v2 4/7] mac_via: don't re-inject ADB response when switching to IDLE state 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.uk0.bigv.io) 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.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 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" Content-Type: text/plain; charset="utf-8" The current workaround for the Linux ADB state machine in kernels < 5.6 swi= tching the VIA back to IDLE state between send and receive modes is to re-inject t= he first byte of the response in the IDLE state, and then force the state mach= ine into generating an autopoll reply. In fact what is happening is much simpler: analysis of traces from a real Q= uadra suggest that the existing data is returned as the first autopoll response r= ather than generating an immediate response starting whilst still in IDLE state. Update the ADB receive code to work in the same way, which allows the re-in= jection code to be completely removed from adb_via_receive() and for adb_via_poll()= to be simplified accordingly. Signed-off-by: Mark Cave-Ayland --- hw/misc/mac_via.c | 78 ++++++++++++++++------------------------------- 1 file changed, 27 insertions(+), 51 deletions(-) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index f38d6e2f6e..76f31b8cae 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -609,7 +609,6 @@ static void adb_via_poll(void *opaque) uint8_t obuf[9]; uint8_t *data =3D &s->sr; int olen; - uint16_t pending; =20 /* * Setting vADBInt below indicates that an autopoll reply has been @@ -618,36 +617,36 @@ static void adb_via_poll(void *opaque) */ adb_autopoll_block(adb_bus); =20 - m->adb_data_in_index =3D 0; - m->adb_data_out_index =3D 0; - olen =3D adb_poll(adb_bus, obuf, adb_bus->autopoll_mask); - - if (olen > 0) { - /* Autopoll response */ - *data =3D obuf[0]; - olen--; - memcpy(m->adb_data_in, &obuf[1], olen); - m->adb_data_in_size =3D olen; + if (m->adb_data_in_size > 0 && m->adb_data_in_index =3D=3D 0) { + /* + * For older Linux kernels that switch to IDLE mode after sending = the + * ADB command, detect if there is an existing response and return= that + * as a a "fake" autopoll reply or bus timeout accordingly + */ + *data =3D m->adb_data_out[0]; + olen =3D m->adb_data_in_size; =20 s->b &=3D ~VIA1B_vADBInt; qemu_irq_raise(m->adb_data_ready); - } else if (olen < 0) { - /* Bus timeout (device does not exist) */ - *data =3D 0xff; - s->b |=3D VIA1B_vADBInt; - adb_autopoll_unblock(adb_bus); } else { - pending =3D adb_bus->pending & ~(1 << (m->adb_autopoll_cmd >> 4)); + /* + * Otherwise poll as normal + */ + m->adb_data_in_index =3D 0; + m->adb_data_out_index =3D 0; + olen =3D adb_poll(adb_bus, obuf, adb_bus->autopoll_mask); + + if (olen > 0) { + /* Autopoll response */ + *data =3D obuf[0]; + olen--; + memcpy(m->adb_data_in, &obuf[1], olen); + m->adb_data_in_size =3D olen; =20 - if (pending) { - /* - * Bus timeout (device exists but another device has data). Bl= ock - * autopoll so the OS can read out the first EVEN and first ODD - * byte to determine bus timeout and SRQ status - */ - *data =3D m->adb_autopoll_cmd; s->b &=3D ~VIA1B_vADBInt; - + qemu_irq_raise(m->adb_data_ready); + } else { + *data =3D m->adb_autopoll_cmd; obuf[0] =3D 0xff; obuf[1] =3D 0xff; olen =3D 2; @@ -655,12 +654,8 @@ static void adb_via_poll(void *opaque) memcpy(m->adb_data_in, obuf, olen); m->adb_data_in_size =3D olen; =20 + s->b &=3D ~VIA1B_vADBInt; qemu_irq_raise(m->adb_data_ready); - } else { - /* Bus timeout (device exists but no other device has data) */ - *data =3D 0; - s->b |=3D VIA1B_vADBInt; - adb_autopoll_unblock(adb_bus); } } =20 @@ -783,27 +778,8 @@ static void adb_via_receive(MacVIAState *s, int state,= uint8_t *data) return; =20 case ADB_STATE_IDLE: - /* - * Since adb_request() will have already consumed the data from the - * device, we must detect this extra state change and re-inject the - * reponse as either a "fake" autopoll reply or bus timeout - * accordingly - */ - if (s->adb_data_in_index =3D=3D 0) { - if (adb_bus->status & ADB_STATUS_BUSTIMEOUT) { - *data =3D 0xff; - ms->b |=3D VIA1B_vADBInt; - qemu_irq_raise(s->adb_data_ready); - } else if (s->adb_data_in_size > 0) { - adb_bus->status =3D ADB_STATUS_POLLREPLY; - *data =3D s->adb_autopoll_cmd; - ms->b &=3D ~VIA1B_vADBInt; - qemu_irq_raise(s->adb_data_ready); - } - } else { - ms->b |=3D VIA1B_vADBInt; - adb_autopoll_unblock(adb_bus); - } + ms->b |=3D VIA1B_vADBInt; + adb_autopoll_unblock(adb_bus); =20 trace_via1_adb_receive("IDLE", *data, (ms->b & VIA1B_vADBInt) ? "+" : "-", adb_bus->stat= us, --=20 2.20.1 From nobody Sun May 19 13:34:33 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 ARC-Seal: i=1; a=rsa-sha256; t=1615457390; cv=none; d=zohomail.com; s=zohoarc; b=VNpXVIy/FwMMR72QUldxtLLzghwOz/4oj6yrfmZyXc6kwDxzRN60xOTbnCjT2v5/5GTPDm8ggKK6sFOEKjLjLFHJASP/Htfz5YGDeyjuvHd00l/Se7DJ9xrImdp8VUe4otF2aGp6GY0UAbgLGkI3ArNfkMglPiyDpNz8nSRRqvI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615457390; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7/sjQHxI9/6dcmsR1J7mGKaTuDAHvn1ZA9wMxICfLVg=; b=HBwKVXHXRfvaLacfXIAZvSuhByZkP95uK9WNoIPz9f8vBnfGLNwj3jWrDv1JOZDRHj9Tg8DGF45rMvFRKerkaRbCtw/o/OKrNPJai2xTkMSCdMysWaN3z/bmNQzJEl1IyxCUFaKnL2FQh2b+6gMax9MtnP2GwC5rUTxJ1fh+mPE= ARC-Authentication-Results: i=1; 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 1615457390306890.7566029183255; Thu, 11 Mar 2021 02:09:50 -0800 (PST) Received: from localhost ([::1]:55044 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lKIGL-0001iA-AQ for importer@patchew.org; Thu, 11 Mar 2021 05:09:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37548) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKICL-0005t5-Pi for qemu-devel@nongnu.org; Thu, 11 Mar 2021 05:05:41 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:52302 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKICJ-0004fS-UX for qemu-devel@nongnu.org; Thu, 11 Mar 2021 05:05:41 -0500 Received: from host86-140-100-136.range86-140.btcentralplus.com ([86.140.100.136] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lKICG-0001He-L7; Thu, 11 Mar 2021 10:05:41 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, laurent@vivier.eu Date: Thu, 11 Mar 2021 10:05:03 +0000 Message-Id: <20210311100505.22596-6-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210311100505.22596-1-mark.cave-ayland@ilande.co.uk> References: <20210311100505.22596-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.140.100.136 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v2 5/7] mac_via: rename VBL timer to 60Hz 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.uk0.bigv.io) 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.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 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" Content-Type: text/plain; charset="utf-8" According to the "Guide To The Macintosh Family Hardware", the 60Hz VIA1 ti= mer on newer Macs such as the Quadra only exists for compatibility with old sof= tware and is no longer synced to the VBL interval. Rename the VBL timer to 60Hz timer to emphasise this and to prevent confusi= on when the real VBL interrupt (now handled as a NuBus slot interrupt) is adde= d in future. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Reviewed-by: BALATON Zoltan --- hw/misc/mac_via.c | 41 ++++++++++++++++++++------------------- include/hw/misc/mac_via.h | 8 ++++---- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index 76f31b8cae..f994fefa7c 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -297,18 +297,18 @@ enum { REG_EMPTY =3D 0xff, }; =20 -static void via1_VBL_update(MOS6522Q800VIA1State *v1s) +static void via1_sixty_hz_update(MOS6522Q800VIA1State *v1s) { MOS6522State *s =3D MOS6522(v1s); =20 /* 60 Hz irq */ - v1s->next_VBL =3D (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + 16630) / - 16630 * 16630; + v1s->next_sixty_hz =3D (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + 16630)= / + 16630 * 16630; =20 - if (s->ier & VIA1_IRQ_VBLANK) { - timer_mod(v1s->VBL_timer, v1s->next_VBL); + if (s->ier & VIA1_IRQ_60HZ) { + timer_mod(v1s->sixty_hz_timer, v1s->next_sixty_hz); } else { - timer_del(v1s->VBL_timer); + timer_del(v1s->sixty_hz_timer); } } =20 @@ -325,16 +325,16 @@ static void via1_one_second_update(MOS6522Q800VIA1Sta= te *v1s) } } =20 -static void via1_VBL(void *opaque) +static void via1_sixty_hz(void *opaque) { MOS6522Q800VIA1State *v1s =3D opaque; MOS6522State *s =3D MOS6522(v1s); MOS6522DeviceClass *mdc =3D MOS6522_GET_CLASS(s); =20 - s->ifr |=3D VIA1_IRQ_VBLANK; + s->ifr |=3D VIA1_IRQ_60HZ; mdc->update_irq(s); =20 - via1_VBL_update(v1s); + via1_sixty_hz_update(v1s); } =20 static void via1_one_second(void *opaque) @@ -897,12 +897,12 @@ static uint64_t mos6522_q800_via1_read(void *opaque, = hwaddr addr, unsigned size) =20 /* * If IRQs are disabled, timers are disabled, but we need to update - * VIA1_IRQ_VBLANK and VIA1_IRQ_ONE_SECOND bits in the IFR + * VIA1_IRQ_60HZ and VIA1_IRQ_ONE_SECOND bits in the IFR */ =20 - if (now >=3D s->next_VBL) { - ms->ifr |=3D VIA1_IRQ_VBLANK; - via1_VBL_update(s); + if (now >=3D s->next_sixty_hz) { + ms->ifr |=3D VIA1_IRQ_60HZ; + via1_sixty_hz_update(s); } if (now >=3D s->next_second) { ms->ifr |=3D VIA1_IRQ_ONE_SECOND; @@ -933,7 +933,7 @@ static void mos6522_q800_via1_write(void *opaque, hwadd= r addr, uint64_t val, } =20 via1_one_second_update(v1s); - via1_VBL_update(v1s); + via1_sixty_hz_update(v1s); } =20 static const MemoryRegionOps mos6522_q800_via1_ops =3D { @@ -983,8 +983,8 @@ static void mac_via_reset(DeviceState *dev) =20 adb_set_autopoll_enabled(adb_bus, true); =20 - timer_del(v1s->VBL_timer); - v1s->next_VBL =3D 0; + timer_del(v1s->sixty_hz_timer); + v1s->next_sixty_hz =3D 0; timer_del(v1s->one_second_timer); v1s->next_second =3D 0; =20 @@ -1026,8 +1026,9 @@ static void mac_via_realize(DeviceState *dev, Error *= *errp) m->mos6522_via1.one_second_timer =3D timer_new_ms(QEMU_CLOCK_VIRTUAL, via1_one_second, &m->mos6522_via1); - m->mos6522_via1.VBL_timer =3D timer_new_ns(QEMU_CLOCK_VIRTUAL, via1_VB= L, - &m->mos6522_via1); + m->mos6522_via1.sixty_hz_timer =3D timer_new_ns(QEMU_CLOCK_VIRTUAL, + via1_sixty_hz, + &m->mos6522_via1); =20 qemu_get_timedate(&tm, 0); m->tick_offset =3D (uint32_t)mktimegm(&tm) + RTC_OFFSET; @@ -1116,8 +1117,8 @@ static const VMStateDescription vmstate_mac_via =3D { VMSTATE_BUFFER(mos6522_via1.PRAM, MacVIAState), VMSTATE_TIMER_PTR(mos6522_via1.one_second_timer, MacVIAState), VMSTATE_INT64(mos6522_via1.next_second, MacVIAState), - VMSTATE_TIMER_PTR(mos6522_via1.VBL_timer, MacVIAState), - VMSTATE_INT64(mos6522_via1.next_VBL, MacVIAState), + VMSTATE_TIMER_PTR(mos6522_via1.sixty_hz_timer, MacVIAState), + VMSTATE_INT64(mos6522_via1.next_sixty_hz, MacVIAState), VMSTATE_STRUCT(mos6522_via2.parent_obj, MacVIAState, 0, vmstate_mo= s6522, MOS6522State), /* RTC */ diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h index a59f0bd422..3058b30685 100644 --- a/include/hw/misc/mac_via.h +++ b/include/hw/misc/mac_via.h @@ -17,7 +17,7 @@ =20 /* VIA 1 */ #define VIA1_IRQ_ONE_SECOND_BIT 0 -#define VIA1_IRQ_VBLANK_BIT 1 +#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 @@ -25,7 +25,7 @@ #define VIA1_IRQ_NB 8 =20 #define VIA1_IRQ_ONE_SECOND (1 << VIA1_IRQ_ONE_SECOND_BIT) -#define VIA1_IRQ_VBLANK (1 << VIA1_IRQ_VBLANK_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) @@ -45,8 +45,8 @@ struct MOS6522Q800VIA1State { /* external timers */ QEMUTimer *one_second_timer; int64_t next_second; - QEMUTimer *VBL_timer; - int64_t next_VBL; + QEMUTimer *sixty_hz_timer; + int64_t next_sixty_hz; }; =20 =20 --=20 2.20.1 From nobody Sun May 19 13:34:33 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 ARC-Seal: i=1; a=rsa-sha256; t=1615457535; cv=none; d=zohomail.com; s=zohoarc; b=aGzrgsAXZKgTZ7HLLif/OnQglRmJJTycg+QRyAjtt7Cvis1aRlZrRbe9UdVgVcpbxOEQ5OkXpJ+lQwHpOJYzKSixPLo/0nUTS44ivRyFgdG0sq1uKMpMuhHiZRXvwKZjuwZEWBQW9l5SDNlntSPgt3fcBXiTk3nlf/Pq1tn/8Bk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615457535; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=45bxrjSIu3emPN+3RokpsjIYC0TbSk360uiWX42ThRE=; b=VfBtfiAjY/haYsHBtQXHgNsi5yLEY7VM3R2GlePME0zQqAUMwBXuNmi03xMzNiHpgKHCdkoLN9/0EgYaWLhSNds4vn9Ins4cejHWG9TXtV9OOz/IvLAPmrjiC/mZXdRMwORLxfZ64qP3hBcSnAOAg3ONfEmHzFy7qkJ3TC8Lvsg= ARC-Authentication-Results: i=1; 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 1615457535788550.7506702276454; Thu, 11 Mar 2021 02:12:15 -0800 (PST) Received: from localhost ([::1]:32994 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lKIIh-0004Pu-4a for importer@patchew.org; Thu, 11 Mar 2021 05:12:15 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37564) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKICO-00060i-TJ for qemu-devel@nongnu.org; Thu, 11 Mar 2021 05:05:46 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:52310 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKICN-0004hi-72 for qemu-devel@nongnu.org; Thu, 11 Mar 2021 05:05:44 -0500 Received: from host86-140-100-136.range86-140.btcentralplus.com ([86.140.100.136] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lKICL-0001He-E5; Thu, 11 Mar 2021 10:05:44 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, laurent@vivier.eu Date: Thu, 11 Mar 2021 10:05:04 +0000 Message-Id: <20210311100505.22596-7-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210311100505.22596-1-mark.cave-ayland@ilande.co.uk> References: <20210311100505.22596-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.140.100.136 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v2 6/7] mac_via: fix 60Hz VIA1 timer interval 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.uk0.bigv.io) 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.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 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" Content-Type: text/plain; charset="utf-8" The 60Hz timer is initialised using timer_new_ns() meaning that the timer interval should be measured in ns, and therefore its period is a thousand times too short. Use a define for the 60Hz timer period taking the more precise value as documented in the Guide To The Macintosh Family Hardware. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier Reviewed-by: BALATON Zoltan --- hw/misc/mac_via.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index f994fefa7c..e7dd31f291 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -279,6 +279,12 @@ #define VIA_TIMER_FREQ (783360) #define VIA_ADB_POLL_FREQ 50 /* XXX: not real */ =20 +/* + * Guide to the Macintosh Family Hardware ch. 12 "Displays" p. 401 gives t= he + * precise 60Hz interrupt frequency as ~60.15Hz with a period of 16625.8 us + */ +#define VIA_60HZ_TIMER_PERIOD_NS 16625800 + /* VIA returns time offset from Jan 1, 1904, not 1970 */ #define RTC_OFFSET 2082844800 =20 @@ -302,8 +308,9 @@ static void via1_sixty_hz_update(MOS6522Q800VIA1State *= v1s) MOS6522State *s =3D MOS6522(v1s); =20 /* 60 Hz irq */ - v1s->next_sixty_hz =3D (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + 16630)= / - 16630 * 16630; + v1s->next_sixty_hz =3D (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + + VIA_60HZ_TIMER_PERIOD_NS) / + VIA_60HZ_TIMER_PERIOD_NS * VIA_60HZ_TIMER_PERIOD= _NS; =20 if (s->ier & VIA1_IRQ_60HZ) { timer_mod(v1s->sixty_hz_timer, v1s->next_sixty_hz); --=20 2.20.1 From nobody Sun May 19 13:34:33 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 ARC-Seal: i=1; a=rsa-sha256; t=1615457682; cv=none; d=zohomail.com; s=zohoarc; b=hbnndK8rE0mRgnrNp8LjCIbDfWv0xIoWSXniMC8KT6IPshOzkdvlJ23hnY49Klyg4M1N4zynpUijXvpfE89lPmSYtOsdMlUDWquFb0Ag2Xqm4FNE+9R7lUqlOt6MYAMDnBamwMiRsVz8+5gGsw94PZUjhlbO7mtqwmDqV9fNltw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1615457682; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qaQC7cP9cLOjSy2L8bxOCjrMVKUskzAF9b+q9iFNai4=; b=gKMncTVSWFgzeLGtzyx2YxTR+eiIcTpx1YhQMeQnpCQeFPuJu+LFzeiYb8aTwRf5k47/ZzT4puFuFlhTeL9YSxAdQsaNMEBJyEYgIaoZ51SXzlcqbAhrSXzk0NNl1jR7Sl+DFFOYO8tllZ3eYQ+gK6FCRM5SrXqiTttrwgyX9gk= ARC-Authentication-Results: i=1; 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 1615457682554947.4953869488086; Thu, 11 Mar 2021 02:14:42 -0800 (PST) Received: from localhost ([::1]:39924 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lKIL2-0007Mh-RF for importer@patchew.org; Thu, 11 Mar 2021 05:14:40 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:37616) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKICT-00063U-Ns for qemu-devel@nongnu.org; Thu, 11 Mar 2021 05:05:49 -0500 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:52316 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lKICQ-0004jm-Hx for qemu-devel@nongnu.org; Thu, 11 Mar 2021 05:05:49 -0500 Received: from host86-140-100-136.range86-140.btcentralplus.com ([86.140.100.136] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lKICO-0001He-N3; Thu, 11 Mar 2021 10:05:47 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, laurent@vivier.eu Date: Thu, 11 Mar 2021 10:05:05 +0000 Message-Id: <20210311100505.22596-8-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210311100505.22596-1-mark.cave-ayland@ilande.co.uk> References: <20210311100505.22596-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.140.100.136 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v2 7/7] mac_via: remove VIA1 timer optimisations 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.uk0.bigv.io) 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.uk0.bigv.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 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" Content-Type: text/plain; charset="utf-8" The original implementation of the Macintosh VIA devices in commit 6dca62a0= 00 "hw/m68k: add VIA support" used timer optimisations to reduce high CPU usag= e on the host when booting Linux. These optimisations worked by waiting until VI= A1 port B was accessed before re-arming the timers. The MacOS toolbox ROM constantly writes to VIA1 port B which calls via1_one_second_update() and via1_sixty_hz_update() to calculate the new ex= piry time, causing the timers to constantly reset and never fire. The effect of = this is that the Ticks (0x16a) global variable holding the number of 60Hz timer = ticks since reset is never incremented by the interrupt causing time to stand sti= ll. Whilst the code was introduced as a performance optimisation, it is likely = that the high CPU usage was actually caused by the incorrect 60Hz timer interval fixed in the previous patch. Remove the optimisation to keep everything sim= ple and enable the MacOS toolbox ROM to start keeping time. Signed-off-by: Mark Cave-Ayland Reviewed-by: Laurent Vivier --- hw/misc/mac_via.c | 43 ++++--------------------------------------- 1 file changed, 4 insertions(+), 39 deletions(-) diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c index e7dd31f291..f164c8c606 100644 --- a/hw/misc/mac_via.c +++ b/hw/misc/mac_via.c @@ -305,31 +305,18 @@ enum { =20 static void via1_sixty_hz_update(MOS6522Q800VIA1State *v1s) { - MOS6522State *s =3D MOS6522(v1s); - /* 60 Hz irq */ v1s->next_sixty_hz =3D (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + VIA_60HZ_TIMER_PERIOD_NS) / VIA_60HZ_TIMER_PERIOD_NS * VIA_60HZ_TIMER_PERIOD= _NS; - - if (s->ier & VIA1_IRQ_60HZ) { - timer_mod(v1s->sixty_hz_timer, v1s->next_sixty_hz); - } else { - timer_del(v1s->sixty_hz_timer); - } + timer_mod(v1s->sixty_hz_timer, v1s->next_sixty_hz); } =20 static void via1_one_second_update(MOS6522Q800VIA1State *v1s) { - MOS6522State *s =3D MOS6522(v1s); - v1s->next_second =3D (qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + 1000) / 1000 * 1000; - if (s->ier & VIA1_IRQ_ONE_SECOND) { - timer_mod(v1s->one_second_timer, v1s->next_second); - } else { - timer_del(v1s->one_second_timer); - } + timer_mod(v1s->one_second_timer, v1s->next_second); } =20 static void via1_sixty_hz(void *opaque) @@ -900,21 +887,6 @@ static uint64_t mos6522_q800_via1_read(void *opaque, h= waddr addr, unsigned size) { MOS6522Q800VIA1State *s =3D MOS6522_Q800_VIA1(opaque); MOS6522State *ms =3D MOS6522(s); - int64_t now =3D qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL); - - /* - * If IRQs are disabled, timers are disabled, but we need to update - * VIA1_IRQ_60HZ and VIA1_IRQ_ONE_SECOND bits in the IFR - */ - - if (now >=3D s->next_sixty_hz) { - ms->ifr |=3D VIA1_IRQ_60HZ; - via1_sixty_hz_update(s); - } - if (now >=3D s->next_second) { - ms->ifr |=3D VIA1_IRQ_ONE_SECOND; - via1_one_second_update(s); - } =20 addr =3D (addr >> 9) & 0xf; return mos6522_read(ms, addr, size); @@ -938,9 +910,6 @@ static void mos6522_q800_via1_write(void *opaque, hwadd= r addr, uint64_t val, v1s->last_b =3D ms->b; break; } - - via1_one_second_update(v1s); - via1_sixty_hz_update(v1s); } =20 static const MemoryRegionOps mos6522_q800_via1_ops =3D { @@ -985,16 +954,10 @@ static const MemoryRegionOps mos6522_q800_via2_ops = =3D { static void mac_via_reset(DeviceState *dev) { MacVIAState *m =3D MAC_VIA(dev); - MOS6522Q800VIA1State *v1s =3D &m->mos6522_via1; ADBBusState *adb_bus =3D &m->adb_bus; =20 adb_set_autopoll_enabled(adb_bus, true); =20 - timer_del(v1s->sixty_hz_timer); - v1s->next_sixty_hz =3D 0; - timer_del(v1s->one_second_timer); - v1s->next_second =3D 0; - m->cmd =3D REG_EMPTY; m->alt =3D REG_EMPTY; } @@ -1033,9 +996,11 @@ static void mac_via_realize(DeviceState *dev, Error *= *errp) m->mos6522_via1.one_second_timer =3D timer_new_ms(QEMU_CLOCK_VIRTUAL, via1_one_second, &m->mos6522_via1); + via1_one_second_update(&m->mos6522_via1); m->mos6522_via1.sixty_hz_timer =3D timer_new_ns(QEMU_CLOCK_VIRTUAL, via1_sixty_hz, &m->mos6522_via1); + via1_sixty_hz_update(&m->mos6522_via1); =20 qemu_get_timedate(&tm, 0); m->tick_offset =3D (uint32_t)mktimegm(&tm) + RTC_OFFSET; --=20 2.20.1