From patchwork Mon Apr 4 18:18:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1613132 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=Ln7r/xAs; 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 (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KXJw43Mmkz9s5V for ; Tue, 5 Apr 2022 04:19:48 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 8715B83A65; Mon, 4 Apr 2022 20:19:13 +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="Ln7r/xAs"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 5D07A804F9; Mon, 4 Apr 2022 20:18:43 +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=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO,SPF_HELO_PASS, T_SCC_BODY_TEXT_LINE,T_SPF_TEMPERROR autolearn=ham autolearn_force=no version=3.4.2 Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-am5eur03on0605.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe08::605]) (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 1EBCA83928 for ; Mon, 4 Apr 2022 20:18:31 +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=VlFRl7QISKiALptjB34Fo/pKqpWYNyVJl0r9Dg4xTNR6Ol0aFfR89GPILylow6ezCFHxheWbPsdqSQOBFx+/1OTRu9/Pn3pp9IpL/mU/Wg6xXoiahiLgBxnU3di0MhFxXYjUISDvI35Jw9FTutEDPRmvTKBLDMagH0pWk1jYdKwBNo/ta3nb51QeO6XxgB0WuR1pSn9byBY33Kk/iYTHpOFLdunzS4YWc6CXYHqoKF4ir4hkq0HdEiUD+6zcy106c9FCrieFVeGztbz0r+JyfpneBpYuRsdTOmG+/POqdtr07UZLRqjCmlNBrZ5vbNr0RaCtLXmHZJOMesy4/zkh4g== 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=DJ6XLHAHuTxjjSDpyni1GRZuH2xCNrYllOOX8icGch8=; b=dExXxkPJI2723wNP9e4ywLhiaUSJQ90bH2FCx+gG2PDvxWWMwg3wOIsfC+qsSKaNzGdoEmyGgUQ3H0yNXeWozL2SF02Y5aNouf5rGtqiIUVN+zjwzofbd4o+Qr5HiJitmrPoWsMxv4ZJvpg+BPQM2RhLQJLC7xpSTXv6WMmlpY/tiak4RMrqieJWXC79oftC8vW9+tPbn+0r6dEx6Dg9mS/6h3kgUccOMx/+jfmM+ezTZErQ9YYA1i2RbakJh4Avbza1W06w+STaGuBvn9lciqCxSzceRQ74QkYNg2i0DcFA7/Iqhst3TujsmrU1P+eA9V0bMHsFiOGsLukUiKyUIg== 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=DJ6XLHAHuTxjjSDpyni1GRZuH2xCNrYllOOX8icGch8=; b=Ln7r/xAspEpkcNhzxbJxDkFSvVNtY9OWQj1NPpURD9OHoqO416cUhKnRoTAnPsuuOycAAC2hr/HwepRNhy2M2Kgr4XeXZsJddwCKKjmrdCI36KMuswGC/NOp+Lka23a/Q0WqPCjLA/xtPjRKfjiofZTOO61PwaNd57DcepCpdLwgd3Ms5w6bEwuJOOYLBbdjBbGVF9jTGilALWnuA3mxzTYFPGvLi7eZWNS/IB9vRUT0aKgroh8C/4vPKUnxCy0muS/d5fdu11yPpz62/lZdB+z9C0CA2hhLMU/z75iyBeHVYKIABEfy4cgeLplEu0xKSYMh6UJCOR9g2Cx+wGNVJw== 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 AS4PR03MB8649.eurprd03.prod.outlook.com (2603:10a6:20b:588::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.30; Mon, 4 Apr 2022 18:18:27 +0000 Received: from DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::356c:789f:d20f:92bc]) by DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::356c:789f:d20f:92bc%7]) with mapi id 15.20.5123.030; Mon, 4 Apr 2022 18:18:27 +0000 From: Sean Anderson To: Tom Rini Cc: Simon Glass , Liviu Dudau , u-boot@lists.denx.de, Linus Walleij , Andre Przywara , Sean Anderson Subject: [PATCH 4/4] serial: smh: Implement puts for DM Date: Mon, 4 Apr 2022 14:18:00 -0400 Message-Id: <20220404181800.2258698-5-sean.anderson@seco.com> X-Mailer: git-send-email 2.35.1.1320.gc452695387.dirty In-Reply-To: <20220404181800.2258698-1-sean.anderson@seco.com> References: <20220404181800.2258698-1-sean.anderson@seco.com> X-ClientProxiedBy: MN2PR16CA0002.namprd16.prod.outlook.com (2603:10b6:208:134::15) 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: 84d0501f-3913-42ed-d57a-08da166783b0 X-MS-TrafficTypeDiagnostic: AS4PR03MB8649: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: lo9qY+YS3VHChaBcUwwJvRj5E/oVqrwQDjjR7O6uVuWKPinUUHD1IC2nYpfY2J2EizgFnT0m+wRfaW7tcbjDzuBQvoYrqpBdYALwhRE11uKo7OOijmLiu3Ofbc+h/wZ9jZCuSvSv+efEN86qOu7TDMasuBnsglbFKKL6vo6T34YT/Vmm9DB0HF7Aw7S6o3Ia9O5nmTj59bAdG5O5OkVNJWK3tYK/gUwwVjeeOZEJifRi5pWFie2WmCqIjm4fBB2Ev1gaoyE93w9syEW8YZFYFZ/xhPdLebKZMo/heUd4hXFI5sNZBbd0zaLm8Ge81ze4FTiCteNx9qFnMbx6jDwQ6q8iNHz5u5qnu39bp3eYAPf0sqbjgVReX8P5QvfxU/CgcAx/wAjPXKea3lvA7n5MXM5nJKHERW12p16HgcSQKSK6tVBjjE82W++jxRm97zOey/ZvYRd2pgSASlitsg5HqMJsz98vQNEGZtQocRisrVnRvBjfER9YZwnv/LQEYBx5ZBzKmdVSmqcOuq2Gvp2cKIgV8nD55UsO8Vvzc9nsy3NfYzD5Sz6yf4YliMN7JPzcWcwXhtJW3+ZVuukoso9hhPDIYrxS+Xs2xmZtgK87SAzyidNaH+sOW2UNtUWRrr66KSP+Kz5dCgyvsTIZhdPlm0gPNgvyAdk98dC6tQ34nUptq/OkELVqAqh1pwdTARRQhlD9k7BLTuwljm9fVkZb1A== 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)(5660300002)(52116002)(38350700002)(38100700002)(2906002)(6512007)(8936002)(508600001)(186003)(6486002)(6506007)(83380400001)(44832011)(36756003)(26005)(6916009)(66946007)(66476007)(66556008)(316002)(2616005)(1076003)(54906003)(6666004)(8676002)(4326008)(86362001)(107886003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: bWMDW+TbMj/vVzWeB9LcpptZYK8cWjqc3bQO4mClXXSA9rYTbcdbNcyZnNrv+xlDPMG+TLEQpfEFEeceTMvq+GAECAwf7KXSdNKxqM+BgllFhyItJ+kVXhAmD5rL/8PP5HSxhvPXuI1uQoeTqRGE330b2qwkkZpYzyeNp2jUoZUYUtNfkZCNStcr7xxZeDNk6NFP+Vm+X6YCzeyOnVXZp4PAU7DiH8wl5n0wl3P99Jfj/MpCzzjWSlBoCKju9TFO75Gt0E7quHq1tZS8buOdxk9cx12WnEuxd06ckuiJgm9FhrTLDjBnVjR3G7tMHvQLPAFBJ7Fn1cePTIOEtZ4lnvdG72d4vskYfRZ0rNb3FD/uN3ou9kHBt5583IaaBvpB2ZHlrz/QImM5SKPPevS7U/qLB48/HAJnyvnxXowjQxPL94N7OVAZYNf5pNMYM/pDiIdItY81RlS1pHlFB0yqQDCHPbNtVyvE2rAwfQaeBUH5qD4eVx8Dg9mqTdqvCe7LsJVmrLsFWlfVWGR3hwszJgI0whm3eKlSabPAwhUSIEtQc/AEJBfaVqOc/LeRCYrq7A+zyZ9ZpM5K4x1ftbl9Ng8Bv1JF90wb4i5WavxBxzXGxJw3KzgiWX+sODN7fjk7yvz8jb5/j/FC1O1jPNMtEkAc7N3Orl/bovGGBOm19io77FoH5ENUGpQIXzhTyTKVokv7kKqhB3JPptDsfuANe+ZvJUu0C8BYuBQAvvrwHZR5r1xuRnr3oyj2b5YqYnzOArVPN3M4Dd7Kv9PbrmLzZnC8rWYjb68sKOdDnLB2bmD3D0l0IZbodClu24O1Ls5fkC4djV7WrS9zGHOguHnEWzeKjUdV2wmnNeUcp5ys4EsfOAlARUE4ET5RaOpMzwtxxNM0iH/TAJjtDwG19gcvb/aAX689J4a7gpqK4Dx8PRTHtt8zh6Xj/+n6XsHnYLW5qugm9IzAHdTpuXgLD8lEED/RF4ikm7/Z6CM1geinhh41PTTLlDL20NgmGJJeB1wIesKlEMqaOnO2TGV/VrMXrAphHMI8KiZ8Xvw9nOkD6J8ExD/lE1rSQziaMPHhbkxDVnVzQqaHq4ZLGjFujLXxqiyF5V73mSUv1G2vfu6fmmVYOvzoGuWQNCQkwJZNTbtduF7VB895+gwbsP1PHn3XgW8poX/g3JqPcF/WdcYNRqeeOvsuN88kic039Z2Pef2Qk2IIQ9CFVD46QiKUUyR6dmbN8hkTz278T5FezgbN4iT+kmu6VWKQHqqxJWW1pnEBN9CrMahussFwhj8gpDwFyovXo8e1u6xfCUblw8f1fwTcnom6ic0nI42mCaEkMDzTnkZF5+2nJW77zHIl3kNkiSg2M7C+lFz7aEaYd2YkvmVC+7lVg9rxRHq+BMRfJcLkHKDxz+0MwR31vNt+7CfLYiCWWw0hjiBiKAIXTxscVq8tjzhfeVmQIAkwu1SmPIVhlg8VYpmWHlOYvcFPKRoTfzBhOAd1ACOhdxf9nI5i2hmARoOXageSi1TaLnGciBf3QlnmehhPnp6BULvLLhnSDu+fOm86i8Kht/Qfhe0bnmu1PBodL2QvyzEXPPBn5DybYu45P1eqBHrUpHMVx41j2GRN+WiwkShbxkYRUhP8O8LbcdRBrFYNra96cIHsN6+ABVrVo6FqkRUdDigaZpActRceg2VcNwTwveecjBfwhsXzxoujZ5tGwc1acfzNt7IUWWwWIr2FWaFJdTFzIaivkNmIlCE2x0A3sr+ghZBbBUA= X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: 84d0501f-3913-42ed-d57a-08da166783b0 X-MS-Exchange-CrossTenant-AuthSource: DB7PR03MB4972.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Apr 2022 18:18:27.4911 (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: 7VJN/pzneb22mHjDzZ8rLnUk0Fu/hkZKQZFqy09gcvgVrzpCmXs2QWVNrKKZ8zepyE9WYomWcNADJ/ceaeDhzg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR03MB8649 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 This adds an implementation of puts for DM. The implementation is not as clean as for the non-DM puts because we have to handle non-nul-terminated string. We also handle short writes (though these are probably very unusual). Signed-off-by: Sean Anderson --- drivers/serial/Kconfig | 1 + drivers/serial/serial_semihosting.c | 31 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index fae82598cb..4ced6c0a5d 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -808,6 +808,7 @@ config SCIF_CONSOLE config SEMIHOSTING_SERIAL bool "Semihosting UART support" depends on SEMIHOSTING && !SERIAL_RX_BUFFER + imply SERIAL_PUTS help Select this to enable a serial UART using semihosting. Special halt instructions will be issued which an external debugger (such as a diff --git a/drivers/serial/serial_semihosting.c b/drivers/serial/serial_semihosting.c index 62b1b2241b..4328b3dac5 100644 --- a/drivers/serial/serial_semihosting.c +++ b/drivers/serial/serial_semihosting.c @@ -5,12 +5,14 @@ #include #include +#include #include #include /** * struct smh_serial_priv - Semihosting serial private data * @infd: stdin file descriptor (or error) + * @outfd: stdout file descriptor (or error) */ struct smh_serial_priv { int infd; @@ -36,8 +38,36 @@ static int smh_serial_putc(struct udevice *dev, const char ch) return 0; } +static ssize_t smh_serial_puts(struct udevice *dev, const char *s, size_t len) +{ + int ret; + struct smh_serial_priv *priv = dev_get_priv(dev); + unsigned long written; + + if (priv->outfd < 0) { + char *buf; + + /* Try and avoid a copy if we can */ + if (!s[len + 1]) { + smh_puts(s); + return len; + } + + buf = strndup(s, len); + smh_puts(buf); + free(buf); + return len; + } + + ret = smh_write(priv->outfd, s, len, &written); + if (written) + return written; + return ret; +} + static const struct dm_serial_ops smh_serial_ops = { .putc = smh_serial_putc, + .puts = smh_serial_puts, .getc = smh_serial_getc, }; @@ -53,6 +83,7 @@ static int smh_serial_probe(struct udevice *dev) struct smh_serial_priv *priv = dev_get_priv(dev); priv->infd = smh_open(":tt", MODE_READ); + priv->outfd = smh_open(":tt", MODE_WRITE); return 0; }