From patchwork Tue Sep 24 13:11:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1166579 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 (mailfrom) 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="bzE7my1t"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 46d1mS27xMz9sDB for ; Tue, 24 Sep 2019 23:11:36 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id F0C38C21E77; Tue, 24 Sep 2019 13:11:27 +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 150E2C21D56; Tue, 24 Sep 2019 13:11:25 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id EEC27C21DD4; Tue, 24 Sep 2019 13:11:23 +0000 (UTC) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lists.denx.de (Postfix) with ESMTPS id C6C3BC21C29 for ; Tue, 24 Sep 2019 13:11:21 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20190924131120euoutp0286868caa3da19d7af5d792330a0676eb~HYfCFiEGt0931009310euoutp02y for ; Tue, 24 Sep 2019 13:11:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20190924131120euoutp0286868caa3da19d7af5d792330a0676eb~HYfCFiEGt0931009310euoutp02y DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1569330680; bh=xkzbukVVuSx2+P7Op58RIQ8sdiOYrHDvdbCqrelxt4E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bzE7my1tI2QQf56IQlqtVp75IkEZTZm8jaO4z5qO2UqshgpkTvo9A3VhZHTB6yIlr 3q94nuybyHXlaAmFQ74rQWW2iIZtmJ3bNTI6SUm8HmLDXOlWQgTu+VHoo1g14+t2/z vkbaPxL/JA4CNb2dcvlhg8tB0koMvhGfTaMjp6yA= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20190924131120eucas1p17b660a2005bf41e185b9abff73b18136~HYfB6hHe90343003430eucas1p1p; Tue, 24 Sep 2019 13:11:20 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 1E.2B.04309.8F51A8D5; Tue, 24 Sep 2019 14:11:20 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20190924131120eucas1p251e877771c864895a656cc8113cccb59~HYfBlesPC2933429334eucas1p2S; Tue, 24 Sep 2019 13:11:20 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20190924131120eusmtrp2da786207b2c4365295503520a273c4ab~HYfBkhekd1458114581eusmtrp2F; Tue, 24 Sep 2019 13:11:20 +0000 (GMT) X-AuditID: cbfec7f4-ae1ff700000010d5-ac-5d8a15f873ef Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id E0.5D.04166.8F51A8D5; Tue, 24 Sep 2019 14:11:20 +0100 (BST) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20190924131119eusmtip2022bef1eeddd4fd5bdb8fe4abe957376~HYfBJZENL0422104221eusmtip2p; Tue, 24 Sep 2019 13:11:19 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Tue, 24 Sep 2019 15:11:06 +0200 Message-Id: <20190924131111.1691-2-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190924131111.1691-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrPIsWRmVeSWpSXmKPExsWy7djPc7o/RLtiDX7/U7bYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGsUl01Kak5mWWqRvl0CV8aHTZ3sBWd5K870fmRvYGzg7mLk5JAQMJGYO2kJM4gt JLCCUWLVltIuRi4g+wujxKkTh9khEp8ZJVY+kYZpuPH+IDtE0XJGiTlz5rHAdZydPBVsFJuA oUTX2y42EFtEQELiV/9VRpAiZoHtTBLtrddZQBLCAh4Suy+3MYLYLAKqEhe6b4Ct4xWwkfjX P4kJYp28xOoNB8CGcgrYShy/fIgVZJCEwHc2iVWf1gIVcQA5LhIrW4Qg6oUlXh3fwg5hy0j8 3zmfCaK+mVHi4bm17BBOD6PE5aYZjBBV1hKHj19kBRnELKApsX6XPsRMR4lHveEQJp/EjbeC IMXMQOakbdOZIcK8Eh1tUFvVJGYdXwe39eCFS8wQtofEm7vrWSHhM4FRYsr0F2wTGOVnIexa wMi4ilE8tbQ4Nz212CgvtVyvODG3uDQvXS85P3cTIzBZnP53/MsOxl1/kg4xCnAwKvHwOrB2 xQqxJpYVV+YeYpTgYFYS4d2k1RYrxJuSWFmVWpQfX1Sak1p8iFGag0VJnLea4UG0kEB6Yklq dmpqQWoRTJaJg1OqgVEv7M/pib66+0V1VkfLPm67cO05687Te5jEj09bsv7y7g0sZqld89eL /rHw9/Xk2dnvnXjRTetKw27R6PhdyX8EtvRy7058Oyk5fPKVr9XBuz/mG/+LyAy5pjMlIPP1 5H+c28S4eA+1lv30fsg79fZdq91dOeL351lVbjx7/dFXE8Wm48vlzZ8rsRRnJBpqMRcVJwIA fQGVjBIDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrMLMWRmVeSWpSXmKPExsVy+t/xe7o/RLtiDbpX8FtsnLGe1eLGrzZW i+fvLjNZrD1yl91iweQnrBYb5r9lsZgx+SWbxdu9newOHB7zZp1g8Th7ZwejR9+WVYwe67dc ZfHY9MojgDVKz6Yov7QkVSEjv7jEVina0MJIz9DSQs/IxFLP0Ng81srIVEnfziYlNSezLLVI 3y5BL+PDpk72grO8FWd6P7I3MDZwdzFyckgImEjceH+QvYuRi0NIYCmjxOlJ25ggEjISJ6c1 sELYwhJ/rnWxQRR9YpSY+/ApO0iCTcBQoustSIKTQ0RAQuJX/1VGkCJmgd1MEtdXHWMESQgL eEjsvtwGZrMIqEpc6L4B1swrYCPxr38S1DZ5idUbDjCD2JwCthLHLx8C2ywEVDP7yGu2CYx8 CxgZVjGKpJYW56bnFhvqFSfmFpfmpesl5+duYgQG8LZjPzfvYLy0MfgQowAHoxIPrwNrV6wQ a2JZcWXuIUYJDmYlEd5NWm2xQrwpiZVVqUX58UWlOanFhxhNgY6ayCwlmpwPjK68knhDU0Nz C0tDc2NzYzMLJXHeDoGDMUIC6YklqdmpqQWpRTB9TBycUg2Mxu3KNz1FUqcfsQ1aEdFwW3ma 4OSelHU2x+ybLtw+x3eqV2ZO+KXUv7N7/v95wqBz8MStz2IHngrKc3wvD3QMSPUJ/naq7LDC nPm9jc+EA19E3bpv/uSrf/qMUv5TW+6v1JjxZHHhVB72CaFq3jv8dhqLyph/+Gj69prg+7mT 2i8dlvzy6+1aMSWW4oxEQy3mouJEAC2liCt2AgAA X-CMS-MailID: 20190924131120eucas1p251e877771c864895a656cc8113cccb59 X-Msg-Generator: CA X-RootMTR: 20190924131120eucas1p251e877771c864895a656cc8113cccb59 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20190924131120eucas1p251e877771c864895a656cc8113cccb59 References: <20190924131111.1691-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH v2 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 Reviewed-by: Oleksandr Suvorov Reviewed-by: Lukasz Majewski --- fs/fat/fat_write.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index 729cf39630..6cfa5b4565 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 - 1) != endclust) + break; if (IS_LAST_CLUST(newclust, mydata->fatsize)) break; if (CHECK_CLUST(newclust, mydata->fatsize)) { @@ -811,7 +813,7 @@ 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); if (get_set_cluster(mydata, curclust, offset, buffer, wsize, &actsize)) { printf("Error get-and-setting cluster\n"); @@ -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 Tue Sep 24 13:11:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1166588 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 (mailfrom) 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="vZIH7fUp"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 46d1qZ3P3nz9sDB for ; Tue, 24 Sep 2019 23:14:18 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 2C464C21E79; Tue, 24 Sep 2019 13:11:55 +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 1ABCFC21E0D; Tue, 24 Sep 2019 13:11:26 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 38F4BC21D56; Tue, 24 Sep 2019 13:11:24 +0000 (UTC) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by lists.denx.de (Postfix) with ESMTPS id 0C1B0C21D8E for ; Tue, 24 Sep 2019 13:11:22 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20190924131121euoutp01137910f5ad5965c52bb28b982e898b13~HYfC4S-gX0825608256euoutp015 for ; Tue, 24 Sep 2019 13:11:21 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20190924131121euoutp01137910f5ad5965c52bb28b982e898b13~HYfC4S-gX0825608256euoutp015 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1569330681; bh=j/hZVQOq1riFG4eLLBkezvkTQ2cWqgOHcjfRf1wjsw0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vZIH7fUp7tnrTw+Z50gNY+MVVbkluxHD6xHuCbvlwO3i3OTui7eIMC5rHs/x1gZQ5 KSyWi/77LJWqgnOBEv/RGg7zduqFfKR56dmzeT4TjCqgpWhuGAcWgbVCr1KAAM2m2n KrWyA/W4yN8oxX6Sb/BYID5JyUfU7ZEiaNvoSafg= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20190924131121eucas1p275429861832c675c6c193fecdbfe7bbc~HYfCg_WkU1156311563eucas1p2n; Tue, 24 Sep 2019 13:11:21 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 48.6B.04469.9F51A8D5; Tue, 24 Sep 2019 14:11:21 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20190924131120eucas1p248dafb68aaa45c6ebbb490069f885182~HYfCCAw4-2234122341eucas1p2u; Tue, 24 Sep 2019 13:11:20 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20190924131120eusmtrp2c58ca9ad99e7af4c1288ff4cf860cf49~HYfCBRAjX1458114581eusmtrp2I; Tue, 24 Sep 2019 13:11:20 +0000 (GMT) X-AuditID: cbfec7f2-54fff70000001175-c6-5d8a15f99ca9 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id E1.5D.04166.8F51A8D5; Tue, 24 Sep 2019 14:11:20 +0100 (BST) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20190924131120eusmtip2a260b71155c9dd9c23a71934b8ac393d~HYfBlQpIw0368303683eusmtip2W; Tue, 24 Sep 2019 13:11:20 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Tue, 24 Sep 2019 15:11:07 +0200 Message-Id: <20190924131111.1691-3-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190924131111.1691-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpileLIzCtJLcpLzFFi42LZduznOd2fol2xBvuOcFlsnLGe1eLGrzZW i+fvLjNZrD1yl91iweQnrBYb5r9lsZgx+SWbxdu9newOHB7zZp1g8Th7ZwejR9+WVYwe67dc ZfHY9MojgDWKyyYlNSezLLVI3y6BK2PatjcsBb/4K66sXMvSwPiRp4uRk0NCwETid9cnti5G Lg4hgRWMErtnHGaBcL4wSnQ/+wnlfGaUOLq1lRWuZdd+JojEckaJw0ceMoMkwFp27AoFsdkE DCW63naxgdgiAhISv/qvMoI0MAtsZ5Job73OApIQFvCR6Np0D8xmEVCVOHF8GxOIzStgI3H0 10QmiG3yEqs3HABbwClgK3H88iFWkEESAr/ZJE79hClykXix/yozhC0s8er4FnYIW0bi/875 TBANzYwSD8+tZYdwehglLjfNYISospY4fPwi0FgOoPs0Jdbv0ocIO0ps2vWECSQsIcAnceOt IEiYGcictG06M0SYV6KjTQiiWk1i1vF1cGsPXrgEdY6HxLpbEDcLCUxglFjxaznrBEb5WQjL FjAyrmIUTy0tzk1PLTbMSy3XK07MLS7NS9dLzs/dxAhMGaf/Hf+0g/HrpaRDjAIcjEo8vA6s XbFCrIllxZW5hxglOJiVRHg3abXFCvGmJFZWpRblxxeV5qQWH2KU5mBREuetZngQLSSQnliS mp2aWpBaBJNl4uCUamDcXL9gap2nml3LmzW77yjU1tje+uUzf9tLzS9nc7dLl8+c7F6uw/jY pCD/sb2z3uJTv4+um3nxf+pf296aqmM5dXZbE+/G1Ihl32Wd5Gh10b1o0tyGaScbj/oaFjXK +bUtlnfaOuNEj1K+T5SYWfSkhXt/ZDnfmHcoPNT0oPeZ2VKzbEo/fNihxFKckWioxVxUnAgA fIUkVBUDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrMLMWRmVeSWpSXmKPExsVy+t/xe7o/RLtiDQ480bbYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGuUnk1RfmlJqkJGfnGJrVK0oYWRnqGlhZ6RiaWeobF5rJWRqZK+nU1Kak5mWWqR vl2CXsa0bW9YCn7xV1xZuZalgfEjTxcjJ4eEgInE7137mboYuTiEBJYySuw/uZwJIiEjcXJa AyuELSzx51oXG0TRJ0aJL3OmsYMk2AQMJbregiQ4OUQEJCR+9V9lBCliFtjNJHF91TFGkISw gI9E16Z7LCA2i4CqxInj28A28ArYSBz9NRFqm7zE6g0HmEFsTgFbieOXD4FtFgKqmX3kNdsE Rr4FjAyrGEVSS4tz03OLDfWKE3OLS/PS9ZLzczcxAgN427Gfm3cwXtoYfIhRgINRiYfXgbUr Vog1say4MvcQowQHs5II7yattlgh3pTEyqrUovz4otKc1OJDjKZAR01klhJNzgdGV15JvKGp obmFpaG5sbmxmYWSOG+HwMEYIYH0xJLU7NTUgtQimD4mDk6pBsasF06vTjS8mZSt7LFNudGh 7338jT3vitdeZ4vvf/N+cm3BL1uWr2d1HobOkF040f+JQ/KnBoaiBG1lTu+pAjseZe95P+d5 kJG7BGOxo/2enhiBAC+Np57TFnGX/w6I1/i95hynhlKnOR+Tcs63NTrXlSeEVQvv1RC+8fnl xxVJ7xuFwleumaXEUpyRaKjFXFScCAAkyoUudgIAAA== X-CMS-MailID: 20190924131120eucas1p248dafb68aaa45c6ebbb490069f885182 X-Msg-Generator: CA X-RootMTR: 20190924131120eucas1p248dafb68aaa45c6ebbb490069f885182 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20190924131120eucas1p248dafb68aaa45c6ebbb490069f885182 References: <20190924131111.1691-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH v2 2/6] fat: write: fix broken write at non-zero file offset 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" Handling of the start file offset was broken in the current code. Although the code skipped the needed clusters, it then tried to continue write with current cluster set to EOF, what caused assertion. It also lacked adjusting filesize in case of writing at the end of file and adjusting in-cluster offset for partial overwrite. This patch fixes all those issues. Signed-off-by: Marek Szyprowski Reviewed-by: Lukasz Majewski --- fs/fat/fat_write.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index 6cfa5b4565..d7a814eb0c 100644 --- a/fs/fat/fat_write.c +++ b/fs/fat/fat_write.c @@ -756,14 +756,12 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, /* go to cluster at pos */ cur_pos = bytesperclust; while (1) { + newclust = get_fatent(mydata, curclust); if (pos <= cur_pos) break; - if (IS_LAST_CLUST(curclust, mydata->fatsize)) + if (IS_LAST_CLUST(newclust, mydata->fatsize)) break; - - newclust = get_fatent(mydata, curclust); - if (!IS_LAST_CLUST(newclust, mydata->fatsize) && - CHECK_CLUST(newclust, mydata->fatsize)) { + if (CHECK_CLUST(newclust, mydata->fatsize)) { debug("curclust: 0x%x\n", curclust); debug("Invalid FAT entry\n"); return -1; @@ -772,8 +770,9 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, cur_pos += bytesperclust; curclust = newclust; } - if (IS_LAST_CLUST(curclust, mydata->fatsize)) { + if (IS_LAST_CLUST(newclust, mydata->fatsize)) { assert(pos == cur_pos); + filesize -= pos; goto set_clusters; } @@ -814,6 +813,7 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, else offset = pos - cur_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 Tue Sep 24 13:11:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1166582 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 (mailfrom) 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="tT/RgYlS"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 46d1nd0f1kz9sDB for ; Tue, 24 Sep 2019 23:12:37 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id AFAA0C21E13; Tue, 24 Sep 2019 13:11:41 +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 928EBC21DD9; Tue, 24 Sep 2019 13:11:25 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 1D699C21C29; Tue, 24 Sep 2019 13:11:24 +0000 (UTC) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lists.denx.de (Postfix) with ESMTPS id 50E89C21DA6 for ; Tue, 24 Sep 2019 13:11:22 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20190924131121euoutp02d7f557b22befa0f11f21e69868b02411~HYfDIj_Xg0931009310euoutp02z for ; Tue, 24 Sep 2019 13:11:21 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20190924131121euoutp02d7f557b22befa0f11f21e69868b02411~HYfDIj_Xg0931009310euoutp02z DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1569330681; bh=xpb89xumnKbkepwh0R9J4z/P6izn4YEanFXAJiH30QI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tT/RgYlSRFvnNkowIxION3LzLi7PNW1JYirQ22ExI8KZpFXUF0KoKKzq1xMLJOkgP fbCJmw+NuW/CtGxpEgzX7w1YvrLhVsuCVSBZbJkSm1TdNIa7RmWpKYnprVhWRC9A8e CMU4iwOfwC8Rq/Jr5O/JkWlJRg9uWOYWPDa/olcI= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20190924131121eucas1p27b946f97335f53d9d43ef2064f7306c5~HYfC_mxvN0155301553eucas1p2b; Tue, 24 Sep 2019 13:11:21 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 4F.2B.04309.9F51A8D5; Tue, 24 Sep 2019 14:11:21 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20190924131121eucas1p118611ad8a2d6e5dc36ea20dca87b7e16~HYfCddXYI0342603426eucas1p1V; Tue, 24 Sep 2019 13:11:21 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20190924131121eusmtrp290078842a5988849e96eaa77e1fcc44e~HYfCc4YY51458114581eusmtrp2K; Tue, 24 Sep 2019 13:11:21 +0000 (GMT) X-AuditID: cbfec7f4-afbff700000010d5-b1-5d8a15f9fcaa Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id FC.93.04117.9F51A8D5; Tue, 24 Sep 2019 14:11:21 +0100 (BST) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20190924131120eusmtip253f207bec43896223531658863030e01~HYfCBJ1Ax0443504435eusmtip2U; Tue, 24 Sep 2019 13:11:20 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Tue, 24 Sep 2019 15:11:08 +0200 Message-Id: <20190924131111.1691-4-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190924131111.1691-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpmleLIzCtJLcpLzFFi42LZduzned2fol2xBpsua1lsnLGe1eLGrzZW i+fvLjNZrD1yl91iweQnrBYb5r9lsZgx+SWbxdu9newOHB7zZp1g8Th7ZwejR9+WVYwe67dc ZfHY9MojgDWKyyYlNSezLLVI3y6BK+Po3rOMBZeVKyb92sLSwLhXpouRk0NCwESicesy1i5G Lg4hgRWMElOW/2ODcL4wSrx99JkFwvnMKPH/wlcmmJaPX69CVS1nlJj1fzE7XMuBTXtYQarY BAwlut52sYHYIgISEr/6rzKCFDELbGeSaG+9zgKSEAYaterhOXYQm0VAVeLG15NgNq+AjcTV jh+sEOvkJVZvOMAMYnMK2Eocv3wI7FoJgc9sEs33upghilwk7v1bzwZhC0u8Or6FHcKWkfi/ cz4TREMzo8TDc2vZIZweRonLTTMYIaqsJQ4fvwg0lgPoPk2J9bv0IcKOEg1TprOAhCUE+CRu vBUECTMDmZO2TWeGCPNKdLQJQVSrScw6vg5u7cELl6BO85D4sHwNIySEJjBKdN+byDKBUX4W wrIFjIyrGMVTS4tz01OLjfJSy/WKE3OLS/PS9ZLzczcxApPG6X/Hv+xg3PUn6RCjAAejEg+v A2tXrBBrYllxZe4hRgkOZiUR3k1abbFCvCmJlVWpRfnxRaU5qcWHGKU5WJTEeasZHkQLCaQn lqRmp6YWpBbBZJk4OKUaGKc4+F0MLGVPi/L9M3/dqv3Gv/wYvVlv/i3wkn7IuV/dUv7n4lnC cxVLQ///Tex6wxDs+NyE50Cx4+oPv+1mTp3dwLe6wmCiSsjJM7d4fju++fvFVP+Vz/LjGVvn Tz608Ldtkt9N7+bKG0aCm6Sm3cx6JXrDcG9aWtpeuTCeqUZNYt67G2r32CmxFGckGmoxFxUn AgD8nUG/FgMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrMLMWRmVeSWpSXmKPExsVy+t/xe7o/RbtiDZ5t5LbYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGuUnk1RfmlJqkJGfnGJrVK0oYWRnqGlhZ6RiaWeobF5rJWRqZK+nU1Kak5mWWqR vl2CXsbRvWcZCy4rV0z6tYWlgXGvTBcjJ4eEgInEx69X2boYuTiEBJYySrz/sJ0ZIiEjcXJa AyuELSzx51oXVNEnRokNy6+wgSTYBAwlut52gdkiAhISv/qvMoIUMQvsZpK4vuoYI0hCGGjF qofn2EFsFgFViRtfT4LZvAI2Elc7fkBtkJdYveEA2GZOAVuJ45cPgcWFgGpmH3nNNoGRbwEj wypGkdTS4tz03GIjveLE3OLSvHS95PzcTYzAAN527OeWHYxd74IPMQpwMCrx8DqwdsUKsSaW FVfmHmKU4GBWEuHdpNUWK8SbklhZlVqUH19UmpNafIjRFOioicxSosn5wOjKK4k3NDU0t7A0 NDc2NzazUBLn7RA4GCMkkJ5YkpqdmlqQWgTTx8TBKdXAaD1XwOheMG9L4O4vS3MMetujt6yc Eaq2IsbE+fHjD5KCP2dITL4T+0F2afLB+81uesLuikHfKls9zf/s3lry2udP7h7XpsXvsoya 29iFOQo7bCrYviy9X3e176xeaM2+I1uuxt+94BgbblHGVRk1kXvZUT72V/HeLf9yf7bwrl34 VcWre+orJZbijERDLeai4kQAU8WNo3YCAAA= X-CMS-MailID: 20190924131121eucas1p118611ad8a2d6e5dc36ea20dca87b7e16 X-Msg-Generator: CA X-RootMTR: 20190924131121eucas1p118611ad8a2d6e5dc36ea20dca87b7e16 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20190924131121eucas1p118611ad8a2d6e5dc36ea20dca87b7e16 References: <20190924131111.1691-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH v2 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 403fd5351d..2d97f4528c 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 Tue Sep 24 13:11:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1166587 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 (mailfrom) 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="ZN5Q7HQ3"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 46d1qC3dtGz9sPD for ; Tue, 24 Sep 2019 23:13:59 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 3BF8BC21E3E; Tue, 24 Sep 2019 13:12:07 +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 A90FCC21E2F; Tue, 24 Sep 2019 13:11:26 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 48A7DC21D8E; Tue, 24 Sep 2019 13:11:24 +0000 (UTC) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by lists.denx.de (Postfix) with ESMTPS id 0F2E7C21DAF for ; Tue, 24 Sep 2019 13:11:23 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20190924131122euoutp01297a1b6432a9bebfe87b50a7d3610b36~HYfD4M9vO0825608256euoutp016 for ; Tue, 24 Sep 2019 13:11:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20190924131122euoutp01297a1b6432a9bebfe87b50a7d3610b36~HYfD4M9vO0825608256euoutp016 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1569330682; bh=7EYaJVBnqaoT1lE2q3Pfj3AePPKtjO60jDfyc9FUR4Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZN5Q7HQ37TcNbaFnW6Tyq+Q2JtY0DYmLRQN1aN6YaXPbnccXGP4K03vhCYMA45gZf 6c3GjWHdB6fx3/sBGJgGZi2cDnneIeRViGi6ZVuNwHwu62CqiQCYp4I1zIvIbaBulG pTYHWufJ+0QTB4IE3Sf/ujjiHcE3jE5YX8qbN0Tg= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20190924131122eucas1p2ac1f6f240fdec9034178cab5d66c8be6~HYfDdrOCz1618816188eucas1p2d; Tue, 24 Sep 2019 13:11:22 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 00.3B.04309.AF51A8D5; Tue, 24 Sep 2019 14:11:22 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20190924131121eucas1p1a84a6913a71070d85f733e0dce3106d5~HYfC5g6FE3143131431eucas1p1z; Tue, 24 Sep 2019 13:11:21 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20190924131121eusmtrp2c03cb6c795cabf508236d8228ff48bdb~HYfC48HtS1458114581eusmtrp2L; Tue, 24 Sep 2019 13:11:21 +0000 (GMT) X-AuditID: cbfec7f4-afbff700000010d5-b3-5d8a15fabb9b Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id BD.93.04117.9F51A8D5; Tue, 24 Sep 2019 14:11:21 +0100 (BST) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20190924131121eusmtip27c1ce467917e5f9fdb45c782fbab5e4e~HYfCdJ50T0443604436eusmtip2A; Tue, 24 Sep 2019 13:11:21 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Tue, 24 Sep 2019 15:11:09 +0200 Message-Id: <20190924131111.1691-5-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190924131111.1691-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA0VSa0hTURz33Me8ria3zfKPldIoITFN6cONLLQkLoXQlyANyZWXqem0TWdW iKXNXJY2zUTyLT5m5oM1H2jk0pZK+coUKUixl7AKXA+Xj5xX7dvveX6Hw6FwcTrpRkUrEjml QhYrFQgJ44v5wX22rdrw/RkDm5jmwkaSmbBpSObzt1GMaeh578iU5c2QTFOphWAK874KGEtX lmMgxZYUvSTYV+/aEHvXoEdso2GMYFtm2VNkmDAgkouNVnNK3yMRwqjst2+wBK375ZzpcZSG boMWOVFAH4DqknxMi4SUmK5FMNhjXSNWBHV9ujUyh6C12EKuV7qnOkneqEFg+/4XbVT0XbWY PSWg/UBr0Qrs2IUGsOWMrYZwuhWDzJvjhN2Q0Cfg4eCX1RBB74Hhqj+4HYvoAMhY6nTk5zyg vunZqu5EHwbzqGl1GujfArDWlayFgmH4VwXGYwnMmg1r+g5Ybi/F+EI6gqnXDY48yUYweqMQ 8alD8Nw8vHIstXK/vdDY4cvLQaCv/YHZZaCdYcKyxS7jK1BnfIDzsghuacR82hOKzI83ZruH RnAes9BhXCD4F8pFYK1Kw3KRR9H/sTKE9MiVS1LFyTmVv4JL9lHJ4lRJCrnPhfi4FrTyNQaW zNY21LFw3oRoCkk3iwJJbbiYlKlVKXEmBBQudRG1eGnCxaJIWcoVThl/TpkUy6lMaDtFSF1F Vx0+nBXTclkid5HjEjjluotRTm5p6I5k4thxT41a0Xs69Ulza9jMfV3/JBta506FxGYkZumq vdUNGLtYWb5oOPloMjgiJnRnagGGj+xyPjr0tN+Yn7k7/EyBvlgycHAQPg5dq0/uC6iR9FbK vUc/zRlDtjF0Rfl1Xbsshtb2/7y0bJ6Yv9fjn7UclGway3KYFi2mSAlVlMzPC1eqZP8ARg+g ahYDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrELMWRmVeSWpSXmKPExsVy+t/xe7o/RbtiDS7P0LDYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGuUnk1RfmlJqkJGfnGJrVK0oYWRnqGlhZ6RiaWeobF5rJWRqZK+nU1Kak5mWWqR vl2CXkbPtStMBV1yFf2PrjM2MHZLdDFyckgImEgcfLiHFcQWEljKKLHvbDREXEbi5LQGVghb WOLPtS62LkYuoJpPjBLLd09nAUmwCRhKdL0FSXByiAhISPzqv8oIUsQssJtJ4vqqY4wgCWEB L4k551+AFbEIqEpcXPKDGcTmFbCRaPm3hx1ig7zE6g0HwOKcArYSxy8fgrrIRmL2kddsExj5 FjAyrGIUSS0tzk3PLTbSK07MLS7NS9dLzs/dxAgM323Hfm7Zwdj1LvgQowAHoxIPrwNrV6wQ a2JZcWXuIUYJDmYlEd5NWm2xQrwpiZVVqUX58UWlOanFhxhNgY6ayCwlmpwPjK28knhDU0Nz C0tDc2NzYzMLJXHeDoGDMUIC6YklqdmpqQWpRTB9TBycUg2Mnc43zSZlLvjE2K3h4qHwzkvM W3jTwkVeQSc+H0y6+UFwe7Lk3FufuZembNrt5xBy0ngrV8ANCZPC79pZWdnvFS96/K8q/h2S xi9ut+TvesVHnjGcm10WJvRzrwixs5i7u+WC39Q9KXYhT9zMmJbnry/eabjgfJj11WdTljzh iC7t9pl2T+CmEktxRqKhFnNRcSIA7FTMUnUCAAA= X-CMS-MailID: 20190924131121eucas1p1a84a6913a71070d85f733e0dce3106d5 X-Msg-Generator: CA X-RootMTR: 20190924131121eucas1p1a84a6913a71070d85f733e0dce3106d5 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20190924131121eucas1p1a84a6913a71070d85f733e0dce3106d5 References: <20190924131111.1691-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH v2 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 2d97f4528c..b3174571ae 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 Tue Sep 24 13:11:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1166586 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 (mailfrom) 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="QYrjr5ps"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 46d1q905c0z9sPD for ; Tue, 24 Sep 2019 23:13:56 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id AADCBC21DFB; Tue, 24 Sep 2019 13:12:31 +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 CAF20C21E53; Tue, 24 Sep 2019 13:11:27 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 73BFFC21D56; Tue, 24 Sep 2019 13:11:24 +0000 (UTC) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lists.denx.de (Postfix) with ESMTPS id 43972C21DB6 for ; Tue, 24 Sep 2019 13:11:23 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20190924131122euoutp029bb7cbd47f36c937fea7cfe7f413c7e0~HYfEBt7EI0931009310euoutp020 for ; Tue, 24 Sep 2019 13:11:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20190924131122euoutp029bb7cbd47f36c937fea7cfe7f413c7e0~HYfEBt7EI0931009310euoutp020 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1569330682; bh=CwwafpuhTZS6ffS0Qs2YmyoWKnhPg+/Y3yZNpaGiDxA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QYrjr5psvsue7hLZCuArEiqPgHPLBll4YGtovu1SREofqE2lGDgZolYGPvrlyJskj vRCnj84R74Yt567jC3usc1Y7yboKp5NjToTGjzgzycZ+MVI283gESWmNB8mwkKCptR zSxqjtdFTQuzubzyORdDPViKX6bGqudGJiCBMFSQ= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20190924131122eucas1p1c5070671c63da8c93aabee5cefc93993~HYfDvkTz00941409414eucas1p19; Tue, 24 Sep 2019 13:11:22 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id 90.3B.04309.AF51A8D5; Tue, 24 Sep 2019 14:11:22 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20190924131122eucas1p2eb06104a38f74d7603ba48a5e5b81069~HYfDU2a962234522345eucas1p2x; Tue, 24 Sep 2019 13:11:22 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20190924131122eusmtrp2271f67076cc86a2e957501b0ce65b0be~HYfDUOGur1458114581eusmtrp2N; Tue, 24 Sep 2019 13:11:22 +0000 (GMT) X-AuditID: cbfec7f4-afbff700000010d5-b5-5d8a15fa6e8d Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 03.5D.04166.AF51A8D5; Tue, 24 Sep 2019 14:11:22 +0100 (BST) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20190924131121eusmtip224767a3fa859051b333083143c38d111~HYfC5ZJBt0368303683eusmtip2Y; Tue, 24 Sep 2019 13:11:21 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Tue, 24 Sep 2019 15:11:10 +0200 Message-Id: <20190924131111.1691-6-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190924131111.1691-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpkleLIzCtJLcpLzFFi42LZduznOd1fol2xBhcXKVlsnLGe1eLGrzZW i+fvLjNZrD1yl91iweQnrBYb5r9lsZgx+SWbxdu9newOHB7zZp1g8Th7ZwejR9+WVYwe67dc ZfHY9MojgDWKyyYlNSezLLVI3y6BK2Pv9wb2glkKFSs7FjA1ML6V7mLk4JAQMJF4cFeoi5GL Q0hgBaPE/6cT2CCcL4wSq8/egnI+M0o8e3wCyOEE6zjdPZ0FIrGcUWLV528scC3Lp4E4nBxs AoYSXW+7wDpEBCQkfvVfZQQpYhbYziTR3nodrEhYIESiZV4TmM0ioCox9+pHVpCjeAVsJFpf O0Fsk5dYveEAM4jNKWArcfzyIVaQORICv9kkzj+/zQpR5CIx50QP1HnCEq+Ob2GHsGUk/u+c zwTR0Mwo8fDcWnYIp4dR4nLTDEaIKmuJw8cvgm1mFtCUWL9LHyLsKPGxbRobJJT4JG68FQQJ MwOZk7ZNZ4YI80p0tAlBVKtJzDq+Dm7twQuXmCFsD4m1M3dCg3ECo8T0UxfYJzDKz0JYtoCR cRWjeGppcW56arFRXmq5XnFibnFpXrpecn7uJkZgwjj97/iXHYy7/iQdYhTgYFTi4XVg7YoV Yk0sK67MPcQowcGsJMK7SastVog3JbGyKrUoP76oNCe1+BCjNAeLkjhvNcODaCGB9MSS1OzU 1ILUIpgsEwenVANjpJ16v7OQZmjq9+p+ue1N635eX5f4b8635gpH1ilMAbZBlV6vr3XeP9V8 Rum6tp/EV80Xb6au3bVDsMtBfM9BN5/F3fxt1tlsosb2fDPKmKef+7XlTPbfs7sKvr7Q3u4f p+G6+dLssohgxjW/hEQ/fJRYOn3vdK9tp9J2LlUrjUhT3sku9j9LiaU4I9FQi7moOBEAUGqA 0BQDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrELMWRmVeSWpSXmKPExsVy+t/xe7q/RLtiDe59YLfYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGuUnk1RfmlJqkJGfnGJrVK0oYWRnqGlhZ6RiaWeobF5rJWRqZK+nU1Kak5mWWqR vl2CXsbe7w3sBbMUKlZ2LGBqYHwr3cXIySEhYCJxuns6SxcjF4eQwFJGiekzf7JBJGQkTk5r YIWwhSX+XOtigyj6xChx9s4URpAEm4ChRNfbLrAGEQEJiV/9VxlBipgFdjNJXF91DKxIWCBI 4lLPBmYQm0VAVWLu1Y9AUzk4eAVsJFpfO0EskJdYveEAWAmngK3E8cuHwBYLAZXMPvKabQIj 3wJGhlWMIqmlxbnpucWGesWJucWleel6yfm5mxiB4bvt2M/NOxgvbQw+xCjAwajEw+vA2hUr xJpYVlyZe4hRgoNZSYR3k1ZbrBBvSmJlVWpRfnxRaU5q8SFGU6CbJjJLiSbnA2MrryTe0NTQ 3MLS0NzY3NjMQkmct0PgYIyQQHpiSWp2ampBahFMHxMHp1QDozfL7V62/z2L//qdc+JL7liy Y9niP+qmyzW3FO+U9Z9sbXuTf3nPjTP1U0T/9itId/8U8zy1YKXr4711MZ9NT91YeOajnef7 bYlNHMGu/S9eTtN+P+0OZ+8133laR653dXCXKtyZxbVs4pPslZtfLNtw1+Ia90+RnW+WHzwy 4cLBNwVbbFRdWM8rsRRnJBpqMRcVJwIARtzhYXUCAAA= X-CMS-MailID: 20190924131122eucas1p2eb06104a38f74d7603ba48a5e5b81069 X-Msg-Generator: CA X-RootMTR: 20190924131122eucas1p2eb06104a38f74d7603ba48a5e5b81069 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20190924131122eucas1p2eb06104a38f74d7603ba48a5e5b81069 References: <20190924131111.1691-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH v2 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 Tue Sep 24 13:11:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1166584 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 (mailfrom) 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="mjICm/u4"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 46d1pm329kz9sDB for ; Tue, 24 Sep 2019 23:13:36 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 06A0AC21E34; Tue, 24 Sep 2019 13:12:45 +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 7E675C21E62; Tue, 24 Sep 2019 13:11:28 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 8C86FC21D8E; Tue, 24 Sep 2019 13:11:24 +0000 (UTC) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lists.denx.de (Postfix) with ESMTPS id DA51CC21DCA for ; Tue, 24 Sep 2019 13:11:23 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20190924131123euoutp0265fe253fb710655e59090121616e74fa~HYfEoDZTg0882108821euoutp02W for ; Tue, 24 Sep 2019 13:11:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20190924131123euoutp0265fe253fb710655e59090121616e74fa~HYfEoDZTg0882108821euoutp02W DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1569330683; bh=Jb2sVReiHZ0678Q7IsQDox8Z2ZsLuMr7CSZ5wpcou/Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mjICm/u4kt9KZaLNfzI6g0kuR9INA9MQATQcMtUUb98Imcct9+Apavoe/vLj3rnwo do0eXhz3vzGvNKQx203yT9SiV8YwHrn4rInsNlbyzl3BGrnVtKvliTN1pSMo6GTB/5 YjFX4mCSQozImklcZML8whmnInIRkIBSCGYOkxaI= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20190924131123eucas1p17e3a8ea3b1095b119bf3dbb710bb3c24~HYfEYclE40759207592eucas1p1C; Tue, 24 Sep 2019 13:11:23 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id 82.89.04374.BF51A8D5; Tue, 24 Sep 2019 14:11:23 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20190924131122eucas1p13ba93c936d8eec1fc93d326805bd9dfa~HYfDw72bg3143131431eucas1p10; Tue, 24 Sep 2019 13:11:22 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20190924131122eusmtrp27e06036d2f1bafb49e88c0afd91d9f23~HYfDwV4891458114581eusmtrp2O; Tue, 24 Sep 2019 13:11:22 +0000 (GMT) X-AuditID: cbfec7f5-4ddff70000001116-8c-5d8a15fbaf76 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id C3.5D.04166.AF51A8D5; Tue, 24 Sep 2019 14:11:22 +0100 (BST) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20190924131122eusmtip294dee0d13bb8e5fc221b4615c8d5eb7e~HYfDVbdaG0443604436eusmtip2C; Tue, 24 Sep 2019 13:11:22 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Tue, 24 Sep 2019 15:11:11 +0200 Message-Id: <20190924131111.1691-7-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190924131111.1691-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA0VSb0gTcRj2d3+2c3Vxnaa/NJGWFRlpkh8OMlHqw0VF9aEPGcuWHiq6KXdq qYRDS2uUShquQTkQUTRTh3+WkujSZoWaqUvKcFIhjmaWy8hK23lq357neZ/neeHlJVBahwcQ KdpMjteq05QyBdb+/Nfwgd/b9KqDM6Uk02JowpmJpSKcmZkbRZjGvg9yxlT+CWeaq1wYYyif lTGup7fkMQT70DiAsYOTFsCWtNYDtql1HGPNTvYMHqeISuTSUrI5Pjz6kiK59sX+jLqgq/au FaADxu164E1AKhLes7pRPVAQNFUHYEdlBSIRN4B9nwcwiSwAWNc9j65H6l8WIyKmqVoA7Q5u I9H/sWvVJKMioN6ll4nYl4JwqXQciCaU6kBg8Y23mDjwoU5Ay6xJLmKM2g3tU22rYZKKgt1T c3JpWzBsaO5Z1b2pI9A2asXFIkgtyGDPdJunlfCQY7DCnCL5faDT1rqW3QFXnlQhkr8QwOmh RrlEbgM4WmAAkuswfGYbwcUilNoHmzrDJTkWDrU7Eal/C5xwbRVl1APvtleikkzCm0W05N4D jbbHG2t7X79ZOxYLrc6xtSuWAVgzvYKWgWDj/2UmAOqBP5claJI44ZCWuxImqDVCljYpLCFd Ywaev3i1bPthAd1/LlsBRQDlZjIG16toXJ0t5GisABKo0pc0hxapaDJRnZPL8enxfFYaJ1hB IIEp/ck8L8cFmkpSZ3KpHJfB8etThPAO0AGuf+hB9E6/zpOnqDtYRGObKd4HX3afvv8Xm+dT q9+XDMdfz2vp+O7+2nt0xBaZO2jy+3bRsDjpOOtWVVgKQ/KxwAR6eJ49n1tAxkXmV+PGc/je AS+ZvN++qLvmwNDYd8u7CsNhiB+fGfVoJP9nm2/NF8QaTWxJCDo+tqmBV2JCsjoiFOUF9T/u HwdNEwMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrELMWRmVeSWpSXmKPExsVy+t/xe7q/RLtiDT7uUrHYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGuUnk1RfmlJqkJGfnGJrVK0oYWRnqGlhZ6RiaWeobF5rJWRqZK+nU1Kak5mWWqR vl2CXsbyk9oFK2Qrru3+z9jAOEuyi5GTQ0LARGLVqXamLkYuDiGBpYwSk77MZoNIyEicnNbA CmELS/y51sUGUfSJUaKptQUswSZgKNH1tgusQURAQuJX/1VGkCJmgd1MEtdXHWMESQgLeEvs eLmAHcRmEVCVuHZ/KzOIzStgI7Hv/jt2iA3yEqs3HACLcwrYShy/fAhsgRBQzewjr9kmMPIt YGRYxSiSWlqcm55bbKhXnJhbXJqXrpecn7uJERi+24793LyD8dLG4EOMAhyMSjy8DqxdsUKs iWXFlbmHGCU4mJVEeDdptcUK8aYkVlalFuXHF5XmpBYfYjQFOmois5Rocj4wtvJK4g1NDc0t LA3Njc2NzSyUxHk7BA7GCAmkJ5akZqemFqQWwfQxcXBKNTDOeZkcpXVo5qy07le7awpSLy4v KrsWoZmTYz6l41BwR8XuiTxNusFVXAWKTH1yZpeVxQ0/rCzZ+5JvXa8Xw1Km74+S9zXo8O99 yGnO8DF62lM5lwNMai6/owwmax/9Y1F2QCA1cU9W4Z15q9gF9Bdy7syRrbQKsRezP8TMv6so 3rev4s3GWCWW4oxEQy3mouJEAAzGmMp1AgAA X-CMS-MailID: 20190924131122eucas1p13ba93c936d8eec1fc93d326805bd9dfa X-Msg-Generator: CA X-RootMTR: 20190924131122eucas1p13ba93c936d8eec1fc93d326805bd9dfa X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20190924131122eucas1p13ba93c936d8eec1fc93d326805bd9dfa References: <20190924131111.1691-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH v2 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, cmdline.txt and zImage/Image.gz. Signed-off-by: Marek Szyprowski Reviewed-by: Lukasz Majewski --- configs/rpi_4_32b_defconfig | 11 +++++++++++ configs/rpi_4_defconfig | 11 +++++++++++ include/configs/rpi.h | 17 +++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig index a31a617a5f..0a375b9736 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 @@ -19,6 +20,7 @@ CONFIG_CMD_FS_UUID=y CONFIG_ENV_FAT_INTERFACE="mmc" CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +CONFIG_DFU_MMC=y CONFIG_DM_KEYBOARD=y CONFIG_DM_MMC=y CONFIG_MMC_SDHCI=y @@ -26,6 +28,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 da8c960a2a..5b9be9b9c0 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 @@ -19,6 +20,7 @@ CONFIG_CMD_FS_UUID=y CONFIG_ENV_FAT_INTERFACE="mmc" CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +CONFIG_DFU_MMC=y CONFIG_DM_KEYBOARD=y CONFIG_DM_MMC=y CONFIG_MMC_SDHCI=y @@ -26,6 +28,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 77d2d5458a..bfe76eb392 100644 --- a/include/configs/rpi.h +++ b/include/configs/rpi.h @@ -70,6 +70,22 @@ #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.gz" +#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;cmdline.txt fat 0 1;" \ + KERNEL_FILENAME " fat 0 1\0" +#endif + /* Console configuration */ #define CONFIG_SYS_CBSIZE 1024 @@ -185,6 +201,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