From patchwork Thu Mar 10 20:50:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1604153 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=N3+Vr/Qs; 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 4KF1Zl4xtSz9sGB for ; Fri, 11 Mar 2022 07:56:47 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id E044383C70; Thu, 10 Mar 2022 21:54:31 +0100 (CET) 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="N3+Vr/Qs"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id A0CCC83B0D; Thu, 10 Mar 2022 21:52:37 +0100 (CET) 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 EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on060b.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe0d::60b]) (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 5675883B2A for ; Thu, 10 Mar 2022 21:51:55 +0100 (CET) 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=eL6tNOFPQHjEGwY7XKA9EGHXCp8JWXra1NmcX7FzowBn5Zvy8fECLBHrFZgZE3DY/+cD2WUsfWzJlYC6SslnhGp39EtxrH0GotFDLy7mhPrD1LeK8fWYBE3y4md6BytVAOjya5Nq8n9WtO3U1CoHQtjzasecMQtvDc5hgD3HG7z7Igp4g0WoSclnSpJPWoVq5jtIqiTLwoVGaUiTbf0SU0tdimlDULlhY8YS5DyG7Jo2xn2S9ckAtZHx3x3154Ir6+jbFhsL3lfEP4tVQYZU5Km/6I6S6+IVlSUaty3IUdkt1yQCDZ1TjnW1gg5zfP/OL7tNj8OL3/wxCM4epk+Exg== 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=G0a3vxxh1zpxpJQMyoPqKSL4kxr9mVFL2pI2Y3hRAFU=; b=YbQBMoFAE/AY04jGceg0OC+/ZuYmqkun3cpAR5Nt0JBEJMYJbs3vjaaEXJqOfqsGo+6CeKCWgdQsNF6cU7G7SItNBs4lZYc2uHTa46N+/54wkUXIOlEHfpniIKJ2iqkEkUBxf0Lcvdot5CaDcOgTwOCShsem6WNwfFJIZm7D4uaWKvV4D8cOk/nwLHZ1iG90n6dEOLCTpML8KbpuJ2at89exocJV0/DShdZIVwVHcm+yZn5+HTwqc32SRsEYBkOB28TfiynByU4QTMUgKuRd6nFaROfZMieIF1ekShGu/ez/HKANtbiqtknkscPe5ZCEDneFOR1ZuN8EtTaEzPjV1w== 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=G0a3vxxh1zpxpJQMyoPqKSL4kxr9mVFL2pI2Y3hRAFU=; b=N3+Vr/QsZsFGvgcCUUwL2Pgn+iRF/a7ITWuHm0Vhc+6/oarVt2HSIEbeQIIeMZoivLcHwLN7lZL9pXTzofZhuXRLE8IxvWrCDH/1427CfPWbhVqI1tOLioDJLanmHVPcdxHUYhZYSDtgnVMDkPiiJeQzIKYdT8IanH553L/pvKSdrQZ4FZpMVoHq995F3F0wz1sudp5jxdqgIA9U4Gw7XSNPlAaJ/cJCM3zNJ756JmPnepdr6a25OcJf2R48xj59KtFY7y83mCgKjY0D30bY8JbPYCEnMtRtrWi0sUjYAEKv24/kxuoUnV9af0WysGuxpbuAQT/abwfp/fA84KEoVA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=seco.com; Received: from DB7PR03MB4523.eurprd03.prod.outlook.com (2603:10a6:10:19::27) by DB6PR0301MB2439.eurprd03.prod.outlook.com (2603:10a6:4:5b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5038.14; Thu, 10 Mar 2022 20:51:54 +0000 Received: from DB7PR03MB4523.eurprd03.prod.outlook.com ([fe80::9860:b15b:f166:5896]) by DB7PR03MB4523.eurprd03.prod.outlook.com ([fe80::9860:b15b:f166:5896%3]) with mapi id 15.20.5061.022; Thu, 10 Mar 2022 20:51:54 +0000 From: Sean Anderson To: Tom Rini Cc: Liviu Dudau , u-boot@lists.denx.de, Simon Glass , Linus Walleij , Andre Przywara , Sean Anderson Subject: [PATCH v2 28/28] serial: smh: Implement puts for DM Date: Thu, 10 Mar 2022 15:50:58 -0500 Message-Id: <20220310205059.499269-29-sean.anderson@seco.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220310205059.499269-1-sean.anderson@seco.com> References: <20220310205059.499269-1-sean.anderson@seco.com> X-ClientProxiedBy: BL1PR13CA0433.namprd13.prod.outlook.com (2603:10b6:208:2c3::18) To DB7PR03MB4523.eurprd03.prod.outlook.com (2603:10a6:10:19::27) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 55264b56-dc14-4cae-4f4e-08da02d7cee2 X-MS-TrafficTypeDiagnostic: DB6PR0301MB2439: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: /BGH9f3m9cIiFKyVayabQW5IrztLHe/zFvN987hWgIET+AF4DapDy+tHRjsWTjW9B/0uoR3cinj53HPBHXnHhC9qnvm16yPSl3WnR15x1ssfsonYpwYdxSPWnYy+z5nWvY194GEOKJPooDXUIG3EZyPSzWKq3nVJlsI3NvCMMOijqXpHgl4rd0G0kVYkmrb/WrIa4JZxC2V7Pk1zAQcZr3XRtT7+Ug7Radsdsq5gT2D6kH2guq4HO8IQvU4YogWc7DvoCuz9CO4KQY8A/gAzJwEMjl7gYIyfuqMvNx8u+Gv8jc8ba797FRyOHD/5LWrNPTwYhtY58wcV9tve2u478KmcUYYsfkQ61Ddkg1d+Az4yScbyXkR6coehR+CEJTPnC0HVaqvv8A9geF73Px0T7rAcehpowXnYmSHcq+kOAae6qZReCJBqCehGBGLbeglTvKR7CNBwHdRmgT3Cqo/8zP/tMIulRkZzRww2cCqdzlFHxTSifV36h4VASuXzGi2QPPMgTPYsbQPJELI2S3Cn9O66rl92YDCrC56+IUQZFj+L6WVxqRyPHzhUW1uMnjKBJPEnkmL2e5CaFeyZmmcGshmP9US0OGgZ2/W/iS4psCUmMz0/Hw6zNPLSOpiJn79VUp6KKcPR32RkmLbf8Rj6ALYF2SZmRKp/URwyTpc4kEjhbyHB8UAO/1/HzF3hP1UY72pN0HhkoE9zMzo+OoyM1g== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB7PR03MB4523.eurprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(54906003)(66476007)(316002)(4326008)(66556008)(6916009)(8676002)(66946007)(44832011)(36756003)(86362001)(2906002)(38350700002)(38100700002)(5660300002)(8936002)(6512007)(52116002)(6486002)(6506007)(508600001)(186003)(26005)(2616005)(107886003)(1076003)(83380400001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 7wXx/GiyYsq3wGQqlNebg6G2kuNPdjK2egrdTX6oGzKvTYlfREQrLqGeF3pFdxw0EBoBl85VecU1uuHP7HBrjZ6oADrm9M1uF0EaN60FYQkcJo7YZItTQXmvvwnD3heLHSe6hI4aA30VeCZ/n1euEPwci1YKjI8TZjXojJpfoLM8LyKLzKTrMs4D2PSZZB3chNZ+4scgkMlKUJZnWPDJuziijnAr3yYli1ulSR/M0PHmtI8NOO6Z/lAKV4P9wz/i0bXgCTkh6/FS6ZlZosClbuEfCjgpC7fE6g8tNvHWTpF4BqIKIWFj33d5wCcdxx5OpM0fjO8Jtu1UFtmLXOW3nDUmRMoO1dZqfhMNRIwI/PsB3KTu7AiztMS8yoHEMGpbieYaa7ujTmauwV1xcHTle4kIWLIPTdUc9l/oI15gf1Ly0WUR+gfij9KYd4wEtmdWyaFDcEE9P2qo67dpdPsHT1Rxddn2K4NUaW2CmY/ylZmRPxY/Y7Sd4LoGYUwz0LwcUvSNlQO0Vs8KisEhQRyDA/qi2Ai+nKMJAgOMI/RPdCqmmgq1cCKcmhMyJACYmt5oJE2tUjUTt/4/9yQd5CvttnawX4YPMYn5joaNMHEjTT3+h65IxAtQvznb4XNi2QyYmNprU0PKWPMcHxrGa098hLkp2WDn742lnIV959ea0pANKKC2QryqYJz0YhFhgevM+rz1cVowmG2u2JB9RGxF4H4YrlJ7LUhcMuD/EEY/IXGMQocCl5KsLiLHR9jP33quIuLiT7eiBcGhMeKRnxzLwX4zIcHgTQ3JGeBlQ00HadbnuxULvGDxD5NF7ScUz0vlYGeakq+Di3C+9Jwo0qXxw6Zw0P2kHMjozGkV5LKJMHAC7ZQkag+hnI1l0nYZvqXOLVmGk3xpcS7TIRYEfKqOTqP3RUAC4f7TmfXGjJfgLMbgDxchy2gKvntCCERqGEUdesnNqazILF32FjGRIJ2oNs8oI3JVeLW5djm+CnJ4dJ5RSxal0YQvptDhPypYeWnP6kPo2Ef2JQsK7enLSI6Cg0A6P8xmP/EnRQVwSHpVBtmxDLxzqf78O1ECaxKTGJ+1bs3E3ddv3AaHYm8cdaO0u6x9fDzR9yRwzx4sI/euiQLT6S/KnAX0VvK2QlDibh28IQZlKWSQiKVRrhg2Zj9Bvhf3gkP0s7u3Af0Dam315v++I7dQSGaNCNf2oIOD0Er7oy09PBUxpyTQUvDFX2N1AwMzshw3ljNAOSI2OhTJJTAuPGQTa2Fi8rfHmaYveamVw88Tk+L1La9+oOAjRDSwavb2hLhYIQ3k9CU8I1DQikUr+FIKIn/f143V06NzKK0w0oyqEKeefUF+xXEXagQv+EIXg1PdX/UrzAQokRks2pnQNzT1PcLS+te21OmzVPrbCOau1dl9+5hXC7bdbM6SSf3nj1KOOnnRCDlrSjc59LSQANplcfJUsk4ZjfTxQfRajc5DRTCSY4WOLH1QjItGyU92yTS4pxADg3Ifkz0EW7+ExqHxzxgE4oCMoVcukzu7dhlu1bMgblLN8urLLTPYve2mPL89dhkRwzTmlZv4k6YUemQA0m/sN1qeWhWaeNTWFeOx6sor4WgdLaTk+r4PrTEar2civcpNLoO2KIgdEFE= X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: 55264b56-dc14-4cae-4f4e-08da02d7cee2 X-MS-Exchange-CrossTenant-AuthSource: DB7PR03MB4523.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2022 20:51:53.9446 (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: WYXsoqGl5Qj0br8fIeUt0I6y9cZGQcPf2VZzvdI+RhpWvnOWWcLaFjsrXVh/AZg4Cw0KizIS/Sfs19Xp9YgD8w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0301MB2439 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 --- Changes in v2: - New drivers/serial/serial_semihosting.c | 51 +++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/drivers/serial/serial_semihosting.c b/drivers/serial/serial_semihosting.c index 706c1aabe1..049dca5428 100644 --- a/drivers/serial/serial_semihosting.c +++ b/drivers/serial/serial_semihosting.c @@ -5,9 +5,18 @@ #include #include +#include #include #include +/** + * struct smh_serial_priv - Semihosting serial private data + * @outfd: stdout file descriptor (or error) + */ +struct smh_serial_priv { + int outfd; +}; + #if CONFIG_IS_ENABLED(DM_SERIAL) static int smh_serial_getc(struct udevice *dev) { @@ -20,8 +29,40 @@ static int smh_serial_putc(struct udevice *dev, const char ch) return 0; } +static int 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 0; + } + + buf = strndup(s, *len); + smh_puts(buf); + free(buf); + return 0; + } + + ret = smh_write(priv->outfd, s, *len, &written); + *len = written; + if (ret) + return ret; + + if (written != *len) + return -EAGAIN; + return 0; +} + static const struct dm_serial_ops smh_serial_ops = { .putc = smh_serial_putc, + .puts = smh_serial_puts, .getc = smh_serial_getc, }; @@ -32,10 +73,20 @@ static int smh_serial_bind(struct udevice *dev) return -ENOENT; } +static int smh_serial_probe(struct udevice *dev) +{ + struct smh_serial_priv *priv = dev_get_priv(dev); + + priv->outfd = smh_open(":tt", MODE_WRITE); + return 0; +} + U_BOOT_DRIVER(smh_serial) = { .name = "serial_semihosting", .id = UCLASS_SERIAL, .bind = smh_serial_bind, + .probe = smh_serial_probe, + .priv_auto = sizeof(struct smh_serial_priv), .ops = &smh_serial_ops, .flags = DM_FLAG_PRE_RELOC, };