From nobody Mon May 12 07:31:58 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=redhat.com
ARC-Seal: i=1; a=rsa-sha256; t=1734024246; cv=none;
	d=zohomail.com; s=zohoarc;
	b=l7PWqGhMTSh+B1O+Qptdiw1TCujUI9q0oTrP14JVYJ2pWNsMPc5UAOGo4jRv6rMmx/OH7YcH4+w0zqQT/0F3AYO043kIp+6sYAuywCM1Bf/cdgnuzhEH4g1STr59shYBuewks+dD8k1uONwFitzu0NV4MhmJOvZaDySNZ5ke08U=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1734024246;
 h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=Qns/X8H2PNJ05wsGWyjsR/L+wlODTrfFTvyB/zyipf8=;
	b=CFRWXIgKS3pOwmIomEfTzuf391JwP2o/PlS1vWLilIYo2lBGu7hsYv2NEXm3eDxjuU564XUxASayU/LlSH4puCtOyG9FoRwBpSA1VgeiLaeDVee9fuKV1MJWa5YGlLqXQ1SJTcRL4QqvK/zZcx7c5ARMaEallxtoV0plkonC4cA=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<pbonzini@redhat.com> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1734024246678600.7020311694102;
 Thu, 12 Dec 2024 09:24:06 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tLmtV-0006oV-2z; Thu, 12 Dec 2024 12:22:33 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pbonzini@redhat.com>)
 id 1tLmtN-0006mS-8F
 for qemu-devel@nongnu.org; Thu, 12 Dec 2024 12:22:25 -0500
Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pbonzini@redhat.com>)
 id 1tLmtG-0006mY-WF
 for qemu-devel@nongnu.org; Thu, 12 Dec 2024 12:22:24 -0500
Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com
 [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS
 (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
 us-mta-645-UIiAOvAoMW-pjaCVcgUL7A-1; Thu, 12 Dec 2024 12:22:16 -0500
Received: by mail-wm1-f70.google.com with SMTP id
 5b1f17b1804b1-43582d49dacso7948885e9.2
 for <qemu-devel@nongnu.org>; Thu, 12 Dec 2024 09:22:15 -0800 (PST)
Received: from [192.168.10.47] ([151.81.118.45])
 by smtp.gmail.com with ESMTPSA id
 5b1f17b1804b1-4362555334bsm22739135e9.1.2024.12.12.09.22.12
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 12 Dec 2024 09:22:12 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
 s=mimecast20190719; t=1734024137;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=Qns/X8H2PNJ05wsGWyjsR/L+wlODTrfFTvyB/zyipf8=;
 b=bLbXmtifw+ysx+4NpsY2ubBP17Pw13xsmjd+GnqxXe8tiJJ4+/OBuqQiLe2oftv3BQ+foC
 UVoX2sSpx5/D/G+7/6RecW+F6fNmv2z4UBbL6ckdmQMXJSDoru1LydWTH/YiRuJdVq/W++
 YOGGR3COpB2dqE4By3PMMD6ydxuVt4s=
X-MC-Unique: UIiAOvAoMW-pjaCVcgUL7A-1
X-Mimecast-MFC-AGG-ID: UIiAOvAoMW-pjaCVcgUL7A
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1734024134; x=1734628934;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=Qns/X8H2PNJ05wsGWyjsR/L+wlODTrfFTvyB/zyipf8=;
 b=OYqmuzs1yQZg1XJunMHgLRvegEdNbYLezOcpFKIiStnlQLtGIUDcHg2k3zlSFk2I+m
 wF+YMrc9z52n32cHIZy0ApHsSJkjz1zoPGVtowQ5UbLv5oUb/+AemLbzV3qe9yJHQ+O7
 3+TtGsmfq5WrsVooPHZxxyVvLh0nYMdoY1wXzzVyySErG0W3kkuGGjduaJoG5Un4w0aJ
 ZAKonV92rY1GAnHkDItD+jBpHw0hncV941PVg2HTtwwj+cQ5/ERQaFVlwWq6NGUutMKQ
 KwLfzTyJELFswR0SLSYsXQPagAm0atKJa9BzO/I3IS00w7PpZ1+mZYXAPdSTYK8yXdkj
 qDHg==
X-Gm-Message-State: AOJu0Yx53eQpcn4STgmMsoq44gpvYfskyDfOF+Rfl/pbMcNP2zMQl4kj
 HnL8Lm49rX8RrQJaxb//W7IhbH2vUKE8ErNc/DkpWlO3N/N6/HIE2/wRYeFZmB+WjnDSiPrSvSe
 2rME3SYteqe8cSxzLzH8MMFEYyc5S8M6ocwCjQXvskfafQCYX9qjJfo3NVgWc2hq3EaVh/5PMmP
 EMjFFpGfEgUUfwk1vrOy4qOfmGNqRDF4infpbi
X-Gm-Gg: ASbGncuevHBD1DBErx8ddhKuCMRaNZhVMM2piUWP+VCEHvN4jjoyyOuAMXknJBZ4EYH
 drDyBqwqfrE6hwb1a3/LlGwynbUAA8RKndSYBJZ7XRF0qVJENxeLdkNu4BaZid3NI93F93XH/+/
 iP1B4SvS1NokD8Aa3e8tMzx0GYDJ2mRW+ETJocqrduuYfWvMlnBL4QWNk1kMTyL7wwfOEzQeklv
 FoiWgIQjZLXfpZ4QmSSSoX+3jookekFgZiccaW14jjSGfze9zZ44aLunA2t
X-Received: by 2002:a05:600c:3593:b0:435:294:f1c8 with SMTP id
 5b1f17b1804b1-43622883637mr31159165e9.28.1734024133906;
 Thu, 12 Dec 2024 09:22:13 -0800 (PST)
X-Google-Smtp-Source: 
 AGHT+IGbopeWngomw2GJnLUPpY65052E82dIWyU/Xh4pmo+qt4fFEVBFBxQb/yuBEwHKpSSHpc/W6A==
X-Received: by 2002:a05:600c:3593:b0:435:294:f1c8 with SMTP id
 5b1f17b1804b1-43622883637mr31158895e9.28.1734024133412;
 Thu, 12 Dec 2024 09:22:13 -0800 (PST)
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: philmd@linaro.org,
	qemu-rust@nongnu.org
Subject: [PATCH 1/7] rust: pl011: fix declaration of LineControl bits
Date: Thu, 12 Dec 2024 18:21:58 +0100
Message-ID: <20241212172209.533779-2-pbonzini@redhat.com>
X-Mailer: git-send-email 2.47.1
In-Reply-To: <20241212172209.533779-1-pbonzini@redhat.com>
References: <20241212172209.533779-1-pbonzini@redhat.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=170.10.129.124;
 envelope-from=pbonzini@redhat.com;
 helo=us-smtp-delivery-124.mimecast.com
X-Spam_score_int: -25
X-Spam_score: -2.6
X-Spam_bar: --
X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.496,
 DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @redhat.com)
X-ZM-MESSAGEID: 1734024248813116600

The bits in the LineControl struct were backwards. :(

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <philmd@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
---
 rust/hw/char/pl011/src/lib.rs | 82 +++++++++++++++++------------------
 1 file changed, 41 insertions(+), 41 deletions(-)

diff --git a/rust/hw/char/pl011/src/lib.rs b/rust/hw/char/pl011/src/lib.rs
index 4dc0e8f345f..d5089f78854 100644
--- a/rust/hw/char/pl011/src/lib.rs
+++ b/rust/hw/char/pl011/src/lib.rs
@@ -319,32 +319,21 @@ fn default() -> Self {
     /// Line Control Register, `UARTLCR_H`
     #[doc(alias =3D "UARTLCR_H")]
     pub struct LineControl {
-        /// 15:8 - Reserved, do not modify, read as zero.
-        _reserved_zero_no_modify: u8,
-        /// 7 SPS Stick parity select.
-        /// 0 =3D stick parity is disabled
-        /// 1 =3D either:
-        /// =E2=80=A2 if the EPS bit is 0 then the parity bit is transmitt=
ed and checked
-        /// as a 1 =E2=80=A2 if the EPS bit is 1 then the parity bit is
-        /// transmitted and checked as a 0. This bit has no effect when
-        /// the PEN bit disables parity checking and generation. See Table=
 3-11
-        /// on page 3-14 for the parity truth table.
-        pub sticky_parity: bool,
-        /// WLEN Word length. These bits indicate the number of data bits
-        /// transmitted or received in a frame as follows: b11 =3D 8 bits
-        /// b10 =3D 7 bits
-        /// b01 =3D 6 bits
-        /// b00 =3D 5 bits.
-        pub word_length: WordLength,
-        /// FEN Enable FIFOs:
-        /// 0 =3D FIFOs are disabled (character mode) that is, the FIFOs b=
ecome
-        /// 1-byte-deep holding registers 1 =3D transmit and receive FIFO
-        /// buffers are enabled (FIFO mode).
-        pub fifos_enabled: Mode,
-        /// 3 STP2 Two stop bits select. If this bit is set to 1, two stop=
 bits
-        /// are transmitted at the end of the frame. The receive
-        /// logic does not check for two stop bits being received.
-        pub two_stops_bits: bool,
+        /// BRK Send break.
+        ///
+        /// If this bit is set to `1`, a low-level is continually output o=
n the
+        /// `UARTTXD` output, after completing transmission of the
+        /// current character. For the proper execution of the break comma=
nd,
+        /// the software must set this bit for at least two complete
+        /// frames. For normal use, this bit must be cleared to `0`.
+        pub send_break: bool,
+        /// 1 PEN Parity enable:
+        ///
+        /// - 0 =3D parity is disabled and no parity bit added to the data=
 frame
+        /// - 1 =3D parity checking and generation is enabled.
+        ///
+        /// See Table 3-11 on page 3-14 for the parity truth table.
+        pub parity_enabled: bool,
         /// EPS Even parity select. Controls the type of parity the UART u=
ses
         /// during transmission and reception:
         /// - 0 =3D odd parity. The UART generates or checks for an odd nu=
mber of
@@ -355,21 +344,32 @@ pub struct LineControl {
         /// and generation. See Table 3-11 on page 3-14 for the parity
         /// truth table.
         pub parity: Parity,
-        /// 1 PEN Parity enable:
-        ///
-        /// - 0 =3D parity is disabled and no parity bit added to the data=
 frame
-        /// - 1 =3D parity checking and generation is enabled.
-        ///
-        /// See Table 3-11 on page 3-14 for the parity truth table.
-        pub parity_enabled: bool,
-        /// BRK Send break.
-        ///
-        /// If this bit is set to `1`, a low-level is continually output o=
n the
-        /// `UARTTXD` output, after completing transmission of the
-        /// current character. For the proper execution of the break comma=
nd,
-        /// the software must set this bit for at least two complete
-        /// frames. For normal use, this bit must be cleared to `0`.
-        pub send_break: bool,
+        /// 3 STP2 Two stop bits select. If this bit is set to 1, two stop=
 bits
+        /// are transmitted at the end of the frame. The receive
+        /// logic does not check for two stop bits being received.
+        pub two_stops_bits: bool,
+        /// FEN Enable FIFOs:
+        /// 0 =3D FIFOs are disabled (character mode) that is, the FIFOs b=
ecome
+        /// 1-byte-deep holding registers 1 =3D transmit and receive FIFO
+        /// buffers are enabled (FIFO mode).
+        pub fifos_enabled: Mode,
+        /// WLEN Word length. These bits indicate the number of data bits
+        /// transmitted or received in a frame as follows: b11 =3D 8 bits
+        /// b10 =3D 7 bits
+        /// b01 =3D 6 bits
+        /// b00 =3D 5 bits.
+        pub word_length: WordLength,
+        /// 7 SPS Stick parity select.
+        /// 0 =3D stick parity is disabled
+        /// 1 =3D either:
+        /// =E2=80=A2 if the EPS bit is 0 then the parity bit is transmitt=
ed and checked
+        /// as a 1 =E2=80=A2 if the EPS bit is 1 then the parity bit is
+        /// transmitted and checked as a 0. This bit has no effect when
+        /// the PEN bit disables parity checking and generation. See Table=
 3-11
+        /// on page 3-14 for the parity truth table.
+        pub sticky_parity: bool,
+        /// 15:8 - Reserved, do not modify, read as zero.
+        _reserved_zero_no_modify: u8,
     }
=20
     impl LineControl {
--=20
2.47.1


From nobody Mon May 12 07:31:58 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=redhat.com
ARC-Seal: i=1; a=rsa-sha256; t=1734024207; cv=none;
	d=zohomail.com; s=zohoarc;
	b=B46/A2qdCYUnCBRdbNctNlK/8LHHLgSbcR56S620Dj0vzB3csbc/DpUN1n2DDvnDk3nvh4dOCnu1FcfWvPWPF0cYZ6V31TtqpTK77gC8+C5A6SAKv3hHxoJfSrEOeoNwq45EnJzdvCJP1WdsxmTHBgUB9/St6zNwDNEcCid8BPo=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1734024207;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=zlSROje/jH4aIG+vHs+aMStbuV+YcJ8QhC20zV8MRIQ=;
	b=UToSKkxmHu/6vKh0VtTOB+BS5j9j2LGX9RUwh7hzcDvQh9n2gEMH04aXsTSECBCLWHQAyP2dBW8xxGCb1Zg1xuZZ7ZjXK5AY2VKRT2LdqZJXLK0+zGGKwjhEkw6CLtusPgo64/iAvWytyhjBNMozhE2zGRGeFpG6JyadysolwuU=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<pbonzini@redhat.com> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 173402420794034.883075561443775;
 Thu, 12 Dec 2024 09:23:27 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tLmtW-0006pU-1M; Thu, 12 Dec 2024 12:22:34 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pbonzini@redhat.com>)
 id 1tLmtO-0006mU-PM
 for qemu-devel@nongnu.org; Thu, 12 Dec 2024 12:22:28 -0500
Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pbonzini@redhat.com>)
 id 1tLmtI-0006mt-RH
 for qemu-devel@nongnu.org; Thu, 12 Dec 2024 12:22:25 -0500
Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com
 [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS
 (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
 us-mta-638-9_IpYgGQPVmR0-u-mxLz1Q-1; Thu, 12 Dec 2024 12:22:18 -0500
Received: by mail-wm1-f72.google.com with SMTP id
 5b1f17b1804b1-434fe2b605eso5521575e9.2
 for <qemu-devel@nongnu.org>; Thu, 12 Dec 2024 09:22:18 -0800 (PST)
Received: from [192.168.10.47] ([151.81.118.45])
 by smtp.gmail.com with ESMTPSA id
 5b1f17b1804b1-4361ec88993sm27906175e9.2.2024.12.12.09.22.14
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 12 Dec 2024 09:22:14 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
 s=mimecast20190719; t=1734024140;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=zlSROje/jH4aIG+vHs+aMStbuV+YcJ8QhC20zV8MRIQ=;
 b=QjE/GplGFQm5Ttdag1tDtYNqPsKwqMJJjPysii5kM1x7xwZXuyM6IiFU8A4dPzl35aDrbt
 //SVl+E7XZ1Sh0SfL2lfh1+FU5V2vMxxaxo9G3p9wEk5v5e5V9KN0RMbdPnzDo/A3nv+dD
 YGylIcGAUmSzif2nGXF+WVavX4lcDR8=
X-MC-Unique: 9_IpYgGQPVmR0-u-mxLz1Q-1
X-Mimecast-MFC-AGG-ID: 9_IpYgGQPVmR0-u-mxLz1Q
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1734024136; x=1734628936;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=zlSROje/jH4aIG+vHs+aMStbuV+YcJ8QhC20zV8MRIQ=;
 b=MdB5vOgzZCojbpN1Tbd0gzQ50Q1gpabLT1GUC0afM1ViN8E3aVCpxmA5giHlDGGDtx
 Z4j/or0SKcTr/XW2s8fdLXT+F9Y19u2fe0gWWpzhRXd6h34Zmbm2MnW4PaaOQ+nBHgOr
 yzmw4ixNeDUAiPclqpLx1lqNyZ29qI4pTk9qT1AXkew+Qgcp5I5YqCiCpJJ+ilMGthuC
 1oghwlXV97K02MeS6m/Iea06UAZ+DYYyYFoCsaEw4aXeBKlsG+29D7E8joSRFCGhVJhK
 vmNhkevNc2TZa3XzMhzZKOhBf3hhiWK0P6CSoa/67KC6GyPOapqVt3qI8ZBSHcPdGmXL
 qlMQ==
X-Gm-Message-State: AOJu0YwS1DWBNWu1Bmvrazv2VLHySSHEd7e43jaMkTtC5HHBbwhU0HTN
 U4b3RKbl+T7AE5C/lfISKEFmre1Do305eqh62ylnumji4XMdNTeJiEErCbadHdAnTf5VqzZh6vn
 x+V4m8r+GvZ1WAD3+k5tRYpFk3Im2SfOlW5LQI5Wd6mjXrdC4W8g/Bxi15Ar6RbNk0XrH7i2d3m
 Ig0Dd5N3cQ1n0x0afOoohDEtI9Fii+tkLCpxT5
X-Gm-Gg: ASbGncuNOP82TaR0vZwjEtVo2mYFgTe0AebLEia2px70YqhTNDuv1q+i632LUL8F5pu
 uRYsBI921yPh2Lumx21wUG/3kMLOloKPkuy9fUTACLVhUOY46NmQOGm1/Est9NxWj3xdG9SW82P
 vk3I2MT29nOR76yMa/h/AVUTL4bjLjyngCcRerod895/vMdNZEVD9GbYSyt9n+fZhbjSjQHxUSq
 RKPYg7WoC9ajn6yot3i3QNeg8T44SnuJAMW5dSUJkT5eTFPh5If8GR1Eb9l
X-Received: by 2002:a05:600c:4e4b:b0:434:ff08:202b with SMTP id
 5b1f17b1804b1-4361c36f5b3mr66285495e9.12.1734024136143;
 Thu, 12 Dec 2024 09:22:16 -0800 (PST)
X-Google-Smtp-Source: 
 AGHT+IFsA5q7Fbw+NO+Mi5ht77fAvi9wOGQ4Iwy+WrOa3qRpj3Ln99lbAVYKYkTAluwaRHRWlIHtvw==
X-Received: by 2002:a05:600c:4e4b:b0:434:ff08:202b with SMTP id
 5b1f17b1804b1-4361c36f5b3mr66285185e9.12.1734024135711;
 Thu, 12 Dec 2024 09:22:15 -0800 (PST)
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: philmd@linaro.org,
	qemu-rust@nongnu.org
Subject: [PATCH 2/7] rust: pl011: match break logic of C version
Date: Thu, 12 Dec 2024 18:21:59 +0100
Message-ID: <20241212172209.533779-3-pbonzini@redhat.com>
X-Mailer: git-send-email 2.47.1
In-Reply-To: <20241212172209.533779-1-pbonzini@redhat.com>
References: <20241212172209.533779-1-pbonzini@redhat.com>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=170.10.133.124;
 envelope-from=pbonzini@redhat.com;
 helo=us-smtp-delivery-124.mimecast.com
X-Spam_score_int: -25
X-Spam_score: -2.6
X-Spam_bar: --
X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.496,
 DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @redhat.com)
X-ZM-MESSAGEID: 1734024208575116600
Content-Type: text/plain; charset="utf-8"

Check loopback_enabled(), not fifo_enabled(), like the C code.

Also, set_break_error() must not happen until the break is read from
the FIFO.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <philmd@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
---
 rust/hw/char/pl011/src/device.rs | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/devi=
ce.rs
index 41220c99a83..c6a8dbe1af4 100644
--- a/rust/hw/char/pl011/src/device.rs
+++ b/rust/hw/char/pl011/src/device.rs
@@ -465,9 +465,8 @@ pub fn can_receive(&self) -> bool {
     }
=20
     pub fn event(&mut self, event: QEMUChrEvent) {
-        if event =3D=3D bindings::QEMUChrEvent::CHR_EVENT_BREAK && !self.f=
ifo_enabled() {
+        if event =3D=3D bindings::QEMUChrEvent::CHR_EVENT_BREAK && !self.l=
oopback_enabled() {
             self.put_fifo(DATA_BREAK);
-            self.receive_status_error_clear.set_break_error(true);
         }
     }
=20
--=20
2.47.1
From nobody Mon May 12 07:31:58 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=redhat.com
ARC-Seal: i=1; a=rsa-sha256; t=1734024242; cv=none;
	d=zohomail.com; s=zohoarc;
	b=S8yPoMISzTRN3V1j5dQ0eL3BIlKZsTIqUOke2xqUHW1SoXqM1Pl7VUXGrU4oNCW3EkE9T2T45KX9ItE8Df4q4IecCK8sVoFAz9wJnMpMjUzoKN3uC60iDibBu3RZ08XFs3xE1QYmAV5eCJHLpKFFxl/f7AGkxUlV3N3aSLzkkbI=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1734024242;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=QK+lsN9N8GKnH3zKNE8BJxFeo8zX1mw/5X/o/AQc7oc=;
	b=OugovwRQULdrQplMehSc2SsKwYEATpq4B3Yx8AUd4DwBd4XYl9IZ5v5CZcR7qGKQWqlwZ+B4n3cn/8zWV5usroFobybW7e9iXeYCHsBrplqaAzHA65TqhJS2ElQoKPpyKJnr/8HnKGVKVrTf5ls66/EvA0luuF1/u+888uCDuBc=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<pbonzini@redhat.com> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1734024242731211.1379892448474;
 Thu, 12 Dec 2024 09:24:02 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tLmtV-0006oe-BR; Thu, 12 Dec 2024 12:22:33 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pbonzini@redhat.com>)
 id 1tLmtT-0006nY-Cm
 for qemu-devel@nongnu.org; Thu, 12 Dec 2024 12:22:31 -0500
Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pbonzini@redhat.com>)
 id 1tLmtP-0006nj-EQ
 for qemu-devel@nongnu.org; Thu, 12 Dec 2024 12:22:29 -0500
Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com
 [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS
 (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
 us-mta-453-EeNdB360PNWx2advWsDeVg-1; Thu, 12 Dec 2024 12:22:24 -0500
Received: by mail-wm1-f70.google.com with SMTP id
 5b1f17b1804b1-436228ebc5eso5427615e9.3
 for <qemu-devel@nongnu.org>; Thu, 12 Dec 2024 09:22:24 -0800 (PST)
Received: from [192.168.10.47] ([151.81.118.45])
 by smtp.gmail.com with ESMTPSA id
 5b1f17b1804b1-4361ec88993sm27906505e9.2.2024.12.12.09.22.16
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 12 Dec 2024 09:22:16 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
 s=mimecast20190719; t=1734024145;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=QK+lsN9N8GKnH3zKNE8BJxFeo8zX1mw/5X/o/AQc7oc=;
 b=ITykdqR+wQXU+/WCOYxrKz8bvObcVYXU4yw9qzfYV7aegXiKtKc89Tlsf3RLNQoJCGE6Fg
 j8+Pyt7jZVSInux/3UwTVotRUArFaT8+atM0Z1SqWCOVjZYdMWl9cjYTYnN548Idz+9PTm
 pgb+gS0p8VmwKLqH5XLTn2+6F1sNPyk=
X-MC-Unique: EeNdB360PNWx2advWsDeVg-1
X-Mimecast-MFC-AGG-ID: EeNdB360PNWx2advWsDeVg
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1734024142; x=1734628942;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=QK+lsN9N8GKnH3zKNE8BJxFeo8zX1mw/5X/o/AQc7oc=;
 b=qU1FGsXdPdHkTaM9hvImaVh+niXOQoxm/YUe2yvD96An0mBy6AteO63C3Va+vFdvOB
 EXbkLR4iUynswQ4eJvsHq6PMJXMvJA6vdZJFGGZxHH1KoOmLEPW7h3xP0uv1OV4dLv5C
 aE/9zC7QZKqAiByv0+DyduFqt4vJ7K55CszyaeVThU/r2rYqEX/hBqn8bMGmyMAYOymm
 md5u4Fh9m5AdrwOHGnjfzl1/McKs5tn684fovaHrc6EVNQ71C8FZGI+qkFItu4sm8yND
 OJARnVq5dWhDUu1aU/GfuHBnD3/snBSw2Qev6H9Jk7ZrZp/nwNx1xeH6+4B0On9LyNSM
 K7kw==
X-Gm-Message-State: AOJu0YzNIBcG4nuCUrT6WViMfgP17o1b59v4Ym0euDGL8sNeSGrWaq5f
 MQNB3w4kjScleU07SAATY9+Th3CZ/FP20ysIq2pLbc0sMYC5pPFo9N6I9HG6em626cvF3yHrTSH
 1P9C6SjuIKt67QOOxkrZzWbZvMiCmwEsjeiSp4eozYSu/CsF774BLVYCEiZFsIIHEgZivIF4osV
 lPxbf439TNx55WnLIKzRICnOiTww4M7f5klJGW
X-Gm-Gg: ASbGnctn6PmsDCBXd2gHpLoqoa3WNnfU4SCHh2w4CQMQ7kKWs3QJ5vNby1epCgzy/8M
 5fQs7jM5cA0o77hwFGvnoSeK4bG+mkbe/AbQXvaG68uqofIgRGfAYS5WYbfthLtPuyX/5IltjJ9
 2/kzjJMfAshdrQ395dpvEap5d3675ynb083HlLtFD8lPB/Ps36JO72yOc6kvcnNR5PyGoNh4D24
 XeSemWxHuuAb9NhHhZdKq89MvUuPxtqiNVe4mSZfuMiZomFdp7i/T9jH4P5
X-Received: by 2002:a05:600c:4f86:b0:434:9e46:5bc with SMTP id
 5b1f17b1804b1-4361c35cf0amr77607425e9.10.1734024140836;
 Thu, 12 Dec 2024 09:22:20 -0800 (PST)
X-Google-Smtp-Source: 
 AGHT+IGOALJOSWPkWDyRLWHIqDFZoBkOeAohS1YxP/+7qkyhP9o/3cIaJKip1GqeHKcue6wF83J6kg==
X-Received: by 2002:a05:600c:4f86:b0:434:9e46:5bc with SMTP id
 5b1f17b1804b1-4361c35cf0amr77605895e9.10.1734024138930;
 Thu, 12 Dec 2024 09:22:18 -0800 (PST)
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: philmd@linaro.org,
	qemu-rust@nongnu.org
Subject: [PATCH 3/7] rust: pl011: always use reset() method on registers
Date: Thu, 12 Dec 2024 18:22:00 +0100
Message-ID: <20241212172209.533779-4-pbonzini@redhat.com>
X-Mailer: git-send-email 2.47.1
In-Reply-To: <20241212172209.533779-1-pbonzini@redhat.com>
References: <20241212172209.533779-1-pbonzini@redhat.com>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=170.10.129.124;
 envelope-from=pbonzini@redhat.com;
 helo=us-smtp-delivery-124.mimecast.com
X-Spam_score_int: -25
X-Spam_score: -2.6
X-Spam_bar: --
X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.496,
 DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @redhat.com)
X-ZM-MESSAGEID: 1734024244741116600
Content-Type: text/plain; charset="utf-8"

For CR, the ugly-ish "0.into()" idiom is already hidden within the
Default trait.  Do not repeat it.

For FR, standardize on reset() being equivalent to "*self =3D Self::default=
()"
and let reset_fifo toggle only the bits that are related to FIFOs.  This
commit also reproduces C commit 02b1f7f6192 ("hw/char/pl011: Split RX/TX
path of pl011_reset_fifo()", 2024-09-13).

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <philmd@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
---
 rust/hw/char/pl011/src/device.rs | 23 ++++++++++++++++-------
 rust/hw/char/pl011/src/lib.rs    | 13 +++++--------
 2 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/devi=
ce.rs
index c6a8dbe1af4..eb15e9d5788 100644
--- a/rust/hw/char/pl011/src/device.rs
+++ b/rust/hw/char/pl011/src/device.rs
@@ -267,7 +267,7 @@ pub fn write(&mut self, offset: hwaddr, value: u64) {
                 self.update();
             }
             Ok(RSR) =3D> {
-                self.receive_status_error_clear =3D 0.into();
+                self.receive_status_error_clear.reset();
             }
             Ok(FR) =3D> {
                 // flag writes are ignored
@@ -288,7 +288,8 @@ pub fn write(&mut self, offset: hwaddr, value: u64) {
                 if bool::from(self.line_control.fifos_enabled())
                     ^ bool::from(new_val.fifos_enabled())
                 {
-                    self.reset_fifo();
+                    self.reset_rx_fifo();
+                    self.reset_tx_fifo();
                 }
                 if self.line_control.send_break() ^ new_val.send_break() {
                     let mut break_enable: c_int =3D new_val.send_break().i=
nto();
@@ -447,16 +448,24 @@ pub fn reset(&mut self) {
         self.read_trigger =3D 1;
         self.ifl =3D 0x12;
         self.control.reset();
-        self.flags =3D 0.into();
-        self.reset_fifo();
+        self.flags.reset();
+        self.reset_rx_fifo();
+        self.reset_tx_fifo();
     }
=20
-    pub fn reset_fifo(&mut self) {
+    pub fn reset_rx_fifo(&mut self) {
         self.read_count =3D 0;
         self.read_pos =3D 0;
=20
-        /* Reset FIFO flags */
-        self.flags.reset();
+        // Reset FIFO flags
+        self.flags.set_receive_fifo_full(false);
+        self.flags.set_receive_fifo_empty(true);
+    }
+
+    pub fn reset_tx_fifo(&mut self) {
+        // Reset FIFO flags
+        self.flags.set_transmit_fifo_full(false);
+        self.flags.set_transmit_fifo_empty(true);
     }
=20
     pub fn can_receive(&self) -> bool {
diff --git a/rust/hw/char/pl011/src/lib.rs b/rust/hw/char/pl011/src/lib.rs
index d5089f78854..e3eacb0e6b9 100644
--- a/rust/hw/char/pl011/src/lib.rs
+++ b/rust/hw/char/pl011/src/lib.rs
@@ -230,7 +230,7 @@ pub struct ReceiveStatusErrorClear {
     impl ReceiveStatusErrorClear {
         pub fn reset(&mut self) {
             // All the bits are cleared to 0 on reset.
-            *self =3D 0.into();
+            *self =3D Self::default();
         }
     }
=20
@@ -297,19 +297,16 @@ pub struct Flags {
=20
     impl Flags {
         pub fn reset(&mut self) {
-            // After reset TXFF, RXFF, and BUSY are 0, and TXFE and RXFE a=
re 1
-            self.set_receive_fifo_full(false);
-            self.set_transmit_fifo_full(false);
-            self.set_busy(false);
-            self.set_receive_fifo_empty(true);
-            self.set_transmit_fifo_empty(true);
+            *self =3D Self::default();
         }
     }
=20
     impl Default for Flags {
         fn default() -> Self {
             let mut ret: Self =3D 0.into();
-            ret.reset();
+            // After reset TXFF, RXFF, and BUSY are 0, and TXFE and RXFE a=
re 1
+            ret.set_receive_fifo_empty(true);
+            ret.set_transmit_fifo_empty(true);
             ret
         }
     }
--=20
2.47.1
From nobody Mon May 12 07:31:58 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=redhat.com
ARC-Seal: i=1; a=rsa-sha256; t=1734024199; cv=none;
	d=zohomail.com; s=zohoarc;
	b=DybitO+a628GVMhLKbiVa481l1XKol+NWvS+f8zTUHXqHTeSAyjICzJzcd6OvldWJo6MHXSR29KiaV/bKzwByLjEemWWWg6uhTCm274RB+jsIqRYq+t73soNnoetMBLnrCRrgorQd88xeDxeLtV3x5rMp4oYN9xhdk121C/B8ZQ=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1734024199;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=u6V2KCGpKcKJaSNdx7ZIwr1bDMF8vYPd7y6l/A6UdOQ=;
	b=cAzMS8Bl5TJ3eNPHv+pWjYaT2pMsqYUSCTIXzLU8ONARNQvRkrVX9bnfhzchvsxmDymbufFoaM/FkqvOLiffISVCupEec64W4zYv9AU2kzP8QqwEjIc5XXR3I87I3pr6t94IQLrLFadi/NqKRCeV1JEFRduRYzrD1ZT8cHBeJLU=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<pbonzini@redhat.com> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1734024198812408.55396858867834;
 Thu, 12 Dec 2024 09:23:18 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tLmtW-0006qE-T5; Thu, 12 Dec 2024 12:22:34 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pbonzini@redhat.com>)
 id 1tLmtR-0006mt-4H
 for qemu-devel@nongnu.org; Thu, 12 Dec 2024 12:22:30 -0500
Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pbonzini@redhat.com>)
 id 1tLmtN-0006nI-54
 for qemu-devel@nongnu.org; Thu, 12 Dec 2024 12:22:28 -0500
Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com
 [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS
 (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
 us-mta-441-z7KIu92xOeOmuKlopWI0Lg-1; Thu, 12 Dec 2024 12:22:22 -0500
Received: by mail-wm1-f69.google.com with SMTP id
 5b1f17b1804b1-436228ebc5eso5427375e9.3
 for <qemu-devel@nongnu.org>; Thu, 12 Dec 2024 09:22:22 -0800 (PST)
Received: from [192.168.10.47] ([151.81.118.45])
 by smtp.gmail.com with ESMTPSA id
 5b1f17b1804b1-436255531fdsm22664625e9.2.2024.12.12.09.22.19
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 12 Dec 2024 09:22:19 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
 s=mimecast20190719; t=1734024144;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=u6V2KCGpKcKJaSNdx7ZIwr1bDMF8vYPd7y6l/A6UdOQ=;
 b=IQDZ4FJqlnDHj5GsG90Jo8QvvlenH2UO07FHXuYJZOYQMFauLMZ7cZtHvxccpSNE75nT42
 FAub+9NMe4K46jflxTtiNESCYEsjDPx14r6WTjW6WoUw0cRvXdsTOdc/mVWUti8GdjuUA5
 ObcV7AbBUFEgN9IpocOMv3Jos2PFKvI=
X-MC-Unique: z7KIu92xOeOmuKlopWI0Lg-1
X-Mimecast-MFC-AGG-ID: z7KIu92xOeOmuKlopWI0Lg
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1734024141; x=1734628941;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=u6V2KCGpKcKJaSNdx7ZIwr1bDMF8vYPd7y6l/A6UdOQ=;
 b=bPm3jRT8lH43dkvcXwTD5stHoTwkVsu869oCPpdLdN90KGbegwMo5XaU73PMCXlDNL
 KccT0qUnUAF7wBdK6iV7RyVsX9R0wshvDrz2iRpe16rh1oSRz3xVSrBqQMD4yLJJ9ZPX
 ufFuBRi3HyN8nI/O3fBqKEaI7P/J2gI8FbJm4NVdBKOrrrc7HipAV6sNwMTtxibObFMl
 WIrsmuywbw63Aduit3mE29kh6sPymuo63Y0P3zB+NvdauYHdTbVe9UBZGmXkISNvctqk
 52Xk5j9BJe38KhY41P9Vm1y7uk2Zn9JjUPc/QsVinhlY099Qj3TEh0/tnGE0hJBdg8W5
 toVQ==
X-Gm-Message-State: AOJu0YwvjqGGzJN5nd31E2KoD0+0e8ZUeUaLuQjXLwGDmPBmg9evOYik
 cSffLKKJfOxCGDJ8Eu3VN33RG6Y62STmL0PVNJeiC1KsOT7/pg7kruFKNAARqA3bbeupD+flzVU
 7okD/tVW3+mcR164Jxd2fHqgfK9HP5BA+HW1cGLe4zHAtX5DWrDZNMA7fuOl0Y6JFt2xeRXwLGK
 HWT1E5lg8Ov87YUD7JrbTbsiJTxmXfFfIpLCR5
X-Gm-Gg: ASbGncsjjoFs/eN9zVMxJNBDE+qTMmp5CkQJS7i58Z3/Xnk9Sc9jfDOS3Dz1RSYxyHE
 8gYEKIv3dtEylH44Nl7TdZHmzoC4AsOzXGrHx7GfiqtDT80q9RAQRjI0nuuMyqWFqm5R0HUEbJx
 CkCEsVoS/gXmnHf7Q7oRz2iHp4kG83X0HySMFy/PgA93lLK8RdjE2+WP05421ZnIl+HLvudsOmp
 GmI94v71nA0ABW57aBq6AgcNv+YWSVhHCITtG1wiEhW+mkz8KQxfkx1LgHL
X-Received: by 2002:a05:600c:1d1d:b0:434:f335:83b with SMTP id
 5b1f17b1804b1-4361c344549mr61038445e9.5.1734024141033;
 Thu, 12 Dec 2024 09:22:21 -0800 (PST)
X-Google-Smtp-Source: 
 AGHT+IH5LiWj4pWCKznuzLNsiEJ08jd8fnoongVHTt0lL4NL6k4DsTSN6lkBCvK1s8BBcFEyk6kyTg==
X-Received: by 2002:a05:600c:1d1d:b0:434:f335:83b with SMTP id
 5b1f17b1804b1-4361c344549mr61038215e9.5.1734024140569;
 Thu, 12 Dec 2024 09:22:20 -0800 (PST)
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: philmd@linaro.org,
	qemu-rust@nongnu.org
Subject: [PATCH 4/7] rust: pl011: fix break errors and definition of Data
 struct
Date: Thu, 12 Dec 2024 18:22:01 +0100
Message-ID: <20241212172209.533779-5-pbonzini@redhat.com>
X-Mailer: git-send-email 2.47.1
In-Reply-To: <20241212172209.533779-1-pbonzini@redhat.com>
References: <20241212172209.533779-1-pbonzini@redhat.com>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=170.10.129.124;
 envelope-from=pbonzini@redhat.com;
 helo=us-smtp-delivery-124.mimecast.com
X-Spam_score_int: -25
X-Spam_score: -2.6
X-Spam_bar: --
X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.496,
 DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @redhat.com)
X-ZM-MESSAGEID: 1734024200648116600
Content-Type: text/plain; charset="utf-8"

The Data struct is wrong, and does not show how bits 8-15 of DR
are the receive status.  Fix it, and use it to fix break
errors ("c >> 8" in the C code does not translate to
"c.to_be_bytes()[3]").

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <philmd@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
---
 rust/hw/char/pl011/src/device.rs | 15 ++++++------
 rust/hw/char/pl011/src/lib.rs    | 41 ++++++++++++++++++++++----------
 2 files changed, 36 insertions(+), 20 deletions(-)

diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/devi=
ce.rs
index eb15e9d5788..e88ea24b00e 100644
--- a/rust/hw/char/pl011/src/device.rs
+++ b/rust/hw/char/pl011/src/device.rs
@@ -30,8 +30,6 @@
 /// Fractional Baud Rate Divider, `UARTFBRD`
 const FBRD_MASK: u32 =3D 0x3f;
=20
-const DATA_BREAK: u32 =3D 1 << 10;
-
 /// QEMU sourced constant.
 pub const PL011_FIFO_DEPTH: usize =3D 16_usize;
=20
@@ -68,7 +66,7 @@ pub struct PL011State {
     pub dmacr: u32,
     pub int_enabled: u32,
     pub int_level: u32,
-    pub read_fifo: [u32; PL011_FIFO_DEPTH],
+    pub read_fifo: [registers::Data; PL011_FIFO_DEPTH],
     pub ilpr: u32,
     pub ibrd: u32,
     pub fbrd: u32,
@@ -215,10 +213,11 @@ pub fn read(&mut self, offset: hwaddr, _size: c_uint)=
 -> std::ops::ControlFlow<u
                     self.int_level &=3D !registers::INT_RX;
                 }
                 // Update error bits.
-                self.receive_status_error_clear =3D c.to_be_bytes()[3].int=
o();
+                self.receive_status_error_clear.set_from_data(c);
                 self.update();
                 // Must call qemu_chr_fe_accept_input, so return Continue:
-                return std::ops::ControlFlow::Continue(c.into());
+                let c =3D u32::from(c);
+                return std::ops::ControlFlow::Continue(u64::from(c));
             }
             Ok(RSR) =3D> u8::from(self.receive_status_error_clear).into(),
             Ok(FR) =3D> u16::from(self.flags).into(),
@@ -411,7 +410,7 @@ fn loopback_mdmctrl(&mut self) {
=20
     fn loopback_break(&mut self, enable: bool) {
         if enable {
-            self.loopback_tx(DATA_BREAK);
+            self.loopback_tx(registers::Data::BREAK.into());
         }
     }
=20
@@ -475,7 +474,7 @@ pub fn can_receive(&self) -> bool {
=20
     pub fn event(&mut self, event: QEMUChrEvent) {
         if event =3D=3D bindings::QEMUChrEvent::CHR_EVENT_BREAK && !self.l=
oopback_enabled() {
-            self.put_fifo(DATA_BREAK);
+            self.put_fifo(registers::Data::BREAK.into());
         }
     }
=20
@@ -502,7 +501,7 @@ pub fn put_fifo(&mut self, value: c_uint) {
         let depth =3D self.fifo_depth();
         assert!(depth > 0);
         let slot =3D (self.read_pos + self.read_count) & (depth - 1);
-        self.read_fifo[slot] =3D value;
+        self.read_fifo[slot] =3D registers::Data::from(value);
         self.read_count +=3D 1;
         self.flags.set_receive_fifo_empty(false);
         if self.read_count =3D=3D depth {
diff --git a/rust/hw/char/pl011/src/lib.rs b/rust/hw/char/pl011/src/lib.rs
index e3eacb0e6b9..463ae60543b 100644
--- a/rust/hw/char/pl011/src/lib.rs
+++ b/rust/hw/char/pl011/src/lib.rs
@@ -139,6 +139,21 @@ pub mod registers {
     //! unused thus treated as zero when read or written.
     use bilge::prelude::*;
=20
+    /// Receive Status Register / Data Register common error bits
+    ///
+    /// The `UARTRSR` register is updated only when a read occurs
+    /// from the `UARTDR` register with the same status information
+    /// that can also be obtained by reading the `UARTDR` register
+    #[bitsize(8)]
+    #[derive(Clone, Copy, Default, DebugBits, FromBits)]
+    pub struct Errors {
+        pub framing_error: bool,
+        pub parity_error: bool,
+        pub break_error: bool,
+        pub overrun_error: bool,
+        _reserved_unpredictable: u4,
+    }
+
     // TODO: FIFO Mode has different semantics
     /// Data Register, `UARTDR`
     ///
@@ -181,16 +196,18 @@ pub mod registers {
     ///
     /// # Source
     /// ARM DDI 0183G 3.3.1 Data Register, UARTDR
-    #[bitsize(16)]
-    #[derive(Clone, Copy, DebugBits, FromBits)]
+    #[bitsize(32)]
+    #[derive(Clone, Copy, Default, DebugBits, FromBits)]
     #[doc(alias =3D "UARTDR")]
     pub struct Data {
-        _reserved: u4,
         pub data: u8,
-        pub framing_error: bool,
-        pub parity_error: bool,
-        pub break_error: bool,
-        pub overrun_error: bool,
+        pub errors: Errors,
+        _reserved: u16,
+    }
+
+    impl Data {
+        // bilge is not very const-friendly, unfortunately
+        pub const BREAK: Self =3D Self { value: 1 << 10 };
     }
=20
     // TODO: FIFO Mode has different semantics
@@ -220,14 +237,14 @@ pub struct Data {
     #[bitsize(8)]
     #[derive(Clone, Copy, DebugBits, FromBits)]
     pub struct ReceiveStatusErrorClear {
-        pub framing_error: bool,
-        pub parity_error: bool,
-        pub break_error: bool,
-        pub overrun_error: bool,
-        _reserved_unpredictable: u4,
+        pub errors: Errors,
     }
=20
     impl ReceiveStatusErrorClear {
+        pub fn set_from_data(&mut self, data: Data) {
+            self.set_errors(data.errors());
+        }
+
         pub fn reset(&mut self) {
             // All the bits are cleared to 0 on reset.
             *self =3D Self::default();
--=20
2.47.1
From nobody Mon May 12 07:31:58 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=redhat.com
ARC-Seal: i=1; a=rsa-sha256; t=1734024199; cv=none;
	d=zohomail.com; s=zohoarc;
	b=b7aswPOtb+sfpIbA8SVeE0Q/Fnuppxt9dg1juziPiLdLEs/dvQqf8XnJzpifScpZsFMqk0dXP76rIhSrK9TwQAsUGUZWK0eZqOZ3E5/9U9aGJU3AWeIB5A/vG7J9/XweCmC+Bhvqv1Rhgul3/ZnmEw2mx0k0z4ojhwbEYDRY6wM=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1734024199;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=KHVqWO/pCUdfAOY6uDFnWMq+tGNU/At5wYKHm8JQJsI=;
	b=P33Dhzhys+5fU29x5up2yh1QuJUiNKZwOKXS1pB+8T9f181eob5s7pRgTL3lcY+xNCyQxlnegPv4WQ8pkpYBoJCyQ4ARderVV/kNBfCN984ymFzikDk2Rr+An8yfiPcVg6HFQH2XSUAWJTjrWWNx0VzCwBk0WURPduwa8VYGe3Y=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<pbonzini@redhat.com> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1734024199285138.6296485611624;
 Thu, 12 Dec 2024 09:23:19 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tLmtb-0006sH-VA; Thu, 12 Dec 2024 12:22:39 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pbonzini@redhat.com>)
 id 1tLmtW-0006ps-Ch
 for qemu-devel@nongnu.org; Thu, 12 Dec 2024 12:22:34 -0500
Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pbonzini@redhat.com>)
 id 1tLmtS-0006oB-6B
 for qemu-devel@nongnu.org; Thu, 12 Dec 2024 12:22:34 -0500
Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com
 [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS
 (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
 us-mta-651-1hS0ErUeM1Gzc1ZtYIgQhw-1; Thu, 12 Dec 2024 12:22:27 -0500
Received: by mail-wm1-f69.google.com with SMTP id
 5b1f17b1804b1-43610eba55bso7942685e9.3
 for <qemu-devel@nongnu.org>; Thu, 12 Dec 2024 09:22:26 -0800 (PST)
Received: from [192.168.10.47] ([151.81.118.45])
 by smtp.gmail.com with ESMTPSA id
 5b1f17b1804b1-4362557c6c2sm22187865e9.16.2024.12.12.09.22.21
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 12 Dec 2024 09:22:21 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
 s=mimecast20190719; t=1734024149;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=KHVqWO/pCUdfAOY6uDFnWMq+tGNU/At5wYKHm8JQJsI=;
 b=jTFW0sJWwtc3URQhmJP8PYdI/Oh/mo+gjZJN9hNfNufhTHQLqm5qJMT+gvOv8NCMlST3O4
 d0WqNXgP1cqGoFVm/HOdbpFPfGCgwYDIqTwDTQRtPk7ICgCso14XULupgB/ry+56X4p5Ez
 EPe6gsGUlBgyBbHouQWtwoLMzjawph4=
X-MC-Unique: 1hS0ErUeM1Gzc1ZtYIgQhw-1
X-Mimecast-MFC-AGG-ID: 1hS0ErUeM1Gzc1ZtYIgQhw
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1734024145; x=1734628945;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=KHVqWO/pCUdfAOY6uDFnWMq+tGNU/At5wYKHm8JQJsI=;
 b=XxDBfsOWGFiPMbIfVBArx7tkJQOdDqYNRb47A66I18rXVMwrkz4LXzgXyKatl6bNg0
 HS3EiMzcHc6YWhmUT7sbjxkhrngqJ+ibduYnvmHIidTdtJepvtR3ZpNH8zOQGBQX5XlK
 2bRcla9JrAv3p812YqrqIuVJLdjilA4NKzNgm2h7cHdbFG0aR2fPqVz1wAjk1c9EbqP8
 9Kv4lyvXlsfuqw1ra5QR5+Eos3DWvqdsxMjvPGXKvH8hvgS4rdL90xtidVkRbEMGMhex
 4K/3quxaYASQUSv4A0Ia4P1U5n3BrEZyynGBC4A5d9SwD4mCZp6y+l1o/MmxoCxotFIS
 hjfw==
X-Gm-Message-State: AOJu0YxLpc3je2NZRRICwznZpd3F7jcGRS9X9LGCwvvwHYcDajrnp7Ao
 tio0+4KL9CS4Xly6yGhJe18OrkBW0fnXgvsaTZU/4U3Lhk4sqsWf+/wgSAo7R6mk7PFc8/ge56H
 e0cG+gCs/0vDAhDH6+ah5hz4uGolhDI/gtXsx0+qb9TPuISPz1NRlBIM2qMzddtW/MB5CNP3uCX
 qjO3yDcQasbOeNJwh4PLOts0FXdW8jVUHcvESN
X-Gm-Gg: ASbGncvadW9f9Y1JEaY1Ai9cx4mvxVsuLWSh+12j/L4YSrlQAgB0VMx8+g8GZYqN1qM
 i666Lcpabf2jkF6boKZwGw3DhWxGOJ2lmYoL/E8gnRqlqRUtjqxsX5T0Ht1e7tKZJHvHIgOULUG
 YrYFpSTFFEm0igdnBzpaUZS+fg57Y5JPJK3muQnYuvvseUf35G/Ht5cHJOCV1TK/gu8RO2KI/Qo
 GATm0varU0QmNKvTm1V5zx/jO+i7P73fbycUdvtQttxZwV7HypelyoGCWjk
X-Received: by 2002:a05:600c:4e49:b0:434:edcf:7474 with SMTP id
 5b1f17b1804b1-43622883cd8mr37848665e9.33.1734024145098;
 Thu, 12 Dec 2024 09:22:25 -0800 (PST)
X-Google-Smtp-Source: 
 AGHT+IHPtuQ9i7Q5Wttof82EifUn50vzbZkbe6+LFSMkXywkQw18sj1mp8gRfekBMl6pkeLXWAnpZg==
X-Received: by 2002:a05:600c:4e49:b0:434:edcf:7474 with SMTP id
 5b1f17b1804b1-43622883cd8mr37848415e9.33.1734024144601;
 Thu, 12 Dec 2024 09:22:24 -0800 (PST)
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: philmd@linaro.org,
	qemu-rust@nongnu.org
Subject: [PATCH 5/7] rust: pl011: extend registers to 32 bits
Date: Thu, 12 Dec 2024 18:22:02 +0100
Message-ID: <20241212172209.533779-6-pbonzini@redhat.com>
X-Mailer: git-send-email 2.47.1
In-Reply-To: <20241212172209.533779-1-pbonzini@redhat.com>
References: <20241212172209.533779-1-pbonzini@redhat.com>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=170.10.129.124;
 envelope-from=pbonzini@redhat.com;
 helo=us-smtp-delivery-124.mimecast.com
X-Spam_score_int: -25
X-Spam_score: -2.6
X-Spam_bar: --
X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.496,
 DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @redhat.com)
X-ZM-MESSAGEID: 1734024200711116600
Content-Type: text/plain; charset="utf-8"

The PL011 Technical Reference Manual lists the "real" size of the
registers in table 3-1, and only rounds up to the next byte when
describing the registers; for example, UARTDR is listed as having
width 12/8 (12 bits read, 8 written) and only bits 15:0 are listed
in "Table 3-2 UARTDR Register".

However, in practice these are 32-bit registers, accessible only
through 32-bit MMIO accesses; preserving the fiction that they're
smaller introduces multiple casts (to go from the bilge bitfield
type to e.g u16 to u64) and more importantly it breaks the
migration stream (though only on big-endian machines) because
the Rust vmstate macros are not yet type safe.

So, just make everything 32-bits wide.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <philmd@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
---
 rust/hw/char/pl011/src/device.rs | 36 ++++++++++++++------------------
 rust/hw/char/pl011/src/lib.rs    | 23 +++++++++-----------
 2 files changed, 26 insertions(+), 33 deletions(-)

diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/devi=
ce.rs
index e88ea24b00e..332e0a31a82 100644
--- a/rust/hw/char/pl011/src/device.rs
+++ b/rust/hw/char/pl011/src/device.rs
@@ -190,10 +190,10 @@ unsafe fn init(&mut self) {
     pub fn read(&mut self, offset: hwaddr, _size: c_uint) -> std::ops::Con=
trolFlow<u64, u64> {
         use RegisterOffset::*;
=20
-        std::ops::ControlFlow::Break(match RegisterOffset::try_from(offset=
) {
+        let value =3D match RegisterOffset::try_from(offset) {
             Err(v) if (0x3f8..0x400).contains(&(v >> 2)) =3D> {
                 let device_id =3D self.get_class().device_id;
-                u64::from(device_id[(offset - 0xfe0) >> 2])
+                u32::from(device_id[(offset - 0xfe0) >> 2])
             }
             Err(_) =3D> {
                 // qemu_log_mask(LOG_GUEST_ERROR, "pl011_read: Bad offset =
0x%x\n", (int)offset);
@@ -219,27 +219,25 @@ pub fn read(&mut self, offset: hwaddr, _size: c_uint)=
 -> std::ops::ControlFlow<u
                 let c =3D u32::from(c);
                 return std::ops::ControlFlow::Continue(u64::from(c));
             }
-            Ok(RSR) =3D> u8::from(self.receive_status_error_clear).into(),
-            Ok(FR) =3D> u16::from(self.flags).into(),
-            Ok(FBRD) =3D> self.fbrd.into(),
-            Ok(ILPR) =3D> self.ilpr.into(),
-            Ok(IBRD) =3D> self.ibrd.into(),
-            Ok(LCR_H) =3D> u16::from(self.line_control).into(),
-            Ok(CR) =3D> {
-                // We exercise our self-control.
-                u16::from(self.control).into()
-            }
-            Ok(FLS) =3D> self.ifl.into(),
-            Ok(IMSC) =3D> self.int_enabled.into(),
-            Ok(RIS) =3D> self.int_level.into(),
-            Ok(MIS) =3D> u64::from(self.int_level & self.int_enabled),
+            Ok(RSR) =3D> u32::from(self.receive_status_error_clear),
+            Ok(FR) =3D> u32::from(self.flags),
+            Ok(FBRD) =3D> self.fbrd,
+            Ok(ILPR) =3D> self.ilpr,
+            Ok(IBRD) =3D> self.ibrd,
+            Ok(LCR_H) =3D> u32::from(self.line_control),
+            Ok(CR) =3D> u32::from(self.control),
+            Ok(FLS) =3D> self.ifl,
+            Ok(IMSC) =3D> self.int_enabled,
+            Ok(RIS) =3D> self.int_level,
+            Ok(MIS) =3D> self.int_level & self.int_enabled,
             Ok(ICR) =3D> {
                 // "The UARTICR Register is the interrupt clear register a=
nd is write-only"
                 // Source: ARM DDI 0183G 3.3.13 Interrupt Clear Register, =
UARTICR
                 0
             }
-            Ok(DMACR) =3D> self.dmacr.into(),
-        })
+            Ok(DMACR) =3D> self.dmacr,
+        };
+        std::ops::ControlFlow::Break(value.into())
     }
=20
     pub fn write(&mut self, offset: hwaddr, value: u64) {
@@ -281,7 +279,6 @@ pub fn write(&mut self, offset: hwaddr, value: u64) {
                 self.fbrd =3D value;
             }
             Ok(LCR_H) =3D> {
-                let value =3D value as u16;
                 let new_val: registers::LineControl =3D value.into();
                 // Reset the FIFO state on FIFO enable or disable
                 if bool::from(self.line_control.fifos_enabled())
@@ -308,7 +305,6 @@ pub fn write(&mut self, offset: hwaddr, value: u64) {
             }
             Ok(CR) =3D> {
                 // ??? Need to implement the enable bit.
-                let value =3D value as u16;
                 self.control =3D value.into();
                 self.loopback_mdmctrl();
             }
diff --git a/rust/hw/char/pl011/src/lib.rs b/rust/hw/char/pl011/src/lib.rs
index 463ae60543b..0747e130cae 100644
--- a/rust/hw/char/pl011/src/lib.rs
+++ b/rust/hw/char/pl011/src/lib.rs
@@ -131,12 +131,6 @@ const fn _assert_exhaustive(val: RegisterOffset) {
 pub mod registers {
     //! Device registers exposed as typed structs which are backed by arbi=
trary
     //! integer bitmaps. [`Data`], [`Control`], [`LineControl`], etc.
-    //!
-    //! All PL011 registers are essentially 32-bit wide, but are typed her=
e as
-    //! bitmaps with only the necessary width. That is, if a struct bitmap
-    //! in this module is for example 16 bits long, it should be conceived
-    //! as a 32-bit register where the unmentioned higher bits are always
-    //! unused thus treated as zero when read or written.
     use bilge::prelude::*;
=20
     /// Receive Status Register / Data Register common error bits
@@ -234,10 +228,11 @@ impl Data {
     /// # Source
     /// ARM DDI 0183G 3.3.2 Receive Status Register/Error Clear Register,
     /// UARTRSR/UARTECR
-    #[bitsize(8)]
+    #[bitsize(32)]
     #[derive(Clone, Copy, DebugBits, FromBits)]
     pub struct ReceiveStatusErrorClear {
         pub errors: Errors,
+        _reserved_unpredictable: u24,
     }
=20
     impl ReceiveStatusErrorClear {
@@ -257,7 +252,7 @@ fn default() -> Self {
         }
     }
=20
-    #[bitsize(16)]
+    #[bitsize(32)]
     #[derive(Clone, Copy, DebugBits, FromBits)]
     /// Flag Register, `UARTFR`
     #[doc(alias =3D "UARTFR")]
@@ -309,7 +304,7 @@ pub struct Flags {
         pub transmit_fifo_empty: bool,
         /// `RI`, is `true` when `nUARTRI` is `LOW`.
         pub ring_indicator: bool,
-        _reserved_zero_no_modify: u7,
+        _reserved_zero_no_modify: u23,
     }
=20
     impl Flags {
@@ -328,7 +323,7 @@ fn default() -> Self {
         }
     }
=20
-    #[bitsize(16)]
+    #[bitsize(32)]
     #[derive(Clone, Copy, DebugBits, FromBits)]
     /// Line Control Register, `UARTLCR_H`
     #[doc(alias =3D "UARTLCR_H")]
@@ -382,8 +377,8 @@ pub struct LineControl {
         /// the PEN bit disables parity checking and generation. See Table=
 3-11
         /// on page 3-14 for the parity truth table.
         pub sticky_parity: bool,
-        /// 15:8 - Reserved, do not modify, read as zero.
-        _reserved_zero_no_modify: u8,
+        /// 31:8 - Reserved, do not modify, read as zero.
+        _reserved_zero_no_modify: u24,
     }
=20
     impl LineControl {
@@ -454,7 +449,7 @@ pub enum WordLength {
     ///
     /// # Source
     /// ARM DDI 0183G, 3.3.8 Control Register, `UARTCR`, Table 3-12
-    #[bitsize(16)]
+    #[bitsize(32)]
     #[doc(alias =3D "UARTCR")]
     #[derive(Clone, Copy, DebugBits, FromBits)]
     pub struct Control {
@@ -532,6 +527,8 @@ pub struct Control {
         /// CTS hardware flow control is enabled. Data is only transmitted=
 when
         /// the `nUARTCTS` signal is asserted.
         pub cts_hardware_flow_control_enable: bool,
+        /// 31:16 - Reserved, do not modify, read as zero.
+        _reserved_zero_no_modify2: u16,
     }
=20
     impl Control {
--=20
2.47.1
From nobody Mon May 12 07:31:58 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=redhat.com
ARC-Seal: i=1; a=rsa-sha256; t=1734024243; cv=none;
	d=zohomail.com; s=zohoarc;
	b=LqitzWog0g2i2Gn/le10XUWHgdNQtpE1YhoFUvE1lqFQfyq9K8LicL28HSU54PK0wM2P5qGKL4QkTsOZSONBfVpROqpcmXRpjRyeyhZDmfI8NCTesCrkNu/u8HGvaL4/N07Lw5OkJPbItYuM3jzS9kgQ+lmtPkAHOYJCFJ3zH6M=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1734024243;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=HdA/kdjoP/9szKTJTz2r1k+8hRh1UCiqvXnOngQ4uto=;
	b=lV6/LOv4f5v1WSb2eo7n3AQykddPbNlt5kqHpSvw8Rg/tEch8Rt0NYnRLk8u2PtQ15QMFwBKsbRY2e/PRy5CfP14C4CY9+fuIznNb4aZWoPmI+SPpw6aanK9kQ4LqYYowBHS+igjDYcn7bS9tcTS969YDuGlXykd2OcgxIPJ1Zo=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<pbonzini@redhat.com> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1734024243252107.26049363049117;
 Thu, 12 Dec 2024 09:24:03 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tLmtd-0006tg-E5; Thu, 12 Dec 2024 12:22:41 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pbonzini@redhat.com>)
 id 1tLmtV-0006op-BO
 for qemu-devel@nongnu.org; Thu, 12 Dec 2024 12:22:33 -0500
Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pbonzini@redhat.com>)
 id 1tLmtT-0006oq-DI
 for qemu-devel@nongnu.org; Thu, 12 Dec 2024 12:22:32 -0500
Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com
 [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS
 (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
 us-mta-190-ZlSCfcUGM7-Zbp7CvqrrEw-1; Thu, 12 Dec 2024 12:22:29 -0500
Received: by mail-wm1-f72.google.com with SMTP id
 5b1f17b1804b1-43582d49dacso7950065e9.2
 for <qemu-devel@nongnu.org>; Thu, 12 Dec 2024 09:22:29 -0800 (PST)
Received: from [192.168.10.47] ([151.81.118.45])
 by smtp.gmail.com with ESMTPSA id
 5b1f17b1804b1-43625550532sm22987545e9.7.2024.12.12.09.22.25
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 12 Dec 2024 09:22:25 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
 s=mimecast20190719; t=1734024150;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=HdA/kdjoP/9szKTJTz2r1k+8hRh1UCiqvXnOngQ4uto=;
 b=X8sKLnkixdkKNwvr5Ms4eDjztH6tL6oukWxLxH+rTaZSEhAOrnVzrgiA2iHzP++7V2WcWl
 mP0utH4n9t5VOgiNxny8cIWaEKhj/sBEso0cutiMFuxdpq3HnxYfNxWRJkYBCleaSb7XfO
 3Xon+0FtPRp+O2WkECmDYX2ae5X5NxI=
X-MC-Unique: ZlSCfcUGM7-Zbp7CvqrrEw-1
X-Mimecast-MFC-AGG-ID: ZlSCfcUGM7-Zbp7CvqrrEw
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1734024147; x=1734628947;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=HdA/kdjoP/9szKTJTz2r1k+8hRh1UCiqvXnOngQ4uto=;
 b=HL31ADWB1OSyJanxaRVLqBb0gKsUgAANbydPldPX8293N8t38qjMvgDoyG1Xqcm1+5
 wptmteQg7DU2+M9B+O8L04u/7KiLCmre1xuUpAzxT9xnd2bCXsQHrRFQMqLqsHOYADI8
 v7afH8TXq0Ary9c6snQ+Y29M/37kAjzpInu8Eqk3t/vFbBe0vofa7bQk7RB9qufuPAt7
 0IlkvwrtKJ2oB/TZbbmiZ21ZEDPMe7HB4hzNKNABwP1DbBFKLX91ByJg6XgKt9JQL29z
 pbUh8s8wHFZ8zUFZwi3sz9iN+9RZGXJXiKNIbCvX4zLzkyQJWFPEFSey/DKU4oRP01r3
 s+3g==
X-Gm-Message-State: AOJu0YzctlK98BfLg9p4pILanTJBF3Jr03rfKqfL+SBMab+1ozuHNCUX
 DkBaYxpq/TKZSAyepTOWptx3xMFHCrIEG1y5zBrLn0NBpY2eqaD6NxlCDK52EBioO7VY30+cmjX
 28LhnQAvlFSyJfmS5uuNf8NGkumqcCSt9dqALy8xbqv8JF6xx3O5IGbuDNr+JU3ih6VEGU2kwkg
 ikBxVYI9gYaaPuJQ5XBnCcFkBYs2PyBStQOWQV
X-Gm-Gg: ASbGncsVxhpsracKayo+JdHQ0WCUAvqKfq0RlbHng50Y9WNqOr/vHZAfxKY3Js2yE+g
 onEPYaWvO9sykAO8gH/XrjNNTqcX4RXHyC7dRupGJVdJVzAcG5pI9EyD32UCDc8tSzACUvNUQ6G
 CToh2p5vW9AFiJb24TEABQbq9ojxHzeXy6aqhAW+VHHvgR7BSL8Vvxrak5JBI34JDs6GWggjErC
 m2oazLPQz/GPc2h3cliqvwe7JrgDZegP01TJLPwH4pJoGsnFE/r8aXeYrPL
X-Received: by 2002:a05:600c:1ca6:b0:434:f396:525e with SMTP id
 5b1f17b1804b1-43622832ff4mr38313675e9.9.1734024147402;
 Thu, 12 Dec 2024 09:22:27 -0800 (PST)
X-Google-Smtp-Source: 
 AGHT+IGA3AUAESDQriN/fq+NBro7IZR6DAtQIjHdmjuYFRNgyeHWebyZMBctglmsS6VoA2E3HvPcrQ==
X-Received: by 2002:a05:600c:1ca6:b0:434:f396:525e with SMTP id
 5b1f17b1804b1-43622832ff4mr38313245e9.9.1734024146919;
 Thu, 12 Dec 2024 09:22:26 -0800 (PST)
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: philmd@linaro.org,
	qemu-rust@nongnu.org
Subject: [PATCH 6/7] rust: pl011: fix migration stream
Date: Thu, 12 Dec 2024 18:22:03 +0100
Message-ID: <20241212172209.533779-7-pbonzini@redhat.com>
X-Mailer: git-send-email 2.47.1
In-Reply-To: <20241212172209.533779-1-pbonzini@redhat.com>
References: <20241212172209.533779-1-pbonzini@redhat.com>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=170.10.133.124;
 envelope-from=pbonzini@redhat.com;
 helo=us-smtp-delivery-124.mimecast.com
X-Spam_score_int: -25
X-Spam_score: -2.6
X-Spam_bar: --
X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.496,
 DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @redhat.com)
X-ZM-MESSAGEID: 1734024244803116600
Content-Type: text/plain; charset="utf-8"

The Rust vmstate macros lack the type-safety of their C equivalents (so
safe, much abstraction), and therefore they were predictably wrong.

The registers have already been changed to 32-bits in the previous patch,
but read_pos/read_count/read_trigger also have to be u32 instead of usize.
The easiest way to do so is to let the FIFO use u32 indices instead
of usize.

My plan for making VMStateField typesafe is to have a trait to retrieve
a basic VMStateField; for example something like vmstate_uint32 would
become an implementation of the VMState trait on u32.  Then you'd write
something like "vmstate_of!(Type, field).with_version_id(2)".  That is,
vmstate_of retrieves the basic VMStateField and fills in the offset,
and then more changes can be applied on top.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
---
 rust/hw/char/pl011/src/device.rs       | 38 ++++++++++++++++++++++----
 rust/hw/char/pl011/src/device_class.rs |  8 +++---
 rust/qemu-api/src/vmstate.rs           | 22 ---------------
 3 files changed, 36 insertions(+), 32 deletions(-)

diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/devi=
ce.rs
index 332e0a31a82..cfe2734703e 100644
--- a/rust/hw/char/pl011/src/device.rs
+++ b/rust/hw/char/pl011/src/device.rs
@@ -31,7 +31,7 @@
 const FBRD_MASK: u32 =3D 0x3f;
=20
 /// QEMU sourced constant.
-pub const PL011_FIFO_DEPTH: usize =3D 16_usize;
+pub const PL011_FIFO_DEPTH: u32 =3D 16;
=20
 #[derive(Clone, Copy)]
 struct DeviceId(&'static [u8; 8]);
@@ -49,6 +49,32 @@ impl DeviceId {
     const LUMINARY: Self =3D Self(&[0x11, 0x00, 0x18, 0x01, 0x0d, 0xf0, 0x=
05, 0xb1]);
 }
=20
+// FIFOs use 32-bit indices instead of usize, for compatibility with
+// the migration stream produced by the C version of this device.
+#[repr(transparent)]
+#[derive(Debug, Default)]
+pub struct Fifo([registers::Data; PL011_FIFO_DEPTH as usize]);
+
+impl Fifo {
+    const fn len(&self) -> u32 {
+        self.0.len() as u32
+    }
+}
+
+impl std::ops::IndexMut<u32> for Fifo {
+    fn index_mut(&mut self, idx: u32) -> &mut Self::Output {
+        &mut self.0[idx as usize]
+    }
+}
+
+impl std::ops::Index<u32> for Fifo {
+    type Output =3D registers::Data;
+
+    fn index(&self, idx: u32) -> &Self::Output {
+        &self.0[idx as usize]
+    }
+}
+
 #[repr(C)]
 #[derive(Debug, qemu_api_macros::Object, qemu_api_macros::offsets)]
 /// PL011 Device Model in QEMU
@@ -66,14 +92,14 @@ pub struct PL011State {
     pub dmacr: u32,
     pub int_enabled: u32,
     pub int_level: u32,
-    pub read_fifo: [registers::Data; PL011_FIFO_DEPTH],
+    pub read_fifo: Fifo,
     pub ilpr: u32,
     pub ibrd: u32,
     pub fbrd: u32,
     pub ifl: u32,
-    pub read_pos: usize,
-    pub read_count: usize,
-    pub read_trigger: usize,
+    pub read_pos: u32,
+    pub read_count: u32,
+    pub read_trigger: u32,
     #[doc(alias =3D "chr")]
     pub char_backend: CharBackend,
     /// QEMU interrupts
@@ -485,7 +511,7 @@ pub fn loopback_enabled(&self) -> bool {
     }
=20
     #[inline]
-    pub fn fifo_depth(&self) -> usize {
+    pub fn fifo_depth(&self) -> u32 {
         // Note: FIFO depth is expected to be power-of-2
         if self.fifo_enabled() {
             return PL011_FIFO_DEPTH;
diff --git a/rust/hw/char/pl011/src/device_class.rs b/rust/hw/char/pl011/sr=
c/device_class.rs
index 975c3d42be7..759c521a99e 100644
--- a/rust/hw/char/pl011/src/device_class.rs
+++ b/rust/hw/char/pl011/src/device_class.rs
@@ -6,7 +6,7 @@
 use std::os::raw::{c_int, c_void};
=20
 use qemu_api::{
-    bindings::*, c_str, vmstate_clock, vmstate_fields, vmstate_int32, vmst=
ate_subsections,
+    bindings::*, c_str, vmstate_clock, vmstate_fields, vmstate_subsections,
     vmstate_uint32, vmstate_uint32_array, vmstate_unused, zeroable::Zeroab=
le,
 };
=20
@@ -64,9 +64,9 @@ extern "C" fn pl011_post_load(opaque: *mut c_void, versio=
n_id: c_int) -> c_int {
         vmstate_uint32!(ibrd, PL011State),
         vmstate_uint32!(fbrd, PL011State),
         vmstate_uint32!(ifl, PL011State),
-        vmstate_int32!(read_pos, PL011State),
-        vmstate_int32!(read_count, PL011State),
-        vmstate_int32!(read_trigger, PL011State),
+        vmstate_uint32!(read_pos, PL011State),
+        vmstate_uint32!(read_count, PL011State),
+        vmstate_uint32!(read_trigger, PL011State),
     },
     subsections: vmstate_subsections! {
         VMSTATE_PL011_CLOCK
diff --git a/rust/qemu-api/src/vmstate.rs b/rust/qemu-api/src/vmstate.rs
index 25c68b703ea..63c897abcdf 100644
--- a/rust/qemu-api/src/vmstate.rs
+++ b/rust/qemu-api/src/vmstate.rs
@@ -106,28 +106,6 @@ macro_rules! vmstate_uint32 {
     }};
 }
=20
-#[doc(alias =3D "VMSTATE_INT32_V")]
-#[macro_export]
-macro_rules! vmstate_int32_v {
-    ($field_name:ident, $struct_name:ty, $version_id:expr) =3D> {{
-        $crate::vmstate_single!(
-            $field_name,
-            $struct_name,
-            $version_id,
-            ::core::ptr::addr_of!($crate::bindings::vmstate_info_int32),
-            ::core::mem::size_of::<i32>()
-        )
-    }};
-}
-
-#[doc(alias =3D "VMSTATE_INT32")]
-#[macro_export]
-macro_rules! vmstate_int32 {
-    ($field_name:ident, $struct_name:ty) =3D> {{
-        $crate::vmstate_int32_v!($field_name, $struct_name, 0)
-    }};
-}
-
 #[doc(alias =3D "VMSTATE_ARRAY")]
 #[macro_export]
 macro_rules! vmstate_array {
--=20
2.47.1
From nobody Mon May 12 07:31:58 2025
Delivered-To: importer@patchew.org
Authentication-Results: mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass(p=none dis=none)  header.from=redhat.com
ARC-Seal: i=1; a=rsa-sha256; t=1734024256; cv=none;
	d=zohomail.com; s=zohoarc;
	b=iUn4EM3blF4P1ueOmnsNc2hryFqH9VPzQ7Dh2DQScFlj908i52Yez5/5qpcfui6OqBif/zFrNLpWPB6t1+Wfsgzq5AKOLFhZ8r/be/ZBEtaOzA2jU8S6NQs7LCbjT5zKsoz72bg62HKIO8B8wEa76qUa3wVp+Lt8rPN3Q3jbbKk=
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com;
 s=zohoarc;
	t=1734024256;
 h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To;
	bh=bSm79oz08FdIlTp31rLzEqSvbz1oNHscAzWwfiPVPzw=;
	b=BLoMFaCqP5c6C1PIa6czQL7qTD/5qXOT7bHEU7WfM91tym/BBN1gNlju9gFQzf4XhHKQve+cvabtRRzy+xEuHLj0PNR6Swaw/BSNcvqV2/LhvNxK9Us0e/mGPCv1tBbl2pwUhP7VDVGN7Jsbv17AgCLqYP43kzLPIPsIV24QOHM=
ARC-Authentication-Results: i=1; mx.zohomail.com;
	dkim=pass;
	spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as
 permitted sender)
  smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org;
	dmarc=pass header.from=<pbonzini@redhat.com> (p=none dis=none)
Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org>
Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by
 mx.zohomail.com
	with SMTPS id 1734024256926544.7767016921019;
 Thu, 12 Dec 2024 09:24:16 -0800 (PST)
Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <qemu-devel-bounces@nongnu.org>)
	id 1tLmtd-0006th-Lw; Thu, 12 Dec 2024 12:22:41 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pbonzini@redhat.com>)
 id 1tLmtZ-0006rU-SV
 for qemu-devel@nongnu.org; Thu, 12 Dec 2024 12:22:37 -0500
Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <pbonzini@redhat.com>)
 id 1tLmtV-0006pE-9p
 for qemu-devel@nongnu.org; Thu, 12 Dec 2024 12:22:37 -0500
Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com
 [209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS
 (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id
 us-mta-122-3l1RppL7PUGfdPMBZ4iMeg-1; Thu, 12 Dec 2024 12:22:31 -0500
Received: by mail-wr1-f70.google.com with SMTP id
 ffacd0b85a97d-385e3cbf308so411746f8f.2
 for <qemu-devel@nongnu.org>; Thu, 12 Dec 2024 09:22:30 -0800 (PST)
Received: from [192.168.10.47] ([151.81.118.45])
 by smtp.gmail.com with ESMTPSA id
 5b1f17b1804b1-4361ec87bc3sm37435585e9.1.2024.12.12.09.22.27
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 12 Dec 2024 09:22:28 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;
 s=mimecast20190719; t=1734024152;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=bSm79oz08FdIlTp31rLzEqSvbz1oNHscAzWwfiPVPzw=;
 b=NlXU0sidiUWDFLsBaOzmwOiyD0XsOPrcKAjRQsY+F9i3s05e4XjRFc9bvct0LVL4TlNpaS
 nMQS4WsJX6DZnYgI+E7hPaT5sgaqwWUcI77jLtr6y8gRsMhs6EhC1BLr/PsHixIRHT+2pu
 JsVJEIOcL8HW6AbL8YHYg6+1uOt4UlM=
X-MC-Unique: 3l1RppL7PUGfdPMBZ4iMeg-1
X-Mimecast-MFC-AGG-ID: 3l1RppL7PUGfdPMBZ4iMeg
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1734024149; x=1734628949;
 h=content-transfer-encoding:mime-version:references:in-reply-to
 :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=bSm79oz08FdIlTp31rLzEqSvbz1oNHscAzWwfiPVPzw=;
 b=bUa2C3GzdMkYz0SxAS+r8hQm+vXtOsP2Eab11lw5AsuWKNImWUY0o7thFHLqi5Hv5V
 CmXY6LTu1wwbk7pog4R1GyFSKD09dKZezdCmbcVS/c9HWy7oDproliMtdC+eXOO1SY3r
 ofmL8hH6aoYMfeRTyRmjYr5HOmJG8QhSXh1JX6zXmvCYTUYb0IK8w2WcddlCdvlIGibM
 JhEoK4v8jMvoJutCHMOxR8XfS0unZRI2gv64ac96zVPLmRsTtfBkLhgfXRpxqkLZdsC0
 5juFO8XwgVQ+qP5XT/a9CMuMZYLgOFm1kcLYoCrtMUC3mfTK2vOZ3DMvFv3XVvBg/4H9
 ywQQ==
X-Gm-Message-State: AOJu0Ywck+qF//YWUxnSl/Ij8pueKzTN3kgPCv0Xk5ZlFITJ48t+XZer
 OOkX7Sjhtu7sgPfEzYphwXgsRe29okBtHctbKZweFlxenpt4bbcnTd4tkkREMQZhzqcsOX8BjJA
 csgYR6R26PnzMUNqnsCBoFaO3sT2sP/UHlQ8OuUXKAIgf0ka+g42hzRzhEyC1yONOadM2LhWFLB
 9ffGpJtet1JpvJzu5ZVfVpD/sClzHbY3CEqlNT
X-Gm-Gg: ASbGnct1Hr+yndPCTiWHdRB1GX2i3YVcQ1lGfklEtxnsI18uJ1hLaSsHmA/ogLbzxiX
 Rth1ySdlcBAh16+mAyoscjvdciTIMtocQQI0elX+8nk6rnRqU/+dASckGSCaZZwSKl+3imYa2ih
 1WVFRhowtnq5lHzPwmGZCXwnqS0wIA5yw2LsRuo3tZx1P52IuwgBfoU9pykh66Zz7ZpKy+Xcuqc
 EPiltSetrpCCuYU4TphEv+oZbxISHPrSq70siIPwd+NRrUbDaf5z1lmRTnV
X-Received: by 2002:a5d:588b:0:b0:385:e2c4:1f8d with SMTP id
 ffacd0b85a97d-3864ce96ed1mr6918670f8f.19.1734024149514;
 Thu, 12 Dec 2024 09:22:29 -0800 (PST)
X-Google-Smtp-Source: 
 AGHT+IERL4Pz7X8hJNKtOv0Z7DJ23nsR1ReastYOYfmmQ5wyeBe1Qf2yPsHd+ZqVQEJy/Mj+1+eu/A==
X-Received: by 2002:a5d:588b:0:b0:385:e2c4:1f8d with SMTP id
 ffacd0b85a97d-3864ce96ed1mr6918651f8f.19.1734024149076;
 Thu, 12 Dec 2024 09:22:29 -0800 (PST)
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: philmd@linaro.org,
	qemu-rust@nongnu.org
Subject: [PATCH 7/7] rust: pl011: simplify handling of the FIFO enabled bit in
 LCR
Date: Thu, 12 Dec 2024 18:22:04 +0100
Message-ID: <20241212172209.533779-8-pbonzini@redhat.com>
X-Mailer: git-send-email 2.47.1
In-Reply-To: <20241212172209.533779-1-pbonzini@redhat.com>
References: <20241212172209.533779-1-pbonzini@redhat.com>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17
 as permitted sender) client-ip=209.51.188.17;
 envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org;
 helo=lists.gnu.org;
Received-SPF: pass client-ip=170.10.133.124;
 envelope-from=pbonzini@redhat.com;
 helo=us-smtp-delivery-124.mimecast.com
X-Spam_score_int: -25
X-Spam_score: -2.6
X-Spam_bar: --
X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.496,
 DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no
X-Spam_action: no action
X-BeenThere: qemu-devel@nongnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: <qemu-devel.nongnu.org>
List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>
List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel>
List-Post: <mailto:qemu-devel@nongnu.org>
List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help>
List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>,
 <mailto:qemu-devel-request@nongnu.org?subject=subscribe>
Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org
Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org
X-ZohoMail-DKIM: pass (identity @redhat.com)
X-ZM-MESSAGEID: 1734024258859116600
Content-Type: text/plain; charset="utf-8"

Use =3D=3D/!=3D instead of going through bool and xor.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Philippe Mathieu-Daud=C3=A9 <philmd@linaro.org>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
---
 rust/hw/char/pl011/src/device.rs | 6 ++----
 rust/hw/char/pl011/src/lib.rs    | 6 ------
 2 files changed, 2 insertions(+), 10 deletions(-)

diff --git a/rust/hw/char/pl011/src/device.rs b/rust/hw/char/pl011/src/devi=
ce.rs
index cfe2734703e..169ff3779c6 100644
--- a/rust/hw/char/pl011/src/device.rs
+++ b/rust/hw/char/pl011/src/device.rs
@@ -307,9 +307,7 @@ pub fn write(&mut self, offset: hwaddr, value: u64) {
             Ok(LCR_H) =3D> {
                 let new_val: registers::LineControl =3D value.into();
                 // Reset the FIFO state on FIFO enable or disable
-                if bool::from(self.line_control.fifos_enabled())
-                    ^ bool::from(new_val.fifos_enabled())
-                {
+                if self.line_control.fifos_enabled() !=3D new_val.fifos_en=
abled() {
                     self.reset_rx_fifo();
                     self.reset_tx_fifo();
                 }
@@ -502,7 +500,7 @@ pub fn event(&mut self, event: QEMUChrEvent) {
=20
     #[inline]
     pub fn fifo_enabled(&self) -> bool {
-        matches!(self.line_control.fifos_enabled(), registers::Mode::FIFO)
+        self.line_control.fifos_enabled() =3D=3D registers::Mode::FIFO
     }
=20
     #[inline]
diff --git a/rust/hw/char/pl011/src/lib.rs b/rust/hw/char/pl011/src/lib.rs
index 0747e130cae..69064d6929b 100644
--- a/rust/hw/char/pl011/src/lib.rs
+++ b/rust/hw/char/pl011/src/lib.rs
@@ -419,12 +419,6 @@ pub enum Mode {
         FIFO =3D 1,
     }
=20
-    impl From<Mode> for bool {
-        fn from(val: Mode) -> Self {
-            matches!(val, Mode::FIFO)
-        }
-    }
-
     #[bitsize(2)]
     #[derive(Clone, Copy, Debug, Eq, FromBits, PartialEq)]
     /// `WLEN` Word length, field of [Line Control register](LineControl).
--=20
2.47.1