From patchwork Thu Mar 10 20:50:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1604138 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=eKzWRKFt; 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 4KF1Wb6g2lz9sGB for ; Fri, 11 Mar 2022 07:54:03 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id E433383B50; Thu, 10 Mar 2022 21:53:12 +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="eKzWRKFt"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id C7B1783B0A; Thu, 10 Mar 2022 21:51:42 +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-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on0623.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe0e::623]) (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 230BC83B03 for ; Thu, 10 Mar 2022 21:51:33 +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=EtSbF26N9HVY6qSrIg0yEk2WXAbOJUwBeIB25RXxK251tS+tTrTG9pwgY6NsemCytJZFV5BFHAfERk9YvgoP0ZRjk1J9Vkue/WZuUMhwFeb4IV+X2bPgVCuhPbHT0zbYjwDcDNWoR0IeFAJe2ERRfH5TEQaQtlnkW7QYF4HdYoVdchYM9U/IdOvVwZc9GveQe915BCuWkGjijhj2zlS/skRYiWtozqjzE45sWRcMQnbRpdlYmiyDoHycgeufOqLu+9px70HpTjeNpaAGUY20MQSHvkimkzL3skQCg8z55c8qv6heBJBB9DXs3X0tLSJVdD0gpIyjlyXl0/EGfwEggA== 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=Fy5KMcA9+FrZlGJ5FXusQTIWJjNmhTJPb5C/16SrIPY=; b=NnaRU1ZwLxXpLAIsiwTJjZeUYOZcYAoG2WBcMpg7PcrTAmwNKdvQMAVrAYzwamAa1QnZvHrxq1EAxILJMNv8G6eMzpxf1k9HtBLn74FGYhz35pDPzcEnchZ5ObqV1QyPpaZtxAP1Gb+rrBb4mb5dBL6bcOrVEiyobzqgXcEfbqDKqZnVS1hQKuusG915CwSO9DbvwbnPKVCQYFAuFnSLD/QWBUHeX6VGmjgssRR/+NOFrUmkFAej1wdNxHWs4CNtrn2ziN6RYV/Io+sgmzXj2VOP+m3CJeSchik/GVZ0K0ebqd2jHXS7nhUUKSZUSA5DVR29KDfNzhljwHAQ2d8Kpg== 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=Fy5KMcA9+FrZlGJ5FXusQTIWJjNmhTJPb5C/16SrIPY=; b=eKzWRKFt5eTZNRJjxJheKWl5zTIxhsk+OX4JzFjpTdFojwBp62BmX6MDOXhue1nkYy7G179lE4Nzfao3+BH848VhIQKM3PH90u3mJdi0NHvpRHs5Dx70BztTCMbfOFQs5bWFz5SE44GeBTT1pYN5Y1SQVew+dpGTWQC5HudPCYaxjbQfGxnJzOz85k08G+cPnNC57CeLgCXgTBrJ5vgKbHsE1ngAdXVY7er7kEnDyoq657BuFTx2WbOi8M5CjfPe/YRPBNnY+VWQyYFki8b4C9gZV6o7x4IeNTEuJDBKr6J5UMYTkVaa7+j74CHpmhihSqLc1r3vAEhVV9eS1J72qg== 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 AM5PR03MB3105.eurprd03.prod.outlook.com (2603:10a6:206:24::22) 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:32 +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:32 +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 10/28] arm: smh: Add some file manipulation commands Date: Thu, 10 Mar 2022 15:50:40 -0500 Message-Id: <20220310205059.499269-11-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: 7ca0ce81-bc95-4f53-5c22-08da02d7c1ca X-MS-TrafficTypeDiagnostic: AM5PR03MB3105: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: x8bbKHK+N/oCbod+0iZkNU0pJA9ix5UkOIcVCpOaAzTBD8SF4eHvJnr2rIsAhGHeLqluQ/juF8C6JskwGhD9U3SAfr738szjluPTik0zW6zuTboSJoUch4FLY1YSQT5eM5b8m/UOdaKVqNBCCEhQTH916yqRAgEthLPUwyNW94kBpGMEuB2ztwrijAR2M/VxrMo6zM9Xb/KDbw9W/0/qbjJqot5YRmqmDcTvlSuC9XtE6v612IuhJsCmwwvP7jKBe7DdUSZy6RCzJ9pl1qTjt5K4m1Wh/tlQ3fq9tb3lW7TS4yAA8t1JG+e01nJ5czebs8AnS8+r6vJ1j6P+YPGc3dwwucw5X9VecaC7NyQIibNPJnBw5IGc+7/OAPwtnBUCbaALivKpTGRH7AJDH/h6bJT9NpBL4Fx2/ePY2x8SF1Q7UsVAyS5Qi+FnaqvtPsUoDNvhcF+uqmUateXgfNJXWE+LQ3anJFds9+6dDgYlhY5WlvcoWLV4Cv4E6Dbp9eXKzDtPevfxvjSEWCQutMeRRaj5ZZT+lVWebgyHufASQpRQucbH5LnHBwb2H6ZInUdCOPaj4PlHxqUMQXWeYJ4h4T6yztF84y1zTrwYTKPjIx/7CHTMr7SIgnIiYONRG/zQoUYMJzSwB4VxvPxnq0EbkRf2OdHDSGG19wnBW324oauQIg6RsA2lAJOFWQy/PufQ4pXXAN++As4uo7lG6eBfOw== 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)(44832011)(8676002)(54906003)(6916009)(8936002)(316002)(5660300002)(66476007)(6486002)(86362001)(66946007)(2906002)(66556008)(508600001)(107886003)(83380400001)(36756003)(4326008)(2616005)(52116002)(38100700002)(1076003)(6512007)(6666004)(38350700002)(26005)(6506007)(186003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: zk1T+iJxOk0yf3t1u0V5/vjfujy9sA2N5bGsj5e4/zQMcQrmxYSbKkjbNBp5q+X0ZCVVE/fctHa73SLwIRmbDzUpNe/G0diUXDcp0bKo8L3+i349LsknEA3tWZB/63wbCCQ4THL5y5eoFY2rYbaIfpRur6YQbjzLbZevL2wgRafS8ICchXmmjohXNC/2IwyU3oZbwXiL/bmql50gmgCvX8CG5/reGarU7mC2f9ZRVAqcPZHBp++OX1jE2UkWioTLn03MRxeifPFZH3ZfJdWWUxBgtwNLBkTP6oZVhAhW53Co30ZTmJEI+rGahbdS5F2INAePwcvlELNp8Qj0vBn0VKG1jckPzOnMQk7WxqtY9ky3xnDowVr+4kO5rLS7I5TwAlaqglhFCZnOTsyIURHBV90c36kdaJWTndd6vokQvpro/Mff/MTfOfdmk9SoL72kSpEyV+DdDsqbqoox081ArljBXvuR1MCF1R2c98p27qDkNsiht3ReQMlGkMS1bkwAIPaS6eZMIJhnLdXGEzTXiGEPyf93yWXyBGk1gI7Mu9qvH3YIXQR1rTkNLTxPaa7jEg4nGD1aT3nrZ6jL2mTDHOZS5Vo2kFNaaxHXsievtt8QETylKjrTOZKV8dIjxOy18v3DRd3POOPz7TjFsqagFQJwqKo1T3r+TOJ7VU/3HkZyukzAtP5z9BRN6+QAwLlu296FacEXudsZyAUPOy7wv5VvVvWl/wcQFNyzo2HOR57j27Hzv44w23fZh6HLhsVZiCHWqjpkyTR39SA//VVn7+syu01VJLOuuGvefQ7/P8pWVBeDTE0ChlW1qdhivJf4z4g3/v14vbwKggmu6c+XUWksS5zilPv4K6ms+Ag+GvjQlCt9vNDHae4cG+BTYJ6E1YyWi2iMkCrSvh42Uo4HYK71lDgh8iuU33BOmffjYWdVIRLuJGxrvpZmusk6aZ/IfOAq8Dk6lMDTiWKDl+ldjo6azNV/3zoXpCoDXeuxOFhSjXVmhCij700prNDWk9NZyXgWobiCAjg+M03RKnoCLGEsBDyJeKnLJgjY7hMjYQjVun4sEU0SYvNX7OToYSpa/RndUZYrXgxQg51Y3yu7LjgK9lKCLAo1HU9UwbYPF3iajiV6HoDQNtYcnizRdwZljVNVYqRC2JYa7miU8XeLnmgD5OJ9gTVffu0uMYidC3pPWM4Jx/GQb3B6xuMP38zLTTzKbMSr3f1OazIY+D0vPcInXKYT5cnvipNAuyLIrS0wVYv4D60t7rWlIbDCMnnK8o4IbSuGOTjHRHY0rLCuuDz9I8Ke2AwSidFB1Hkeul3GpFvuI271C+udlzXQWvHqyUhVUYlnMLEjnfayw4wY94UuDYFYPHwAzwcLrvhsEG1fJ+dJ2wdVmnSP5X+8KMeS5bw6TU4xKDH13pm4LIYrVXqyV61oaQp5b9T2GxiJ5eg+UJ2YnF3PSOziPA8q8sdOvDuvcbFZhYsYt1SFID08pnd3lhgB+8kuIOBzpe+BTl2tsU520Ux6+77SiWoEm8LnRH+gIR9RvDw+hZpdiPFDNVYCterlv1TWmfg8cFbwCTvyT9mOvTxSKvnK5QffL9i5iNMwfuUI5sO6lLOz+69Zq3GmZqtGJQU5q6+84lmaRZI= X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7ca0ce81-bc95-4f53-5c22-08da02d7c1ca 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:31.9616 (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: fUDdOsS1ujIGkvBK+GkTauJ3TslT//csXBF07yBExEySogTYMHQ3sk38ZdGVBuI7NAbIvg06f0krTEdELpPjPA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR03MB3105 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 In order to add filesystem support, we will need to be able to seek and write files. Add the appropriate helper functions. Signed-off-by: Sean Anderson --- (no changes since v1) arch/arm/lib/semihosting.c | 67 +++++++++++++++++++++++++++++++------- include/semihosting.h | 20 ++++++++++++ 2 files changed, 76 insertions(+), 11 deletions(-) diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c index 2943f7b82f..d08003cef1 100644 --- a/arch/arm/lib/semihosting.c +++ b/arch/arm/lib/semihosting.c @@ -1,15 +1,13 @@ // SPDX-License-Identifier: GPL-2.0+ /* + * Copyright (C) 2022 Sean Anderson * Copyright 2014 Broadcom Corporation */ /* - * Minimal semihosting implementation for reading files into memory. If more - * features like writing files or console output are required they can be - * added later. This code has been tested on arm64/aarch64 fastmodel only. - * An untested placeholder exists for armv7 architectures, but since they - * are commonly available in silicon now, fastmodel usage makes less sense - * for them. + * This code has been tested on arm64/aarch64 fastmodel only. An untested + * placeholder exists for armv7 architectures, but since they are commonly + * available in silicon now, fastmodel usage makes less sense for them. */ #include #include @@ -19,7 +17,9 @@ #define SYSOPEN 0x01 #define SYSCLOSE 0x02 +#define SYSWRITE 0x05 #define SYSREAD 0x06 +#define SYSSEEK 0x0A #define SYSFLEN 0x0C #define SYSERRNO 0x13 @@ -80,14 +80,22 @@ long smh_open(const char *fname, enum smh_open_mode mode) return fd; } +/** + * struct smg_rdwr_s - Arguments for read and write + * @fd: A file descriptor returned from smh_open() + * @memp: Pointer to a buffer of memory of at least @len bytes + * @len: The number of bytes to read or write + */ +struct smh_rdwr_s { + long fd; + void *memp; + size_t len; +}; + long smh_read(long fd, void *memp, size_t len) { long ret; - struct smh_read_s { - long fd; - void *memp; - size_t len; - } read; + struct smh_rdwr_s read; debug("%s: fd %ld, memp %p, len %zu\n", __func__, fd, memp, len); @@ -101,6 +109,24 @@ long smh_read(long fd, void *memp, size_t len) return len - ret; } +long smh_write(long fd, const void *memp, size_t len, ulong *written) +{ + long ret; + struct smh_rdwr_s write; + + debug("%s: fd %ld, memp %p, len %zu\n", __func__, fd, memp, len); + + write.fd = fd; + write.memp = (void *)memp; + write.len = len; + + ret = smh_trap(SYSWRITE, &write); + *written = len - ret; + if (ret) + return smh_errno(); + return 0; +} + long smh_close(long fd) { long ret; @@ -125,6 +151,25 @@ long smh_flen(long fd) return ret; } +long smh_seek(long fd, long pos) +{ + long ret; + struct smh_seek_s { + long fd; + long pos; + } seek; + + debug("%s: fd %ld pos %ld\n", __func__, fd, pos); + + seek.fd = fd; + seek.pos = pos; + + ret = smh_trap(SYSSEEK, &seek); + if (ret) + return smh_errno(); + return 0; +} + static int smh_load_file(const char * const name, ulong load_addr, ulong *end_addr) { diff --git a/include/semihosting.h b/include/semihosting.h index d8337b6269..b53c650444 100644 --- a/include/semihosting.h +++ b/include/semihosting.h @@ -50,6 +50,17 @@ long smh_open(const char *fname, enum smh_open_mode mode); */ long smh_read(long fd, void *memp, size_t len); +/** + * smh_write() - Write data to a file + * @fd: A file descriptor returned from smh_open() + * @memp: Pointer to a buffer of memory of at least @len bytes + * @len: The number of bytes to read + * @written: Pointer which will be updated with the actual bytes written + * + * Return: 0 on success or negative error on failure + */ +long smh_write(long fd, const void *memp, size_t len, ulong *written); + /** * smh_close() - Close an open file * @fd: A file descriptor returned from smh_open() @@ -66,4 +77,13 @@ long smh_close(long fd); */ long smh_flen(long fd); +/** + * smh_seek() - Seek to a position in a file + * @fd: A file descriptor returned from smh_open() + * @pos: The offset (in bytes) to seek to + * + * Return: 0 on success or negative error on failure + */ +long smh_seek(long fd, long pos); + #endif /* _SEMIHOSTING_H */