From patchwork Tue May 17 17:55:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1632487 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=seco.com header.i=@seco.com header.a=rsa-sha256 header.s=selector1 header.b=a0Ys/Co2; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4L2kLL38Nlz9s0w for ; Wed, 18 May 2022 03:55:36 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 6896F838F0; Tue, 17 May 2022 19:55:28 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=seco.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=seco.com header.i=@seco.com header.b="a0Ys/Co2"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id A4192838F0; Tue, 17 May 2022 19:55:26 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0627.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe02::627]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 80DE6839AA for ; Tue, 17 May 2022 19:55:23 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=seco.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=sean.anderson@seco.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CakX0TEbxVWNeqcEv3ALytCOf82UQaD+/3tYAp8SCd5poMvt2tmz86T8pQQ9CSCoXuvwrO6gEb1QdCmxURRjn5svb249MU19m0638tVaBP9xYIpFDmCN0zACJ2ix6uWAta9s2T4jVC/udbDO6xyXGn5uwtSVxkKthLao8+3ssNivnsvBKE5hlFAsoZJ+9CRbfDkpMfqoC5xtwzjZIHlKV/OpSPNwsLIUmgd7cuN/WmyaJu1si4CPvdAgngrKcjemUPjbe9wSXy2dn4wzfgqXQfFIfvtU7TmKkrGRbJqyfOLkd4JxYGRzbXFLRVNoia7PN4TJ+10fo7E3lbdVxf1HXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+ndHGrBjwbKqAAK9d8qq5nJwPF4b6ibvqRyTWhhsBAo=; b=DjgCBIvfy8ZhlsVU/RmLveO7YMKzDJx9OWqlDo7o8o8xkPg6xtJIcbTe+O/SG6rjwtNKSoSi2cCaj18gYjjX7CwNJoWBw/1wXj5/n37fvm7oBXrW6Wam/y9qtVXIsNUAnV5xg2Konj/03qLUpp+NN/TNppqVeSW4DNtwXtlBLjAJ59Os2Mx008K+/kUA6ltD0j3o+2r9C8EngBF1euz9QPxNd4xyYpDrYNq3u3lpOvJvyCpUlZyMYUV0ZZCBsRE1ZPhHp7na+YLFuppqtX3TdV39GJdoo/Qs5UgTNwaTbCOzzxK0Yuujga5ktyctjsqF6rGAcU/x8AR4N1qCWj1qpg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seco.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+ndHGrBjwbKqAAK9d8qq5nJwPF4b6ibvqRyTWhhsBAo=; b=a0Ys/Co2gBdWlBaOpYznbg+aszHNnbIQuFNIPxBjv4mk/zoMAIgrLsvoyMBcyc+Tn13HQyfXlvJNfGF3Gm7ztzdshTVh+BvdaLMx2G7U7OlRqEvF+lV7PNmjVtAGWDYsweFkVk+904lVmXHnUkWTYjILNL/fSFmg8s9If7DtSP20Uubgj7ujiZzLXzKmp8I5+swef2GtWLk8Td8aPgmIWhA8cppEldPyhBtviuXOamtxsfiTLlYFHZUzvA6JLtmRp4gDUh3/8so8HsNb0J4Nwb5Nz2TtzYY+m03rcj6RFLjBjS3r3cW3EZFCjRsF/70ZnQUwlDlLoDVprkYw2f2qwA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=seco.com; Received: from DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) by AM4PR0301MB2308.eurprd03.prod.outlook.com (2603:10a6:200:4d::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5273.13; Tue, 17 May 2022 17:55:21 +0000 Received: from DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::cc0b:c665:8330:89bc]) by DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::cc0b:c665:8330:89bc%3]) with mapi id 15.20.5250.018; Tue, 17 May 2022 17:55:21 +0000 From: Sean Anderson To: u-boot@lists.denx.de, Tom Rini Cc: Simon Glass , Heinrich Schuchardt , Sean Anderson Subject: [PATCH] serial: smh: Fake tstc Date: Tue, 17 May 2022 13:55:07 -0400 Message-Id: <20220517175507.1581310-1-sean.anderson@seco.com> X-Mailer: git-send-email 2.35.1.1320.gc452695387.dirty X-ClientProxiedBy: MN2PR10CA0005.namprd10.prod.outlook.com (2603:10b6:208:120::18) To DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 61ff8517-9188-4a74-d6b1-08da382e695c X-MS-TrafficTypeDiagnostic: AM4PR0301MB2308:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0jHvlFKTBZ6ajsoR0aNt+H3akUgQKlwhRxmld1zDKZyDKXGepUl0LAY/1TgiaoFpBsTFcRQXuOQ3SYi2V3zv0Hsen4dCTHmgzq38M08rmq91dTARowVqEC4kotiaDQyfP3kC3090QbC+fHx2cgYhHFhVPR7FNqbCSEaAinJyqy8siIL4J/uApyZegc8HJKfJ5bIrFQQE7Vym2W5s4DCY2XMol3qyV/k3D266JRSxNkFtV0GJ5MVrVImqHOEYJ+EXavWAHjDTiOjlCV98RcLJ5ubBwgTyf7bw52Lj4VFpN0ACT2ZzQgPeiPU9QwzRAVUCwU34xrymI3ngHhJg65/yDnTN05uQ6ehRThdDDM4PVqegg6GPyWdm81cTMfMcmgM3uXaQid0r6c7s7NdYwwBwRA8wPndn9SOvaVoHgmQQb8HcjZ/Lxmu3/35So1uQ+SvDqo0GZ7v6JAMmcm3hPr8VLEtMH5Sj6KphEOFSwB80amTM8uQMVD1H6OfWCbG8L6iFEkl36M/is0jfnA0WQjnTB17U9/wIeKkjPNgt3MXOP/mzAvVpbdK+nSXEcXQIClYtaZE8KA82BRvtjuWQSifKCAklToP+XR097H963e4OMtn+JNqGaiomO+XvtrC661kuwKJXhS6gOERjtGzmwgrsdSMnYqWh9/8fL8+JqSRt7vfk+xBLu+6gNmW3Avz/qnjrNOtzPXnSixAHXys9nCPY2g== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB7PR03MB4972.eurprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(38100700002)(38350700002)(66476007)(66556008)(107886003)(5660300002)(316002)(186003)(8676002)(2906002)(54906003)(1076003)(86362001)(26005)(52116002)(6506007)(4326008)(66946007)(6666004)(2616005)(8936002)(508600001)(6512007)(83380400001)(44832011)(6486002)(6916009)(36756003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2AAHxhAhvIL98PmKo3WIdB3Hmks3vFKD12fSwfkE8O0xnTL3aRdFrRmRgTVKy9Yk3a+FM8MH2nwUd2O/MzYqp8hd41UaRRaG/86glip9vsZoas2PZGRxp0xrrptV6LrrEZ270JpBUpXPCD5L8cesgtYovdMvxCwoJt8tDvk1b9QiUVPxrx2IoI2QQAvz90E3IJOE/iSWSb3r2FrsoJ3YvFrWJFe/xJOJ2ztXX5v5W4n6CnNe4X/LmXO9G1hzw++NuHKui6YJPIDiy8qWPB3BymfgHdnJLsXoVDCYS+p6BRjooRX9qLXeDF1itUsiKkiq77dgVCS6IUX7IsnQa83Nz0N8ULjSx+A2dftMvvXZ2EclbxtHLov92zime8NRrkgmrU5VJpBg+V4bQyjM7EB93n/bNh/V9XML6NZRnTKgyu2Sn+pPLPrNDKHKRVPjUismujOqg/HiWD/bVk3aB8u7ALx6OqwnXjbVOcDTWLm+WhoeVhzAbAxrndTquKv7H+kIH5n+L0ZKlZoQ4CMXk38b2wvF28n+34FmKSKfbNE9sj4GmRGybgyC3LCxxYcHxYop6OLi+HTt97Or56hlHasAIOdLW2416MtHhEyq5amKVQBcBiMchAbi65xEePTypeSZ7l0VwF8amgJ+W7PuDsTOMdKAyWEhT4i1I/in7JBHTni8iA9GOS5Qd1oWknIH8DYKqVVoQUQj5uwVee/bJUzDGyq4l9RRmbF0qRgNjC7bPPrnuJZ8aXJ/c/UyoYLb9roalRFBXFQiwyEbE1uk4ieiA1AlIBIcnVCIF3+h9OxmNiZpQTP7JutT4R559S48lUIVr5f9TqAIBpytWintxXgI55OluzJt9p5ak/nkkw6rBVUZdtu0+y4Uz9a6guuKELB8QAkqWzBwJA4DiDbYrXVZN5rDkUslPR5FoCq2zKPKk/xBuoocASQQEmk7BTIKWOy8ne0Lkr8Ec8K9Lz9mz6jD8n511XSpejv7dPjzNtpqWL+gzTuNJcDcVKlYn38zddLT78B79NYgMEYAlYHF4T5WOu9AsnlXgWoa07jEmmdXsnEGQwdr0P80PSJ0wzFH0LlWzYj5G9PwdfWaE8rsLPJkXcS7JkkAa5o7kAqjqg3zpJCMYBryaNgt4dxFBbTuMWjpHlz80lL2QppOa+L6S33xl260X44Qp7+eCVMFUfiS1zoSHVBJuZjbGON59dT5RHZXMnvKqjue35znVnCVj344RdgI+qAvfWOd9uxCXaTUKFPGwPvWdTeM7onNEGs0Q0IazSqMd3Go0kz4RXMUh6IunILmwZcz0k9SDAXKFtti8XvTIO/0pepTx3f3w5Z6dH4b3EBGf3NvXLGgPxIYXilkyor/J5Q5YjCL6rp4dYC4O2onIOz4XTNKg45p/KKA9ecJL3+05DBQN6OpjjK6jh863TSsDcjHZ9s7W+KNdaxVKsGRCREZKT0/rkSPMsIBbPeti03RlY3E7AIgbnwG4C1RoaAHZYr5cQTtPTI45DXK9AwKrBvTaiBsNl/kD3fGbjCooK5hgcRVvoPjryqpnfz6GDoARYi8/6cTdubEOeYcHEcPB1sNXkazxTXcWT6IFHsltrjWLjTP1YiEUJyzMRzK3OM2by7gWRMUUc1NDeC0qwK0x/MXLKqXWGFe9jRk/dwq+tWIy8WyqbiGkJPLHwj19KJPJO8uK0ob+I5qq68nMI7T6mqXD338xZPU9WofFg5nG+ExVMiezdkSO0QVDoSCLWMk17PndL2g848sVMe8nSQ= X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: 61ff8517-9188-4a74-d6b1-08da382e695c X-MS-Exchange-CrossTenant-AuthSource: DB7PR03MB4972.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 May 2022 17:55:21.5876 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VvMtyWH5ynszjdsWQ1DTQ6FEQXVZqA7cuClYrBTlOPrz1FFVsch+emh78hF+5QPNeSBmfmWQqJZONB2+kTYqLw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0301MB2308 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.5 at phobos.denx.de X-Virus-Status: Clean ARM semihosting provides no provisions for determining if there is pending input. The only way to determine if there is console input is to do a read (and block until the user types something). For this reason, we always return true for tstc (since you will always get input if you try). However, this behavior can cause problems for code which expects tstc to eventually be empty. In query_console_serial, there is the following construct: /* empty input buffer */ while (tstc()) getchar(); with the current implementation, this effectively turns into an infinite loop. To avoid this, fake tstc by returning false half of the time. This is generally OK because the other common construct looks like do { if (tstc()) process(getchar()); } while (!timeout()); so it's fine if we only read a new character every other loop. This will break things like CYGACC_COMM_IF_GETC_TIMEOUT, but that could be reworked to test on the timeout instead of calling tstc again (and ymodem over semihosted serial is not that useful in the first place). Signed-off-by: Sean Anderson --- drivers/serial/serial_semihosting.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/serial/serial_semihosting.c b/drivers/serial/serial_semihosting.c index 2561414e40..cfa1ec3148 100644 --- a/drivers/serial/serial_semihosting.c +++ b/drivers/serial/serial_semihosting.c @@ -13,10 +13,12 @@ * struct smh_serial_priv - Semihosting serial private data * @infd: stdin file descriptor (or error) * @outfd: stdout file descriptor (or error) + * @counter: Counter used to fake pending every other call */ struct smh_serial_priv { int infd; int outfd; + unsigned counter; }; #if CONFIG_IS_ENABLED(DM_SERIAL) @@ -68,10 +70,20 @@ static ssize_t smh_serial_puts(struct udevice *dev, const char *s, size_t len) return ret; } +static int smh_serial_pending(struct udevice *dev, bool input) +{ + struct smh_serial_priv *priv = dev_get_priv(dev); + + if (input) + return priv->counter++ & 1; + return false; +} + static const struct dm_serial_ops smh_serial_ops = { .putc = smh_serial_putc, .puts = smh_serial_puts, .getc = smh_serial_getc, + .pending = smh_serial_pending, }; static int smh_serial_bind(struct udevice *dev) @@ -106,6 +118,7 @@ U_BOOT_DRVINFO(smh_serial) = { #else /* DM_SERIAL */ static int infd = -ENODEV; static int outfd = -ENODEV; +static unsigned counter = 1; static int smh_serial_start(void) { @@ -138,7 +151,7 @@ static int smh_serial_getc(void) static int smh_serial_tstc(void) { - return 1; + return counter++ & 1; } static void smh_serial_puts(const char *s)