From patchwork Mon Dec 2 11:11:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1203108 X-Patchwork-Delegate: matthias.bgg@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="r569hAzh"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47RMvV5g2Vz9sP3 for ; Mon, 2 Dec 2019 22:14:30 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 7D113C21E85; Mon, 2 Dec 2019 11:13:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 8F093C21E79; Mon, 2 Dec 2019 11:11:38 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 01DC4C21C57; Mon, 2 Dec 2019 11:11:34 +0000 (UTC) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by lists.denx.de (Postfix) with ESMTPS id 57BB8C21D4A for ; Mon, 2 Dec 2019 11:11:33 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20191202111130euoutp018287b767c7e1fcb1d95d068232da47db~ciXFz4CA90690506905euoutp01R for ; Mon, 2 Dec 2019 11:11:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20191202111130euoutp018287b767c7e1fcb1d95d068232da47db~ciXFz4CA90690506905euoutp01R DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1575285090; bh=5C6TX+4GbiN0sOg3cJbqNstGzgzj/nemWcufNLp0iGM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=r569hAzhP4kM4JufCM+rPo5Vg7plaU+Ojn8Ho1qbbO+v28+FX/cHK4n+gTMx3Nc5w ACVYKvhjztSG98avkzydeoopfSlnwMhtFHs4jCfWDJe3PyDlSlyKgIx3T74GkDgMVz SASBtvn/hXMUwfIsectG9qwSf6JgzZvKCG20pups= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20191202111129eucas1p152f7a5d4d6b576d11900d9542cb828d1~ciXFoQM-Q1987219872eucas1p1S; Mon, 2 Dec 2019 11:11:29 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 6F.D2.61286.161F4ED5; Mon, 2 Dec 2019 11:11:29 +0000 (GMT) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20191202111129eucas1p271b4ed0d90cb10addce5fefa0af576aa~ciXFH21wg2188621886eucas1p2q; Mon, 2 Dec 2019 11:11:29 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20191202111129eusmtrp1bdf58cd446d28e190d4619fed8ba4b8a~ciXFHFZe11453714537eusmtrp1P; Mon, 2 Dec 2019 11:11:29 +0000 (GMT) X-AuditID: cbfec7f2-ef1ff7000001ef66-0e-5de4f161ddd9 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id E1.F8.07950.161F4ED5; Mon, 2 Dec 2019 11:11:29 +0000 (GMT) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191202111128eusmtip2379efada2d7937fcfa20a43daf6c0db5~ciXEfmF4l1559815598eusmtip2X; Mon, 2 Dec 2019 11:11:28 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Mon, 2 Dec 2019 12:11:13 +0100 Message-Id: <20191202111118.12868-2-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191202111118.12868-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprHKsWRmVeSWpSXmKPExsWy7djPc7qJH5/EGqy9b2CxccZ6Vosbv9pY LZ6/u8xksfbIXXaLBZOfsFpsmP+WxWLG5JdsFn/2/2SxmDppM7vF272d7BaHp35gdOD2mDfr BIvHh49xHq8OrGL3uHNtD5vH2Ts7GD36tqxi9Fi/5SqLx6ZXHgEcUVw2Kak5mWWpRfp2CVwZ f37NYCv4K15xculFlgbGK8JdjJwcEgImEnt7brF0MXJxCAmsYJQ4fHsxK4TzhVHi6OvTbBDO Z0aJgyuescO0zGtcBFW1nFHi3vovjHAtP2bMYgOpYhMwlOh62wVmiwhISPzqvwpWxCywgVni XtshRpCEsICHxIVdZ5hAbBYBVYnl2x+DreAVsJWYe3M3M8Q6eYnVGw6A2ZwCdhL7OxeDXSsh sIpdoqutHaiBA8hxkXg23Q6iXlji1fEtUKfKSJye3ANV38wo8fDcWnYIp4dR4nLTDEaIKmuJ w8cvsoIMYhbQlFi/Sx8i7CixeO1VJoj5fBI33gqChJmBzEnbpjNDhHklOtqEIKrVJGYdXwe3 9uCFS1Dne0j0H74AtkhIYCKjxOL7ZRMY5Wch7FrAyLiKUTy1tDg3PbXYMC+1XK84Mbe4NC9d Lzk/dxMjMNWc/nf80w7Gr5eSDjEKcDAq8fB2vHocK8SaWFZcmXuIUYKDWUmE97rSw1gh3pTE yqrUovz4otKc1OJDjNIcLErivNUMD6KFBNITS1KzU1MLUotgskwcnFINjOE6HP9m/z/wT7nM 6Pz0kym3lxZnqm9Rk5yzSz151ta7rf8OZ2kw8jmYaTrWVa9OzbvaNz9csfTuvsSFyt519dv3 fdC5Kyb730S4rj9/6WuT69GRPldKF2WpXCtKmrRExFyXq/t9/cOKb4+2ByZoWIVf6w3fvqGl sWf6uQlpBd++rDjs7j/ZX4mlOCPRUIu5qDgRAKYp5jsxAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrHLMWRmVeSWpSXmKPExsVy+t/xe7qJH5/EGqycxGexccZ6Vosbv9pY LZ6/u8xksfbIXXaLBZOfsFpsmP+WxWLG5JdsFn/2/2SxmDppM7vF272d7BaHp35gdOD2mDfr BIvHh49xHq8OrGL3uHNtD5vH2Ts7GD36tqxi9Fi/5SqLx6ZXHgEcUXo2RfmlJakKGfnFJbZK 0YYWRnqGlhZ6RiaWeobG5rFWRqZK+nY2Kak5mWWpRfp2CXoZf37NYCv4K15xculFlgbGK8Jd jJwcEgImEvMaF7GC2EICSxkl7p61gIjLSJyc1sAKYQtL/LnWxdbFyAVU84lRYu/cNkaQBJuA oUTXW5AEJ4eIgITEr/6rjCBFzAI7mCUWv21lBkkIC3hIXNh1hgnEZhFQlVi+/TE7iM0rYCsx 9+ZuZogN8hKrNxwAszkF7CT2dy5m6WLkANpmK/H+fdwERr4FjAyrGEVSS4tz03OLjfSKE3OL S/PS9ZLzczcxAsN+27GfW3Ywdr0LPsQowMGoxMPb8epxrBBrYllxZe4hRgkOZiUR3utKD2OF eFMSK6tSi/Lji0pzUosPMZoC3TSRWUo0OR8Yk3kl8YamhuYWlobmxubGZhZK4rwdAgdjhATS E0tSs1NTC1KLYPqYODilGhg3xL66U+cqXnZp5sRLkQUppmXOj7d9K2xPnPPGjCO1KnTX18xt W2JP2ZU9qZo368c1bulXusafZDgPX62RMujepK6/8K/ihd4Vmdubpon3FRSm8P5iyn96Zd9u hawLTUp53yprBNa/fvXM22PRYbVNZt8ucmzZner6tbt8xvfGPyKtjk/OWhQqsRRnJBpqMRcV JwIAJNwUO5ECAAA= X-CMS-MailID: 20191202111129eucas1p271b4ed0d90cb10addce5fefa0af576aa X-Msg-Generator: CA X-RootMTR: 20191202111129eucas1p271b4ed0d90cb10addce5fefa0af576aa X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191202111129eucas1p271b4ed0d90cb10addce5fefa0af576aa References: <20191202111118.12868-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Heinrich Schuchardt , Tom Rini , Marek Szyprowski Subject: [U-Boot] [PATCH v4 1/6] fat: write: fix broken write to fragmented files X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" The code for handing file overwrite incorrectly assumed that the file on disk is always contiguous. This resulted in corrupting disk structure every time when write to existing fragmented file happened. Fix this by adding proper check for cluster discontinuity and adjust chunk size on each partial write. Signed-off-by: Marek Szyprowski --- This patch partially fixes the issue revealed by the following test script: --->8-fat_test1.sh--- #!/bin/bash make sandbox_defconfig make dd if=/dev/zero of=/tmp/10M.img bs=1024 count=10k mkfs.vfat -v /tmp/10M.img cat >/tmp/cmds </tmp/model/file0001.raw yes ABC | head -c 4096 >/tmp/model/file0003.raw yes ABC | head -c 4096 >/tmp/model/file0005.raw yes DEF | head -c 16384 >/tmp/model/file0007.raw mcopy -n -i /tmp/10M.img ::file0001.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0003.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0005.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0007.raw /tmp/result hd /tmp/10M.img if diff -urq /tmp/model /tmp/result then echo Test okay else echo Test fail fi --->8--- Overwritting a discontiguous test file (file0007.raw) no longer causes corruption to file0003.raw, which's data lies between the chunks of the test file. The amount of data written to disk is still incorrect, what causes damage to the file (file0005.raw), which's data lies next to the test file. This will be fixed by the next patch. Feel free to prepare a proper sandbox/py_test based tests based on the provided test scripts. --- fs/fat/fat_write.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index 729cf39630..f946030f7d 100644 --- a/fs/fat/fat_write.c +++ b/fs/fat/fat_write.c @@ -794,6 +794,8 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, newclust = get_fatent(mydata, endclust); + if (newclust != endclust + 1) + break; if (IS_LAST_CLUST(newclust, mydata->fatsize)) break; if (CHECK_CLUST(newclust, mydata->fatsize)) { @@ -824,8 +826,6 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, if (filesize <= cur_pos) break; - /* CHECK: newclust = get_fatent(mydata, endclust); */ - if (IS_LAST_CLUST(newclust, mydata->fatsize)) /* no more clusters */ break; From patchwork Mon Dec 2 11:11:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1203101 X-Patchwork-Delegate: matthias.bgg@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="exTZAjm+"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47RMrD6QGMz9sP3 for ; Mon, 2 Dec 2019 22:11:40 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 47311C21E74; Mon, 2 Dec 2019 11:11:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 84D96C21C50; Mon, 2 Dec 2019 11:11:35 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 983A0C21DA1; Mon, 2 Dec 2019 11:11:33 +0000 (UTC) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lists.denx.de (Postfix) with ESMTPS id D0D84C21C50 for ; Mon, 2 Dec 2019 11:11:32 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20191202111130euoutp024545186ca11bec1a8bb10d1c3d70cefa~ciXGSm6M_0636106361euoutp02D for ; Mon, 2 Dec 2019 11:11:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20191202111130euoutp024545186ca11bec1a8bb10d1c3d70cefa~ciXGSm6M_0636106361euoutp02D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1575285090; bh=nZT1VUDZg4JvTLgo8cklvSXznSdlUSKdeoZpWQxd4F8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=exTZAjm+AiarZX3ezrWL7iEy5KZ1OVl7p8qb2gmomInb5hx/Pz4NH/4ij+cQ1j/Dk KDMRZzyXb26fwXsUDTSdJiq4i/kiHFaoTQEyUwLtz3tiy3XbuMsroBxhe7BSqE8ag0 mc4R/xb9U5Ckx/rdcm1CUNbSMTMt3pSCPE8XKAF0= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20191202111130eucas1p2b3ef85b0015dc4f4769d639d7485d730~ciXF9-R571754317543eucas1p29; Mon, 2 Dec 2019 11:11:30 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id 43.F2.60698.261F4ED5; Mon, 2 Dec 2019 11:11:30 +0000 (GMT) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20191202111129eucas1p29846d2823438c5f9e7192925862e1df5~ciXFp2NOW2095220952eucas1p2g; Mon, 2 Dec 2019 11:11:29 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20191202111129eusmtrp103ec3591255c3653b566871b6d9937b5~ciXFpOepp1453714537eusmtrp1Q; Mon, 2 Dec 2019 11:11:29 +0000 (GMT) X-AuditID: cbfec7f5-a0fff7000001ed1a-b8-5de4f1621b31 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id D2.F8.07950.161F4ED5; Mon, 2 Dec 2019 11:11:29 +0000 (GMT) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191202111129eusmtip241f198452794c203332681513b49da3e~ciXFGDLmA1824718247eusmtip2M; Mon, 2 Dec 2019 11:11:29 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Mon, 2 Dec 2019 12:11:14 +0100 Message-Id: <20191202111118.12868-3-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191202111118.12868-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA0VSa0hTYRju2znbOc5NTtPwaxXGMKUsL904WI0ChUP9sF8JxdKpJ7XclDOn WVBiIDqtdEO8ldqy1IVuXhIR87JVi6RpiWVg0VQQB5uTtPKC5XbU/j3P8z7P97y8fDgiquOK 8XRlNs0o5RkSHh/tfrtsO5K0MCOLnB7CyPYqI5ecWCnkkrOuMQ7Z+vobRjboZrikqd6JklW6 OR65NrCMkhXaTox0virGSEuFG5z1pepq3qGUe+Eq5Rg0YNTk5z4e9WGyB1APugyAMnaNo1SH g7qIX+afTqEz0nNoJkKayE/Tj/zlZL0Pu2kx6Dn5QBesAT44JI7DjupFoAF8XEQ0Azg6Vcph ySKAqy/1GEt+AtjmnEK2IqtNdoQdNAFYOV/P244UOOs4HhePiIIap4bnwQEEhCsPx70lCGFC 4PdCM/AM/Ik4aOq5z9UAHEeJA7Dt636PLCTOwAZbOWDbguAL06C32YeQwoHip6jnHUg8x+CQ d1mPKQauuEdQFvtDh7ULY/FeOKwr3QzcA9Bua8VYUgrgWEHVZsUpaLF+9G6BEAehsTeClc/B soZxzCNDwg9OOHd6ZGQDarsrEVYWwqJCEesOgTXWtu3aodFPm9eioLt52KuLiPKNA7dcLwNB Nf+7GgAwgEBarVKk0qpjSjo3XCVXqNTK1PDkTEUH2Pg1w+vWpR7Qv5ZkBgQOJAJhkWNaJuLK c1R5CjOAOCIJEH6R2GUiYYo87xbNZCYw6gxaZQZ7cFQSKLy948cVEZEqz6Zv0HQWzWxNObiP OB9on0kTLAqmRHPnfO7RkpbEznW970RjY3yyKwaXKmtDY4S9ya6xeYHyRLyNYkLm4sW1ca65 favRjWWauMd3jS3ZTNOf3bOCcXVPS2y+X7Wv/dFJ96+lw5HBT0Kt2jdhnX0J3fbwaEG6zHeX +nd/2AX/taYcAyWeuSS6Bspj2yWoKk0edQhhVPJ/PfkU3TEDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrHLMWRmVeSWpSXmKPExsVy+t/xe7qJH5/EGvy4amyxccZ6Vosbv9pY LZ6/u8xksfbIXXaLBZOfsFpsmP+WxWLG5JdsFn/2/2SxmDppM7vF272d7BaHp35gdOD2mDfr BIvHh49xHq8OrGL3uHNtD5vH2Ts7GD36tqxi9Fi/5SqLx6ZXHgEcUXo2RfmlJakKGfnFJbZK 0YYWRnqGlhZ6RiaWeobG5rFWRqZK+nY2Kak5mWWpRfp2CXoZi87/Zyo4pV1xeNUipgbGySpd jJwcEgImEr+XP2TuYuTiEBJYyijRunAeE0RCRuLktAZWCFtY4s+1LjaIok+MEjcmn2MDSbAJ GEp0ve0Cs0UEJCR+9V9lBCliFtjBLLH4bSszSEJYwFei+fcZli5GDg4WAVWJdTcVQMK8ArYS C85NZIRYIC+xesMBsHJOATuJ/Z2LwcqFgGrev4+bwMi3gJFhFaNIamlxbnpusZFecWJucWle ul5yfu4mRmDYbzv2c8sOxq53wYcYBTgYlXh4O149jhViTSwrrsw9xCjBwawkwntd6WGsEG9K YmVValF+fFFpTmrxIUZToJMmMkuJJucDYzKvJN7Q1NDcwtLQ3Njc2MxCSZy3Q+BgjJBAemJJ anZqakFqEUwfEwenVAPjbO7X0omT105XfjTxQ0Tc2TOTnDb9cuiM8DW65pGkOeFW652dUW5S tqsThP4Z8SRJ8NrMOloSnKWbenlFjvUzAxHWm3/3qC5eGGApfaxhdtidvC0+8p9KeDdYOi9y nKx0csoKcfb5lbtP+Guxz3FR7/uaMyf0bkxook03f0Rsy4mA5Krt1m1KLMUZiYZazEXFiQA8 go8ikQIAAA== X-CMS-MailID: 20191202111129eucas1p29846d2823438c5f9e7192925862e1df5 X-Msg-Generator: CA X-RootMTR: 20191202111129eucas1p29846d2823438c5f9e7192925862e1df5 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191202111129eucas1p29846d2823438c5f9e7192925862e1df5 References: <20191202111118.12868-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Heinrich Schuchardt , Tom Rini , Marek Szyprowski Subject: [U-Boot] [PATCH v4 2/6] fat: write: adjust data written in each partial write X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" The code for handing file overwrite incorrectly calculated the amount of data to write when writing to the last non-cluster aligned chunk. Fix this by ensuring that no more data than the 'filesize' is written to disk. While touching min()-based calculations, change it to type-safe min_t() function. Signed-off-by: Marek Szyprowski --- This patch finally fixes the issue revealed by the test script from the previous patch. The correctness of the change has been also verified by the following additional test scripts: --->8-fat_test2.sh--- #!/bin/bash make sandbox_defconfig make dd if=/dev/zero of=/tmp/10M.img bs=1024 count=10k mkfs.vfat -v /tmp/10M.img cat >/tmp/cmds </tmp/model/file0001.raw yes ABC | head -c 4096 >/tmp/model/file0003.raw yes ABC | head -c 4096 >/tmp/model/file0005.raw yes DEF | head -c 7936 >/tmp/model/file0007.raw mcopy -n -i /tmp/10M.img ::file0001.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0003.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0005.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0007.raw /tmp/result hd /tmp/10M.img if diff -urq /tmp/model /tmp/result then echo Test okay else echo Test fail fi --->8-fat_test3.sh--- #!/bin/bash make sandbox_defconfig make dd if=/dev/zero of=/tmp/10M.img bs=1024 count=10k mkfs.vfat -v /tmp/10M.img cat >/tmp/cmds </tmp/model/file0001.raw yes ABC | head -c 4096 >/tmp/model/file0003.raw yes ABC | head -c 4096 >/tmp/model/file0005.raw yes DEF | head -c 8448 >/tmp/model/file0007.raw mcopy -n -i /tmp/10M.img ::file0001.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0003.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0005.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0007.raw /tmp/result hd /tmp/10M.img if diff -urq /tmp/model /tmp/result then echo Test okay else echo Test fail fi --->8-fat_test4.sh--- #!/bin/bash make sandbox_defconfig make dd if=/dev/zero of=/tmp/10M.img bs=1024 count=10k mkfs.vfat -v /tmp/10M.img cat >/tmp/cmds </tmp/model/file0001.raw yes ABC | head -c 4096 >/tmp/model/file0003.raw yes ABC | head -c 4096 >/tmp/model/file0005.raw yes DEF | head -c 2304 >/tmp/model/file0007.raw yes GHI | head -c 2304 >>/tmp/model/file0007.raw yes DEF | head -c 2304 >>/tmp/model/file0007.raw yes GHI | head -c 2304 >>/tmp/model/file0007.raw mcopy -n -i /tmp/10M.img ::file0001.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0003.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0005.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0007.raw /tmp/result hd /tmp/10M.img if diff -urq /tmp/model /tmp/result then echo Test okay else echo Test fail fi --->8--- Feel free to prepare a proper sandbox/py_test based tests based on the provided test scripts. --- fs/fat/fat_write.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index f946030f7d..8e4a235d7c 100644 --- a/fs/fat/fat_write.c +++ b/fs/fat/fat_write.c @@ -813,7 +813,9 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, offset = 0; else offset = pos - cur_pos; - wsize = min(cur_pos + actsize, filesize) - pos; + wsize = min_t(unsigned long long, actsize, filesize - cur_pos); + wsize -= offset; + if (get_set_cluster(mydata, curclust, offset, buffer, wsize, &actsize)) { printf("Error get-and-setting cluster\n"); From patchwork Mon Dec 2 11:11:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1203107 X-Patchwork-Delegate: matthias.bgg@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="aLiLXzWp"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47RMvF6mjYz9sP3 for ; Mon, 2 Dec 2019 22:14:17 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 9F6AEC21EA8; Mon, 2 Dec 2019 11:12:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 6C50CC21E56; Mon, 2 Dec 2019 11:11:37 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id D5FCAC21C38; Mon, 2 Dec 2019 11:11:34 +0000 (UTC) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by lists.denx.de (Postfix) with ESMTPS id 58030C21D56 for ; Mon, 2 Dec 2019 11:11:33 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20191202111131euoutp01c4e91ed4cf24a8f3a54a5bf552d1d1d7~ciXG8u8FY0750707507euoutp01D for ; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20191202111131euoutp01c4e91ed4cf24a8f3a54a5bf552d1d1d7~ciXG8u8FY0750707507euoutp01D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1575285091; bh=3pZ+HkfsltL+bO+jnLrEvMgVBCIkgIrt3zDYAjgh2Rw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=aLiLXzWpUqsomfBkgHy5OgWMDmKBU+TVKR3OlPNy5iY/DbSC5JjDr2+RO3RViqDpO d56m8tuZK9ygxxJoDoCYh9UKdPqrFpHofzIm9bn5UtkpDYeyv5+c+98rExLel7a4Je GTe5p4XuxAJdxHEEbOCwBIetv4tHxJv8aKcsm9TI= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20191202111130eucas1p174a814bc9233d2c7d55143b19f4fc5d6~ciXGrktZ21988719887eucas1p1G; Mon, 2 Dec 2019 11:11:30 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id A1.E2.61286.261F4ED5; Mon, 2 Dec 2019 11:11:30 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20191202111130eucas1p22c4bc5190db03f1f3e0f2bdaf0f839e6~ciXGSJzcO2188621886eucas1p2r; Mon, 2 Dec 2019 11:11:30 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20191202111130eusmtrp27a11f3ca8b572fabecc417f02633f3ff~ciXGRiZ1_1635516355eusmtrp2c; Mon, 2 Dec 2019 11:11:30 +0000 (GMT) X-AuditID: cbfec7f2-f0bff7000001ef66-14-5de4f16271e4 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id A8.87.08375.261F4ED5; Mon, 2 Dec 2019 11:11:30 +0000 (GMT) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191202111129eusmtip2cad40c814bc8580e439eca47db6a452d~ciXFq3i1D1448714487eusmtip2a; Mon, 2 Dec 2019 11:11:29 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Mon, 2 Dec 2019 12:11:15 +0100 Message-Id: <20191202111118.12868-4-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191202111118.12868-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprLKsWRmVeSWpSXmKPExsWy7djPc7pJH5/EGlz+YmaxccZ6Vosbv9pY LZ6/u8xksfbIXXaLBZOfsFpsmP+WxWLG5JdsFn/2/2SxmDppM7vF272d7BaHp35gdOD2mDfr BIvHh49xHq8OrGL3uHNtD5vH2Ts7GD36tqxi9Fi/5SqLx6ZXHgEcUVw2Kak5mWWpRfp2CVwZ Zxpmsxb8U66YvyuugfGxTBcjJ4eEgInElNnfWLsYuTiEBFYwSqx9vZQdwvnCKDHxTysThPOZ UaLhxGLGLkYOsJZvLQYQ8eWMErePPGKD69j/fh8jyFw2AUOJrrddbCC2iICExK/+q4wgRcwC G5gl7rUdAisSBpo07VgHmM0ioCpx+eIEdpANvAK2ErdnJkPcJy+xesMBZhCbU8BOYn/nYhaQ ORICi9gl5nb/Z4QocpE4/PQ4K4QtLPHq+BZ2CFtG4v/O+UwQDc2MEg/PrWWHcHoYJS43zYDq tpY4fPwiK8hmZgFNifW79CHCjhLPZp6GeplP4sZbQZAwM5A5adt0Zogwr0RHmxBEtZrErOPr 4NYevHCJGcL2kFjztwcapBMZJdavmck8gVF+FsKyBYyMqxjFU0uLc9NTiw3zUsv1ihNzi0vz 0vWS83M3MQITzel/xz/tYPx6KekQowAHoxIPb8erx7FCrIllxZW5hxglOJiVRHivKz2MFeJN SaysSi3Kjy8qzUktPsQozcGiJM5bzfAgWkggPbEkNTs1tSC1CCbLxMEp1cBoK7Jsq/Dur4vn ql297D1/ou+dY18dPCZs+6imH2vLKTXt1Koa/41qi4QnXmc5fF87R5ChUsbtVF2qzrMpcqKv Xv3f84fdMLrQ1Eb6joP4X/VPGZ5f9ZZxPbwcs5Onsd7qAYNFypzaA1U8W6+bFfa95OzkXpVm bLwodTsjg/mhE/7fCiaFhLorsRRnJBpqMRcVJwIAAdcFqjADAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrNLMWRmVeSWpSXmKPExsVy+t/xe7pJH5/EGjxplrXYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2iz/7f7JYTJ20md3i7d5OdovDUz8wOnB7zJt1 gsXjw8c4j1cHVrF73Lm2h83j7J0djB59W1YxeqzfcpXFY9MrjwCOKD2bovzSklSFjPziElul aEMLIz1DSws9IxNLPUNj81grI1MlfTublNSczLLUIn27BL2MMw2zWQv+KVfM3xXXwPhYpouR g0NCwETiW4tBFyMnh5DAUkaJpc1pILaEgIzEyWkNrBC2sMSfa11sXYxcQDWfGCU+XbkNlmAT MJToeguS4OQQEZCQ+NV/lRGkiFlgB7PE4retzCAJYaAF0451MILYLAKqEpcvTmAHWcwrYCtx e2YyxAJ5idUbDoCVcwrYSezvXMwCUiIEVPL+fdwERr4FjAyrGEVSS4tz03OLDfWKE3OLS/PS 9ZLzczcxAgN+27Gfm3cwXtoYfIhRgINRiYe349XjWCHWxLLiytxDjBIczEoivNeVHsYK8aYk VlalFuXHF5XmpBYfYjQFOmkis5Rocj4wGvNK4g1NDc0tLA3Njc2NzSyUxHk7BA7GCAmkJ5ak ZqemFqQWwfQxcXBKNTBK7pPNc3PsMLVxPOitbWVaWMfJsG5pXo2oylePOtOMhhVpS0K9vj4P vsfH8rI1ZpKmxtJPiZfCJvkY8JaG3V3itTr4+TTmLQuOXa6W3fr640/1rUlB/HXsV9+y3uP6 lPfTynOfw7u3B+Ydk5apOXZa1jW5q71NKMdZqV9HeUtYK9dWBpk32UosxRmJhlrMRcWJACJX 4ASOAgAA X-CMS-MailID: 20191202111130eucas1p22c4bc5190db03f1f3e0f2bdaf0f839e6 X-Msg-Generator: CA X-RootMTR: 20191202111130eucas1p22c4bc5190db03f1f3e0f2bdaf0f839e6 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191202111130eucas1p22c4bc5190db03f1f3e0f2bdaf0f839e6 References: <20191202111118.12868-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Heinrich Schuchardt , Tom Rini , Marek Szyprowski Subject: [U-Boot] [PATCH v4 3/6] dfu: mmc: rearrange the code X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Rename functions for bufferred file io operations to make them easier to understand. Also add missing file offset argument to them (currently unused). All this is a preparation to remove predefined file size limit (CONFIG_SYS_DFU_MAX_FILE_SIZE) for DFU read/write operations. Signed-off-by: Marek Szyprowski Acked-by: Lukasz Majewski --- drivers/dfu/dfu_mmc.c | 61 ++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/drivers/dfu/dfu_mmc.c b/drivers/dfu/dfu_mmc.c index 5b551f6ae1..e52c02be10 100644 --- a/drivers/dfu/dfu_mmc.c +++ b/drivers/dfu/dfu_mmc.c @@ -91,22 +91,8 @@ static int mmc_block_op(enum dfu_op op, struct dfu_entity *dfu, return 0; } -static int mmc_file_buffer(struct dfu_entity *dfu, void *buf, long *len) -{ - if (dfu_file_buf_len + *len > CONFIG_SYS_DFU_MAX_FILE_SIZE) { - dfu_file_buf_len = 0; - return -EINVAL; - } - - /* Add to the current buffer. */ - memcpy(dfu_file_buf + dfu_file_buf_len, buf, *len); - dfu_file_buf_len += *len; - - return 0; -} - static int mmc_file_op(enum dfu_op op, struct dfu_entity *dfu, - void *buf, u64 *len) + u64 offset, void *buf, u64 *len) { char dev_part_str[8]; int ret; @@ -137,7 +123,7 @@ static int mmc_file_op(enum dfu_op op, struct dfu_entity *dfu, switch (op) { case DFU_OP_READ: - ret = fs_read(dfu->name, (size_t)buf, 0, 0, &size); + ret = fs_read(dfu->name, (size_t)buf, offset, 0, &size); if (ret) { puts("dfu: fs_read error!\n"); return ret; @@ -145,7 +131,7 @@ static int mmc_file_op(enum dfu_op op, struct dfu_entity *dfu, *len = size; break; case DFU_OP_WRITE: - ret = fs_write(dfu->name, (size_t)buf, 0, *len, &size); + ret = fs_write(dfu->name, (size_t)buf, offset, *len, &size); if (ret) { puts("dfu: fs_write error!\n"); return ret; @@ -166,6 +152,30 @@ static int mmc_file_op(enum dfu_op op, struct dfu_entity *dfu, return ret; } +static int mmc_file_buf_write(struct dfu_entity *dfu, u64 offset, void *buf, long *len) +{ + if (dfu_file_buf_len + *len > CONFIG_SYS_DFU_MAX_FILE_SIZE) { + dfu_file_buf_len = 0; + return -EINVAL; + } + + /* Add to the current buffer. */ + memcpy(dfu_file_buf + dfu_file_buf_len, buf, *len); + dfu_file_buf_len += *len; + + return 0; +} + +static int mmc_file_buf_write_finish(struct dfu_entity *dfu) +{ + int ret = mmc_file_op(DFU_OP_WRITE, dfu, 0, dfu_file_buf, + &dfu_file_buf_len); + + /* Now that we're done */ + dfu_file_buf_len = 0; + return ret; +} + int dfu_write_medium_mmc(struct dfu_entity *dfu, u64 offset, void *buf, long *len) { @@ -177,7 +187,7 @@ int dfu_write_medium_mmc(struct dfu_entity *dfu, break; case DFU_FS_FAT: case DFU_FS_EXT4: - ret = mmc_file_buffer(dfu, buf, len); + ret = mmc_file_buf_write(dfu, offset, buf, len); break; default: printf("%s: Layout (%s) not (yet) supported!\n", __func__, @@ -193,11 +203,7 @@ int dfu_flush_medium_mmc(struct dfu_entity *dfu) if (dfu->layout != DFU_RAW_ADDR) { /* Do stuff here. */ - ret = mmc_file_op(DFU_OP_WRITE, dfu, dfu_file_buf, - &dfu_file_buf_len); - - /* Now that we're done */ - dfu_file_buf_len = 0; + ret = mmc_file_buf_write_finish(dfu); } return ret; @@ -214,7 +220,7 @@ int dfu_get_medium_size_mmc(struct dfu_entity *dfu, u64 *size) case DFU_FS_FAT: case DFU_FS_EXT4: dfu_file_buf_filled = -1; - ret = mmc_file_op(DFU_OP_SIZE, dfu, NULL, size); + ret = mmc_file_op(DFU_OP_SIZE, dfu, 0, NULL, size); if (ret < 0) return ret; if (*size > CONFIG_SYS_DFU_MAX_FILE_SIZE) @@ -227,14 +233,15 @@ int dfu_get_medium_size_mmc(struct dfu_entity *dfu, u64 *size) } } -static int mmc_file_unbuffer(struct dfu_entity *dfu, u64 offset, void *buf, + +static int mmc_file_buf_read(struct dfu_entity *dfu, u64 offset, void *buf, long *len) { int ret; u64 file_len; if (dfu_file_buf_filled == -1) { - ret = mmc_file_op(DFU_OP_READ, dfu, dfu_file_buf, &file_len); + ret = mmc_file_op(DFU_OP_READ, dfu, 0, dfu_file_buf, &file_len); if (ret < 0) return ret; dfu_file_buf_filled = file_len; @@ -259,7 +266,7 @@ int dfu_read_medium_mmc(struct dfu_entity *dfu, u64 offset, void *buf, break; case DFU_FS_FAT: case DFU_FS_EXT4: - ret = mmc_file_unbuffer(dfu, offset, buf, len); + ret = mmc_file_buf_read(dfu, offset, buf, len); break; default: printf("%s: Layout (%s) not (yet) supported!\n", __func__, From patchwork Mon Dec 2 11:11:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1203104 X-Patchwork-Delegate: matthias.bgg@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="NMXH8G7S"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47RMtB526Vz9sP3 for ; Mon, 2 Dec 2019 22:13:22 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 64382C21C6A; Mon, 2 Dec 2019 11:12:09 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 756E3C21E13; Mon, 2 Dec 2019 11:11:36 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id BC9F9C21C57; Mon, 2 Dec 2019 11:11:33 +0000 (UTC) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lists.denx.de (Postfix) with ESMTPS id D0488C21C38 for ; Mon, 2 Dec 2019 11:11:32 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20191202111131euoutp023c75cb31a910cb7898686fe37cf2ce4b~ciXHZV3KB0636006360euoutp02D for ; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20191202111131euoutp023c75cb31a910cb7898686fe37cf2ce4b~ciXHZV3KB0636006360euoutp02D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1575285091; bh=axemFk1mCGUEoTpVAS7qTO6ZWwkD/jLwjkjxbWY3/Rk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NMXH8G7SMHTdMY49iyyDGC48C82pY1XwHtSdQueDU5ChtnuMbRfYeTYa95af86fK6 YIKpxXoFkHV8AE97f8oZ+2ifRQPmu3Ew2yaYLEL9Z9UASn4aP4PCo68cLu4EtIPExG AvVGq5KbkADQeOn5kvCMCjE9paWrfyn6VL/98ijM= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20191202111131eucas1p118f019687d0587ab71996df1d50a075e~ciXHLUDbA1010610106eucas1p1x; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 4C.87.60679.361F4ED5; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20191202111131eucas1p1ed88eead5f2dc4cb4bd6218aefde50fe~ciXG2dX3C1987819878eucas1p1H; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20191202111131eusmtrp14a75d0149f0f15546231e62287baf4eb~ciXG12vGu1442414424eusmtrp16; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) X-AuditID: cbfec7f4-0e5ff7000001ed07-7b-5de4f163b49b Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 14.F8.07950.361F4ED5; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191202111130eusmtip2aacc37ce51ad10108752d2fa24701929~ciXGQehiC1824718247eusmtip2N; Mon, 2 Dec 2019 11:11:30 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Mon, 2 Dec 2019 12:11:16 +0100 Message-Id: <20191202111118.12868-5-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191202111118.12868-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprDKsWRmVeSWpSXmKPExsWy7djP87rJH5/EGixslbTYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2iz/7f7JYTJ20md3i7d5OdovDUz8wOnB7zJt1 gsXjw8c4j1cHVrF73Lm2h83j7J0djB59W1YxeqzfcpXFY9MrjwCOKC6blNSczLLUIn27BK6M pt7DLAVb5SqefbNsYNwo0cXIySEhYCKxbusGZhBbSGAFo8TyCQpdjFxA9hdGibbGg8wQzmdG iX/n3rDAdFzu7mGFSCxnlNjauJARrmVz3xOwWWwChhJdb7vYQGwRAQmJX/1XwYqYBTYwS9xr O8QIkhAW8JLY/O0dWBGLgKrE85VbmUBsXgFbiX+zf0Gtk5dYveEA2FBOATuJ/Z2LWUAGSQgs Y5f4MucbG0SRi8T6y7+YIWxhiVfHt7BD2DISpyf3QDU0M0o8PLeWHcLpYZS43DSDEaLKWuLw 8YtAH3EA3acpsX6XPkTYUeLdlRvMIGEJAT6JG28FQcLMQOakbdOhwrwSHW1CENVqErOOr4Nb e/DCJagSD4nmedDwncgo8bSnbAKj/CyEVQsYGVcxiqeWFuempxYb5aWW6xUn5haX5qXrJefn bmIEppnT/45/2cG460/SIUYBDkYlHt6OV49jhVgTy4orcw8xSnAwK4nwXld6GCvEm5JYWZVa lB9fVJqTWnyIUZqDRUmct5rhQbSQQHpiSWp2ampBahFMlomDU6qB0VTuf0zdtk+y4tPlsov7 4qdJn/779XN02Tef//UmXHbdu9c8+sBr1fDr6mWbqhoXiSTNlujbsWLf0iZNu1RpzxXPGN/4 NGXXfb/lVxiFTUNPnEoJLJP/v7P1PF/LuSvhwsdPsfL81Z7w/vg84wcvXTaEJ73asZ/3YPxV 1Vkc5w2d+6bnHkj+osRSnJFoqMVcVJwIACiiMX4vAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrHLMWRmVeSWpSXmKPExsVy+t/xe7rJH5/EGhy/zmqxccZ6Vosbv9pY LZ6/u8xksfbIXXaLBZOfsFpsmP+WxWLG5JdsFn/2/2SxmDppM7vF272d7BaHp35gdOD2mDfr BIvHh49xHq8OrGL3uHNtD5vH2Ts7GD36tqxi9Fi/5SqLx6ZXHgEcUXo2RfmlJakKGfnFJbZK 0YYWRnqGlhZ6RiaWeobG5rFWRqZK+nY2Kak5mWWpRfp2CXoZTb2HWQq2ylU8+2bZwLhRoouR k0NCwETicncPaxcjF4eQwFJGiaa15xkhEjISJ6c1sELYwhJ/rnWxQRR9YpQ4+foGG0iCTcBQ outtF5gtIiAh8av/KiNIEbPADmaJxW9bmUESwgJeEpu/vQMrYhFQlXi+cisTiM0rYCvxb/Yv FogN8hKrNxwAq+cUsJPY37kYKM4BtM1W4v37uAmMfAsYGVYxiqSWFuem5xYb6RUn5haX5qXr JefnbmIEhv22Yz+37GDsehd8iFGAg1GJh7fj1eNYIdbEsuLK3EOMEhzMSiK815UexgrxpiRW VqUW5ccXleakFh9iNAW6aSKzlGhyPjAm80riDU0NzS0sDc2NzY3NLJTEeTsEDsYICaQnlqRm p6YWpBbB9DFxcEo1MO669+D9DENDKbuIgGLRadUrZG5cP1MvILDlSf3Nxqau6ykNsTtWWIoe 7ljkt0v7mWXj3Rf2DSzHrhr/XVTOk7OcLWuaXNaTtg89aWpLpnM6iRycxXmipv3E640Bf/fN /HK5ZaeX55pL517qnlDPufL5yzaHQzsmrmZwf6a7P/FuzYQ8zgTtrM1KLMUZiYZazEXFiQAG gJOMkQIAAA== X-CMS-MailID: 20191202111131eucas1p1ed88eead5f2dc4cb4bd6218aefde50fe X-Msg-Generator: CA X-RootMTR: 20191202111131eucas1p1ed88eead5f2dc4cb4bd6218aefde50fe X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191202111131eucas1p1ed88eead5f2dc4cb4bd6218aefde50fe References: <20191202111118.12868-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Heinrich Schuchardt , Tom Rini , Marek Szyprowski Subject: [U-Boot] [PATCH v4 4/6] dfu: mmc: remove file size limit for io operations X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Add support for operations on files larger than CONFIG_SYS_DFU_MAX_FILE_SIZE. The buffered io mechanism is still used for aggregating io requests, so for files up to CONFIG_SYS_DFU_MAX_FILE_SIZE nothing is changed and they will be handled in a single filesystem call. Signed-off-by: Marek Szyprowski Acked-by: Lukasz Majewski --- drivers/dfu/dfu_mmc.c | 46 ++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/drivers/dfu/dfu_mmc.c b/drivers/dfu/dfu_mmc.c index e52c02be10..0d495a785b 100644 --- a/drivers/dfu/dfu_mmc.c +++ b/drivers/dfu/dfu_mmc.c @@ -17,7 +17,7 @@ static unsigned char *dfu_file_buf; static u64 dfu_file_buf_len; -static long dfu_file_buf_filled; +static u64 dfu_file_buf_offset; static int mmc_block_op(enum dfu_op op, struct dfu_entity *dfu, u64 offset, void *buf, long *len) @@ -123,7 +123,7 @@ static int mmc_file_op(enum dfu_op op, struct dfu_entity *dfu, switch (op) { case DFU_OP_READ: - ret = fs_read(dfu->name, (size_t)buf, offset, 0, &size); + ret = fs_read(dfu->name, (size_t)buf, offset, *len, &size); if (ret) { puts("dfu: fs_read error!\n"); return ret; @@ -154,25 +154,38 @@ static int mmc_file_op(enum dfu_op op, struct dfu_entity *dfu, static int mmc_file_buf_write(struct dfu_entity *dfu, u64 offset, void *buf, long *len) { - if (dfu_file_buf_len + *len > CONFIG_SYS_DFU_MAX_FILE_SIZE) { + int ret = 0; + + if (offset == 0) { dfu_file_buf_len = 0; - return -EINVAL; + dfu_file_buf_offset = 0; } /* Add to the current buffer. */ + if (dfu_file_buf_len + *len > CONFIG_SYS_DFU_MAX_FILE_SIZE) + *len = CONFIG_SYS_DFU_MAX_FILE_SIZE - dfu_file_buf_len; memcpy(dfu_file_buf + dfu_file_buf_len, buf, *len); dfu_file_buf_len += *len; - return 0; + if (dfu_file_buf_len == CONFIG_SYS_DFU_MAX_FILE_SIZE) { + ret = mmc_file_op(DFU_OP_WRITE, dfu, dfu_file_buf_offset, + dfu_file_buf, &dfu_file_buf_len); + dfu_file_buf_offset += dfu_file_buf_len; + dfu_file_buf_len = 0; + } + + return ret; } static int mmc_file_buf_write_finish(struct dfu_entity *dfu) { - int ret = mmc_file_op(DFU_OP_WRITE, dfu, 0, dfu_file_buf, - &dfu_file_buf_len); + int ret = mmc_file_op(DFU_OP_WRITE, dfu, dfu_file_buf_offset, + dfu_file_buf, &dfu_file_buf_len); /* Now that we're done */ dfu_file_buf_len = 0; + dfu_file_buf_offset = 0; + return ret; } @@ -219,12 +232,9 @@ int dfu_get_medium_size_mmc(struct dfu_entity *dfu, u64 *size) return 0; case DFU_FS_FAT: case DFU_FS_EXT4: - dfu_file_buf_filled = -1; ret = mmc_file_op(DFU_OP_SIZE, dfu, 0, NULL, size); if (ret < 0) return ret; - if (*size > CONFIG_SYS_DFU_MAX_FILE_SIZE) - return -1; return 0; default: printf("%s: Layout (%s) not (yet) supported!\n", __func__, @@ -238,19 +248,23 @@ static int mmc_file_buf_read(struct dfu_entity *dfu, u64 offset, void *buf, long *len) { int ret; - u64 file_len; - if (dfu_file_buf_filled == -1) { - ret = mmc_file_op(DFU_OP_READ, dfu, 0, dfu_file_buf, &file_len); + if (offset == 0 || offset >= dfu_file_buf_offset + dfu_file_buf_len || + offset + *len < dfu_file_buf_offset) { + u64 file_len = CONFIG_SYS_DFU_MAX_FILE_SIZE; + + ret = mmc_file_op(DFU_OP_READ, dfu, offset, dfu_file_buf, + &file_len); if (ret < 0) return ret; - dfu_file_buf_filled = file_len; + dfu_file_buf_len = file_len; + dfu_file_buf_offset = offset; } - if (offset + *len > dfu_file_buf_filled) + if (offset + *len > dfu_file_buf_offset + dfu_file_buf_len) return -EINVAL; /* Add to the current buffer. */ - memcpy(buf, dfu_file_buf + offset, *len); + memcpy(buf, dfu_file_buf + offset - dfu_file_buf_offset, *len); return 0; } From patchwork Mon Dec 2 11:11:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1203102 X-Patchwork-Delegate: matthias.bgg@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="sCmT6YEi"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47RMs82qLVz9sP3 for ; Mon, 2 Dec 2019 22:12:28 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id CF8AEC21E34; Mon, 2 Dec 2019 11:11:54 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id F1030C21DB3; Mon, 2 Dec 2019 11:11:35 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id A3692C21C50; Mon, 2 Dec 2019 11:11:33 +0000 (UTC) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lists.denx.de (Postfix) with ESMTPS id D1498C21C57 for ; Mon, 2 Dec 2019 11:11:32 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20191202111132euoutp0247dea0401a4ea68da74ec9af5085319b~ciXIEeMpn0593905939euoutp02d for ; Mon, 2 Dec 2019 11:11:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20191202111132euoutp0247dea0401a4ea68da74ec9af5085319b~ciXIEeMpn0593905939euoutp02d DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1575285092; bh=CwwafpuhTZS6ffS0Qs2YmyoWKnhPg+/Y3yZNpaGiDxA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sCmT6YEi4ROE3nlh8Bw6byyfAEgcXrRRbh/YQHGvbCQ3tfBbrrOKs/1oS3iBbaK/z 760UsvV7B8WG8YppPLA7B/daKjZ1L3dsddKytB/5Htms5+50YmOJ2HDeEoH4gtNYSv T+ekK/yDPkhU3M+CIoBldrRVHb2gdXwx+c4E/Ayk= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20191202111132eucas1p2f281fe9a8e92e6362938fd8e5857d706~ciXHwFnFO2172121721eucas1p2r; Mon, 2 Dec 2019 11:11:32 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id E4.F2.60698.361F4ED5; Mon, 2 Dec 2019 11:11:32 +0000 (GMT) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20191202111131eucas1p27821b1ee9dcca16146060fd744726a3c~ciXHcvsxR1647916479eucas1p2G; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20191202111131eusmtrp1fbcf62b8881300bd79660a84f8fd9b83~ciXHcHgTj1453714537eusmtrp1T; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) X-AuditID: cbfec7f5-a0fff7000001ed1a-c0-5de4f1638d06 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 15.F8.07950.361F4ED5; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191202111131eusmtip2f825ad9937fb22c2e2b914c6b54ef1a0~ciXG1C8xI1559815598eusmtip2Z; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Mon, 2 Dec 2019 12:11:17 +0100 Message-Id: <20191202111118.12868-6-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191202111118.12868-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprHKsWRmVeSWpSXmKPExsWy7djP87opH5/EGkzzt9g4Yz2rxY1fbawW z99dZrJYe+Quu8WCyU9YLTbMf8tiMWPySzaLP/t/slhMnbSZ3eLt3k52i8NTPzA6cHvMm3WC xePDxziPVwdWsXvcubaHzePsnR2MHn1bVjF6rN9ylcVj0yuPAI4oLpuU1JzMstQifbsEroy9 3xvYC2YpVKzsWMDUwPhWuouRk0NCwESi7XoLSxcjF4eQwApGiderGpggnC+MEpMbH0NlPjNK nOqZzwjT8nX1SXaIxHJGic4na5nhWtZsfAhWxSZgKNH1tosNxBYRkJD41X+VEaSIWWADs8S9 tkNgRcICIRIPfj9mBrFZBFQl9v3/zQpi8wrYSnSebmSBWCcvsXrDAbAaTgE7if2di6Hiy9gl VuzwgrBdJJrmzmWDsIUlXh3fwg5hy0icntwD9oOEQDOjxMNza9khnB5GictNM6AespY4fPwi 0GYOoPM0Jdbv0ocIO0q8ufqKBSQsIcAnceOtIEiYGcictG06M0SYV6KjTQiiWk1i1vF1cGsP XrjEDGF7SEy7fZcVEkATGSUOTjrBOoFRfhbCsgWMjKsYxVNLi3PTU4uN81LL9YoTc4tL89L1 kvNzNzECU83pf8e/7mDc9yfpEKMAB6MSD2/Hq8exQqyJZcWVuYcYJTiYlUR4rys9jBXiTUms rEotyo8vKs1JLT7EKM3BoiTOW83wIFpIID2xJDU7NbUgtQgmy8TBKdXAWLL0U+VXIY6QKP+7 LZuTl29gD46rSOFID/bz6uO2uOH1xKq28cmsiZMDj0yXDrwzVfcWnySPE/OryRuN+8ptF15M P3KgJSr2p/isyTLuJf3zJlfnqjyYJBzO/oul5xAfx3NXoRX+s6c/WnLSicm0+vxt+eaPW4Ml t1QferYoT31yuM+1ZS1KSizFGYmGWsxFxYkAL0R/rTEDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrPLMWRmVeSWpSXmKPExsVy+t/xe7rJH5/EGmydrm2xccZ6Vosbv9pY LZ6/u8xksfbIXXaLBZOfsFpsmP+WxWLG5JdsFn/2/2SxmDppM7vF272d7BaHp35gdOD2mDfr BIvHh49xHq8OrGL3uHNtD5vH2Ts7GD36tqxi9Fi/5SqLx6ZXHgEcUXo2RfmlJakKGfnFJbZK 0YYWRnqGlhZ6RiaWeobG5rFWRqZK+nY2Kak5mWWpRfp2CXoZe783sBfMUqhY2bGAqYHxrXQX IyeHhICJxNfVJ9m7GLk4hASWMkosW/mCESIhI3FyWgMrhC0s8edaFxtE0SdGiRU3bjKDJNgE DCW63oIkODlEBCQkfvVfZQQpYhbYwSyx+G0rWJGwQJDEluf3wYpYBFQl9v3/DTaVV8BWovN0 IwvEBnmJ1RsOgNVzCthJ7O9cDBTnANpmK/H+fdwERr4FjAyrGEVSS4tz03OLjfSKE3OLS/PS 9ZLzczcxAgN/27GfW3Ywdr0LPsQowMGoxMPb8epxrBBrYllxZe4hRgkOZiUR3utKD2OFeFMS K6tSi/Lji0pzUosPMZoC3TSRWUo0OR8YlXkl8YamhuYWlobmxubGZhZK4rwdAgdjhATSE0tS s1NTC1KLYPqYODilGhgzixZ5T0pbcJqVbeUTTmvhibXKdy7+jp3gnHhVcPk7i4DCzGlpsRZt 1UpPgs5x75D4lMjXXjS7bV3GvqItV33Z7QUCd0zM9OMzEbjsuWTH9P0PpD0yvGcu+SZyQvOl D1+VecZmFivfjjLe1XV2P978mf74l/SkqeLVhj8+T78W+2ifr7AX11klluKMREMt5qLiRAAV l2nLkgIAAA== X-CMS-MailID: 20191202111131eucas1p27821b1ee9dcca16146060fd744726a3c X-Msg-Generator: CA X-RootMTR: 20191202111131eucas1p27821b1ee9dcca16146060fd744726a3c X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191202111131eucas1p27821b1ee9dcca16146060fd744726a3c References: <20191202111118.12868-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Heinrich Schuchardt , Tom Rini , Marek Szyprowski Subject: [U-Boot] [PATCH v4 5/6] usb: dwc2_udc_otg: add bcm2835 SoC (Raspberry Pi4) support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Broadcom 2835 SoC requires special conversion of physical memory addresses for DMA purpose, so add needed wrappers to dwc2_udc_otg driver. Also extend the list of compatible devices with 'brcm,bcm2835-usb' entry. This allows to use USB gadget drivers (i.e. DFU) on Raspberry Pi4 boards. Signed-off-by: Marek Szyprowski Reviewed-by: Lukasz Majewski --- drivers/usb/gadget/dwc2_udc_otg.c | 2 ++ drivers/usb/gadget/dwc2_udc_otg_xfer_dma.c | 12 ++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/usb/gadget/dwc2_udc_otg.c b/drivers/usb/gadget/dwc2_udc_otg.c index 35f4147840..49f342eb21 100644 --- a/drivers/usb/gadget/dwc2_udc_otg.c +++ b/drivers/usb/gadget/dwc2_udc_otg.c @@ -31,6 +31,7 @@ #include #include +#include #include #include #include @@ -1213,6 +1214,7 @@ static int dwc2_udc_otg_remove(struct udevice *dev) static const struct udevice_id dwc2_udc_otg_ids[] = { { .compatible = "snps,dwc2" }, + { .compatible = "brcm,bcm2835-usb" }, { .compatible = "st,stm32mp1-hsotg", .data = (ulong)dwc2_set_stm32mp1_hsotg_params }, {}, diff --git a/drivers/usb/gadget/dwc2_udc_otg_xfer_dma.c b/drivers/usb/gadget/dwc2_udc_otg_xfer_dma.c index 7eb632d3b1..5e695b4ff2 100644 --- a/drivers/usb/gadget/dwc2_udc_otg_xfer_dma.c +++ b/drivers/usb/gadget/dwc2_udc_otg_xfer_dma.c @@ -28,7 +28,7 @@ static inline void dwc2_udc_ep0_zlp(struct dwc2_udc *dev) { u32 ep_ctrl; - writel(usb_ctrl_dma_addr, ®->in_endp[EP0_CON].diepdma); + writel(phys_to_bus((unsigned long)usb_ctrl_dma_addr), ®->in_endp[EP0_CON].diepdma); writel(DIEPT_SIZ_PKT_CNT(1), ®->in_endp[EP0_CON].dieptsiz); ep_ctrl = readl(®->in_endp[EP0_CON].diepctl); @@ -49,7 +49,7 @@ static void dwc2_udc_pre_setup(void) writel(DOEPT_SIZ_PKT_CNT(1) | sizeof(struct usb_ctrlrequest), ®->out_endp[EP0_CON].doeptsiz); - writel(usb_ctrl_dma_addr, ®->out_endp[EP0_CON].doepdma); + writel(phys_to_bus((unsigned long)usb_ctrl_dma_addr), ®->out_endp[EP0_CON].doepdma); ep_ctrl = readl(®->out_endp[EP0_CON].doepctl); writel(ep_ctrl|DEPCTL_EPENA, ®->out_endp[EP0_CON].doepctl); @@ -75,7 +75,7 @@ static inline void dwc2_ep0_complete_out(void) writel(DOEPT_SIZ_PKT_CNT(1) | sizeof(struct usb_ctrlrequest), ®->out_endp[EP0_CON].doeptsiz); - writel(usb_ctrl_dma_addr, ®->out_endp[EP0_CON].doepdma); + writel(phys_to_bus((unsigned long)usb_ctrl_dma_addr), ®->out_endp[EP0_CON].doepdma); ep_ctrl = readl(®->out_endp[EP0_CON].doepctl); writel(ep_ctrl|DEPCTL_EPENA|DEPCTL_CNAK, @@ -113,7 +113,7 @@ static int setdma_rx(struct dwc2_ep *ep, struct dwc2_request *req) (unsigned long) ep->dma_buf + ROUND(ep->len, CONFIG_SYS_CACHELINE_SIZE)); - writel((unsigned long) ep->dma_buf, ®->out_endp[ep_num].doepdma); + writel(phys_to_bus((unsigned long)ep->dma_buf), ®->out_endp[ep_num].doepdma); writel(DOEPT_SIZ_PKT_CNT(pktcnt) | DOEPT_SIZ_XFER_SIZE(length), ®->out_endp[ep_num].doeptsiz); writel(DEPCTL_EPENA|DEPCTL_CNAK|ctrl, ®->out_endp[ep_num].doepctl); @@ -161,7 +161,7 @@ static int setdma_tx(struct dwc2_ep *ep, struct dwc2_request *req) while (readl(®->grstctl) & TX_FIFO_FLUSH) ; - writel((unsigned long) ep->dma_buf, ®->in_endp[ep_num].diepdma); + writel(phys_to_bus((unsigned long)ep->dma_buf), ®->in_endp[ep_num].diepdma); writel(DIEPT_SIZ_PKT_CNT(pktcnt) | DIEPT_SIZ_XFER_SIZE(length), ®->in_endp[ep_num].dieptsiz); @@ -921,7 +921,7 @@ static int dwc2_udc_get_status(struct dwc2_udc *dev, (unsigned long) usb_ctrl + ROUND(sizeof(g_status), CONFIG_SYS_CACHELINE_SIZE)); - writel(usb_ctrl_dma_addr, ®->in_endp[EP0_CON].diepdma); + writel(phys_to_bus(usb_ctrl_dma_addr), ®->in_endp[EP0_CON].diepdma); writel(DIEPT_SIZ_PKT_CNT(1) | DIEPT_SIZ_XFER_SIZE(2), ®->in_endp[EP0_CON].dieptsiz); From patchwork Mon Dec 2 11:11:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1203106 X-Patchwork-Delegate: matthias.bgg@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="omjmVL++"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47RMtq1q4gz9sP3 for ; Mon, 2 Dec 2019 22:13:55 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id CBD3BC21E3A; Mon, 2 Dec 2019 11:12:50 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=SPF_HELO_PASS, T_DKIM_INVALID, UPPERCASE_50_75 autolearn=no autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id EF02AC21E4E; Mon, 2 Dec 2019 11:11:37 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id ECE48C21C50; Mon, 2 Dec 2019 11:11:34 +0000 (UTC) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by lists.denx.de (Postfix) with ESMTPS id 62184C21D74 for ; Mon, 2 Dec 2019 11:11:33 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20191202111133euoutp01aa1299b527e644b3a7a6978578ab9912~ciXIpX2nV0741707417euoutp01J for ; Mon, 2 Dec 2019 11:11:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20191202111133euoutp01aa1299b527e644b3a7a6978578ab9912~ciXIpX2nV0741707417euoutp01J DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1575285093; bh=DKjlCk4Rt+vNJm5UAWX5otapZ+ncrxfWHMoIRRjG3ME=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=omjmVL++sLsrlnqnQowICsVwscHRdeo1FiZbc6e3KB4CwarqRMwJSqDxFcjExAPAg Rw9T1zuuSx/Eqm8PmosIZmMY+twsUlfFwuc3SL3QnQ2xYA1JXVP90jwIorDpEVo1Sn w8wWfngVmUaOZ3UCplKhopKArGqxUPAhw1oaIgH4= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20191202111132eucas1p2cf91f2bdc36ed8714cdc4836f55fd8bd~ciXIXnF4M2177121771eucas1p2r; Mon, 2 Dec 2019 11:11:32 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 0E.87.60679.461F4ED5; Mon, 2 Dec 2019 11:11:32 +0000 (GMT) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20191202111132eucas1p1e25756addc317af3069b77557c8de60b~ciXIAeEVG0696006960eucas1p1L; Mon, 2 Dec 2019 11:11:32 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20191202111132eusmtrp1cac48685515f6847a87991fed762ead7~ciXH-6jGg1442414424eusmtrp18; Mon, 2 Dec 2019 11:11:32 +0000 (GMT) X-AuditID: cbfec7f4-0e5ff7000001ed07-81-5de4f164b361 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id D5.F8.07950.461F4ED5; Mon, 2 Dec 2019 11:11:32 +0000 (GMT) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191202111131eusmtip28ca6c8dbae9f9165fb4319c3a85ba68e~ciXHZt92u1834718347eusmtip2G; Mon, 2 Dec 2019 11:11:31 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Mon, 2 Dec 2019 12:11:18 +0100 Message-Id: <20191202111118.12868-7-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191202111118.12868-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA0WSe0hTYRjG+9zZ2dlscZqCr7MQVgplaorhIUst/OOQdBECI7FaelBTp2xq aVAyRXRY3lqtVSZWGOatOUyG12nONM0LmppKkhGODG9gmlabZ9Z/v/d9nud7Pj4+giN6xBUT cbIURi6TJkhwAdbQtdbvGb04G3n4SfMh6rWmlkuNredwqW8/hu2o6s4pHlVWMsul6p7OY5Sm ZA6nNlrXMEpdXM+j5pvzeFSHegEF29Ol2m6MXli8RJvbKnn05GgTTvdNNiL6rr4S0bX6EYzW melzxEXBsWgmIS6NkXsHXhHEdrafTTbuvaHWz+KZqM5ZhfgEkH4w/bAQUyEBISJfIuhT6zGr ICJXECypj7C8jGCw0307oKzQ2AIVCO4X1doGS6Dp17Kd1YWTPqCaV+FWdiQB1gtGkNXEIes4 MJ1jRFbBgQyFD1kTW3UY6QYNb3u2wkLyOLwZ6MXZOld4VdfGsTKfDITWvGdbbUCW8yB7vIXH mkKgYPUFl2UHMJv0tv0e6C3JtwWyEMz0V/PYIR/BsFKDWFcAdJgGLWnCcr8DUGvwtiKQJ6Br U8TiLhib3201cyxY3PCAw66FkJsjYs9wB62p5l9r+8CQzUKDsjuKfZ8iBC1V7/BC5Kr9X1WG UCVyYlIViTGMwlfGXPdSSBMVqbIYr6ikRB2yfJne36aVRmTYuGpEJIEkO4W55i+RIq40TZGe aERAcCSOwo+SmUiRMFqansHIky7LUxMYhRG5EJjESXhzx+cIERkjTWHiGSaZkW+rdgRfnImq Ty8E8XueuzQZ7umubZ6a+skN20gqFw/uT1Gi2/5Bg0W3zkOY4x3CTY27NV1A5okAz9JwJf01 w7QZ7z7n++m9fba/sGfGOVgcqks2TMzW+8F4YexQ32qNYVR80sOwcHTfGfT9cZg5Yskf7KtH 9Xy9h5xC2hBhFX/4j2+4BFPESn0OcuQK6V+OCtDzLgMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrHLMWRmVeSWpSXmKPExsVy+t/xe7opH5/EGmxqFLHYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2iz/7f7JYTJ20md3i7d5OdovDUz8wOnB7zJt1 gsXjw8c4j1cHVrF73Lm2h83j7J0djB59W1YxeqzfcpXFY9MrjwCOKD2bovzSklSFjPziElul aEMLIz1DSws9IxNLPUNj81grI1MlfTublNSczLLUIn27BL2MIwf9Cw7JVkzd8oStgXGDZBcj J4eEgIlE0/IZLF2MXBxCAksZJfZNPccCkZCRODmtgRXCFpb4c62LDaLoE6PEtTNtYEVsAoYS XW9BEpwcIgISEr/6rzKCFDEL7GCWWPy2lRkkISzgLXG++RZYA4uAqsS2o6eYQGxeAVuJ7RdO s0FskJdYveEAWD2ngJ3E/s7FQPUcQNtsJd6/j5vAyLeAkWEVo0hqaXFuem6xkV5xYm5xaV66 XnJ+7iZGYNhvO/Zzyw7GrnfBhxgFOBiVeHg7Xj2OFWJNLCuuzD3EKMHBrCTCe13pYawQb0pi ZVVqUX58UWlOavEhRlOgmyYyS4km5wNjMq8k3tDU0NzC0tDc2NzYzEJJnLdD4GCMkEB6Yklq dmpqQWoRTB8TB6dUA+NSY8YtnVNDCg9Ht0kcTU53ecfP5MzmlLndy+O/QDf75DVG0S8ZJL8b Tk1mb3VQrOo/V3jh6mT5soep4s4/Qj4+dvhg61x+S2r9IfXw10zhS/wdLxhNm79wVfUUT89X cYJsbIIhTxdU/Vp9PVZi96QtqrzxDOWNZUJHnzz+ef7GKkFT/0nsD5VYijMSDbWYi4oTAe92 BRaRAgAA X-CMS-MailID: 20191202111132eucas1p1e25756addc317af3069b77557c8de60b X-Msg-Generator: CA X-RootMTR: 20191202111132eucas1p1e25756addc317af3069b77557c8de60b X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191202111132eucas1p1e25756addc317af3069b77557c8de60b References: <20191202111118.12868-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Heinrich Schuchardt , Tom Rini , Marek Szyprowski Subject: [U-Boot] [PATCH v4 6/6] config: enable DFU over USB on Raspberry Pi4 boards X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Enable support for DFU over USB. This requires to enable USB gadget, DWC2 UDC OTG driver and DFU command. DFU entities are defined for the following firmware objects: u-boot.bin, uboot.env, config.txt, and zImage/Image. Signed-off-by: Marek Szyprowski Reviewed-by: Lukasz Majewski --- configs/rpi_4_32b_defconfig | 11 +++++++++++ configs/rpi_4_defconfig | 11 +++++++++++ include/configs/rpi.h | 20 ++++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig index 7ff390cd24..9d0515029c 100644 --- a/configs/rpi_4_32b_defconfig +++ b/configs/rpi_4_32b_defconfig @@ -12,6 +12,7 @@ CONFIG_MISC_INIT_R=y # CONFIG_DISPLAY_CPUINFO is not set # CONFIG_DISPLAY_BOARDINFO is not set CONFIG_SYS_PROMPT="U-Boot> " +CONFIG_CMD_DFU=y # CONFIG_CMD_FLASH is not set CONFIG_CMD_GPIO=y CONFIG_CMD_MMC=y @@ -21,6 +22,7 @@ CONFIG_ENV_FAT_INTERFACE="mmc" CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" CONFIG_SYS_RELOC_GD_ENV_ADDR=y CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +CONFIG_DFU_MMC=y CONFIG_DM_KEYBOARD=y CONFIG_DM_MMC=y CONFIG_MMC_SDHCI=y @@ -28,6 +30,15 @@ CONFIG_MMC_SDHCI_BCM2835=y CONFIG_PINCTRL=y # CONFIG_PINCTRL_GENERIC is not set # CONFIG_REQUIRE_SERIAL_CONSOLE is not set +CONFIG_USB=y +CONFIG_DM_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="FSL" +CONFIG_USB_GADGET_VENDOR_NUM=0x0525 +CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 +CONFIG_USB_GADGET_DWC2_OTG=y +CONFIG_USB_GADGET_DOWNLOAD=y CONFIG_DM_VIDEO=y CONFIG_SYS_WHITE_ON_BLACK=y CONFIG_CONSOLE_SCROLL_LINES=10 diff --git a/configs/rpi_4_defconfig b/configs/rpi_4_defconfig index c5089eb9c8..3d660d182a 100644 --- a/configs/rpi_4_defconfig +++ b/configs/rpi_4_defconfig @@ -12,6 +12,7 @@ CONFIG_MISC_INIT_R=y # CONFIG_DISPLAY_CPUINFO is not set # CONFIG_DISPLAY_BOARDINFO is not set CONFIG_SYS_PROMPT="U-Boot> " +CONFIG_CMD_DFU=y # CONFIG_CMD_FLASH is not set CONFIG_CMD_GPIO=y CONFIG_CMD_MMC=y @@ -21,6 +22,7 @@ CONFIG_ENV_FAT_INTERFACE="mmc" CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" CONFIG_SYS_RELOC_GD_ENV_ADDR=y CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +CONFIG_DFU_MMC=y CONFIG_DM_KEYBOARD=y CONFIG_DM_MMC=y CONFIG_MMC_SDHCI=y @@ -28,6 +30,15 @@ CONFIG_MMC_SDHCI_BCM2835=y CONFIG_PINCTRL=y # CONFIG_PINCTRL_GENERIC is not set # CONFIG_REQUIRE_SERIAL_CONSOLE is not set +CONFIG_USB=y +CONFIG_DM_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="FSL" +CONFIG_USB_GADGET_VENDOR_NUM=0x0525 +CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 +CONFIG_USB_GADGET_DWC2_OTG=y +CONFIG_USB_GADGET_DOWNLOAD=y CONFIG_DM_VIDEO=y CONFIG_SYS_WHITE_ON_BLACK=y CONFIG_CONSOLE_SCROLL_LINES=10 diff --git a/include/configs/rpi.h b/include/configs/rpi.h index 83e258a6b9..b53a4b65d0 100644 --- a/include/configs/rpi.h +++ b/include/configs/rpi.h @@ -74,6 +74,25 @@ #define CONFIG_TFTP_TSIZE #endif +/* DFU over USB/UDC */ +#ifdef CONFIG_CMD_DFU +#define CONFIG_SYS_DFU_DATA_BUF_SIZE SZ_1M +#define CONFIG_SYS_DFU_MAX_FILE_SIZE SZ_2M + +#ifdef CONFIG_ARM64 +#define KERNEL_FILENAME "Image" +#else +#define KERNEL_FILENAME "zImage" +#endif + +#define ENV_DFU_SETTINGS \ + "dfu_alt_info=u-boot.bin fat 0 1;uboot.env fat 0 1;" \ + "config.txt fat 0 1;" \ + KERNEL_FILENAME " fat 0 1\0" +#else +#define ENV_DFU_SETTINGS "" +#endif + /* Console configuration */ #define CONFIG_SYS_CBSIZE 1024 @@ -188,6 +207,7 @@ #define CONFIG_EXTRA_ENV_SETTINGS \ "dhcpuboot=usb start; dhcp u-boot.uimg; bootm\0" \ ENV_DEVICE_SETTINGS \ + ENV_DFU_SETTINGS \ ENV_MEM_LAYOUT_SETTINGS \ BOOTENV