From patchwork Sat Feb 8 16:39:05 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: 863292 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e42:0:b0:385:e875:8a9e with SMTP id r2csp874004wrt; Sat, 8 Feb 2025 08:40:56 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVH/THtW0GHg8WULdCMuUWHHlYgmlfGrJZqftac8uqw+uWw4MEs0g8YmRFoobC3affZyttr8A==@linaro.org X-Google-Smtp-Source: AGHT+IG3iJGU1sQcU1odRA3nH5W+vfs60J9P7MT+T2YiB1OlQqM+oKvan/TNnJuDzMmwgNeTJUEB X-Received: by 2002:a05:620a:298e:b0:7b1:1180:a455 with SMTP id af79cd13be357-7c047bbab72mr975317885a.22.1739032856277; Sat, 08 Feb 2025 08:40:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1739032856; cv=none; d=google.com; s=arc-20240605; b=g4Ci9V0N+1Z5uKAQsp8HFb1lzcSvtJ/hd13eyG91wj8n+/RFIPJrWflI3oBzWL61nR 5ZMZawdJpXTGriJzFpysxwj80uvvyzi0vQNUTNOHZhp1uwPxsB8wrBBBDV3IMsNqBng5 pFD6HS/od7gsqxqjFvNg6JUYT8dGlXZ6mn2RiZ59sOEGTLaocofz3Avbd7gLNyB+RgtR ml25efkUSLjU/hyyJhiuHyo7qdYVmLWqPLWS0ZrgkXZaPTaBQNnUug1nZqvXHer43Q3V Ohiijo0FEYWifEf8bMl7iRVj4tkAB/K54OkwwZSa0Ujgc0UZsm/r2oZ+GjG0dS4mTVv+ Gopg== 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=pnDfQ0pDNHjagyoidO1nQy0wbrzE23spPhP9nSEJCp0=; fh=KYjAHwBe5CKa5NBrrFEK7Xvzt/wBqWP7WQ4s9qUj/sU=; b=Vdpnx6iGbi3V/YifP9YZYawNpvEoJuDaINIvgopuKgtlgEtrnt6J7Dd6PS+ArCNCk5 pcna3nTO01oBugferXYUjTx2kbfYQSSFXtivqec2pPm91en1x14DY62kGHsHEyDEy5HK 6Bomc6w9UWf9oTjVaHhKbKK5Khj500mQ9zpUTiU5kHEktzTMVlj10QdF2s7vg36ARyl4 pt45NHmOnw/Zvl9rT/7hWRIhidsPJC4mKnWX7xHuhoInaKTs3p0JMcHOl09ToRFkktia M8Qm3fyN+8j+hRPU4wSASDCYF1V741FFuyVF1RAsA8sNq6eYDjB88s87t37PP9nd2lb8 iylA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=M2GYL5VJ; 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-7c041df45d4si598272085a.2.2025.02.08.08.40.56 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 08 Feb 2025 08:40:56 -0800 (PST) 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=M2GYL5VJ; 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 1tgnrX-00010f-OO; Sat, 08 Feb 2025 11:39:23 -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 ) id 1tgnrW-00010N-Cn for qemu-devel@nongnu.org; Sat, 08 Feb 2025 11:39:22 -0500 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tgnrU-0008NL-TP for qemu-devel@nongnu.org; Sat, 08 Feb 2025 11:39:22 -0500 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-43934d41730so4090305e9.2 for ; Sat, 08 Feb 2025 08:39:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739032759; x=1739637559; 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=pnDfQ0pDNHjagyoidO1nQy0wbrzE23spPhP9nSEJCp0=; b=M2GYL5VJbm3fLpUbuaP+A2IqSlhhpa3F1nFe/LltDcWNRdRaBZsGyX8hOTWbzjTNZK Qwo375LO45k2qrXXu0t52+12WuMzhpAxxQ0GVCLC3lG4X7L6QZ7YNd/+tDwrrNTd65Xh Du5dCy9ADLHcTxybYGmguEWiRNwwa3k1P16Q6RppbGs6JF5X20jO9XAG6gMjd3h5cw4G Wn8litcw+1x+osRn9gV94MR8JB5annIC7pMQCULRJvcBARdfp1K6nQ4tokib6+pdwC5N PG9MOL4yKeM9mQoHaG2ilUJCKldwylOMfFnI/yeiFkLf4iRQj6UcyKhpUsoG+E2zjf/8 /Vxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739032759; x=1739637559; 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=pnDfQ0pDNHjagyoidO1nQy0wbrzE23spPhP9nSEJCp0=; b=NVFXsCt8J+hOp9pBDtovE/TFwvnruvthk+w7CFXORnYadNYTpzqTxUrj5oc+suXo6c YzjbTckdhLPmTqWBplW+hhJqIpxdvunWqy6zM1z6H5qRFGwMoVzmM2wtCrBSUuqZq3J/ aqZ3K1ywCo+kXcwxjr8mbLslFsVDb62AhoBKFn1MHd9FUN/BPSqf9dWkuBBleg8trHvJ onZx7W+1gRBqc2LTy6OCbCyobp2Ml8wSCFuuX6j9TqbS9++PAk4v5h68HvpJy0pQvp1e cokhm/j22A2IfqlEiKDm2Z1OD5QjCv/enxKVz6uLpfojL1noV70ySu3Ua8gMv5kjMBuW EyOw== X-Gm-Message-State: AOJu0Yy9MvDzp6zgctooD2m/TscsNhMKx073ErQWtEDtl/KwsRqFdjFE jZ41Fa4nk/5h6qJJKS7CpcZQ6ImQJ4JS0Is0d24aM5wv47HonMJnqfY2KIDfScFM1yTY1FnbPkw u0zY= X-Gm-Gg: ASbGnctW3F143Wk8DbyAmnK8V8yDGsQptRBcFfXVGX5t+vGUVj43uIEArkX0OFMWs/Q TcH0LfJfrbzs6XEJ6Trjt7C8xlcL83OifXmk+kuaJ3nZN/LGw0mMa6ZjrzbCHHG4pfcUp4wXn3j usBngtPEfOgMug8eOCKvK0m8ff7mhACwmQ/O/A18DJO5vev1kaOQvhHaUSJKAxaSrlac1WSDc07 e54vIPlHTS/Ha9tSjT9/e2BTQq9+lFC9r8oc5U8AWoNYaUrwpi0jbfP99pVmuc+v4WcNToOpVwq QydRahpBf8TSqeOrtVddqYbey3rTwXkHJZX3BLahUKbZskdxa5V+zvPYlGCoiaDNbA== X-Received: by 2002:a05:6000:1887:b0:386:3356:f3ac with SMTP id ffacd0b85a97d-38dc90edfecmr5468949f8f.26.1739032758923; Sat, 08 Feb 2025 08:39:18 -0800 (PST) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38dbdd54624sm7410071f8f.45.2025.02.08.08.39.17 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 08 Feb 2025 08:39:18 -0800 (PST) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Paolo Bonzini , qemu-arm@nongnu.org, Mark Cave-Ayland , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Peter Maydell , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Richard Henderson Subject: [PATCH v6 1/7] hw/char/pl011: Warn when using disabled receiver Date: Sat, 8 Feb 2025 17:39:05 +0100 Message-ID: <20250208163911.54522-2-philmd@linaro.org> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250208163911.54522-1-philmd@linaro.org> References: <20250208163911.54522-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::332; envelope-from=philmd@linaro.org; helo=mail-wm1-x332.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 We shouldn't receive characters when the full UART or its receiver is disabled. However we don't want to break the possibly incomplete "my first bare metal assembly program"s, so we choose to simply display a warning when this occurs. Reviewed-by: Richard Henderson Signed-off-by: Philippe Mathieu-Daudé --- hw/char/pl011.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 06ce851044d..60cea1d9a16 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -85,6 +85,7 @@ DeviceState *pl011_create(hwaddr addr, qemu_irq irq, Chardev *chr) #define CR_OUT1 (1 << 12) #define CR_RTS (1 << 11) #define CR_DTR (1 << 10) +#define CR_RXE (1 << 9) #define CR_TXE (1 << 8) #define CR_LBE (1 << 7) #define CR_UARTEN (1 << 0) @@ -487,6 +488,12 @@ static int pl011_can_receive(void *opaque) PL011State *s = (PL011State *)opaque; int r; + if (!(s->cr & CR_UARTEN)) { + qemu_log_mask(LOG_GUEST_ERROR, "PL011 reading data on disabled UART\n"); + } + if (!(s->cr & CR_RXE)) { + qemu_log_mask(LOG_GUEST_ERROR, "PL011 reading data on disabled TX UART\n"); + } r = s->read_count < pl011_get_fifo_depth(s); trace_pl011_can_receive(s->lcr, s->read_count, r); return r; From patchwork Sat Feb 8 16:39:06 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: 863288 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e42:0:b0:385:e875:8a9e with SMTP id r2csp873754wrt; Sat, 8 Feb 2025 08:40:09 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVWOu1d2mu1AiGDtgdhB1R25xu6+xgqyp9xO7N4JBB2Yv8i1FvxP/0+bdtIkt+50f9sIUn/hg==@linaro.org X-Google-Smtp-Source: AGHT+IHq/Hf70oE7/QdZ3X0AvgjI7KsrJZpAFLCt+LcIC81/uwdyTa2s6W/lrorxfqdV5bm5sRcp X-Received: by 2002:a05:620a:4515:b0:7b6:c540:9531 with SMTP id af79cd13be357-7c047c207d3mr1142808185a.18.1739032809456; Sat, 08 Feb 2025 08:40:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1739032809; cv=none; d=google.com; s=arc-20240605; b=aIs7Q/gayEWVXI29u7VXM88nwUwtTeAcaAVZADY0n0MVuyEu6Q82h4xw/6UywyPNj8 bn4EEQvk+IdYuAy9PXz/sMNMrr8heQtuHc193/nxVCzbR5+HXsLO0dsvZq/gZ2G3P6Jm vjEqDrvh6yNEAQeqfNC23y6Pi++JCI/W1QmfFQ7WdpgizZU5/cxvHFWlSm7cwZXBI7dQ /gRS1JaKrGg4aQSLiLQmPm3qnDx5Z+OuoBAUTf60Qyk7AbGncwWb/AJP3SYZfL2e2/dR dxEYLr49qFfWmvwR9EWI1Th1HsYuEQ7xvmSoZRA6gi+e0TD4Ml10Z+/U+KBhMnj99Y9J cD8A== 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=AcA7adOksZJD+UONQiU8US0WrcIGd+kxe3T2X7yAEcA=; fh=Q2VQomM1h55ONgceJjJS3yyIB2vnUrN9w0x6I3KCnUI=; b=RWUI30xeNzNOALiLTIFejaxwOasyWdYngJUpOfYj4UcMzPKzV+dkTZIcI+yLOq3p75 h7JF9nVmgdLAub4eXts2DCIDl9bxBqYsFqSuUj8+9vkHhENzXreZRHKmsM5Yp/7Bkl1g 7XyqLb/YnrJXcDtu+xw9UkqVli0uFcDEa8tRWYFs4eTAXtLLyazxYVTpP+iRrsryEz4u gY8+Z83k/qsUORDTriyLZ1a1gBp9C7/jM6xTNr7Z/bILR2XqqoTxFKLI6R3czyB5Fopm lGKg9sPrQjrxzHjFjdMySWVkF8VBRRF2xOovLlPLMM0i2Te5z4aP0vlcvHDPiIh0J48D 3tLw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=BreY4QpU; 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-7c041e94c78si573796785a.247.2025.02.08.08.40.09 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 08 Feb 2025 08:40:09 -0800 (PST) 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=BreY4QpU; 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 1tgnrf-00011w-EQ; Sat, 08 Feb 2025 11:39:31 -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 ) id 1tgnrd-00011S-VC for qemu-devel@nongnu.org; Sat, 08 Feb 2025 11:39:30 -0500 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tgnrb-0008OM-CW for qemu-devel@nongnu.org; Sat, 08 Feb 2025 11:39:29 -0500 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-38a8b17d7a7so1431778f8f.2 for ; Sat, 08 Feb 2025 08:39:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739032765; x=1739637565; 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=AcA7adOksZJD+UONQiU8US0WrcIGd+kxe3T2X7yAEcA=; b=BreY4QpU6wt+wCY+rpCPDIgJJ92jJfy3T16UwQCWhAwxkOTfEITVV6EPXsp0Ur2I+j VqCfJgKQMtS5reTd5jrhyU6LlqYTY19cSOOcRirt+yNDMJeTWOEpjCjuJB7S4SeNtoKZ poinmkvPXwLBgepH2KAKkA6dU0O4nGeHMK2x3labuIKRY1eP85+jAnuWyNu84FcZ3kid 1BHmLSddcKNBzweCyKow/vijE0EkNI3tVHHgRbElqz4vM7meZNsAwqk9hvXA9dudZix9 1bqkSbUI9SLsBKx5kd+HiM4F0OFrPhQVlSRnPuh6E8tw/irlM43RosRszT9CL3PSDlNu NBSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739032765; x=1739637565; 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=AcA7adOksZJD+UONQiU8US0WrcIGd+kxe3T2X7yAEcA=; b=uvGEFsAFlnfORfZxFhhzFhIULEXS8Z8Eld7t/m99Fg4cLrkgxE9+quGK8cfaB+KNFC sq+C/uiJICm+OogcQCvowCsvunodZcZUgY6bZQpBUi/3MqM+muAsXqIinGwwVWgEcdwb LowGdlvgCQJetG6GECbTDmr7XRPMB46YeQctRmxTehPCQ7yCEVehPRUHheiDC5qMLjD5 AWcogNfJAja3jzIzm4V4bNcn13DwSdFnF9Gq6hKkNEL46GQ+wGCwx2CgdFbtNBaKlDgK usnpmErlkMjgcItwRJCFjGAXHCoBRGjMfrktA92qIOSLE/yoRbI+DiTV1YmDsQXMrX5F FzOg== X-Gm-Message-State: AOJu0YyeI4JKROj9lkydHrDQq5zDblyCdW5Va5Oxi9vpzt+HGzq4i+Gk PIBmlE3h2rqxIV2OB/K9c56y/5sNPoDEM1sgasJUbIQQ8O1SrnZma8Do0LTTShOJkqikD4ZBYCx OQs8= X-Gm-Gg: ASbGncvJkL+xpTDWS1nyGr9qv1c39Czuy9ZF2EoOgrQ1avilGgQ+4ryNQt75ZkSQwRc vLKh5YN1QgHcTvLe3kvzMMm3g17v46C/EreHF2aPxjy5f23BUoILtWO+izKQXmSqa/bYDAmMnRT BuiIG0No7YCFRh9896l3qerumyDdKQw3wbP+K02NHbinbLHlMXVLGpJUvKfnScczi10L27K3oi0 3Ovubx4BXiVrIGdXYQcQi4O2KlHhf7LOUzj/JXjAnAOg1FqdUiLPD5Jr2pqip40X201Vhu0vCUs +8qbgaDBs7V2yr5fv89q1yeuRYeAi14dPkG4X1hl54KKwuR4zKi7nQfW/J72maVL5g== X-Received: by 2002:adf:efc4:0:b0:38a:4b8b:c57a with SMTP id ffacd0b85a97d-38dc93509damr5335898f8f.44.1739032765467; Sat, 08 Feb 2025 08:39:25 -0800 (PST) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4390daf4480sm125465305e9.27.2025.02.08.08.39.23 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 08 Feb 2025 08:39:24 -0800 (PST) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Paolo Bonzini , qemu-arm@nongnu.org, Mark Cave-Ayland , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Peter Maydell , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [PATCH v6 2/7] hw/char/pl011: Add transmit FIFO to PL011State Date: Sat, 8 Feb 2025 17:39:06 +0100 Message-ID: <20250208163911.54522-3-philmd@linaro.org> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250208163911.54522-1-philmd@linaro.org> References: <20250208163911.54522-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::42a; envelope-from=philmd@linaro.org; helo=mail-wr1-x42a.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 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 60cea1d9a16..807fcdee50b 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) @@ -553,6 +555,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; @@ -607,7 +627,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[] = { @@ -621,6 +645,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++) { @@ -633,6 +658,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); @@ -676,6 +708,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 Sat Feb 8 16:39:07 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: 863289 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e42:0:b0:385:e875:8a9e with SMTP id r2csp873813wrt; Sat, 8 Feb 2025 08:40:21 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCU0bNRWU8LrW90R4CrM6GtlLtQsCnGf1DR50vh2glvAsKyDwn9+ZtYpwujdRC/SjJU+7UU9Eg==@linaro.org X-Google-Smtp-Source: AGHT+IFPU0SrqF6V0bWHpsMA6J4mhbZbSvvF9/8FMkIUn/XeX0SkfrC40iGhtNhH7OEZG5Opc5bG X-Received: by 2002:a05:620a:19a4:b0:7ac:a0a5:9bf4 with SMTP id af79cd13be357-7c047c2ca6amr1319120785a.40.1739032821346; Sat, 08 Feb 2025 08:40:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1739032821; cv=none; d=google.com; s=arc-20240605; b=TAOfBmM8ypcVJcydKP00QkqQlJDwVEWW8fJWOFeD4HqaSsmCc0aSA77SZ2YI6797Um PG8QuO8tU/IdEi0CqRgLhg3igq9JIJPK2+SzOe7WA13C1EXTf7pIOPMA28AbaTW3sp1y sCOT9Qyckl4zAqWJlssVsgxuTtxsuss4YDmDxVek+jPzhfJUjQo7WijPLRUr+8OCJlF/ veZ10zrzNhSzujrOUD0K0pYV+c6HjbLRvCZAgYaHI0mPZ7ikWq+gBJNI7jtWcXLS10nc LrHG49JTxfj6+ZBDyx8t2pLOZQF7GySJUidYnSJAF5S/9yuk9GFOyvnA1ap+qPkvCYSi FEOg== 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=BHNgIGYUe1Afrdl08LOWU03e5kzF56Zt76xmOxbCwW0=; fh=Q2VQomM1h55ONgceJjJS3yyIB2vnUrN9w0x6I3KCnUI=; b=j1J/qy+wpxROsGbRJKrEind2lcScuFjMFJL8rKa3Hn2e6XdMKwv0nw3renWfN+xknx ORwBuWAGFRPqDpwEMXh2ks89XByvViX6VG1JWb1+Xi7rmtEql5CVsE+Tv785n5wVNf+T 6rp7dvi7w83wDVtl2Z6DnaDnWOpgSCZGRsbFoAcCLgUXgXJlHdk7GReoEVZWisCnPO+Z d586IaSOa3Wq/lMzkF1kTHvpURw0OSFD3Gi+cgMPaW3WPiH33A01Dw9yX4yqvnbfa1G1 MMzaDbLsc+QIhBblgC93X73n8YNt6dSzqLYGUMkYnVWDpTcwdja7BHNItUtS461ZQZji e80g==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Cmq7FRNy; 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-7c054603bbdsi90557885a.542.2025.02.08.08.40.21 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 08 Feb 2025 08:40:21 -0800 (PST) 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=Cmq7FRNy; 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 1tgnrp-00013J-1b; Sat, 08 Feb 2025 11:39: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 ) id 1tgnri-00012f-RT for qemu-devel@nongnu.org; Sat, 08 Feb 2025 11:39:35 -0500 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tgnrh-0008P5-5e for qemu-devel@nongnu.org; Sat, 08 Feb 2025 11:39:34 -0500 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-436a03197b2so20191525e9.2 for ; Sat, 08 Feb 2025 08:39:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739032771; x=1739637571; 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=BHNgIGYUe1Afrdl08LOWU03e5kzF56Zt76xmOxbCwW0=; b=Cmq7FRNyadq2jHatYbe3wjIa26my42RrvWRY8QMLUH96D640yfZ7NLEeTUwx5ESVWE bieJ+iK24hG7zLAPRp8tNkRI6UsH+We43xBPK1HUwDiOkIncMmH4AfjnTdX7nh/M1S2c KGtK3JPThYZtyh88N91+z8niXOyb4mAP190+bKVdOeQm9F35/yqAJaDx1GnH3BLYsXNK gcajfM6pKpXqpQ98epmhMbOVy9+4KMYnsgtJuObwhlt3zwxCQDZAU3eO3de6MrCCr79T Kb/Nm2DG7F63Cl2r7evaMJAMpqv9nGPTv7yOI7YHRb7Yn8CTPspp+Ox8MUeWoTKoj3CR QgBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739032771; x=1739637571; 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=BHNgIGYUe1Afrdl08LOWU03e5kzF56Zt76xmOxbCwW0=; b=XbcUoOdfmTKFrkxhGpmOr/t2xME+kNTw0QxAg5vszZgkBJKdroGXc67a7HRdQdq6EC IulFymlH8M62bl0FxgZCrxEPoAvdl2elz/uatHrFrnGwnW0ThlJh+a43G4yXiQ/Llu/6 wRdE2GJtaDIlGQVKAi/8LsH6QWm/ZL/DuQlsSZrvX5+8MKpbtPBHTjg4QN85S2nfiFDU T1vFbe06rMltIZGjTASlwo+cePRq11q6PYemmvR/DFGy0e/wGdmK1c2TVIGTw4Hj5k9c 9bJ4oGxkacZ8ygawHKp76aYsuNn8sicgH/NIO7rSRnDKku8N4qKF9o7HL+kUXTPMsEEY 9Pew== X-Gm-Message-State: AOJu0Yy4eBPA9FQMbuIkPGbzGyd/8ZCPtA/IhqSFuFCG0UbcGCX++zqR BT8ker6Cu56RypnB8RPj1HPYkclnTRFmHNquXi3e7zZ4OEWkoS21+KgwxIh4KRk6ajQEY2YaVzi vR5c= X-Gm-Gg: ASbGncudEuGSkfeiU50vW819tV744JmkttTipmyzzGnG1HDZlv+De178NMArnmMcM9m gYu8N1StrvoaTQcIN3SQguMlDh2Bv1tID6BEkxeD4CQcSh1A4QUq4DByW9ZM2vBzo76PxyFMoPd bjJsTm2Ytu2nHe+9CKUFgFaSx3lIVBD1JeE1zBl28rSMIRLt1CKRbxnFHXBfkQzLW4I8chGfWk5 J/sWCmV8RtauRSjIxKrjoEXhVkWDSxKLmELt2rQyfeTQBNv2LWK886uMT+/Px8elRi7A19yPwGG 7fQ9larjxu5K7VLFrDMqooaneufFFGR/FKY+LgnndR37HJQ/PT3eBlXu8WB448CkKQ== X-Received: by 2002:a5d:6d8b:0:b0:38d:d328:7987 with SMTP id ffacd0b85a97d-38dd3287fd1mr2148023f8f.40.1739032770614; Sat, 08 Feb 2025 08:39:30 -0800 (PST) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38dd1d3a2c3sm2661793f8f.50.2025.02.08.08.39.29 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 08 Feb 2025 08:39:29 -0800 (PST) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Paolo Bonzini , qemu-arm@nongnu.org, Mark Cave-Ayland , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Peter Maydell , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [PATCH v6 3/7] hw/char/pl011: Introduce pl011_xmit() as GSource Date: Sat, 8 Feb 2025 17:39:07 +0100 Message-ID: <20250208163911.54522-4-philmd@linaro.org> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250208163911.54522-1-philmd@linaro.org> References: <20250208163911.54522-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::32f; envelope-from=philmd@linaro.org; helo=mail-wm1-x32f.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 Extract pl011_xmit() from pl011_write_txdata(). Use the FIFO to pass the character to be transmitted. Implement it using the FEWatchFunc prototype, since we want to register it as GSource later. 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). Signed-off-by: Philippe Mathieu-Daudé --- hw/char/pl011.c | 36 +++++++++++++++++++++++++++++------- hw/char/trace-events | 3 +++ 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 807fcdee50b..b9c9e5b5983 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -226,6 +226,32 @@ static void pl011_loopback_tx(PL011State *s, uint32_t value) pl011_fifo_rx_put(s, value); } +static gboolean pl011_xmit(void *do_not_use, GIOCondition cond, void *opaque) +{ + PL011State *s = opaque; + int bytes_consumed; + uint8_t data; + uint32_t count; + + count = fifo8_num_used(&s->xmit_fifo); + trace_pl011_fifo_tx_xmit_used(count); + + data = 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, &data, bytes_consumed); + trace_pl011_fifo_tx_xmit_consumed(bytes_consumed); + s->int_level |= INT_TX; + + pl011_update(s); + + return G_SOURCE_REMOVE; +} + static void pl011_write_txdata(PL011State *s, uint8_t data) { if (!(s->cr & CR_UARTEN)) { @@ -237,14 +263,10 @@ 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); + pl011_xmit(NULL, G_IO_OUT, s); } static uint32_t pl011_read_rxdata(PL011State *s) diff --git a/hw/char/trace-events b/hw/char/trace-events index b2e3d25ae34..3d07866be5c 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, int read_count, int r) "LCR 0x%08x read_count %d returning %d" pl011_fifo_rx_put(uint32_t c, int read_count) "new char 0x%02x read_count now %d" 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 ")" # cmsdk-apb-uart.c From patchwork Sat Feb 8 16:39:08 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: 863290 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e42:0:b0:385:e875:8a9e with SMTP id r2csp873874wrt; Sat, 8 Feb 2025 08:40:34 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCXR14cC435EmKu4ukX7ddOcbKf+TOh7wxiZadXCpqgIr1s+bwZDAGcHaTiCW39UR9cFIvAmQg==@linaro.org X-Google-Smtp-Source: AGHT+IF+fGU8/ZEKbfZEVcjcCyteWZd9yrUzRXRq8IqdVh3QT99r3XhyQTswkFnJPGGBFIMNDRo7 X-Received: by 2002:a05:6214:19c6:b0:6e4:4164:217 with SMTP id 6a1803df08f44-6e44578bd78mr94344826d6.45.1739032834448; Sat, 08 Feb 2025 08:40:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1739032834; cv=none; d=google.com; s=arc-20240605; b=FEw3z2kZ1DESHNxHZHF80r2tLDE5ItuSvCkxUYr6DzGsnNFignbBSnNRglS/kxVJn3 huMPZIEpoWoktw/5b1ryyzZxynyZ+JS1k0l69Ser0S05t+LzX4m8vnrFeI9M1lzKy1eB v8KIgce3tvIf/ezIK84l6KQCMyyPLadr2dS7lU73Fa0Zyf0kMQCdPbRubtbLJFSsgE11 9hcv21gRW/PiVOM/b99IJ8EHycIGbmDG/s6Mi5mvOXJG8knZQBqkk5Qc2OGHwhLxhGKD 8pEWtUa+kKPg26tk7sK+GJHusMa3LesU4vxC5UnZjTH+ISOqNlsSgMutrQR896cqcpPe SICw== 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=PHdzv7+PANz1XyqKozB4I/EYUC6swY8LmKK++HWkyR0=; fh=Q2VQomM1h55ONgceJjJS3yyIB2vnUrN9w0x6I3KCnUI=; b=aXTU6vb/v6kzPuNUsMBxWD1BPDiW5mio+Py2GIzuMPODtw9kX7fMcVh1Yt3gSXG+LD j97KDHUE7JOtDoEu1sb+JdswDIj3UBvdaaZ13kXNjuyLZyZNgaos+EKDCfIOqc08Xv3Z OHxCpC28UH9dN37cvJZ5/wmcF3r5yGRDYB8GzvxECcPGxyJcR8l+u5RyhZxSoOmgd0// Fjb9OnLhX7it08rX+82fXGqiuxNj7ydCVtH2jSJepjRn2b/wLQLQ/A0aDT1yF2xlMu7i tvsDP/59h9CbQESlrmGZi8mEN8Sd6Z/sU1yOpHi8RBkwcywR1celT+38xK+PKc6Xlt0u nSmg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=kDBBkTv5; 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-6e4448afbafsi43472566d6.306.2025.02.08.08.40.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 08 Feb 2025 08:40:34 -0800 (PST) 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=kDBBkTv5; 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 1tgnry-00015n-Tx; Sat, 08 Feb 2025 11:39:51 -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 ) id 1tgnrq-00013z-2e for qemu-devel@nongnu.org; Sat, 08 Feb 2025 11:39:42 -0500 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 1tgnrl-0008QO-Iw for qemu-devel@nongnu.org; Sat, 08 Feb 2025 11:39:39 -0500 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-38dcc6bfbccso801446f8f.0 for ; Sat, 08 Feb 2025 08:39:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739032775; x=1739637575; 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=PHdzv7+PANz1XyqKozB4I/EYUC6swY8LmKK++HWkyR0=; b=kDBBkTv5KppBmGHg2Z3/AtNBByktxo4YP96cIxp6k8dNUvy3z7g+dqTQfPmcIYSI1x HtNI10BDaUDKFK8e7sE33WEdg/j9xvblmAfExTJMk6wZQgEjLajFlJLSF8azJrZnHpGh swV5bXtNdy/UmyA9egR/kOOuA03egrZ7qtpubenX+HiIi5xm5IPYXkmERrPpAF6jqOnL 5zxvY9zIPYM4xfoXhRuiualMpt2ik/XjqSUj0Hw+Gm6LoTgvI7wufcTh+w4+knAxJLRK Aa85bi+swxFScco0aDKA7HR7paSxul97NLh5PZQuoXPG3JhRihk4a6dkgQac61x/6fGL MnZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739032775; x=1739637575; 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=PHdzv7+PANz1XyqKozB4I/EYUC6swY8LmKK++HWkyR0=; b=MB+P3inv12ipyoNIvkwHte8QOvmnyRS/jqYUUB9+C/+0B146zLCNCCgdnJCyz6sS93 2QtCWB+J0gXnAm4llEl6R9WogBc1Iksw67tyZhJgF+c/A+IaN8PlmmEiWQlzIgk75HjN 0lHrg+l8wBjQmu3I5mtOTFKHRnGR+phSXzy3YM1SpxHjzxd7yhsPMr/4CdwJBnPjWpgW PtMKPmX8D0iwXaM0cjDw9hHtzGhlzY8wRk0vU3PQ9LqLY/JG8R8g2m6pMC040zC+VvFS BMKU4QIUofALFDAgIVQyqhlQ++PYJeiQZkGgKCbBGahEmpk9S7fj9EkLBmdHU34ePJ3b SlOA== X-Gm-Message-State: AOJu0Ywb+N4vqbJLiRpGTQfz3R1j3sxv4MvdEF0IofGkUPps79jnqHKP +TT30gN2nm5D3+M4YxqHI/08cO6AwSivtRwCXTX9+LuXECt2wClgWvWV7hk8VNp5L4Qs3jlMJTe HvCI= X-Gm-Gg: ASbGncsOeU+K1mDMuXExvQaWMr64cufN3rB/g0JJO18mPPnayQzQWdSeWMwiAchhz9c S3ElGMGYq5CgAYNwJCX7vCpO+rU8j3cXoJd8NwtImal3p0RuENV3PoV9DzKbGGdWIqfg1wBUwDI 6a0zVSSy40T/JraRvDY5QRmSFddCe8a4dwwFJp/ybBO+SscMCp5UuEh1fBTigw8Ly4o4taHuyW3 COqkbC3x8RLIk484BdxRkpy9VLqLSHnW9XAIsSoghFyG/ic47lTpjypjwSpkBf+/YVFCnPc9wIm 2s3UIsNH2WguweBYgr+JgiMAPqyi+M8LlMU0Nv8VR9yOEbcP7FgfGC4qYVbbXsMD4g== X-Received: by 2002:a5d:5915:0:b0:38b:f4dc:4483 with SMTP id ffacd0b85a97d-38dc8fe80bcmr4396795f8f.29.1739032775508; Sat, 08 Feb 2025 08:39:35 -0800 (PST) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4390d964c7csm124581855e9.17.2025.02.08.08.39.34 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 08 Feb 2025 08:39:35 -0800 (PST) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Paolo Bonzini , qemu-arm@nongnu.org, Mark Cave-Ayland , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Peter Maydell , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [PATCH v6 4/7] hw/char/pl011: Trace FIFO enablement Date: Sat, 8 Feb 2025 17:39:08 +0100 Message-ID: <20250208163911.54522-5-philmd@linaro.org> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250208163911.54522-1-philmd@linaro.org> References: <20250208163911.54522-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 Signed-off-by: Philippe Mathieu-Daudé --- hw/char/pl011.c | 4 +++- hw/char/trace-events | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/hw/char/pl011.c b/hw/char/pl011.c index b9c9e5b5983..447f185e2d5 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -148,6 +148,7 @@ static bool pl011_loopback_enabled(PL011State *s) static bool pl011_is_fifo_enabled(PL011State *s) { + trace_pl011_fifo_is_enabled((s->lcr & LCR_FEN) != 0); return (s->lcr & LCR_FEN) != 0; } @@ -464,8 +465,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 3d07866be5c..dd635ac6012 100644 --- a/hw/char/trace-events +++ b/hw/char/trace-events @@ -63,6 +63,8 @@ pl011_read(uint32_t addr, uint32_t value, const char *regname) "addr 0x%03x valu pl011_read_fifo(int read_count) "FIFO read, read_count now %d" 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, int read_count, int r) "LCR 0x%08x read_count %d returning %d" +pl011_fifo_enable(bool enable) "enable:%u" +pl011_fifo_is_enabled(bool enabled) "enabled:%u" pl011_fifo_rx_put(uint32_t c, int read_count) "new char 0x%02x read_count now %d" 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 Sat Feb 8 16:39:09 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: 863293 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e42:0:b0:385:e875:8a9e with SMTP id r2csp874033wrt; Sat, 8 Feb 2025 08:41:03 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCXps3IHYOH+wcG3jTFFSqMoufjDEUQaAdFs3pjSCA2JFJg4gH6oUzuPGmFkE90BEIuXkb+a7g==@linaro.org X-Google-Smtp-Source: AGHT+IEcaLF0+9I+GWf2L8igzyciNGurwq/vQW7hxOZaxnCfB9+mvIbeXkM+IxPg035BplP+aMyX X-Received: by 2002:a05:620a:44c6:b0:7b8:61df:f5de with SMTP id af79cd13be357-7c047c2c7fbmr1182374485a.45.1739032863271; Sat, 08 Feb 2025 08:41:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1739032863; cv=none; d=google.com; s=arc-20240605; b=ScYMLVE1xBPEgoIW0wWKuDXpsczKALsTuBvNo2/MWdK+A3zQ0CSdlzD2xNqBxQBYti yQpR1aUxDREed8Km4Dhv1IZfNpEw7SKI/kBR4PgJy+Ipe9Gugp14G2YSB0PIlR4F0FfH GsIo5/jnHRyU3Imm4fM/te76lgKdab3zA4SiJ4duOzz0g0oP5dVOiGoiYG581RLICXHx e0CEXdclcLG6HNFrbFpwKjHu8Iruphp+i+VAkO+eGyzTenv/gu2mxRevogpu4Jj/Ee82 boO1vJTMvAUZzrese+EWmYDa1aTbbi3kqX5MIiJPvm+WINuznzEbpKcA9g8lQ4Xns/pV OE2g== 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=k3jwnJ8U5C1FFKFcPCQMKp4F/bw0CDqtfmKmUBOfDPU=; fh=Q2VQomM1h55ONgceJjJS3yyIB2vnUrN9w0x6I3KCnUI=; b=EOO/yPliu3fXXNUAIlVZYpMsowNQG7MA6uhr3Ke5gc/0pPMEbwCmL7Z7CHFzJvk43Z Z1xCB74MxzLx5Yv9cwHXIJ+m6+ktDbD7HdSSs2q1N9pDqfKDcy4x6zDyHjl3VJNUtUBz Nm8Ptm7bCgp2fLEjAgiNzOtwz5rXRlItcHzd37sLYnLgY7i6VdtfHKywsjLKaOvvqDK0 /vkRk35qOR8fd+LYDXbBlx8yLwwLVo08FlzbEbyTkcsVrXugQUOQLGLQYtrHQuFYKLch msmxD44OGhaYrsMXgIDYibZF0wxURnB8W+vfsoxrd/qEcv+cfo+LkT2VZrt++Au8Ckp6 ut1g==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=PLCXSLcY; 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-7c041eb4fd3si580997585a.417.2025.02.08.08.41.03 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 08 Feb 2025 08:41:03 -0800 (PST) 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=PLCXSLcY; 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 1tgns0-000170-AF; Sat, 08 Feb 2025 11:39:52 -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 ) id 1tgnrs-00014M-Lb for qemu-devel@nongnu.org; Sat, 08 Feb 2025 11:39:46 -0500 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tgnrq-0008Ss-Ii for qemu-devel@nongnu.org; Sat, 08 Feb 2025 11:39:44 -0500 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-438a39e659cso20144505e9.2 for ; Sat, 08 Feb 2025 08:39:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739032780; x=1739637580; 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=k3jwnJ8U5C1FFKFcPCQMKp4F/bw0CDqtfmKmUBOfDPU=; b=PLCXSLcY1sDgcW6mxmLM6RZ4tYvUVioAUI0gOQNPAv6HZbFUNIn1N3Lrls9V1i9JHK HitLDG20y1l/SXuVE3hYS02dvMhfqPK4994PPYvDTAlNGfC1pYqdH7jrRQtfQXpSRm1f k8c/hR9qMZNZBa8NIaKHF1SdgVsXdQXiHUm09GD/f8v+6imdNrDcz3AgeVjzu7hugrdQ yhABqGyZtR9Ye6hIw+i719aw1Nudya1B+vDC8Pdl/zAozhCiamMv/jfLOCs6BAC68pnU IyYGy3wgq1DkQxxMXUjul9hl14UrrWH4+0WVic/JIIBD0GDYBxAoPrPLv1EUQnpG1c+u KJGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739032780; x=1739637580; 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=k3jwnJ8U5C1FFKFcPCQMKp4F/bw0CDqtfmKmUBOfDPU=; b=pMdDI3QXLTx0J0RRJOIrJ0ozspNuJF6P+lMTuIjWhxM68lFEBpWg1WkDR1z0Y+S53f IsC+LlNeI1K8LIKlZTWpYLrusVV1Ms+LwdiSP3vhCvH3It7zFcctfAq+RyCFtt3xuIhg +qZr2sUKFzNdcvmFMwd23d/OIq1ga+sHbvV9o02Tc5tvG30Ve5UeoYk20knUk7bjz/2k VhvpL63AkpPwTRzxmOUS7UWhFXmGgG8YrZkMAJj3n/RJhF7QeR+WUIlxLdsZfvYUCH2m umiZFboOen1B85RGQwVxiqXeoLcFMu5xgz+7ZpC5q8EAkIkHmCavdBgn1SGlcKt+0AUG aW6w== X-Gm-Message-State: AOJu0YxDh7z+tftNm3e3bSTU+jSKVF9Yx0OIzo9kmiCelbGYZmd79K7h 0KS7YGA/oA6vwSBt4AW6Y2DoaBCTDmtk3N7p3La6fNaiufpgSCsaVpUXrOqHN8iqWi0I9oRN+ZG 5n6Y= X-Gm-Gg: ASbGncuG9VIFYCQMAFAQMlNzNEDOYg/fcICdYgZNyPz2y+vCNS0BzZB6mq3CTmJfFmj xM+oxdpnKsycxI1rTld7xmtKoB8mPs0E3HRYfh5C+WcbQFUVxwgyq5Pf8Ad70PeLCQ7B2jHa0c4 f/E6vprDSbjnqlBQcxYPa5eiYzX9y8wOpMV5ll/gdzhiSbDBKtPVrHgBJjFMc8SzHSRvaYjUyiU p6YTmr5gsuaBiPtwRqPzx1+fpxpTHmsRE8rBVklRMulnuV6jmz4uSdG7y4V6lzwKI+OZsZwcsP9 JLTQ1XQSf5Jt5ZPb5APdqEFPPgDc1rDRZ8a1gEHW4hno434U2QPIakNC1iOR0qZH9A== X-Received: by 2002:a05:600c:4e0f:b0:436:1b7a:c0b4 with SMTP id 5b1f17b1804b1-4392497d53amr49853725e9.1.1739032780459; Sat, 08 Feb 2025 08:39:40 -0800 (PST) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38dc9ef8ac6sm4922432f8f.27.2025.02.08.08.39.39 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 08 Feb 2025 08:39:39 -0800 (PST) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Paolo Bonzini , qemu-arm@nongnu.org, Mark Cave-Ayland , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Peter Maydell , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [PATCH v6 5/7] hw/char/pl011: Consider TX FIFO overrun error Date: Sat, 8 Feb 2025 17:39:09 +0100 Message-ID: <20250208163911.54522-6-philmd@linaro.org> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250208163911.54522-1-philmd@linaro.org> References: <20250208163911.54522-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::334; envelope-from=philmd@linaro.org; helo=mail-wm1-x334.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 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é --- hw/char/pl011.c | 20 ++++++++++++++++++++ hw/char/trace-events | 2 ++ 2 files changed, 22 insertions(+) diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 447f185e2d5..ef39ab666a2 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) @@ -158,6 +161,16 @@ 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) +{ + if (pl011_is_fifo_enabled(s)) { + trace_pl011_fifo_tx_is_full("FIFO", fifo8_is_full(&s->xmit_fifo)); + return fifo8_is_full(&s->xmit_fifo); + } + trace_pl011_fifo_tx_is_full("CHAR", !fifo8_is_empty(&s->xmit_fifo)); + return !fifo8_is_empty(&s->xmit_fifo); +} + static inline void pl011_reset_rx_fifo(PL011State *s) { s->read_count = 0; @@ -264,6 +277,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 dd635ac6012..8234f3afa13 100644 --- a/hw/char/trace-events +++ b/hw/char/trace-events @@ -67,9 +67,11 @@ pl011_fifo_enable(bool enable) "enable:%u" pl011_fifo_is_enabled(bool enabled) "enabled:%u" pl011_fifo_rx_put(uint32_t c, int read_count) "new char 0x%02x read_count now %d" 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 ")" # cmsdk-apb-uart.c From patchwork Sat Feb 8 16:39:10 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: 863291 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e42:0:b0:385:e875:8a9e with SMTP id r2csp873916wrt; Sat, 8 Feb 2025 08:40:41 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCXTM8yOXgtpV1Gf9SymscPtUNKeAblPGVhNGupwmhPDZFJz9Tl4TtOO7p3RvBUk6hFU4ZFRFA==@linaro.org X-Google-Smtp-Source: AGHT+IH50dY9W4nK9rHOvky3HPDuN4vrXfXJBGQR47bK4VCKVUGm5SpMvCZziXz5wj10CmyNy7oW X-Received: by 2002:ad4:4eea:0:b0:6e4:3e5e:56d5 with SMTP id 6a1803df08f44-6e4455c19femr99424126d6.5.1739032840885; Sat, 08 Feb 2025 08:40:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1739032840; cv=none; d=google.com; s=arc-20240605; b=W/Q29SJfq/FCUkqTARMNKSn1n1ltys5THYmECn8p7Ls41q6qdQF3vVKqed629sDbEO pnD7dRUcFXaFWbMvQLq2/pyZcQSqxmqVTRiPHFjamOLX0kVE6s4nWIKhPWsihJAb9p3D vGKNi5UOgGQsLXLBRjI/0v4VEJYcMmH8sEcAgYReKGPw5MqW/W/YpQgyODNr/pyqrTzg z0ViCJ+OdgCQm1kznp35w8maA3l3RtZfRzsBHUU8TDxJBxeadefTrKx4vk4wwDVNgSYp loNv6TTXjTtrATTXrXYNhq3Ydg3Q4rEZGMAcIWayvBcHdZR7wlVRMuvJwTSUxqTv45yH Gf/w== 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=81ffc0XjjE2CDrZU8HhaqibfPhqNj9LivXTF2X9Kxp8=; fh=Q2VQomM1h55ONgceJjJS3yyIB2vnUrN9w0x6I3KCnUI=; b=BuF2Qo14bGmGk16hrzZIfN5Euaa4cy6rJ2YJziRyafyYJ/BdQio2EeT90IbjCGSVKo lXdWUaDXGkDkmv6844so0p8MgylHmUyIndg5DvenW9syNMcu3pBAJ5N/6r50X17Q0ceN WttO/iyUpVKnnEegOPAyRc23btlLWLZcX8BKaiMtEcU2WcxEI3aNKCH74fO/KnQqSZE4 QEvsve+Et/BkPAVu0hcTx1PcaeNcQgGJ0n0BUOpH5uOdptY1Yp3JJ+nVlvFNSh75icMz yGUWS4KznRq0uo1ZHBW4AehF1BErJlNhJCf4TLyQ/km3oQdP84TDIvDdEKmC20pXV5aq Zi3Q==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=CckJVCJc; 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-47153b90aa6si60168441cf.387.2025.02.08.08.40.40 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 08 Feb 2025 08:40:40 -0800 (PST) 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=CckJVCJc; 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 1tgns1-00017Z-Dq; Sat, 08 Feb 2025 11:39:53 -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 ) id 1tgnrx-00015C-29 for qemu-devel@nongnu.org; Sat, 08 Feb 2025 11:39:49 -0500 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tgnrv-00006x-5Y for qemu-devel@nongnu.org; Sat, 08 Feb 2025 11:39:48 -0500 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-436341f575fso36228005e9.1 for ; Sat, 08 Feb 2025 08:39:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739032785; x=1739637585; 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=81ffc0XjjE2CDrZU8HhaqibfPhqNj9LivXTF2X9Kxp8=; b=CckJVCJcrrsuDLl0kgh0hrnNu8/OvjV6v7THB1+IA4GPLmHXI4vH6kPqGcsfB1KGls IYSeOg1TGQwtKhITv1VHulLncCCc6Hms1asvZsF4xiWCDkcmLHLFTCfeDUtSY0GY58wy i4xxRLZbEq1CgHnU9PC+hRz8hHcwv6dX9Vk6CBFpLiRX9NqK/I+4kxMTtAsZo0GSamvj j5a54jNWHOwr5a7SKm7N5rw3LeTQpSXC0gUHLZNvu/cqZP76bDuvAI6UXQfyCQiqWOAG ZzdIP3Tmf7owZWFZnpoDxO03OCoBS43q7NGGM32gUIYatobMH5AnS53YPDOUIbuiL2/i u9ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739032785; x=1739637585; 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=81ffc0XjjE2CDrZU8HhaqibfPhqNj9LivXTF2X9Kxp8=; b=UXNvSUGJIQ28fVk0c8ibnxiJ2HG9wcWPfgRLtjmpqxcSdEjkG1i44N+T6BWIgI5e9d 9frdZe8oI/1tCOvM1vL4dwgB8tLlYwT0AdkIK3n6WkI94LYrxd7G7O7j6hyxqJmgYdQq kx7ldVybsSUBWO9/v19Wehvk79IxxDLLwLCMCT1Pb9fxvU0lD6BRRjMXxsmCRWiKScHr cNm51v355rfgyYBh9ZBLaN2Rc8vBTbigQXu3248vQ6JAQ/DTybCR+npjscminrnnOhtW 1+FhZTlDPdFDSL/kGU7cJZK90l6hX4fYyMmc0k1eyVoDcXNt7+HmD22y4FG4QNYtCeCI fPHA== X-Gm-Message-State: AOJu0YxG02pSaN97PfPg1gjUCmXp58RmootRfsPGkVBbPklj92yveBrd k7oiNIyDOo9P4kuaWUHzuOOBLMFTZPIgF86a68ZDB8xmRR1GdW+/V4uCzs7XLbJvNWyJPUPTV67 RF0I= X-Gm-Gg: ASbGnctp3gh6nAaU57YvnxdHVI4VYg/MbNoDmi0l+ja4zb/URX6NcRQa9rtmXRog9yg qn1Mu+xAm0wKqTi+TgS0Relq9h806AzKQ8N4ORT4797/HZDGufsEENPeIvq/xPXUCvCssalfJ+O tpy4HOOAkQwUcTyPn3v3TircL5fokJIArcOngiW9SxGiehyhE0u8VfP+Pqjvcpy+FG5N1WQ8FTl W2BiI43SqzLOw1Kndw/2GaLQtVSe/xHYFOT2DlDA3Ds87kQuJJ4XGMDxUCdaO6kbR0xDhSHbyE9 Vh6nZvttj3XqFKmMKSf8IIqWMz/gjrzEoKCxvoGi3MVW6hdeTHOsyG2Bn2pPILx3wQ== X-Received: by 2002:a05:600c:3d06:b0:436:2238:97f6 with SMTP id 5b1f17b1804b1-4392f1b8e78mr17671635e9.1.1739032785361; Sat, 08 Feb 2025 08:39:45 -0800 (PST) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38dbde31d9bsm7546987f8f.94.2025.02.08.08.39.44 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 08 Feb 2025 08:39:44 -0800 (PST) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Paolo Bonzini , qemu-arm@nongnu.org, Mark Cave-Ayland , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Peter Maydell , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= Subject: [PATCH v6 6/7] hw/char/pl011: Drain TX FIFO when no backend connected Date: Sat, 8 Feb 2025 17:39:10 +0100 Message-ID: <20250208163911.54522-7-philmd@linaro.org> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250208163911.54522-1-philmd@linaro.org> References: <20250208163911.54522-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::330; envelope-from=philmd@linaro.org; helo=mail-wm1-x330.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é --- 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 ef39ab666a2..3c4264869df 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -240,6 +240,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(void *do_not_use, GIOCondition cond, void *opaque) { PL011State *s = opaque; @@ -250,6 +257,12 @@ static gboolean pl011_xmit(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; + } + data = fifo8_pop(&s->xmit_fifo); bytes_consumed = 1; diff --git a/hw/char/trace-events b/hw/char/trace-events index 8234f3afa13..7d1cba1b4f8 100644 --- a/hw/char/trace-events +++ b/hw/char/trace-events @@ -72,6 +72,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 ")" # cmsdk-apb-uart.c From patchwork Sat Feb 8 16:39:11 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: 863294 Delivered-To: patch@linaro.org Received: by 2002:a5d:4e42:0:b0:385:e875:8a9e with SMTP id r2csp874030wrt; Sat, 8 Feb 2025 08:41:02 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCXlGmd/uYdEPyYaJ6IeKDROePxntJaM+/dTNoTV7an8/4nqUuvMo7BztOPeCdOk2+5aWWzrGQ==@linaro.org X-Google-Smtp-Source: AGHT+IHIvPSOJRev4SpdaNypb5sSCL1NtVGAbEuq+tXiTn/bqOtce09Dxfq0+15uLwZ6VRK/SlHu X-Received: by 2002:a05:622a:182a:b0:46e:4de6:8a06 with SMTP id d75a77b69052e-47167b1c3f6mr94328401cf.52.1739032862549; Sat, 08 Feb 2025 08:41:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1739032862; cv=none; d=google.com; s=arc-20240605; b=Nzjmy+xVv85L/DTN8kakmLavQonH5wYtf14Km1fmoru9FGj+YswUl/vz8W53+xX33y vnUsPFqYV3mJDwff3ezX8kNv7USbyac0gvLK44ATFJz7Y5Ux3qVkCHwnuJBxzwFTlMsv TzoWI/ixb8KrmqN8GpB9aROFtb/hMZ9BnqW6/c14b/wQ0i6neatVRXXo64pdvsJ90aoW A0MytZ5HT0aQgZDXMOSGmN5ZZavvNMLoPpQef9FWC7cliKGK1cptaE/D6qmgh79opHLr RwuC0ofb43ADAyI0aO3ossjcUPBCghLPlkEOHuzO1lGYtvtuAvUr8L4MvJk6WLVq5Agl cVKQ== 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=jH9Ymqij6X/GfoOzNSD/xDBEcCWv01J+bpak1JyU5gs=; fh=WGFE+0W6f+dD3jknfQlrhoGgO7GDhxdk3Z2S7mb98/0=; b=O7Tk3WWKEixZp1HEWP8vSXC+7ZX9n5aZqK4qm2UF4eLv6+oG8HqZcgYxmWJYG2BmMU ta8VEME/PqWcZDAFwxu30ugSbRcohakUh5Udx+6Igji/hwJpsJYZ0xFcfbAOqGBogHY1 m7wmYwocprJvq7QOwZBmCPZ5065XD0ywu2IIRP3X4ebifpZnsyo+4lASIqL0AFr2gbo4 2rbPPqUkeTSsnvvs3+JmTDNutc/WBBjFqn4QZB936CdRvs1TeUb5gItGM7HYo0S5QCuy 1CX5IJjC1ddnmO6mffvujIuuSWCV+Cs+8iJ8E+BFkn6KkDpsQcjtD76f0Z48FKh8R4D/ cUJQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=B2uuuX1O; 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-47153b90ac0si60674551cf.357.2025.02.08.08.41.02 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sat, 08 Feb 2025 08:41:02 -0800 (PST) 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=B2uuuX1O; 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 1tgns5-0001DD-Uq; Sat, 08 Feb 2025 11:39:57 -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 ) id 1tgns3-00019i-5f for qemu-devel@nongnu.org; Sat, 08 Feb 2025 11:39:55 -0500 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tgns1-0000JF-77 for qemu-devel@nongnu.org; Sat, 08 Feb 2025 11:39:54 -0500 Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-4361b0ec57aso29811455e9.0 for ; Sat, 08 Feb 2025 08:39:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739032791; x=1739637591; 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=jH9Ymqij6X/GfoOzNSD/xDBEcCWv01J+bpak1JyU5gs=; b=B2uuuX1OyrMlAAe9XDZmfCWKlL1mSejNcoLOwlR0cXLSdWackCCdVMmsum0sR0kzhF 1iV4V8XIlIfF26D14fMXo8YZLPHIbqlsM7McLGS6k2ycmIPJP7P3vP86kTXftHpoXvGd WiDUFF26HkK0q1Wmv/rxiOWCA9/Nres+RRoBRUkZwYjhxG/eijcQP+KvdnTguwYFpoQT qC1z9eWCdiZLaW/yxQFStzR4fnmRg5TI3TUMljxs4CepMAM8uPy8LeQJy9JlFUM4PB8r bVpJssTz2dLRencvf/OWmYrkyKwAW1fphvxYuwNtOSTcxaK9f8YdVBzBgMJODv2gisD5 HP3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739032791; x=1739637591; 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=jH9Ymqij6X/GfoOzNSD/xDBEcCWv01J+bpak1JyU5gs=; b=jmL0t83q8cCam6PbEJ6hD4rtJ1zgCY3TCtGbxStSA6DRor4Pl4cnMYa4IxWlrQKA3E gCdFZOym0x+5/VrucpDmdjMJmFbGpYtgnZFrOyaRexeVrojV5BY00mtnjC/PjjZVmhBU SqLs+aX52MNEs70gdLHno8MeYxS/3tL8MqFO/eCp4S2X0OKNpuCb91YJh+kqyD2nEF7h izNVz6Gt0f0x19sYbnOBSuiMPLkI6mvkMUAVlQgS2fFY9QCSA/ECILzCpzz6MTEZ5u7W wx/vFEGQcn9II/FwbUUyJQ6wSKEAkIGpPKrYJA/HyIWKNB0ShVDRGnyqHoRB06hZuL4l 4wdw== X-Gm-Message-State: AOJu0YxLR2Hvz6nf7USxnDIYihp528C2XWJ6NiVsU5eS0E8FD/Lic1ID ylE069p93noqKUaa/JB59EqSyCcQW+x8bK5FU5WJGQkoGJ+dbHJ0ebVBnStFStIuNKF+PFovGoQ g1cE= X-Gm-Gg: ASbGncuTH/u9cMWXcMApX3ARJ3GVpgNjvrlF2I3lMio3kBebbEdaqnRvP6nTuAtFab1 LkzlBpyGWYQbIs5RwTQgI23qBubi15GfMoJiCKh3H5ARcvTxLaHqqGrkI9+z+LjWKE5QCdkQfSh nDikQiR2tukMZ2a3HfZgG2KhU8oO69/gQIcSDUqFX1kwHEP3d1oWQQgTfg34FyQOAHz8iW6H9Ux 0UR71BUgKoEJmnGiq5O0k1+oewnmIRzs86wb7ERFcv/yHGVNPbhoccBkZ/loQrkCMdrxEaA5NKb z/IdgmjMRZbvxo25qnwKxNcrWWMuQgltDm0Z8TiNcBYXdMZsj5tN/bCAlaawwiTxLA== X-Received: by 2002:a05:600c:5114:b0:434:ff25:199f with SMTP id 5b1f17b1804b1-439249bd37amr48708985e9.26.1739032791285; Sat, 08 Feb 2025 08:39:51 -0800 (PST) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4390d964c7csm124586685e9.17.2025.02.08.08.39.49 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 08 Feb 2025 08:39:50 -0800 (PST) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Paolo Bonzini , qemu-arm@nongnu.org, Mark Cave-Ayland , =?utf-8?q?Alex_Benn=C3=A9?= =?utf-8?q?e?= , Peter Maydell , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Mikko Rapeli Subject: [PATCH v6 7/7] hw/char/pl011: Implement TX FIFO Date: Sat, 8 Feb 2025 17:39:11 +0100 Message-ID: <20250208163911.54522-8-philmd@linaro.org> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250208163911.54522-1-philmd@linaro.org> References: <20250208163911.54522-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::32e; envelope-from=philmd@linaro.org; helo=mail-wm1-x32e.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 Signed-off-by: Philippe Mathieu-Daudé --- hw/char/pl011.c | 39 +++++++++++++++++++++++++++++++-------- hw/char/trace-events | 1 + 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 3c4264869df..70eba224a9c 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -251,11 +251,15 @@ static gboolean pl011_xmit(void *do_not_use, GIOCondition cond, void *opaque) { PL011State *s = opaque; int bytes_consumed; - uint8_t data; + uint8_t buf[PL011_FIFO_DEPTH]; uint32_t count; 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. */ @@ -263,19 +267,29 @@ static gboolean pl011_xmit(void *do_not_use, GIOCondition cond, void *opaque) return G_SOURCE_REMOVE; } - data = 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, &data, 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; + } + + /* Pop the data we could transmit. */ + fifo8_drop(&s->xmit_fifo, bytes_consumed); s->int_level |= INT_TX; pl011_update(s); + if (!fifo8_is_empty(&s->xmit_fifo)) { + /* Reschedule another transmission if we couldn't transmit all. */ + return G_SOURCE_CONTINUE; + } + return G_SOURCE_REMOVE; } @@ -300,6 +314,10 @@ 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); + if (pl011_is_tx_fifo_full(s)) { + s->flags |= PL011_FLAG_TXFF; + } + pl011_xmit(NULL, G_IO_OUT, s); } @@ -651,6 +669,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, s); + } + s->ibrd &= IBRD_MASK; s->fbrd &= FBRD_MASK; diff --git a/hw/char/trace-events b/hw/char/trace-events index 7d1cba1b4f8..2d02c057483 100644 --- a/hw/char/trace-events +++ b/hw/char/trace-events @@ -69,6 +69,7 @@ pl011_fifo_rx_put(uint32_t c, int read_count) "new char 0x%02x read_count now %d 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"