From patchwork Mon Mar 10 01:28:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 872166 Delivered-To: patch@linaro.org Received: by 2002:a5d:64ce:0:b0:38f:210b:807b with SMTP id f14csp764329wri; Sun, 9 Mar 2025 18:29:16 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUoJFLo3bxWElTXQbIjNEUUEnid+eknNM73AlcvouDn/20J4Oknr7BPSIKzgn9IR6DOfY+yAA==@linaro.org X-Google-Smtp-Source: AGHT+IFTFCMudWaquyqaM+422dFZMOMvtxMX+uscb7HvGBJh9ALndjLjYgPvw1/qeFGbflidzSM7 X-Received: by 2002:a05:622a:6bcb:b0:476:78a8:4356 with SMTP id d75a77b69052e-47678a84dffmr43969271cf.26.1741570156227; Sun, 09 Mar 2025 18:29:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1741570156; cv=none; d=google.com; s=arc-20240605; b=a/NjYMk5LtcM9SHFBpSqjEWWiuu1AOXTw49heaSX3W+95nStNoYSWP1B+pUVzZixpj e2pRqrA5lZqTnzRtRPr9bkWgOVfeQAmbx8mjtVKcEr9FWahJCSoySWHnmzc4+NO2PrK3 RlfChyG7mkBAaBH/GVthH/PXgZESKKqp/xCOeDKWUxxy4NVHHwdxGJbsePIcl+lM6isO wudrucc4ghL7/Fz0GdPjepcWvdPcuOmp3DfNsf7u7PAwCqZiHlWQDW8i1aKfOhUpIqVn D3vsIkGsuu6PWKM4qO5hnmul8oKPJygJoYzDqlS/mdGpd+R09EGwrbvtHaL11LwZDXIL xyFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=EpcO+5mNfJW3uTvL4p/FId4A1a70cqj1/QCXsX8nNCE=; fh=EPO+XMDoylG26O8AfLK4l02IrH8PqYL7jb8PVK09dDA=; b=dwXyopm9T7ABb1q/uQ7iGPtEub8yT9gAtty+hHqfteS3V1d7opVujiPqOSlvOm/OoH zsRMTv8a2zkjl08NtMr4GvVgICHgLUvpLBP/knEvgi48ziRoQgZBcLcoFVUB/6Peomeh vjPX4MypN3CPDk1meU+8upsATGbfEVxIupXU/pbru/uGifFUCYKk/IbiNFOGVJ1DE6jZ YdwPxcvq0P4se/n+As0fRpSkiYuPt0BaOcIH8LRp3jXQA5i3o7EP9F05VeOYID+zXaTk p+u/7oZ5/HtD/bJ4u4J42jboR2OpFpd6R4gfFMOwXNiwJTbicRae3b6dPwtDOyNUb3f2 CJcg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=hnTV5Eu6; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id d75a77b69052e-4768ebd4a72si5246171cf.460.2025.03.09.18.29.15 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 09 Mar 2025 18:29:16 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=hnTV5Eu6; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1trRwg-0003xQ-P1; Sun, 09 Mar 2025 21:28:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1trRwc-0003vq-Dv for qemu-devel@nongnu.org; Sun, 09 Mar 2025 21:28:39 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1trRwa-0006QI-Lv for qemu-devel@nongnu.org; Sun, 09 Mar 2025 21:28:38 -0400 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-388cae9eb9fso1712383f8f.3 for ; Sun, 09 Mar 2025 18:28:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1741570115; x=1742174915; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=EpcO+5mNfJW3uTvL4p/FId4A1a70cqj1/QCXsX8nNCE=; b=hnTV5Eu6Lr3w+CozjWAwpatY+HltEdhREPXD4e4RE9GTDfR4q/j4Mr7CNXyBuSrsTX wr/0ZiRFuHymdT1HP76EGMubh26DxObrcIXcHfs/ny4Fem6TetRZq6hOrA1/1LYoA5JB iAmn+64XKCbikEv7vHV80kSC95fFY0e1g69vFxs1YFrYA9xTm/qTmRZju0YK/372Obuw F0bKSa4FP5jWdfIYwD0ZDRW7iKp0usa+LkKFrn6pdIWMu0UteEfXxQ6yBBvjqjtb4Cv8 0C0l9Uf8c8PQolIyUW9pWLrtdy1xyBipLy3dACbpxZCl8tLsL5YSrwyZL/VZHnUFf73j whwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741570115; x=1742174915; 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=EpcO+5mNfJW3uTvL4p/FId4A1a70cqj1/QCXsX8nNCE=; b=b93VJD47vdG/TopCXh93jeMnA/jbTxt5lqxrELmQwWXrIdINrALzs1Ei5fLbBsZ8Ij p9NpptF3ZMWSzlOc6eWLtFXGno7lXRn5+lMFvMch5LZB/nIGX/DUh2cF+oUUuryihzB1 cwdIpUGrWqcqMqAwxD/d0stwnqa60NdYAjj+mlnkzf4R4wayuF5dr7Wr5hSN8VQbYxy7 Vol+Xtzhq1ytottC1rgJuYUwJaFmo9ap0MYHsszjeaW7JsGCjQ0leNFmVM3CBFj2IycJ j8tqhQMFlkR1r8JLzeh1D0KPLQgsGntAcrumWVFSLlnt149ZNkW/k8FVoX3V+LnT7hoh MFVQ== X-Gm-Message-State: AOJu0Yxe+O133S/kKIRQTGxvcwavg14MmVnzv0zd+J3j1bcRIXBIhMgw nMKUqBLJCIwsaHY8CPWl2w0WRgClxQhtmNRa4zkXJWUNaDxWXL6vRi7bENl7cADh/DMpKdOjFyT TWMQ= X-Gm-Gg: ASbGncsoe9xqZyq7ilrY9tKX8Hih/T/77+C5H7rcxIMxiz7qxB+hMOtYxZj3piJpesj 6hjKK/tPtGHpimmD94lIurjbVgJhRKBzk29x+vVNJvXHWh3pZj7qZWSLA9r/hcUud56c18gDX1V R/VKstZd/GfouqcKoQmL+sZY2wwJBGWn+ldY3i+IV0FgZP1i828BUd3cC1+cA7egxNnn7yo0DAl n/fNgNdhywODsSn23JXVJKgO9HcwatVwipxJjGKsRefLfEA6fCA/JBK1PAyOS45fgynph14/qYf 5hbsl4WKVO+Bi/4fyD62y54F6akZ2tsYSa6eRk1UsLZIrRYwDr+ae5sb2Lddd784PuslorE3AsK s+xA3ENz7eLiji34syfKp2d01ckvcUg== X-Received: by 2002:a5d:6d0a:0:b0:391:41fb:89ff with SMTP id ffacd0b85a97d-39141fb8c49mr2550978f8f.27.1741570114827; Sun, 09 Mar 2025 18:28:34 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912c01ebddsm13618110f8f.60.2025.03.09.18.28.32 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 09 Mar 2025 18:28:33 -0700 (PDT) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?utf-8?q?Marc-Andr=C3=A9_Lure?= =?utf-8?q?au?= , =?utf-8?q?Alex_Benn=C3=A9e?= , Mark Cave-Ayland , qemu-arm@nongnu.org, Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [PATCH v7 1/7] hw/char/pl011: Add transmit FIFO to PL011State Date: Mon, 10 Mar 2025 02:28:19 +0100 Message-ID: <20250310012825.79614-2-philmd@linaro.org> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250310012825.79614-1-philmd@linaro.org> References: <20250310012825.79614-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::433; envelope-from=philmd@linaro.org; helo=mail-wr1-x433.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org In order to make the next commit easier to review, introduce the transmit FIFO, but do not yet use it. We only migrate the TX FIFO if it is in use. When migrating from new to old VM: - if the fifo is empty, migration will still work because of the subsection. - if the fifo is not empty, the subsection will be ignored, with the only consequence being that some characters will be dropped. Since the FIFO is created empty, we don't need a migration pre_load() handler. Uninline pl011_reset_tx_fifo(). Reviewed-by: Alex Bennée Signed-off-by: Philippe Mathieu-Daudé --- include/hw/char/pl011.h | 2 ++ hw/char/pl011.c | 37 +++++++++++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/include/hw/char/pl011.h b/include/hw/char/pl011.h index 4fcaf3d7d30..e8d95961f66 100644 --- a/include/hw/char/pl011.h +++ b/include/hw/char/pl011.h @@ -18,6 +18,7 @@ #include "hw/sysbus.h" #include "chardev/char-fe.h" #include "qom/object.h" +#include "qemu/fifo8.h" #define TYPE_PL011 "pl011" OBJECT_DECLARE_SIMPLE_TYPE(PL011State, PL011) @@ -52,6 +53,7 @@ struct PL011State { Clock *clk; bool migrate_clk; const unsigned char *id; + Fifo8 xmit_fifo; }; DeviceState *pl011_create(hwaddr addr, qemu_irq irq, Chardev *chr); diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 23a9db8c57c..0e9ad5d5d90 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -167,11 +167,13 @@ static inline void pl011_reset_rx_fifo(PL011State *s) s->flags |= PL011_FLAG_RXFE; } -static inline void pl011_reset_tx_fifo(PL011State *s) +static void pl011_reset_tx_fifo(PL011State *s) { /* Reset FIFO flags */ s->flags &= ~PL011_FLAG_TXFF; s->flags |= PL011_FLAG_TXFE; + + fifo8_reset(&s->xmit_fifo); } static void pl011_fifo_rx_put(void *opaque, uint32_t value) @@ -560,6 +562,24 @@ static const VMStateDescription vmstate_pl011_clock = { } }; +static bool pl011_xmit_fifo_state_needed(void *opaque) +{ + PL011State* s = opaque; + + return pl011_is_fifo_enabled(s) && !fifo8_is_empty(&s->xmit_fifo); +} + +static const VMStateDescription vmstate_pl011_xmit_fifo = { + .name = "pl011/xmit_fifo", + .version_id = 1, + .minimum_version_id = 1, + .needed = pl011_xmit_fifo_state_needed, + .fields = (VMStateField[]) { + VMSTATE_FIFO8(xmit_fifo, PL011State), + VMSTATE_END_OF_LIST() + } +}; + static int pl011_post_load(void *opaque, int version_id) { PL011State* s = opaque; @@ -614,7 +634,11 @@ static const VMStateDescription vmstate_pl011 = { .subsections = (const VMStateDescription * const []) { &vmstate_pl011_clock, NULL - } + }, + .subsections = (const VMStateDescription * []) { + &vmstate_pl011_xmit_fifo, + NULL + }, }; static const Property pl011_properties[] = { @@ -628,6 +652,7 @@ static void pl011_init(Object *obj) PL011State *s = PL011(obj); int i; + fifo8_create(&s->xmit_fifo, PL011_FIFO_DEPTH); memory_region_init_io(&s->iomem, OBJECT(s), &pl011_ops, s, "pl011", 0x1000); sysbus_init_mmio(sbd, &s->iomem); for (i = 0; i < ARRAY_SIZE(s->irq); i++) { @@ -640,6 +665,13 @@ static void pl011_init(Object *obj) s->id = pl011_id_arm; } +static void pl011_finalize(Object *obj) +{ + PL011State *s = PL011(obj); + + fifo8_destroy(&s->xmit_fifo); +} + static void pl011_realize(DeviceState *dev, Error **errp) { PL011State *s = PL011(dev); @@ -683,6 +715,7 @@ static const TypeInfo pl011_arm_info = { .parent = TYPE_SYS_BUS_DEVICE, .instance_size = sizeof(PL011State), .instance_init = pl011_init, + .instance_finalize = pl011_finalize, .class_init = pl011_class_init, }; From patchwork Mon Mar 10 01:28:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 872168 Delivered-To: patch@linaro.org Received: by 2002:a5d:64ce:0:b0:38f:210b:807b with SMTP id f14csp764363wri; Sun, 9 Mar 2025 18:29:26 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCX3VYiDQXf7yZJmBWYDvNFjXtj0utBin4dvN8qF6R7I2vWPoJdXp1jpi6ttysQ4VkKnZlhLTw==@linaro.org X-Google-Smtp-Source: AGHT+IGkeRRwULiyEXT6LKAATxCMBdJkbCXmYJsY4+uLkUhTycIHUweW5BtTkwQ919hmtbXnn7j+ X-Received: by 2002:a05:620a:4388:b0:7c3:d3a8:d01a with SMTP id af79cd13be357-7c4e1688503mr1666706585a.23.1741570166115; Sun, 09 Mar 2025 18:29:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1741570166; cv=none; d=google.com; s=arc-20240605; b=ZKqW7ZMmAu1wJCg0O2dECfun6KjisDF6L5kEXFeqo2FJUn5wmNFP4jolymbtDMgIPM ZkhPzoMdRHBHjkp6X3h7q8imDh35Xk5Bwi2m9nl3OiAxbC7+32DezW4sGDoF2AglrgCo aRLz9XCx7LzniOcVexnJl8fRQXZbo8uJNxGj2G+mlofLG/BDBE5dnLbj7q2gzFwJ9BAT xSGFtbaro6C2FYcaNaKPL9OTjsayaowj0n1Z4UaGZZvrOp2/6tTkXV5CV9GXy9sbC0Et WW+g/YLucmg7aIIx7698GSN+BwNeZY/PgEFLb+NRLVlDlVMzasg4jcfBqHXstUrv+TTx wRbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Tm1aRIWaBwgx/6x0GFSv25uAoJq4igL/u+tjPwXH2Gs=; fh=EPO+XMDoylG26O8AfLK4l02IrH8PqYL7jb8PVK09dDA=; b=M0Ns6EtKgecpdOioX6k/oxiTWwxYH7Wd0llgdjmxUaMXFREhVkbISbdHbQn1llftIw Hs0k77vC8q7ctrqvyY2V4vUIpVS1SAsFoNAgxlRbqH3HmRM1Gwv7LOBzT704rdRW+ths jbHsI7vgR0w5HKxnAHt96Fx7JanCJzPskPXVUkEa7+g9BrddxEnKPxiyf4puMGTD8Iof i6d3aJkiJsHRjcYpTHkctEk4iTkpzL6c0jcZQVEPtesVHwyhAaYAqVszpIofaOsHi1rk Tiu+vOL5biIJH0qFhhmU11gWQNUjN+2cB8CZKajl9hQQkjuGlwM4rv8AdJaSuJ2Xd+Z1 28Dg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=qh1eI1c0; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id af79cd13be357-7c545aff2dbsi320852385a.474.2025.03.09.18.29.25 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 09 Mar 2025 18:29:26 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=qh1eI1c0; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1trRwm-0003yV-IB; Sun, 09 Mar 2025 21:28:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1trRwh-0003xX-Af for qemu-devel@nongnu.org; Sun, 09 Mar 2025 21:28:43 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1trRwf-0006Qr-JN for qemu-devel@nongnu.org; Sun, 09 Mar 2025 21:28:43 -0400 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-3913958ebf2so1540528f8f.3 for ; Sun, 09 Mar 2025 18:28:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1741570119; x=1742174919; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Tm1aRIWaBwgx/6x0GFSv25uAoJq4igL/u+tjPwXH2Gs=; b=qh1eI1c0ouGSETKIEx3D8o8IPsQlrJ8bitK4tBhFViZE6wd2AqSq/+dna024B1eBW6 PZm8OY6aFFa2YC4X/jsg14r4aBlzjRvIz4ObuH9OiknK9CfofdwR9MKUiRJi6lLXTnrr MwVMFEGz+SCUiYHSg1jqBZpBXdx4r3csCyfFTQ5e39vdgr3vT4o71r9jj3c28eyg5YT7 U25AglI/GQ3FGl6VZzkYrekf23lHahZ/dXalBR3AY28COJNaP2aelkfGgo3RJIkSTjGU q7ixlfk7SpDbsplsV9KNvtjgORQT3i2Xisq3SSSeKdqMGqBmVldobktseZTxSzmDkxMm oEfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741570119; x=1742174919; 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=Tm1aRIWaBwgx/6x0GFSv25uAoJq4igL/u+tjPwXH2Gs=; b=USIruzQjrwjrTFc7aGMs/Ijb/8MKeYM+MnuVAfp4QuTtw2577aXAFKLNz1DIfN1ZEK WFl7bugMZUFIYslv5SoZB7b5NwH8I2riEIQObPFDcLnRVmogzpOCRI5ki7ippAwwnOQ1 8SpoPVKuWJw7FVA9gRYBlSQEw0BUqi50Ljd0FCC7a9WBB+f1MsLnhiMmC5Q9HDBTw4Jp aqIrcFYh4WH+KZkYOFTS+JvLVwtwIcihPT4sYBXqdlLHY+2diZhsMV3hYnGRmEBpX8Ac +txfzpOPycR/L8FbFuPmrDWO8yq1bVrqRwQRSmkor4p03LVP3qDw86NWfS0mK1S2VPDV qPrg== X-Gm-Message-State: AOJu0YzaBResL0qmptcnZoeLo6dZIv22UrOpzcKNJm68CtGH+/4W5Co2 0ggfFHlNu8xxSn0fSV60M9bY/eG6OXzGxxGj4WSxrQykxHVaP6HGHn3Q6vjFHkvAyz2DSbqGjC7 bD6Q= X-Gm-Gg: ASbGncuF+RiYD+q7OMyFM0QkPoefp65IJBkiz6x87HpNnrFgdZSIxuihqDMOtS3n8TA nXwbqFwiVBKB5up4m9k6PPE4r5eX8yC8Bwrv/WFWxfWY27uIZLD0QQtsk58tk0DW7LF8J0F1L1/ BDTFCjFSSINxcZk679i9oVTvuidVrJxaZayfOcZjHg/+4pCdxIc2HzzBI/J4EFDRkFMNv1vnKVa 8QbEiN+c9/S0aKAnq0ufYbNEZNFtE/uYIACiloLyl1bmveJedykUgidMfOkwQ72KFZYXhc4tYtx lZAsIkiFDznFxJLIPOQns1HzISabFSHWD7pwdYj3UqjtZbjJne6z7jW+bG+yr5/cQzDSV/qa86X GtyVyES/Kkgbmi5bwhhK9xV2JJlbwlw== X-Received: by 2002:a05:6000:18a3:b0:391:1388:64b7 with SMTP id ffacd0b85a97d-39132da8f0amr7923213f8f.46.1741570119480; Sun, 09 Mar 2025 18:28:39 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43cef25f075sm45918365e9.28.2025.03.09.18.28.38 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 09 Mar 2025 18:28:39 -0700 (PDT) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?utf-8?q?Marc-Andr=C3=A9_Lure?= =?utf-8?q?au?= , =?utf-8?q?Alex_Benn=C3=A9e?= , Mark Cave-Ayland , qemu-arm@nongnu.org, Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [PATCH v7 2/7] hw/char/pl011: Introduce pl011_xmit() Date: Mon, 10 Mar 2025 02:28:20 +0100 Message-ID: <20250310012825.79614-3-philmd@linaro.org> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250310012825.79614-1-philmd@linaro.org> References: <20250310012825.79614-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::42f; envelope-from=philmd@linaro.org; helo=mail-wr1-x42f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Extract pl011_xmit() from pl011_write_txdata(). Use the FIFO to pass the single character to be transmitted. Update flags appropriately. Reviewed-by: Peter Maydell Signed-off-by: Philippe Mathieu-Daudé --- hw/char/pl011.c | 43 ++++++++++++++++++++++++++++++++++++------- hw/char/trace-events | 3 +++ 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 0e9ad5d5d90..113b29cd9e6 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -226,6 +226,36 @@ static void pl011_loopback_tx(PL011State *s, uint32_t value) pl011_fifo_rx_put(s, value); } +static void pl011_xmit(PL011State *s) +{ + int bytes_consumed; + uint8_t buf[PL011_FIFO_DEPTH]; + uint32_t count; + bool emptied_fifo; + + count = fifo8_num_used(&s->xmit_fifo); + trace_pl011_fifo_tx_xmit_used(count); + + buf[0] = fifo8_pop(&s->xmit_fifo); + bytes_consumed = 1; + + /* + * XXX this blocks entire thread. Rewrite to use + * qemu_chr_fe_write and background I/O callbacks + */ + qemu_chr_fe_write_all(&s->chr, buf, bytes_consumed); + trace_pl011_fifo_tx_xmit_consumed(bytes_consumed); + s->int_level |= INT_TX; + s->flags &= ~PL011_FLAG_TXFF; + + emptied_fifo = fifo8_is_empty(&s->xmit_fifo); + if (emptied_fifo) { + s->flags |= PL011_FLAG_TXFE; + } + + pl011_update(s); +} + static void pl011_write_txdata(PL011State *s, uint8_t data) { if (!(s->cr & CR_UARTEN)) { @@ -237,14 +267,13 @@ static void pl011_write_txdata(PL011State *s, uint8_t data) "PL011 data written to disabled TX UART\n"); } - /* - * XXX this blocks entire thread. Rewrite to use - * qemu_chr_fe_write and background I/O callbacks - */ - qemu_chr_fe_write_all(&s->chr, &data, 1); + trace_pl011_fifo_tx_put(data); pl011_loopback_tx(s, data); - s->int_level |= INT_TX; - pl011_update(s); + fifo8_push(&s->xmit_fifo, data); + s->flags |= PL011_FLAG_TXFF; + s->flags &= ~PL011_FLAG_TXFE; + + pl011_xmit(s); } static uint32_t pl011_read_rxdata(PL011State *s) diff --git a/hw/char/trace-events b/hw/char/trace-events index 05a33036c12..1bab98fb5f3 100644 --- a/hw/char/trace-events +++ b/hw/char/trace-events @@ -65,6 +65,9 @@ pl011_write(uint32_t addr, uint32_t value, const char *regname) "addr 0x%03x val pl011_can_receive(uint32_t lcr, unsigned rx_fifo_used, size_t rx_fifo_depth, unsigned rx_fifo_available) "LCR 0x%02x, RX FIFO used %u/%zu, can_receive %u chars" pl011_fifo_rx_put(uint32_t c, unsigned read_count, size_t rx_fifo_depth) "RX FIFO push char [0x%02x] %d/%zu depth used" pl011_fifo_rx_full(void) "RX FIFO now full, RXFF set" +pl011_fifo_tx_put(uint8_t byte) "TX FIFO push char [0x%02x]" +pl011_fifo_tx_xmit_used(unsigned sent) "TX FIFO used %u chars" +pl011_fifo_tx_xmit_consumed(unsigned sent) "TX FIFO consumed %u chars" pl011_baudrate_change(unsigned int baudrate, uint64_t clock, uint32_t ibrd, uint32_t fbrd) "new baudrate %u (clk: %" PRIu64 "hz, ibrd: %" PRIu32 ", fbrd: %" PRIu32 ")" pl011_receive(int size) "recv %d chars" From patchwork Mon Mar 10 01:28:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 872169 Delivered-To: patch@linaro.org Received: by 2002:a5d:64ce:0:b0:38f:210b:807b with SMTP id f14csp764443wri; Sun, 9 Mar 2025 18:29:54 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWbMjD2tvwAEdqvrGtsnXcWTPmtXo7UpvRGrbws8VpSKxpuxnN5Rqe44qYYsG6qneQNE7dCnQ==@linaro.org X-Google-Smtp-Source: AGHT+IEK3M6G5Ac7YGIwNvCdy5M6fBHDfTTP5X3wIOUHQiyf1Za4P69DNJZ+t65C7W/qwNQMjJHB X-Received: by 2002:a05:620a:2722:b0:7c3:ded7:6330 with SMTP id af79cd13be357-7c4e167d6ecmr1714227685a.13.1741570193971; Sun, 09 Mar 2025 18:29:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1741570193; cv=none; d=google.com; s=arc-20240605; b=jbBc4r85pTt0cD6L7gELv2SJmWhIff8469BvrlW9fczwb9lu/fJJCgxPBTATWeXKji 7fdInYaUEp674zlnk6HhPGBX9WkIjuI0E0gWr1Y5JuVpdESSLOM5B+Y6UmgcC/CvwiaU PMCWf7khSNx9uGcmW8hygCAQfh50BtWu6ddfZRhofjdO0CpW8bkAC9WdtVkD0OddexqV CwGnIbOldndkXgUkY+hwEo1t/GoD6c22njrCCJQk00OSWR+AoYFmMIVObX6IVtsdKFXC tsrlcIx35+HG8j0gau0AKyjPXDQJZB+5/6mPzKlhISsTx/im3uENwcuYGFoVUk48SyS2 t7Rg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=8ce/6NRq1JPvdEj2O0uStpJg+L6PTsOBLcGGWbCWAug=; fh=EPO+XMDoylG26O8AfLK4l02IrH8PqYL7jb8PVK09dDA=; b=M/h/AIMewFSgtlm2h0w5GiIigoUfNaGDq5WuuMbz5QfMeNpvrw0CTl0Aquk32gA7Dz 7LBT7oReDgfJ22EAco0fvk9SOgAkRAiGEbbJOdf3KFvbNY68JM+kCPXTgyIDU2pLKpWT aA4aGnc9MCDBoPGbT3D9c+cDIGn3aUUDrzkwXEUGa4aRb4JvfoJFUDyP+ppR/R4v9DgZ DdB+gAMyn2CaRILy/6ylJy0AXiplRxr0VApJdR0i1dvPA8AC6e7/5i+hNqy9YVuv2TAS HIpaSGsZIHHNux7igSfppVA1bcrZ4lATAUHvnE6HKGLWqEGzOtBtwEIJxbIzYXnl0T3j tRMQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=tNUvdt5l; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id af79cd13be357-7c54bab875csi205393885a.529.2025.03.09.18.29.53 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 09 Mar 2025 18:29:53 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=tNUvdt5l; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1trRwv-00044M-4p; Sun, 09 Mar 2025 21:28:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1trRwo-0003zG-3r for qemu-devel@nongnu.org; Sun, 09 Mar 2025 21:28:51 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1trRwl-0006RU-Dc for qemu-devel@nongnu.org; Sun, 09 Mar 2025 21:28:48 -0400 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-388cae9eb9fso1712421f8f.3 for ; Sun, 09 Mar 2025 18:28:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1741570125; x=1742174925; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8ce/6NRq1JPvdEj2O0uStpJg+L6PTsOBLcGGWbCWAug=; b=tNUvdt5lwIZGxaZT9eXnOYNuO8PtEA+6+48BJaTtk7ziAx0FOlKCNsbqrOEEA+UJMg hAAkHiLAecUrtAmXWCQKdHI+HaP5Td0BwgEaJGSwe1nZG2ZYqnjSVrSb29CC0uVVHSUC tvDeqkcKnij1vYaHTr/ItqY62feMTj42Mt003imwgHzUnTN2oELnZ+JjOfI6FEdn1/Xe yURZsLH04i/xqW4SXqS6z6fqc9/gQd7pz6Fm6LIJhMtJW3uZsHVrZ519KwKed/F1neIP rQsotQ/9K+FV03Ves7JuFzaw4bxtHKu2OKrNO7boMeeE9xfjFx5vmqujXePsnO8gsCXY QoVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741570125; x=1742174925; 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=8ce/6NRq1JPvdEj2O0uStpJg+L6PTsOBLcGGWbCWAug=; b=MTS76wW3I7Eb49ubDrA3lbv/gYyvGzgplowM8AxM+1m4YcKOtwJmgCynTDARTwTnIq JNsVN6z5vxy+CUmVw0XLW1OGt+3kxTSqVxDOfGmnO3DQ6OBryKLVSrw6JVd+K1xOIzSv CwtJuX9I9vl6DZle/8XMUUSQ/gkI9iWp4rHNGMYINqmfITqbzz5/vJPYOrNevJPVGQ/h xsOyNTRBCvTL0QyDWEz8yTQBfURh5c9EyGoR23ditGLgYZ49thI3oMeeedzh7QHLto1Q z55FFFh+6qNYQKWezQsmt3MTOMaHWqgXsp6lUdg8VAgT1iApNkwNU4X/2DBiyX7dbeX4 47uA== X-Gm-Message-State: AOJu0YxWCau8LD1/m5NZnoZHCoRk+QBwTG6F8DIi/w+R983NdtxVF1/0 8udxY60yFi5TlUWOKBT+oZhGbxZsXM81mlpQch2nQx0UGqRNXqPGiy7YlJAqdUtB7CXoToJnrGX nHTw= X-Gm-Gg: ASbGnctno87cxd1mJ+pCVZg0DDqEN8mDBt5DzEQcF3nHuP4mg/Ek44Nkn16tGGhLyfR dIU4FH/xTVrQXLmKHTZhA4YCMxubKLGE0aYzp9s+O6lL7kkzXfcX3Bhqp+J1kAlkTD5rRQ/ewCj MQ6jzfL6CqhRdIELjfugMxcJnXt4Opjp1fA3rwrHkCuexbSh+2jPD7rSfzFVWrYFuiaTlcy8UFg XAumUBp19LXDJODHLq9+yUr7FC9K5YqbN/Y3SH+tW0OJO95KckmQDmPQnradElWZR3Sjg+zDLte BjpThjaPShIGqZGpNOoGNLCQatpsI5BJFsfuoU15v0LgyJDZvsbxzMExPpIrrg0U56q6T8gcS5b d8838Kw8Z1tbebzpWPZuwRLYGdT5fwA== X-Received: by 2002:a05:6000:410a:b0:391:4559:8761 with SMTP id ffacd0b85a97d-39145598929mr1319845f8f.36.1741570125026; Sun, 09 Mar 2025 18:28:45 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912bfba83csm13154773f8f.6.2025.03.09.18.28.43 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 09 Mar 2025 18:28:44 -0700 (PDT) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?utf-8?q?Marc-Andr=C3=A9_Lure?= =?utf-8?q?au?= , =?utf-8?q?Alex_Benn=C3=A9e?= , Mark Cave-Ayland , qemu-arm@nongnu.org, Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [PATCH v7 3/7] hw/char/pl011: Factor pl011_xmit_cb() out as GSource Date: Mon, 10 Mar 2025 02:28:21 +0100 Message-ID: <20250310012825.79614-4-philmd@linaro.org> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250310012825.79614-1-philmd@linaro.org> References: <20250310012825.79614-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::42c; envelope-from=philmd@linaro.org; helo=mail-wr1-x42c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Implement pl011_xmit_cb() using the FEWatchFunc prototype to register it as GSource. While the return value is not yet used, we return G_SOURCE_REMOVE, meaning the GSource is removed from the main loop (because we only send one char). Reviewed-by: Peter Maydell Signed-off-by: Philippe Mathieu-Daudé --- hw/char/pl011.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 113b29cd9e6..18ea03a52f4 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -226,8 +226,9 @@ static void pl011_loopback_tx(PL011State *s, uint32_t value) pl011_fifo_rx_put(s, value); } -static void pl011_xmit(PL011State *s) +static gboolean pl011_xmit_cb(void *do_not_use, GIOCondition cond, void *opaque) { + PL011State *s = opaque; int bytes_consumed; uint8_t buf[PL011_FIFO_DEPTH]; uint32_t count; @@ -254,6 +255,13 @@ static void pl011_xmit(PL011State *s) } pl011_update(s); + + return G_SOURCE_REMOVE; +} + +static void pl011_xmit(PL011State *s) +{ + (void)pl011_xmit_cb(NULL, G_IO_OUT, s); } static void pl011_write_txdata(PL011State *s, uint8_t data) @@ -630,6 +638,11 @@ static int pl011_post_load(void *opaque, int version_id) s->read_pos = 0; } + if (!fifo8_is_empty(&s->xmit_fifo)) { + /* Reschedule another transmission */ + qemu_chr_fe_add_watch(&s->chr, G_IO_OUT | G_IO_HUP, pl011_xmit_cb, s); + } + s->ibrd &= IBRD_MASK; s->fbrd &= FBRD_MASK; From patchwork Mon Mar 10 01:28:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 872171 Delivered-To: patch@linaro.org Received: by 2002:a5d:64ce:0:b0:38f:210b:807b with SMTP id f14csp764567wri; Sun, 9 Mar 2025 18:30:23 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUyZyhTXbnizXp7hD37TNwkZUXvQOi/MwK/w6h3jkLGq2yF7v9FtrmN7GBUlx9iUIJD2PvnHQ==@linaro.org X-Google-Smtp-Source: AGHT+IENdpOW/o6WXn3oZUoMmJKOnGa+l4iOQfC64hnREijZKTt1+yRTpJONZdwLkrBBl4Ht5p1g X-Received: by 2002:a05:620a:6089:b0:7c5:49b7:237c with SMTP id af79cd13be357-7c549b723f2mr664960985a.27.1741570223684; Sun, 09 Mar 2025 18:30:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1741570223; cv=none; d=google.com; s=arc-20240605; b=O/5f34/K+b2aJlumy+m8gbA59HnDSM9UOUviCqHKKHtzr0eLC65J+wS0NEhi7xe56i uvM5dH5qGX3gdmWWs/AJ5ZOwdeQ02sdKV2/FKF6M4rKsbG7Et4kcXFE4n/wAtJLvCcar W0zBYQLEtnM0cH3Z0BN/Swhs3dehDFSRQmsSjQ++Y3Q3M/O6+Ax11xWstCv1J6Asdm+z xiomwlEpmXAN9TrbcUa8uOtdjwDXdlyabq55eTOQ2CZU+osOxMgqklzsL6XmEDs46gIR 3Atn4BUTBj7g819dG8gff+tc3P83aGfVbhCW9gUEJ8+EQ7jzbyewYOiJEH6YNKd7PaNv y+OQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=wS79SS1CQxxkd3qnon8nNpovVlwqoGNVt9KU+09W3OY=; fh=EPO+XMDoylG26O8AfLK4l02IrH8PqYL7jb8PVK09dDA=; b=gW8y55c0c8N9AwpAH5PWBPlrBCjedidI7SS+PLB52L+o4ko2Y+d/dhUKHENKpbNNTc 21OKO+JpzpjatcgF7gbhJzjFsTDPBAQczKYWs+MnebOh0jp6YOC9fI+pWQ+JfdNC7rIy 0CRL+BrJJ7+sOe1gyBylYHgy3kIDADjLGhyfFpy5KvcijW9zxsMvpfLZ2nGz7zVrspMO 6wJaWupbN1HadsbAQsZdEOVWrzVQKLCJXom+r1ISouYNaNFrVzxOrrgPshrAQHp9xBK4 7/vwIO3xQrXpt7m6jL3Y1ZFh4eNQu74A2hdGliOv3DEbz28mLPFUVjV5uSJO/Ylka9pL YTLg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Sh9rTsV9; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id af79cd13be357-7c543493093si350373885a.364.2025.03.09.18.30.23 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 09 Mar 2025 18:30:23 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Sh9rTsV9; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1trRwx-00045E-Gh; Sun, 09 Mar 2025 21:28:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1trRws-00043d-Mu for qemu-devel@nongnu.org; Sun, 09 Mar 2025 21:28:54 -0400 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1trRwr-0006T0-0K for qemu-devel@nongnu.org; Sun, 09 Mar 2025 21:28:54 -0400 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-43690d4605dso21509495e9.0 for ; Sun, 09 Mar 2025 18:28:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1741570130; x=1742174930; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wS79SS1CQxxkd3qnon8nNpovVlwqoGNVt9KU+09W3OY=; b=Sh9rTsV9fmGjKOKmxQtfUekDlfPLJKDn8zH6SXpz4XysntLgSvDG8u4ErurzWw3V0u BIirtzv3a4rwaHB7LCQcwnFC2Yh9lWSUs0Phn4UrsBRKHQL8uE5DlHTrsOlDmhhxSpyT TQxg134EJaIeoSRMnLfXmKEQPa3p0z0MyLUhUqogk79TicqGPhaA5R4g836urN8Q/8iD yVL8FBWBaGlqxasb69YuwuBNCVLABgBbcLTzXGooqHMh3gFIRKOfpJloyACTl34MYj3F UBa6Tc27gy7yLme8TitRSApCWM+vSVJtSqSJwOJGKZFgwO7RF6hwlkLDeqlOS8Q18kQg v3DA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741570130; x=1742174930; 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=wS79SS1CQxxkd3qnon8nNpovVlwqoGNVt9KU+09W3OY=; b=p/1gAnt2f5rjsa6kZEuhOj4z28HEqmseDsKTM++qSCwnbAgicvvJhzYxt721I3z607 eFyw7Bt8W9Qi5NWwGyzD+Y2OQafLjNIKCiwUES5AHK0fosASmJnfcZeymUaEMYrJaBxm JRNrlOwRHKMA6KlhlsCNjDYbRnorn6t/8rhABwglx1xOtZNlLflU9E331BPbqw/AA3YJ UfZl9dalDlx6G1w/uUodoRIAIrTih/mjIsBK9K0KJl42uTk2a+YxDywW4drhMySLGTXR 5WXEp6eusS89lhwNgQX67vvJ/E3DZPsoS/va8ulrVIuiQBG6AdltvyoMMDOSxTKoKeeM JbQg== X-Gm-Message-State: AOJu0YxVQT5g0pF4QNt01CIMo5Vo5ekR9a4nzOSOxk4R1NQalVeLImTB gAAeQldd1Y26NlfdBluDE9yHXTZM4/1fyJgWaPazJ3bX3JPfugtBcJyzz+TkbZS6+l3vWtPGm3I P2KA= X-Gm-Gg: ASbGnctKnRkdZIAbC9N9CUKHhYJCheJhV745DfVz2SrAOmZu0YIhgce0Aton0qqF7Eo 2PD/HZvX4N86HcgYG9M94AjV4uKurejD4Nxi1piAWD6Vn9SbggLUFxmJHHy8NvswY2NHL38ZMUi paKZyF39efJZpOyZrEBxPEDLXTCsIDwpUQLKiZWKCBGLGwWVniryVStc2sw6QVjom23LRYQioZB VmeFoBThxB+JuD31gURLUAT9CWHOC1OiJhgspcCRIvnw8pMg6JqXD21rK/Y3e1gWUSZZCVfoI+q JddF9sB1scSM+N5VFpN0WX8RWI5tqz4yfFeQpU2MVvg8KHklmASx6H11zN3fLxhjRPEbsnmfMCt YPgPlj3soZYJpem9kAFs= X-Received: by 2002:a05:6000:18ae:b0:390:f394:6271 with SMTP id ffacd0b85a97d-39132da96b3mr8000092f8f.43.1741570130520; Sun, 09 Mar 2025 18:28:50 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912bfb79fbsm13570645f8f.13.2025.03.09.18.28.48 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 09 Mar 2025 18:28:49 -0700 (PDT) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?utf-8?q?Marc-Andr=C3=A9_Lure?= =?utf-8?q?au?= , =?utf-8?q?Alex_Benn=C3=A9e?= , Mark Cave-Ayland , qemu-arm@nongnu.org, Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [PATCH v7 4/7] hw/char/pl011: Trace FIFO enablement Date: Mon, 10 Mar 2025 02:28:22 +0100 Message-ID: <20250310012825.79614-5-philmd@linaro.org> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250310012825.79614-1-philmd@linaro.org> References: <20250310012825.79614-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::331; envelope-from=philmd@linaro.org; helo=mail-wm1-x331.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Signed-off-by: Philippe Mathieu-Daudé Reviewed-by: Peter Maydell --- hw/char/pl011.c | 3 ++- hw/char/trace-events | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 18ea03a52f4..34a5cb3af5d 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -480,8 +480,9 @@ static void pl011_write(void *opaque, hwaddr offset, pl011_trace_baudrate_change(s); break; case 11: /* UARTLCR_H */ - /* Reset the FIFO state on FIFO enable or disable */ if ((s->lcr ^ value) & LCR_FEN) { + /* Reset the FIFO state on FIFO enable or disable */ + trace_pl011_fifo_enable(value & LCR_FEN); pl011_reset_rx_fifo(s); pl011_reset_tx_fifo(s); } diff --git a/hw/char/trace-events b/hw/char/trace-events index 1bab98fb5f3..c857f4c4b38 100644 --- a/hw/char/trace-events +++ b/hw/char/trace-events @@ -63,6 +63,7 @@ pl011_read(uint32_t addr, uint32_t value, const char *regname) "addr 0x%03x valu pl011_read_fifo(unsigned rx_fifo_used, size_t rx_fifo_depth) "RX FIFO read, used %u/%zu" pl011_write(uint32_t addr, uint32_t value, const char *regname) "addr 0x%03x value 0x%08x reg %s" pl011_can_receive(uint32_t lcr, unsigned rx_fifo_used, size_t rx_fifo_depth, unsigned rx_fifo_available) "LCR 0x%02x, RX FIFO used %u/%zu, can_receive %u chars" +pl011_fifo_enable(bool enable) "enable:%u" pl011_fifo_rx_put(uint32_t c, unsigned read_count, size_t rx_fifo_depth) "RX FIFO push char [0x%02x] %d/%zu depth used" pl011_fifo_rx_full(void) "RX FIFO now full, RXFF set" pl011_fifo_tx_put(uint8_t byte) "TX FIFO push char [0x%02x]" From patchwork Mon Mar 10 01:28:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 872170 Delivered-To: patch@linaro.org Received: by 2002:a5d:64ce:0:b0:38f:210b:807b with SMTP id f14csp764461wri; Sun, 9 Mar 2025 18:30:00 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWHxd3e7250skZdbFmGmP/C0ALGqn7GZqSIXGv2xhegkU6AUQuDCH/zy/qckjPTKoSgRDtS6A==@linaro.org X-Google-Smtp-Source: AGHT+IElOnmgpyaw2xXY+KDCbCHryi80rMOrqwfOFfu2yLpGsrDzTah+M/97+JLLXAY5BSpJBVCZ X-Received: by 2002:a05:6214:250e:b0:6d8:9872:adc1 with SMTP id 6a1803df08f44-6e900693d5cmr184649916d6.38.1741570200122; Sun, 09 Mar 2025 18:30:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1741570200; cv=none; d=google.com; s=arc-20240605; b=dr9I2VcWaJcpKZN2+GjApnhdFnf2xm6GB6y7x8LgAbhap7qnYheIvb/rwIDq9xPrvN ojI4kduKYzecdJMu30b5pNYLO7/WLLfIbtQbCEK4UfBqN00tDKZlnyv7zK09zQaxAFO3 9Pp/8nspNgeiLEu5C+/84f+yE2bO4Hxie15hCkhXrE7WjL6JCro3SukPDQEqgjKrmjiL 5Gc3MHXi+OvVcv1hoih0pNZ38+32ZGF9QKqxsNxztkaxpmbyilHAjJ9rixSOI/TBxz6H 7+9c+7u5DX7SsBqQuOhRLWupmOTrl9gX6ZwSPvqpXXwES/ZSObFG2OcqaI4eymBrP/gS Gdcw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=6mdjFtYQM1H0sW4TtB9D0TGJccy9eC3YWJZP9lSZSPQ=; fh=EPO+XMDoylG26O8AfLK4l02IrH8PqYL7jb8PVK09dDA=; b=OYBR+HCkTR2nurgdXD3qkhJ3LFE5glB50w3NTrEkKS+zUiPMQXt7VuBel4ccb4Kim9 msLHI5U1C9v5v5u+OAzOshOFqEht4OMKELoaBeityXsQfG/YZOYMsoHFmXaqpCWwKf/o NVwIHh12jDNJ+GS8sG9S5odJqbCS0SQY/niQYJ3+nunM6fJAv8q3hpP627b/dR4/C7mB c9fc1a6vD1ETrRXT2blskFXwljp48+KavtCQqf61MinxmwOroPf8YxDGmHH+7yJLVbCw dxnQt67nrMJ4OuiWDYV3FkzMVTOu8pfR3yxxHVlMTIZY5yY7sOFIK9p4nCH3p3zPqmF4 ZEWg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=jeWRAsYJ; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id 6a1803df08f44-6e904634c67si55403946d6.404.2025.03.09.18.29.59 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 09 Mar 2025 18:30:00 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=jeWRAsYJ; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1trRwz-00045b-Sq; Sun, 09 Mar 2025 21:29:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1trRwy-00045H-0T for qemu-devel@nongnu.org; Sun, 09 Mar 2025 21:29:00 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1trRww-0006Tp-B2 for qemu-devel@nongnu.org; Sun, 09 Mar 2025 21:28:59 -0400 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-43bc48ff815so20985285e9.0 for ; Sun, 09 Mar 2025 18:28:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1741570136; x=1742174936; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6mdjFtYQM1H0sW4TtB9D0TGJccy9eC3YWJZP9lSZSPQ=; b=jeWRAsYJBSqJk4z3I/s3CMUO2uCKN2jOKOigcTysUVjL1sw6yQDg+WiW1r3eA2Wv77 SVCS0Nb9ZovqyKPQ+lox7JHxWjNunK4cGqsf3XXaqsllSdeTshB4Lqn0qVGRiWxynhM6 1nSYYyBJF04wai108do4GUB8c+d/tDeegxgQafVs4gKfOMYu+jfiIMhTkjih1bQE6q7g MCtz2etTVuoZsrjAYAGJjg01qAcxbkyI+WxMMITdY1+dF0xDTTpKNC3LSnY9zmNyil1e 2qD3+zPQCxQgnyT54A/OcSIPasZfL+T6wr+g1Q1mMoXrsO29EBQiL/646M1hZ5h7bOEj fzzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741570136; x=1742174936; 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=6mdjFtYQM1H0sW4TtB9D0TGJccy9eC3YWJZP9lSZSPQ=; b=qiPnaFbiKk9lIvW6RgFgzBl7wCTOvMasJJevwv7xWGF6QqaUmpUy/YI5i4ljVe9Jd6 mOsnRP7bUQuj0pV1LWbNUjIYL1U9A1h9P80i8XYBCHHutIzxxB540bue6BH7eJftGXPR ZPGI560sd0rVql+M79niLesontr0+qcDBySc7qiYj/Y7hNwb4AaZDAn5bhqnLxJhQ3Zl B9m1km79m1+UOT/He+q9c+vtk7edG5dVyfMqVeXELyDK+F+RODHAnozOAHNamB5/Y/as L7ZKQpUahnPP5c9jsV4kKUW2fQZ7MM7Pj4w5TMTr6gnL6W0jOorlDYfA/v1jqSv+3WQQ fonw== X-Gm-Message-State: AOJu0YyqbPfdgKpKgi4yBVszfyet0x6aH+6DeKj+E8W3GAwUUUNgXHWh gSKi77Zzwi+vWudRq7cCJI7uNaRBWihRCAFAGDuCVMfjpRrKBxQ2cdeUZEUds3y0pGxS6lq/Lfr q0Ro= X-Gm-Gg: ASbGnctrsWOoSEzDg8brFIS6dI/y22dYs3OLNa5W0pXrixwapBQDnch8GoPI2dKzCJ1 pGeUWPrq0WvKwE22hiZaOrrDWLvB6wS1AyactS2bWge+wlcE8SGfn8BfeMluQeSl+JA+3x8UtSv ArayXsXCyh87qIf/b7Yv1eHcleJOWYhoBtjjZriwWQ8UDsBbPvSUUm80TlZrTxs4v+EcjyB8qtR bp47ZxWqAq9QAsSZdhF6F671erEesdKIHP6nKlG2AgZU4us+lESnrMrxqWO7J7N7Cn9+rDxTJ5C F0cd17fjDIBx1l2vfv0EKM9/oWq58LdFAELfzkbKkobRknOkNaDyuYNudxQMyDt7SO7i0YbucMZ toeRZeUK5kxZQh2qjJAI= X-Received: by 2002:a05:600c:1c95:b0:439:98fd:a4b6 with SMTP id 5b1f17b1804b1-43ce4dd7f59mr42259595e9.15.1741570135956; Sun, 09 Mar 2025 18:28:55 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912bfb799fsm13221355f8f.2.2025.03.09.18.28.54 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 09 Mar 2025 18:28:54 -0700 (PDT) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?utf-8?q?Marc-Andr=C3=A9_Lure?= =?utf-8?q?au?= , =?utf-8?q?Alex_Benn=C3=A9e?= , Mark Cave-Ayland , qemu-arm@nongnu.org, Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [PATCH v7 5/7] hw/char/pl011: Consider TX FIFO overrun error Date: Mon, 10 Mar 2025 02:28:23 +0100 Message-ID: <20250310012825.79614-6-philmd@linaro.org> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250310012825.79614-1-philmd@linaro.org> References: <20250310012825.79614-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::32d; envelope-from=philmd@linaro.org; helo=mail-wm1-x32d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org When transmission is disabled, characters are still queued to the FIFO which eventually overruns. Report that error condition in the status register. Signed-off-by: Philippe Mathieu-Daudé Reviewed-by: Peter Maydell --- hw/char/pl011.c | 22 ++++++++++++++++++++++ hw/char/trace-events | 2 ++ 2 files changed, 24 insertions(+) diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 34a5cb3af5d..f67ce951ac9 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -61,6 +61,9 @@ DeviceState *pl011_create(hwaddr addr, qemu_irq irq, Chardev *chr) /* Data Register, UARTDR */ #define DR_BE (1 << 10) +/* Receive Status Register/Error Clear Register, UARTRSR/UARTECR */ +#define RSR_OE (1 << 3) + /* Interrupt status bits in UARTRIS, UARTMIS, UARTIMSC */ #define INT_OE (1 << 10) #define INT_BE (1 << 9) @@ -157,6 +160,18 @@ static inline unsigned pl011_get_fifo_depth(PL011State *s) return pl011_is_fifo_enabled(s) ? PL011_FIFO_DEPTH : 1; } +static bool pl011_is_tx_fifo_full(PL011State *s) +{ + bool fifo_enabled = pl011_is_fifo_enabled(s); + bool tx_fifo_full = fifo_enabled + ? fifo8_is_full(&s->xmit_fifo) + : !fifo8_is_empty(&s->xmit_fifo); + + trace_pl011_fifo_tx_is_full(fifo_enabled ? "FIFO" : "CHAR", tx_fifo_full); + + return tx_fifo_full; +} + static inline void pl011_reset_rx_fifo(PL011State *s) { s->read_count = 0; @@ -275,6 +290,13 @@ static void pl011_write_txdata(PL011State *s, uint8_t data) "PL011 data written to disabled TX UART\n"); } + if (pl011_is_tx_fifo_full(s)) { + /* The FIFO is already full. Content remains valid. */ + trace_pl011_fifo_tx_overrun(); + s->rsr |= RSR_OE; + return; + } + trace_pl011_fifo_tx_put(data); pl011_loopback_tx(s, data); fifo8_push(&s->xmit_fifo, data); diff --git a/hw/char/trace-events b/hw/char/trace-events index c857f4c4b38..d52f511a1e2 100644 --- a/hw/char/trace-events +++ b/hw/char/trace-events @@ -66,9 +66,11 @@ pl011_can_receive(uint32_t lcr, unsigned rx_fifo_used, size_t rx_fifo_depth, uns pl011_fifo_enable(bool enable) "enable:%u" pl011_fifo_rx_put(uint32_t c, unsigned read_count, size_t rx_fifo_depth) "RX FIFO push char [0x%02x] %d/%zu depth used" pl011_fifo_rx_full(void) "RX FIFO now full, RXFF set" +pl011_fifo_tx_is_full(const char *desc, bool full) "mode:%s full:%u" pl011_fifo_tx_put(uint8_t byte) "TX FIFO push char [0x%02x]" pl011_fifo_tx_xmit_used(unsigned sent) "TX FIFO used %u chars" pl011_fifo_tx_xmit_consumed(unsigned sent) "TX FIFO consumed %u chars" +pl011_fifo_tx_overrun(void) "TX FIFO overrun" pl011_baudrate_change(unsigned int baudrate, uint64_t clock, uint32_t ibrd, uint32_t fbrd) "new baudrate %u (clk: %" PRIu64 "hz, ibrd: %" PRIu32 ", fbrd: %" PRIu32 ")" pl011_receive(int size) "recv %d chars" From patchwork Mon Mar 10 01:28:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 872172 Delivered-To: patch@linaro.org Received: by 2002:a5d:64ce:0:b0:38f:210b:807b with SMTP id f14csp764689wri; Sun, 9 Mar 2025 18:30:51 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXiLsu/f8Pm1FPkgAda5hCsPpig6pYbhZnPUVMli8LgTQjubpg9VGktzZVFeMwbWdpUSy1liQ==@linaro.org X-Google-Smtp-Source: AGHT+IFK9E0zYqwr0ZpbAjPioFPWR55HUM99SOtz5NBTfOcbN2EUAjBgIe2EuYhih5jLcTa3+TMA X-Received: by 2002:a05:622a:5d0a:b0:474:d06a:6118 with SMTP id d75a77b69052e-476623891d7mr99517371cf.2.1741570250811; Sun, 09 Mar 2025 18:30:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1741570250; cv=none; d=google.com; s=arc-20240605; b=O6pXmP0EGzEMZtEB4/9szIu7acjemeU7QZC8xeqW7jM1FBNpqRb7NSlBAV62HIqrDO LmpUn5D0mEd1UNzBhNJ+7+pBun2B3DMp7XK2BnU/zvg5ovAxNqQ1nNlyKPy8oC2VUR/S 4EjFshqkrgXsbYqoP4FfwGtWTlU/iywBLsgzTUsa0Pq45vcJ03LUjaFbom7d0R5tS/5e ONbIRHPtWVmzFHV5GYgVm8GZTy4WLz2dy1WvyTRFjPjWKFBpqrW6vozP8UEreuD4YVKy +5rqM2W+0NKwrOxmirJS6cjqm2IxZyTNZEg+vmZYYipfwbrdqG4U0MsLHoIuzgGVLmg0 5qNA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=nKtjkSGQAPRNNqtasOzh5Hz0iRBusUZv23b35HZSLgg=; fh=EPO+XMDoylG26O8AfLK4l02IrH8PqYL7jb8PVK09dDA=; b=XJ9ZZGyspt/QGyEplT6+OgjrmWuNIY8sN5RTLvp2j2O8AAWA1A6wop8rg36L9QLc85 hGVMLggnEdt5+tCDouWvN6p3oAStcLIgCTDZdAymBWQKH6/7fFuk27RELf/22minD9QJ FnsFFWxwoSgx7ryilDl2n3BOZNWccecNPaFSP5aoij/QS7M7Xv/zf2r0vC4P8Vsuf/Le tgxpijv8onx575IDbOpgKcnx7SOahhhmudWFY4SVDwDFlfLo/nZoeOMg/GuYN6MXquPY x9UErJUz9B2NaVmC6dJPfOYooXtNC7KKz+c+vM+FtQDevn2UdYjY/8n0t6hAQYJ4fzmH 9/HQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=hVaxKV3T; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id d75a77b69052e-4768a0631f4si10712641cf.197.2025.03.09.18.30.50 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 09 Mar 2025 18:30:50 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=hVaxKV3T; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1trRx6-0004FL-FG; Sun, 09 Mar 2025 21:29:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1trRx1-000499-RL for qemu-devel@nongnu.org; Sun, 09 Mar 2025 21:29:06 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1trRx0-0006UR-8G for qemu-devel@nongnu.org; Sun, 09 Mar 2025 21:29:03 -0400 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-3912baafc58so2568682f8f.1 for ; Sun, 09 Mar 2025 18:29:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1741570140; x=1742174940; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nKtjkSGQAPRNNqtasOzh5Hz0iRBusUZv23b35HZSLgg=; b=hVaxKV3TBOhDT371aMbXEMAPOBN31mYmf14ZqVNMrL3t6G3w8HZUrF/5HRqtGDfY/r 8ofXTZ8J1xHO11jSqas9qX1I1AJTUn2NKffhqTAXdd/F+dH56KRxottocYoFWOY4phqR 3WjrhQECVxxSyWig3rpzzzVS2b9VB5hdF55o0RNGkRsyMqRgjfP3zH4i/rjNDZsWrpBU HitHbRfWyRzAbV6jeXNi1oWCZ/9lTxXvyGlTXIwfjXBKFp5K1x3fOqi1MiNigXizhz2+ /GhtC0c5Qej6IXr3o0HEiokW+RfLmQs0I3ri7jJpi/Thz6mLrPrxTLch3CyGd+aWoq0g 02Ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741570140; x=1742174940; 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=nKtjkSGQAPRNNqtasOzh5Hz0iRBusUZv23b35HZSLgg=; b=VtN4BqRBmBP3HnscxZq869oLvgjVM1xwuH8EVFhid6wao8lmOAZN348wACo9ffPRSk I4iYQr3F5u3xrUrBrEnJZwI+TuGnPwYJGwSNSqEk4InCb6rVpYhQ8BvSp1O6MPVVqEkO yFQqL+CsznuskIF4hYmS9j0xiyXwwJTvfBMytc/n4IWZEVmWo81eUeli8E9mKi746+To IeT1f+uxBsZxnoqU2qJ7vZtOyTaujlH9iAb5FjWzsbXO53q5SzuZ5TK+okSFviiO7PJc j1G52US3/J4NAhUlhOSzxetqKySizayKhDp3h9jyZJqeM03So76RmWzqdURDQYZdlFqk zwOw== X-Gm-Message-State: AOJu0YxLgYseZme/XKrp5uQ+kwy1AdklgE838dpQ03Y/FMPbsM4ZkVn0 uCBo6Jyrl8P4d61O9pu98uV0lmk2BUVyOdDV7126jyz50KWHkxFV4dhG9upJFOxB1uRRB/H+Rht nZHw= X-Gm-Gg: ASbGncvCf6jgLUYGBm/b4FzNWSZmIPu2sv7XFPJbonu0YhDrmJAYPuBSQ/nn5HD3pE9 vhiGV8+fhiFQ/+dZkhz2L5jwVBhFCRhorBIl2NED35vNcPHn/MC95F7p8RozkHxzbHA4z9w73s8 rX5mNf/XP0kUQVJd/SJSe8l2zLRLT8Q3cunobNDzpfPFmdLOqnnczWWdnVXX6jYhWTK8aBGjGya VDgfOnNBdbslNbi3ORRSBlZKqA1Q6nJm9KfGbjebOMZbu/ZWJJQWtvntt9Ae06LI7fBSbfz63Mx pduTmORCea/lzThsvdCuy/bmzqeumVtD83OUb82ambtQc+pBpa8KLNcUzJZs5hFuzq0Flrc6U+L DxnKn7WXrkGhFR8UIoks= X-Received: by 2002:adf:a3cd:0:b0:391:46a6:f0db with SMTP id ffacd0b85a97d-39146a6f2ddmr1260640f8f.37.1741570140590; Sun, 09 Mar 2025 18:29:00 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-43cee22c13fsm51483595e9.40.2025.03.09.18.28.59 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 09 Mar 2025 18:29:00 -0700 (PDT) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?utf-8?q?Marc-Andr=C3=A9_Lure?= =?utf-8?q?au?= , =?utf-8?q?Alex_Benn=C3=A9e?= , Mark Cave-Ayland , qemu-arm@nongnu.org, Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [PATCH v7 6/7] hw/char/pl011: Drain TX FIFO when no backend connected Date: Mon, 10 Mar 2025 02:28:24 +0100 Message-ID: <20250310012825.79614-7-philmd@linaro.org> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250310012825.79614-1-philmd@linaro.org> References: <20250310012825.79614-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::430; envelope-from=philmd@linaro.org; helo=mail-wr1-x430.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org When no character backend is connected, the PL011 frontend just drains the FIFO. Signed-off-by: Philippe Mathieu-Daudé Reviewed-by: Peter Maydell --- hw/char/pl011.c | 13 +++++++++++++ hw/char/trace-events | 1 + 2 files changed, 14 insertions(+) diff --git a/hw/char/pl011.c b/hw/char/pl011.c index f67ce951ac9..6d26a3e13f8 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -241,6 +241,13 @@ static void pl011_loopback_tx(PL011State *s, uint32_t value) pl011_fifo_rx_put(s, value); } +static void pl011_drain_tx(PL011State *s) +{ + trace_pl011_fifo_tx_drain(fifo8_num_used(&s->xmit_fifo)); + pl011_reset_tx_fifo(s); + s->rsr &= ~RSR_OE; +} + static gboolean pl011_xmit_cb(void *do_not_use, GIOCondition cond, void *opaque) { PL011State *s = opaque; @@ -252,6 +259,12 @@ static gboolean pl011_xmit_cb(void *do_not_use, GIOCondition cond, void *opaque) count = fifo8_num_used(&s->xmit_fifo); trace_pl011_fifo_tx_xmit_used(count); + if (!qemu_chr_fe_backend_connected(&s->chr)) { + /* Instant drain the fifo when there's no back-end. */ + pl011_drain_tx(s); + return G_SOURCE_REMOVE; + } + buf[0] = fifo8_pop(&s->xmit_fifo); bytes_consumed = 1; diff --git a/hw/char/trace-events b/hw/char/trace-events index d52f511a1e2..730d6292a2d 100644 --- a/hw/char/trace-events +++ b/hw/char/trace-events @@ -71,6 +71,7 @@ pl011_fifo_tx_put(uint8_t byte) "TX FIFO push char [0x%02x]" pl011_fifo_tx_xmit_used(unsigned sent) "TX FIFO used %u chars" pl011_fifo_tx_xmit_consumed(unsigned sent) "TX FIFO consumed %u chars" pl011_fifo_tx_overrun(void) "TX FIFO overrun" +pl011_fifo_tx_drain(unsigned drained) "TX FIFO draining %u chars" pl011_baudrate_change(unsigned int baudrate, uint64_t clock, uint32_t ibrd, uint32_t fbrd) "new baudrate %u (clk: %" PRIu64 "hz, ibrd: %" PRIu32 ", fbrd: %" PRIu32 ")" pl011_receive(int size) "recv %d chars" From patchwork Mon Mar 10 01:28:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 872167 Delivered-To: patch@linaro.org Received: by 2002:a5d:64ce:0:b0:38f:210b:807b with SMTP id f14csp764352wri; Sun, 9 Mar 2025 18:29:22 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCULTjRWXsd2zhOyvZJ3ya6IpP0XLJ7UnT1y2zE7zE/Q+7ixf9ov3BrnCu5Q2DUx44d3R1aP8w==@linaro.org X-Google-Smtp-Source: AGHT+IFn67Rur+ydOpBP8gbNX1JVNxhndXhO+qPSLmqRXsH3aMTpNO8Q38L2SCfG0K21F0J8FbdO X-Received: by 2002:a05:620a:880b:b0:7c5:50dd:5079 with SMTP id af79cd13be357-7c550de9448mr420901985a.1.1741570162367; Sun, 09 Mar 2025 18:29:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1741570162; cv=none; d=google.com; s=arc-20240605; b=Ei02Jtz1Mk9PzJSylRnZEXmCU+ZeeRISNQzH4iG1DQgXDJEgSWCi99N06Ttvg7gr0f NizcCVRgdEMl1GXPDf4Llm5lMJ/HW1v80lUmXLpWcOw0m8sEFSOVBEAEaVL5VAZfxYzG zbQg9FltElOzHpJkJhgXt6ZLWRqCStqvHF6K3mV8LQdatYPKHcxri/LvDrZpqoOeVtfh +z7dl/PhYfu5DGliTt2wJMjxmvCVNPFNF5MYsoJy+2qjAAdQxU3aAKxrdAbsrLszAD2e HfnFERb6bviEc0fUXpxypAFZLlphIvLurlBorQV0ac8FcD3OhgxPvS9YnCa7wqnr54MO +qwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Rrde3KHLzAFDrcctuuOnFTDDeYEo7R3jlkMLF4h0mXs=; fh=a3sVJiDlJJRNGQXT8fQR9OBoKp1npiIR1X7O75RYkck=; b=E6siU3W7brYksGk5tzbb8L6Z9kikkw4spy89+A1mR92uNwfp9d+BzD6Z/7/ptUUI+d 7bDK0MYz7ORSjjPRaNmisKdM/tO3hVhklhhKKc7OpB14msXwGPcgNLBMcb5obIRFogUB GwSWS6f7Y5J9Z0GNxR0OdT4uPAQmcY0rX5IS9vHXTHT+XRyDRWG5Tz9p+IBCDPXtxmaH LhMX3cmt8umeQnwABc5fEOJa2NwK10JvuJ/cR8bFxCOSv+fI0o1DwmdATBRSQu+UzcRT pqGpfabqFh0vBa+Xppb5y5+AvRY8z14zKpuuRrKU1iT7TJq741AbkjeqERpoRtyWwv+q 5tUQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=h+1t1WNC; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id af79cd13be357-7c556a2206csi45444385a.501.2025.03.09.18.29.22 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 09 Mar 2025 18:29:22 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=h+1t1WNC; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1trRx9-0004GF-3L; Sun, 09 Mar 2025 21:29:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1trRx7-0004G1-HS for qemu-devel@nongnu.org; Sun, 09 Mar 2025 21:29:09 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1trRx5-0006VM-Qx for qemu-devel@nongnu.org; Sun, 09 Mar 2025 21:29:09 -0400 Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-3913b539aabso713521f8f.2 for ; Sun, 09 Mar 2025 18:29:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1741570146; x=1742174946; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Rrde3KHLzAFDrcctuuOnFTDDeYEo7R3jlkMLF4h0mXs=; b=h+1t1WNCzB1E2JtC0Hswyfgt7C2qX2aUCbB7oQO/hyAoPLJTdKM3pYjHImRW/CK9Ey 26zDRlqyzSToMlFfc3iffPYEEyYFd84PzzzYonbLDdtira5fKPwx+fvbJ9mGEvBc6ygV wXzLnDfz4ngHx5DyXDcQ6pbSZrP51G7volD5r4hfF6d0nFP/q4DjrwlFfF2BwPYJr1Ks p5dS0lPljXplffgIAPEGAFezCQlW7j8we+jgRtf6wmPJNxs5hMJBo8mSqBgfjqcu7lUi hZC57rqLnbrQZ3P3sUwM3Q/OGnzGo9jmGCQKH24B3XW3zFWXBkdRcrDB9c+4u4Ft+oqc 9JxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741570146; x=1742174946; 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=Rrde3KHLzAFDrcctuuOnFTDDeYEo7R3jlkMLF4h0mXs=; b=Y3My6Hksqz4YhB+aXR3a4NaIcn+EFCebJsm/ja+zxcTaBaO+yspb0Y6CDse4e8W4sC RdBr5fYQSWTeuMU9IisURy3Hp4vcU9EyZe/6UzJc72k7Uq3gozRiZzBrv52Lhly/NcHd j7A5J+7Ek9WBwR7+I/YQX21DuijEV3kNDxK2Oo+HkWJt4FjLlTnXKIPvDuMT6YP3BiAS ka1tL7e52+qcbwxZYSKzcEN/v3zR+bI02bnxK4X+9JVghWcNWRddApKJ3JxzBnN3kYgi iiJ4HQ5BEj6AuKXK4pjdK2W+6FOdB4S6c20kkSXwucSxtyWkyUQZQYRjCovPkoNNilrp 5jnw== X-Gm-Message-State: AOJu0Yw5HpWeK1riyyf/TsVwEJZfO7n34q+gl9jRP05Sd20spTFq6JLZ z9/ywVKMG3Fg0veHLPCWbNeLnJFi6zmiKUL2CqJeADPvIx/y4jIhTY/kWUNaOiLz/ABQuhQFIRX D+f0= X-Gm-Gg: ASbGncttuwgA/ugriv/zDNLwCmZGQbe7Lo18T2Ee7mk7tJD6M8zR38UaMvinUpZpMLt 4Uz4wHXZt/jcWEPomoBsYJgJXQ8SOgNuIRwqFR/SFySIuc/quRq0yIlV1uj3igZv8zILIet0pnd QgbbocGXu8e+/o2oN+P/MjQd5cn9jOpLnFdxFIexLdbuV3qaFzsZhHwtipGlRy87kvwg4W2QYbP lOm711piSmc+Q77hHThisS1eKzemeKiMdrJrw8PP2fhccU2wjzskpmZTGKeGJQvb7udc0T5delh mbjfPFhY0ok6aAe/CTZ21mxWlmcnbqa++Yr6hfPg9BN0ujT8FDybMSlFFbpZTzyseblYTLOcFgv ocyPVTjsRHq+sKj/gBnc= X-Received: by 2002:a05:6000:402a:b0:391:2fe3:24ec with SMTP id ffacd0b85a97d-39132d3c1a9mr7994487f8f.14.1741570145997; Sun, 09 Mar 2025 18:29:05 -0700 (PDT) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3912bfe0004sm13025061f8f.40.2025.03.09.18.29.04 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 09 Mar 2025 18:29:04 -0700 (PDT) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?utf-8?q?Marc-Andr=C3=A9_Lure?= =?utf-8?q?au?= , =?utf-8?q?Alex_Benn=C3=A9e?= , Mark Cave-Ayland , qemu-arm@nongnu.org, Paolo Bonzini , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Mikko Rapeli Subject: [PATCH v7 7/7] hw/char/pl011: Implement TX FIFO Date: Mon, 10 Mar 2025 02:28:25 +0100 Message-ID: <20250310012825.79614-8-philmd@linaro.org> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250310012825.79614-1-philmd@linaro.org> References: <20250310012825.79614-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::432; envelope-from=philmd@linaro.org; helo=mail-wr1-x432.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, 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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org If the UART back-end chardev doesn't drain data as fast as stdout does or blocks, buffer in the TX FIFO to try again later. This avoids having the IO-thread busy waiting on chardev back-ends, reported recently when testing the Trusted Reference Stack and using the socket backend. Implement registering a front-end 'watch' callback on back-end events, so we can resume transmitting when the back-end is writable again, not blocking the main loop. Similarly to the RX FIFO path, FIFO level selection is not implemented (interrupt is triggered when a single byte is available in the FIFO). Reported-by: Mikko Rapeli Suggested-by: Alex Bennée Reviewed-by: Peter Maydell Signed-off-by: Philippe Mathieu-Daudé --- hw/char/pl011.c | 35 +++++++++++++++++++++++++++-------- hw/char/trace-events | 1 + 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 6d26a3e13f8..d93cd8b3f0e 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -258,6 +258,10 @@ static gboolean pl011_xmit_cb(void *do_not_use, GIOCondition cond, void *opaque) count = fifo8_num_used(&s->xmit_fifo); trace_pl011_fifo_tx_xmit_used(count); + if (count < 1) { + /* FIFO empty */ + return G_SOURCE_REMOVE; + } if (!qemu_chr_fe_backend_connected(&s->chr)) { /* Instant drain the fifo when there's no back-end. */ @@ -265,15 +269,23 @@ static gboolean pl011_xmit_cb(void *do_not_use, GIOCondition cond, void *opaque) return G_SOURCE_REMOVE; } - buf[0] = fifo8_pop(&s->xmit_fifo); - bytes_consumed = 1; + count = fifo8_peek_buf(&s->xmit_fifo, buf, fifo8_num_used(&s->xmit_fifo)); + trace_pl011_fifo_tx_xmit_peek(count); - /* - * XXX this blocks entire thread. Rewrite to use - * qemu_chr_fe_write and background I/O callbacks - */ - qemu_chr_fe_write_all(&s->chr, buf, bytes_consumed); + /* Transmit as much data as we can. */ + bytes_consumed = qemu_chr_fe_write(&s->chr, buf, count); trace_pl011_fifo_tx_xmit_consumed(bytes_consumed); + if (bytes_consumed < 0) { + /* Error in back-end: drain the fifo. */ + pl011_drain_tx(s); + return G_SOURCE_REMOVE; + } else if (bytes_consumed == 0) { + /* Couldn't send anything, try again later */ + return G_SOURCE_CONTINUE; + } + + /* Pop the data we could transmit. */ + fifo8_drop(&s->xmit_fifo, bytes_consumed); s->int_level |= INT_TX; s->flags &= ~PL011_FLAG_TXFF; @@ -284,6 +296,11 @@ static gboolean pl011_xmit_cb(void *do_not_use, GIOCondition cond, void *opaque) pl011_update(s); + if (!emptied_fifo) { + /* Reschedule another transmission if we couldn't transmit all. */ + return G_SOURCE_CONTINUE; + } + return G_SOURCE_REMOVE; } @@ -313,7 +330,9 @@ static void pl011_write_txdata(PL011State *s, uint8_t data) trace_pl011_fifo_tx_put(data); pl011_loopback_tx(s, data); fifo8_push(&s->xmit_fifo, data); - s->flags |= PL011_FLAG_TXFF; + if (pl011_is_tx_fifo_full(s)) { + s->flags |= PL011_FLAG_TXFF; + } s->flags &= ~PL011_FLAG_TXFE; pl011_xmit(s); diff --git a/hw/char/trace-events b/hw/char/trace-events index 730d6292a2d..c377f971a6c 100644 --- a/hw/char/trace-events +++ b/hw/char/trace-events @@ -68,6 +68,7 @@ pl011_fifo_rx_put(uint32_t c, unsigned read_count, size_t rx_fifo_depth) "RX FIF pl011_fifo_rx_full(void) "RX FIFO now full, RXFF set" pl011_fifo_tx_is_full(const char *desc, bool full) "mode:%s full:%u" pl011_fifo_tx_put(uint8_t byte) "TX FIFO push char [0x%02x]" +pl011_fifo_tx_xmit_peek(unsigned sent) "TX FIFO peek %u chars" pl011_fifo_tx_xmit_used(unsigned sent) "TX FIFO used %u chars" pl011_fifo_tx_xmit_consumed(unsigned sent) "TX FIFO consumed %u chars" pl011_fifo_tx_overrun(void) "TX FIFO overrun"