From patchwork Tue Nov 26 08:15: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: 1200794 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="jrFsO5rM"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47McDn4Wxkz9sPK for ; Tue, 26 Nov 2019 19:16:25 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 5CD89C21F7A; Tue, 26 Nov 2019 08:16:21 +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 83D8EC21EC8; Tue, 26 Nov 2019 08:15:48 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 6B948C21E4F; Tue, 26 Nov 2019 08:15:46 +0000 (UTC) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lists.denx.de (Postfix) with ESMTPS id 96F6CC21E3A for ; Tue, 26 Nov 2019 08:15:45 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20191126081544euoutp028becb55a1a328d7485f1c058e0031879~aqF60KBt70323303233euoutp02y for ; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20191126081544euoutp028becb55a1a328d7485f1c058e0031879~aqF60KBt70323303233euoutp02y DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1574756144; bh=xkzbukVVuSx2+P7Op58RIQ8sdiOYrHDvdbCqrelxt4E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jrFsO5rM/ZDQWCjEJzhVxa89cs5Jk9GUXgXOtALnPIaak4VW7xvqljYJMYRgx04Rg QFQcHNWgaDHp2oVDePOZtOwwN3jUoTdB5hBvf0BJ7c0ISBvAJ9NDnbNQ6v0i7WLKKm yGGJ1HWVlPKexYd7IxWhvGjpaC9W1Qp9VJNa4by4= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20191126081544eucas1p143d057f7ada29620534ba410b21e4790~aqF6j_RGr0607206072eucas1p1k; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id 81.56.60698.03FDCDD5; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20191126081543eucas1p267234909e10ecb5d0debe3ac48cbd294~aqF6T0noi2220722207eucas1p2r; Tue, 26 Nov 2019 08:15:43 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20191126081543eusmtrp213933e8107c3373c31613e2b40d68501~aqF6TRARG1942219422eusmtrp2Z; Tue, 26 Nov 2019 08:15:43 +0000 (GMT) X-AuditID: cbfec7f5-a0fff7000001ed1a-fa-5ddcdf304c74 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 7C.E4.07950.F2FDCDD5; Tue, 26 Nov 2019 08:15:43 +0000 (GMT) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191126081543eusmtip29136c97180915bed45974cf5346ead69~aqF51ixOW2359923599eusmtip2Y; Tue, 26 Nov 2019 08:15:43 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Tue, 26 Nov 2019 09:15:07 +0100 Message-Id: <20191126081512.5138-2-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191126081512.5138-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpmleLIzCtJLcpLzFFi42LZduznOV2D+3diDTY9ZrXYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGsUl01Kak5mWWqRvl0CV8aHTZ3sBWd5K870fmRvYGzg7mLk5JAQMJHo7d7P2MXI xSEksIJR4tuVw8wQzhdGiV0T17JAOJ8ZJbbv/cYG03Ky9Sc7RGI5o8Tf5+cQWg6tPs4KUsUm YCjR9bYLrENEQELiV/9VsCXMAtuZJNpbr7OAJIQFPCSeTzjGCGKzCKhKTG9aD9bMK2Aj0bLs PjvEOnmJ1RsOMIPYnAK2Er/m/QNbLSHwmU3i4tV+FogiF4m1HX+hbGGJV8e3QDXLSPzfOZ8J oqGZUeLhubVQ3T2MEpebZjBCVFlLHD5+EWg1B9B9mhLrd+lDhB0lbrTtZQcJSwjwSdx4KwgS ZgYyJ22bzgwR5pXoaBOCqFaTmHV8HdzagxcuMUPYHhLLGmZBg2sCo0TPz72sExjlZyEsW8DI uIpRPLW0ODc9tdg4L7Vcrzgxt7g0L10vOT93EyMwaZz+d/zrDsZ9f5IOMQpwMCrx8P44eztW iDWxrLgy9xCjBAezkgiv9uE7sUK8KYmVValF+fFFpTmpxYcYpTlYlMR5qxkeRAsJpCeWpGan phakFsFkmTg4pRoYlack5nZNtqqZ8WzSjnjn8pTT891XvnD11Zytuujdj0cvLuT+31x4pvPr /avHLgglX3tYGcdomu5w6XUd/435XnXZlre2/vZr+1F2quRzQW7tmn1rbjcd9tj28nPNd4/l Teo/a4vi3LYyzFhy50nKyQajHP3Id8sDTr9a1nD/vfiOTc2HFkXM/6XEUpyRaKjFXFScCAAs 0om1FgMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrMLMWRmVeSWpSXmKPExsVy+t/xe7r69+/EGlzoNrLYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGuUnk1RfmlJqkJGfnGJrVK0oYWRnqGlhZ6RiaWeobF5rJWRqZK+nU1Kak5mWWqR vl2CXsaHTZ3sBWd5K870fmRvYGzg7mLk5JAQMJE42fqTvYuRi0NIYCmjxKzHlxghEjISJ6c1 sELYwhJ/rnWxQRR9YpSYeOo7WIJNwFCi6y1IgpNDREBC4lf/VUaQImaB3UwS11cdA5skLOAh 8XwChM0ioCoxvWk9WDOvgI1Ey7L77BAb5CVWbzjADGJzCthK/Jr3DywuBFQz8dg/5gmMfAsY GVYxiqSWFuem5xYb6RUn5haX5qXrJefnbmIEBvC2Yz+37GDsehd8iFGAg1GJh/fH2duxQqyJ ZcWVuYcYJTiYlUR4tQ/fiRXiTUmsrEotyo8vKs1JLT7EaAp01ERmKdHkfGB05ZXEG5oamltY GpobmxubWSiJ83YIHIwREkhPLEnNTk0tSC2C6WPi4JRqYAzPrnYyKt+hU19hJ/xKZ/Ecs9oV Wxa5xL+xZVP9dq6DfWWyZK23ab3ICfmVZ5Nrr5/e5/JfvfjgM9mJllfc1hi57Nzw29H+dPtO bQX+mKiiKcUsu4Je3//b+jr9/z6VP0L7J84w3ztB2oh1zwPZV7kXNhsn2ZSdUeeNv7JRUWr1 CkbuX2WRfkosxRmJhlrMRcWJAMZZOBl2AgAA X-CMS-MailID: 20191126081543eucas1p267234909e10ecb5d0debe3ac48cbd294 X-Msg-Generator: CA X-RootMTR: 20191126081543eucas1p267234909e10ecb5d0debe3ac48cbd294 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191126081543eucas1p267234909e10ecb5d0debe3ac48cbd294 References: <20191126081512.5138-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH v3 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 Reviewed-by: AKASHI Takahiro --- 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 Nov 26 08:15: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: 1200799 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="kCpi9Gdb"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47McHM2RjLz9sP3 for ; Tue, 26 Nov 2019 19:18:39 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 0235CC21F60; Tue, 26 Nov 2019 08:17:15 +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 533B7C21F47; Tue, 26 Nov 2019 08:15:50 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id AB20FC21E44; Tue, 26 Nov 2019 08:15:46 +0000 (UTC) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by lists.denx.de (Postfix) with ESMTPS id E05C0C21E44 for ; Tue, 26 Nov 2019 08:15:45 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20191126081544euoutp01f68978de1d2815ba6321bc54097b8ff0~aqF7VOSsE1143911439euoutp01b for ; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20191126081544euoutp01f68978de1d2815ba6321bc54097b8ff0~aqF7VOSsE1143911439euoutp01b DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1574756145; bh=lj/TlBtbTUIfR+Stavin/wiUU+RR+E9ceKfSmTuexgU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kCpi9GdbqCJ+9E/Qb1WylCrSyLvvEWSPe9OWh7r7xSMZ4oF2W6ND8Rqz+mOnzI6/2 DrUvRv29kUdE/dtvXPWG6TcFNol0tmSeGkDt24Q9WgnKikY6fnkXw/mo+l2/TxuivP FrjuzzyL+OO7LR67LmuAoPaSV/75MKCCGdO3Jag4= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20191126081544eucas1p2a6ac5636261663080f4f47d689158249~aqF7DfQ-Z2623426234eucas1p2W; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 0A.97.61286.03FDCDD5; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20191126081544eucas1p2b7fe92ce8a4a1269e08b5b1639185d0e~aqF6xjqH32623426234eucas1p2V; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20191126081544eusmtrp248aea13b10a61fb0f3db5467857551b2~aqF6xE6bS1942219422eusmtrp2b; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) X-AuditID: cbfec7f2-ef1ff7000001ef66-43-5ddcdf30691f Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 5D.E4.07950.03FDCDD5; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191126081543eusmtip27d45936edf82c30b8fcb4a4e77b303d2~aqF6SeMwJ2360223602eusmtip2P; Tue, 26 Nov 2019 08:15:43 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Tue, 26 Nov 2019 09:15:08 +0100 Message-Id: <20191126081512.5138-3-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191126081512.5138-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpmleLIzCtJLcpLzFFi42LZduzneV2D+3diDU5dV7fYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGsUl01Kak5mWWqRvl0CV8bdFX8YC3oFKm5/aWZrYGzk7WLk5JAQMJG48WAFWxcj F4eQwApGie45B5khnC+MEqeWXWWHcD4zSqydf5MVpuVa/3KoquWMEgf77jLBtZz5uo4RpIpN wFCi620XG4gtIiAh8av/KiNIEbPAdiaJ9tbrLCAJYQEfievdM8DGsgioSqxafIsZxOYVsJG4 Pv0MI8Q6eYnVGw6AxTkFbCV+zfsHdpOEwHc2iRl9j1ggilwk/nZvgbKFJV4d38IOYctI/N85 nwmioZlR4uG5tVDdPYwSl5tmQK2wljh8/CLQGRxA92lKrN+lDxF2lNg6t5cFJCwhwCdx460g SJgZyJy0bTozRJhXoqNNCKJaTWLW8XVwaw9euMQMYXtIPJyynAUSQhMYJWZ8PsQ+gVF+FsKy BYyMqxjFU0uLc9NTiw3zUsv1ihNzi0vz0vWS83M3MQKTxul/xz/tYPx6KekQowAHoxIP74+z t2OFWBPLiitzDzFKcDArifBqH74TK8SbklhZlVqUH19UmpNafIhRmoNFSZy3muFBtJBAemJJ anZqakFqEUyWiYNTqoGxTtrzZ7ZVzGrtS0JXlSoT7utMeZOkekXl455JKeUrumbbbYx8smhZ mBrXh/KcT938/8KXcy9Va73Aazjz1wPJzt9BXZMuXOheVCvsEt+4Y4V7dwHTQgcHe7VbG67F yQuZRM1cHPx3wtKl29V5NvNtzjPNqTZaf/fsuwfiZ5fcN69z2cbP/ahBiaU4I9FQi7moOBEA qXpvnRYDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrMLMWRmVeSWpSXmKPExsVy+t/xe7oG9+/EGhy8KmSxccZ6Vosbv9pY LZ6/u8xksfbIXXaLBZOfsFpsmP+WxWLG5JdsFm/3drI7cHjMm3WCxePsnR2MHn1bVjF6rN9y lcVj0yuPANYoPZui/NKSVIWM/OISW6VoQwsjPUNLCz0jE0s9Q2PzWCsjUyV9O5uU1JzMstQi fbsEvYy7K/4wFvQKVNz+0szWwNjI28XIySEhYCJxrX85cxcjF4eQwFJGiZ13ZjNCJGQkTk5r YIWwhSX+XOtigyj6xCgxY/URdpAEm4ChRNdbkAQnh4iAhMSv/quMIEXMAruZJK6vOgY2SVjA R+J69wywSSwCqhKrFt9iBrF5BWwkrk8/A7VNXmL1hgNgcU4BW4lf8/6BLRACqpl47B/zBEa+ BYwMqxhFUkuLc9Nzi430ihNzi0vz0vWS83M3MQIDeNuxn1t2MHa9Cz7EKMDBqMTD++Ps7Vgh 1sSy4srcQ4wSHMxKIrzah+/ECvGmJFZWpRblxxeV5qQWH2I0BTpqIrOUaHI+MLrySuINTQ3N LSwNzY3Njc0slMR5OwQOxggJpCeWpGanphakFsH0MXFwSjUwCt7y2Jb5TL2b8frq+q7AJ3EK oc4LtPdlVZq58k+8Ul4edvdgW2VZ8ec7oZd3VsVnsUezdpxsn3iS2Wjpjoy62601tmukRF9M 7ZrqOZfl0zsdG6Uf7wrj9tYo/n6gU8zYsURczJEv+8or2dvvjdPO9LkxZHxwPSrSY5mx6Vjo q/Y5VS5R5l1KLMUZiYZazEXFiQD/akPmdgIAAA== X-CMS-MailID: 20191126081544eucas1p2b7fe92ce8a4a1269e08b5b1639185d0e X-Msg-Generator: CA X-RootMTR: 20191126081544eucas1p2b7fe92ce8a4a1269e08b5b1639185d0e X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191126081544eucas1p2b7fe92ce8a4a1269e08b5b1639185d0e References: <20191126081512.5138-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH v3 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 --- fs/fat/fat_write.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index 6cfa5b4565..7fb373589d 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,8 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, cur_pos += bytesperclust; curclust = newclust; } - if (IS_LAST_CLUST(curclust, mydata->fatsize)) { - assert(pos == cur_pos); + if (pos == cur_pos && IS_LAST_CLUST(newclust, mydata->fatsize)) { + filesize -= pos; goto set_clusters; } @@ -814,6 +812,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 Nov 26 08:15: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: 1200797 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="RH0l4yJF"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47McGy33lGz9sPK for ; Tue, 26 Nov 2019 19:18:18 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 1993DC21F75; Tue, 26 Nov 2019 08:17: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 C7244C21F37; Tue, 26 Nov 2019 08:15:49 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id A0DD8C21E31; Tue, 26 Nov 2019 08:15:46 +0000 (UTC) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by lists.denx.de (Postfix) with ESMTPS id E05CDC21E47 for ; Tue, 26 Nov 2019 08:15:45 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20191126081545euoutp01672756e7b1edaf90383779f3d8918670~aqF72V19j1139811398euoutp01f for ; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20191126081545euoutp01672756e7b1edaf90383779f3d8918670~aqF72V19j1139811398euoutp01f DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1574756145; bh=3pZ+HkfsltL+bO+jnLrEvMgVBCIkgIrt3zDYAjgh2Rw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RH0l4yJF3yHXdrov0W6mLE3OOPGAm9O6aLySsL3TFxd2n8t+rfMDaudH/iuogudgd ClyWEKLOx6Kzh8kweLP0VWf9FJfLDNJdV9g9hipsn+YCf5lFxM3+eyc22xspiRfskZ Wysj3MS8agkkFd4OqE1mLNv1YyQW9+0T8UzawsEM= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20191126081545eucas1p10d2203ac38bb28225893c1e52f7db85c~aqF7myBsf0404504045eucas1p1h; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 0B.97.61286.13FDCDD5; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20191126081544eucas1p19beac0f0582b90846a36bb9faf09c39a~aqF7Q4rYJ0874208742eucas1p1d; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20191126081544eusmtrp15a797b0f15f7a8b4418908644c914bf8~aqF7QTblo2279022790eusmtrp1u; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) X-AuditID: cbfec7f2-f0bff7000001ef66-48-5ddcdf31d531 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 12.D3.08375.03FDCDD5; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191126081544eusmtip2f03399b45c3e3f2b591b6faf103516ae~aqF6vetTM2183921839eusmtip2-; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Tue, 26 Nov 2019 09:15:09 +0100 Message-Id: <20191126081512.5138-4-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191126081512.5138-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpileLIzCtJLcpLzFFi42LZduznOV3D+3diDQ7d4LbYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGsUl01Kak5mWWqRvl0CV8aZhtmsBf+UK+bvimtgfCzTxcjJISFgInH+5wnmLkYu DiGBFYwSl1/2sUI4Xxgl7qy+CpX5zCjx4fdnZriW03vYIBLLGSUaL29jgWv58XobG0gVm4Ch RNfbLjBbREBC4lf/VUaQImaB7UwS7a3XWUASwkCjzvy5ww5iswioSvye38QKYvMK2EicOdXD DrFOXmL1hgNgqzkFbCV+zfvHDjJIQuA7m8SZg6egilwkjnxdBXWfsMSr41ug4jISpyf3sEA0 NDNKPDy3Fqq7B+jXphmMEFXWEoePXwRazQF0n6bE+l36EGFHiTu3e5lBwhICfBI33gqChJmB zEnbpkOFeSU62oQgqtUkZh1fB7f24IVLUOd4SBz/u4UREkITGCX+H9/OPIFRfhbCsgWMjKsY xVNLi3PTU4sN81LL9YoTc4tL89L1kvNzNzECU8bpf8c/7WD8einpEKMAB6MSD++Ps7djhVgT y4orcw8xSnAwK4nwah++EyvEm5JYWZValB9fVJqTWnyIUZqDRUmct5rhQbSQQHpiSWp2ampB ahFMlomDU6qBcee1rtv/J+acmne6Yunq9kfPD35Wvued9SHzfdH7Y+lbzNz2PElvkGkqFBWp Odp5wDp89Yk2H63Tli+Wf3eze7ah0GnjU50T72JTChl64pyu733+RX/LN0tfNYV/XZfZ/7C3 RWx8uPaydccWcUvV10mnd/+6KLFD/JfDtJUBGzXOfHod2rvLaIcSS3FGoqEWc1FxIgCiZ8MJ FQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrELMWRmVeSWpSXmKPExsVy+t/xe7oG9+/EGnxZamKxccZ6Vosbv9pY LZ6/u8xksfbIXXaLBZOfsFpsmP+WxWLG5JdsFm/3drI7cHjMm3WCxePsnR2MHn1bVjF6rN9y lcVj0yuPANYoPZui/NKSVIWM/OISW6VoQwsjPUNLCz0jE0s9Q2PzWCsjUyV9O5uU1JzMstQi fbsEvYwzDbNZC/4pV8zfFdfA+Fimi5GTQ0LAROL86T1sXYxcHEICSxkltt97xAKRkJE4Oa2B FcIWlvhzrQuq6BOjxLU/i5lAEmwChhJdb0ESnBwiAhISv/qvMoIUMQvsZpK4vuoYI0hCGGjF mT932EFsFgFVid/zm8Cm8grYSJw51cMOsUFeYvWGA8wgNqeArcSvef/A4kJANROP/WOewMi3 gJFhFaNIamlxbnpusaFecWJucWleul5yfu4mRmD4bjv2c/MOxksbgw8xCnAwKvHw/jh7O1aI NbGsuDL3EKMEB7OSCK/24TuxQrwpiZVVqUX58UWlOanFhxhNgY6ayCwlmpwPjK28knhDU0Nz C0tDc2NzYzMLJXHeDoGDMUIC6YklqdmpqQWpRTB9TBycUg2M86+kO1mxPFsl1PzTqkDieKRj ZqH1/W8nG90mHgljOCOs/OeigCwfa/QZxtv7vbusd+vX7vvw6LWIwP5jUQ7RyrsfFbmom/iF 832XFTX48zkpRlB2vvid9fW7+XT0dkVelyh0ux/OpzpnwR6VDZNbc1e/+s/vs/HgqmcZ4eub 9zLUrHrQmdSmxFKckWioxVxUnAgAZXL6N3UCAAA= X-CMS-MailID: 20191126081544eucas1p19beac0f0582b90846a36bb9faf09c39a X-Msg-Generator: CA X-RootMTR: 20191126081544eucas1p19beac0f0582b90846a36bb9faf09c39a X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191126081544eucas1p19beac0f0582b90846a36bb9faf09c39a References: <20191126081512.5138-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH v3 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 Tue Nov 26 08:15: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: 1200795 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="J+lq8bRZ"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47McGM6yF0z9sP3 for ; Tue, 26 Nov 2019 19:17:47 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 84FD1C21F16; Tue, 26 Nov 2019 08:16:49 +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 1CE82C21F1A; Tue, 26 Nov 2019 08:15:49 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 8F75CC21E3A; Tue, 26 Nov 2019 08:15:46 +0000 (UTC) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lists.denx.de (Postfix) with ESMTPS id 52AC6C21E31 for ; Tue, 26 Nov 2019 08:15:46 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20191126081546euoutp028eb96e5a5ee67c51c2b2b37e507ebabc~aqF8SU1kW0390903909euoutp02C for ; Tue, 26 Nov 2019 08:15:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20191126081546euoutp028eb96e5a5ee67c51c2b2b37e507ebabc~aqF8SU1kW0390903909euoutp02C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1574756146; bh=axemFk1mCGUEoTpVAS7qTO6ZWwkD/jLwjkjxbWY3/Rk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=J+lq8bRZYVVt+XFz1Ib3Bx1XeTMws8hNutWbDBTyfIyqorUncfiq6UEvcgP3S27sW rLr02W6CWBqp1vPPGjKap40+zPJ61VF+h/dyUyJ8384hXCRwj1++LECH+atZfEjhV3 6wV44MtbDq9sdEGzub2uXYlO54hvSlxrwI1ZKzRY= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20191126081545eucas1p278698c504c64f7231975d5d6d73b67cb~aqF8Et-8R2636426364eucas1p2b; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id 23.56.60698.13FDCDD5; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20191126081545eucas1p16c5a6e0a8de5af3a1e06d7408b5a9f0c~aqF7tBOTF1207612076eucas1p1I; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20191126081545eusmtrp1eda25e13c6aa8317cc293ed02538de66~aqF7saT8P2279022790eusmtrp1x; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) X-AuditID: cbfec7f5-a29ff7000001ed1a-03-5ddcdf310af2 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 03.D3.08375.13FDCDD5; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191126081544eusmtip280cf80fd29d2ab3a80e2915bc50a78f1~aqF7MZ09k2191321913eusmtip2P; Tue, 26 Nov 2019 08:15:44 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Tue, 26 Nov 2019 09:15:10 +0100 Message-Id: <20191126081512.5138-5-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191126081512.5138-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpkleLIzCtJLcpLzFFi42LZduzneV3D+3diDRb36VlsnLGe1eLGrzZW i+fvLjNZrD1yl91iweQnrBYb5r9lsZgx+SWbxdu9newOHB7zZp1g8Th7ZwejR9+WVYwe67dc ZfHY9MojgDWKyyYlNSezLLVI3y6BK6Op9zBLwVa5imffLBsYN0p0MXJySAiYSMw82srSxcjF ISSwglFi8eJ5jBDOF0aJHY+XsUI4nxklzjbPZOti5ABrmXYxBCK+nFFi0qMjTHAdG973MIHM ZRMwlOh628UGYosISEj86r8KNpZZYDuTRHvrdRaQhLCAl8TsnxNZQWwWAVWJ69N3gMV5BWwk Dhx5xg5xoLzE6g0HmEFsTgFbiV/z/rGDDJIQ+M0mcbFvDzNEkYvEl1+tjBC2sMSr41ugmmUk Tk/uYYFoaGaUeHhuLVR3D6PE5aYZUB3WEoePX2QFeY5ZQFNi/S59iLCjxJoTJ5kgfuaTuPFW ECTMDGRO2jadGSLMK9HRJgRRrSYx6/g6uLUHL1yCOs1DYsGNu2yQEJrAKHH8RSvLBEb5WQjL FjAyrmIUTy0tzk1PLTbOSy3XK07MLS7NS9dLzs/dxAhMGKf/Hf+6g3Hfn6RDjAIcjEo8vD/O 3o4VYk0sK67MPcQowcGsJMKrffhOrBBvSmJlVWpRfnxRaU5q8SFGaQ4WJXHeaoYH0UIC6Ykl qdmpqQWpRTBZJg5OqQZGo0t9VaaC+X5vFn37M2OWkuSzzqMROUxF3fUPYkwytr2O0P+05HFB a/uxLLZ3D4/XTAkVehxb/+RuoVTzhcTYzfNSNtbKhf7m+h79ivH8DwmLCe+uq7042bHOR+Tn 1R8XGaNkq+ODk3/s52S+aHNvUvCPgqUL21Q9TvzfoRbA18UdnfbN9mCdEktxRqKhFnNRcSIA XZpZTxQDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrILMWRmVeSWpSXmKPExsVy+t/xe7qG9+/EGkx9LmCxccZ6Vosbv9pY LZ6/u8xksfbIXXaLBZOfsFpsmP+WxWLG5JdsFm/3drI7cHjMm3WCxePsnR2MHn1bVjF6rN9y lcVj0yuPANYoPZui/NKSVIWM/OISW6VoQwsjPUNLCz0jE0s9Q2PzWCsjUyV9O5uU1JzMstQi fbsEvYym3sMsBVvlKp59s2xg3CjRxcjBISFgIjHtYkgXIxeHkMBSRol701exdzFyAsVlJE5O a2CFsIUl/lzrYoMo+sQo8fhbExNIgk3AUKLrLUiCk0NEQELiV/9VRpAiZoHdTBLXVx1jBEkI C3hJzP45EWwSi4CqxPXpO1hAbF4BG4kDR55BbZOXWL3hADOIzSlgK/Fr3j+wuBBQzcRj/5gn MPItYGRYxSiSWlqcm55bbKhXnJhbXJqXrpecn7uJERi824793LyD8dLG4EOMAhyMSjy8P87e jhViTSwrrsw9xCjBwawkwqt9+E6sEG9KYmVValF+fFFpTmrxIUZToKMmMkuJJucDIyuvJN7Q 1NDcwtLQ3Njc2MxCSZy3Q+BgjJBAemJJanZqakFqEUwfEwenVANji1Lt75WX1LpVD3ZZ1t5o u1Nn8mAHS2tKrIYBo5tQOROPZces/yUvLl+792C233LZC7HiW1nali19/a75p6XTf59zwvNr o6QtVm+T+V9w4jfXImc2oaVv1Tb/frO7YNtpj/IFqdNkj2gmb3/N0XOU6b2s8q7jP5o5ZhTV f88JXnFI4nSI9e55SizFGYmGWsxFxYkA0osmA3QCAAA= X-CMS-MailID: 20191126081545eucas1p16c5a6e0a8de5af3a1e06d7408b5a9f0c X-Msg-Generator: CA X-RootMTR: 20191126081545eucas1p16c5a6e0a8de5af3a1e06d7408b5a9f0c X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191126081545eucas1p16c5a6e0a8de5af3a1e06d7408b5a9f0c References: <20191126081512.5138-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH v3 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 Tue Nov 26 08:15: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: 1200798 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="uYX2lXK7"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47McHH1ljvz9sP3 for ; Tue, 26 Nov 2019 19:18:35 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id E72CBC21F18; Tue, 26 Nov 2019 08:17:26 +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 16FFCC21F51; Tue, 26 Nov 2019 08:15:51 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 0F121C21E31; Tue, 26 Nov 2019 08:15:47 +0000 (UTC) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lists.denx.de (Postfix) with ESMTPS id C5BA7C21E47 for ; Tue, 26 Nov 2019 08:15:46 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20191126081546euoutp02d9fa59f354dc7ef2fd3ec2ecec069ce9~aqF8u9uAX0390903909euoutp02D for ; Tue, 26 Nov 2019 08:15:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20191126081546euoutp02d9fa59f354dc7ef2fd3ec2ecec069ce9~aqF8u9uAX0390903909euoutp02D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1574756146; bh=CwwafpuhTZS6ffS0Qs2YmyoWKnhPg+/Y3yZNpaGiDxA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uYX2lXK7ZcQJP42W35dRa0b+oijhUXAe/ccahLGh9Y8y23Mn/mPx0ouHonI+r5AMN XuC1XsN3NHrPjyP+uEJ0xonB5NJnOyfk1W/u+2E1RFp6tZ2VftiFZO8Yr0vkbjH4Ql TzNZ1tr6pqCudlBBHH1FldFYR577zIVW7/VoKZwU= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20191126081546eucas1p11fe0d626d96e267897d64abba6eb7cfb~aqF8hNOsZ0607206072eucas1p1s; Tue, 26 Nov 2019 08:15:46 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id 44.56.60698.23FDCDD5; Tue, 26 Nov 2019 08:15:46 +0000 (GMT) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20191126081545eucas1p2618ea32363f28c8b3e1ed060c45a44fa~aqF8KuD-O2685026850eucas1p2j; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20191126081545eusmtrp130b9e50e3ccac15d56ae02b84059707e~aqF8ElLn12279022790eusmtrp10; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) X-AuditID: cbfec7f5-a29ff7000001ed1a-07-5ddcdf32907b Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 24.D3.08375.13FDCDD5; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191126081545eusmtip22bc1a6ce093c1bd5441622df5a77c78d~aqF7pF27g2192921929eusmtip2G; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Tue, 26 Nov 2019 09:15:11 +0100 Message-Id: <20191126081512.5138-6-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191126081512.5138-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpileLIzCtJLcpLzFFi42LZduzneV2j+3diDZ7947LYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGsUl01Kak5mWWqRvl0CV8be7w3sBbMUKlZ2LGBqYHwr3cXIySEhYCLxZc8CNhBb SGAFo8TPO1pdjFxA9hdGibtL97FDOJ8ZJSb/fMYE0/G3YRYrRGI5o8SMt1vZ4FpubW1jAali EzCU6HrbBTZXREBC4lf/VUaQImaB7UwS7a3XwYqEBUIkzu5+B2azCKhKdG1tAWvgFbCRuHNq DivEOnmJ1RsOMIPYnAK2Er/m/QO7SULgO5vE/32voYpcJNac2cUCYQtLvDq+hR3ClpE4PbmH BaKhmVHi4bm1UN09jBKXm2YwQlRZSxw+fhFoEgfQfZoS63fpQ4QdJS6u7GYECUsI8EnceCsI EmYGMidtm84MEeaV6GgTgqhWk5h1fB3c2oMXLjFD2B4SHbduQsNxAqPE9XcnmCYwys9CWLaA kXEVo3hqaXFuemqxcV5quV5xYm5xaV66XnJ+7iZGYMo4/e/41x2M+/4kHWIU4GBU4uH9cfZ2 rBBrYllxZe4hRgkOZiURXu3Dd2KFeFMSK6tSi/Lji0pzUosPMUpzsCiJ81YzPIgWEkhPLEnN Tk0tSC2CyTJxcEo1MKrYBbhfdT659ttbbretX8XcWKevCyvacEpywanLk7PXsLpN4cie712p b6ey0lG8cftm/8kzFA12dn2Qu/TcnO1fesavWXv8/geHzUwUebbzkUJH49brhyNE/7+2Llse d7CqOvGesNfT7+UmXhMuxMX8f3JklUd1scp5c7M/UXbLlmndWPJPsl+JpTgj0VCLuag4EQBO DCRjFQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrELMWRmVeSWpSXmKPExsVy+t/xe7qG9+/EGjQs07PYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGuUnk1RfmlJqkJGfnGJrVK0oYWRnqGlhZ6RiaWeobF5rJWRqZK+nU1Kak5mWWqR vl2CXsbe7w3sBbMUKlZ2LGBqYHwr3cXIySEhYCLxt2EWK4gtJLCUUeLdJ3eIuIzEyWkNrBC2 sMSfa11sXYxcQDWfGCU+Hj/BBpJgEzCU6HrbBWaLCEhI/Oq/yghSxCywm0ni+qpjjCAJYYEg ibPrvrCA2CwCqhJdW1vAGngFbCTunJoDtUFeYvWGA8wgNqeArcSvef/YIS6ykZh47B/zBEa+ BYwMqxhFUkuLc9Nziw31ihNzi0vz0vWS83M3MQLDd9uxn5t3MF7aGHyIUYCDUYmH98fZ27FC rIllxZW5hxglOJiVRHi1D9+JFeJNSaysSi3Kjy8qzUktPsRoCnTURGYp0eR8YGzllcQbmhqa W1gamhubG5tZKInzdggcjBESSE8sSc1OTS1ILYLpY+LglGpg1OTQPddVMf00f8xS2xTj/R0v yoxb7W4mTclniN1j8sUi69NiKemGaf2q3mlluslBWV9sj/Du0Ngjv+ZEhdjDLZ5v7Zq/7tJ/ l9hVo95lrerS/N64a/3hL6fzo97HlxbOv1R/9duf3dGLv2hd/dp1KeR54Qq2Q39tzYLP8s99 as5eeOPhlluCSizFGYmGWsxFxYkAEn80+XUCAAA= X-CMS-MailID: 20191126081545eucas1p2618ea32363f28c8b3e1ed060c45a44fa X-Msg-Generator: CA X-RootMTR: 20191126081545eucas1p2618ea32363f28c8b3e1ed060c45a44fa X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191126081545eucas1p2618ea32363f28c8b3e1ed060c45a44fa References: <20191126081512.5138-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH v3 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 Nov 26 08:15:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1200800 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="j/GVDPQD"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 47McJD45sPz9sP3 for ; Tue, 26 Nov 2019 19:19:24 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 3E52EC21E31; Tue, 26 Nov 2019 08:17: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.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 98819C21F60; Tue, 26 Nov 2019 08:15:51 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 64441C21E31; Tue, 26 Nov 2019 08:15:47 +0000 (UTC) Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lists.denx.de (Postfix) with ESMTPS id 1B011C21E3A for ; Tue, 26 Nov 2019 08:15:47 +0000 (UTC) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20191126081546euoutp024019d1a0163c3957889c86020b2ad5ed~aqF9BWNKt0387603876euoutp02J for ; Tue, 26 Nov 2019 08:15:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20191126081546euoutp024019d1a0163c3957889c86020b2ad5ed~aqF9BWNKt0387603876euoutp02J DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1574756146; bh=l9F4AXCv2GG82iH5ZecO2n/rIfeCFj/rzAISlqHurX4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j/GVDPQDjP/3K092PWnyTwnlwGNae6mHuEp4eAVAFlQHu8GC1t5amw6KH757nPNXI l3C2I+BiDoPt4m3pKmV10twmGC95sPhq3Ty/25EIqBiEJBHaTU3Ko97jzfLYCh4c8M //xb3EofSgWdudV3M0275xrinqy9+UtMGU10774U= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20191126081546eucas1p27690ad5ced72aaffc5cb06f780c3cc03~aqF811Xwu1077010770eucas1p2q; Tue, 26 Nov 2019 08:15:46 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id BD.F8.60679.23FDCDD5; Tue, 26 Nov 2019 08:15:46 +0000 (GMT) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20191126081546eucas1p1675c62b81257bb33e08278d65eee2544~aqF8iLW0k0404904049eucas1p1A; Tue, 26 Nov 2019 08:15:46 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20191126081546eusmtrp27f71ae29b9cdaf956f5aac40d02f5211~aqF8hoHNd1968519685eusmtrp2D; Tue, 26 Nov 2019 08:15:46 +0000 (GMT) X-AuditID: cbfec7f4-0cbff7000001ed07-8f-5ddcdf32da1b Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 05.D3.08375.23FDCDD5; Tue, 26 Nov 2019 08:15:46 +0000 (GMT) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20191126081545eusmtip28f94d92b414b64630b5a4a374342e834~aqF8F2fmq2192621926eusmtip2R; Tue, 26 Nov 2019 08:15:45 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Tue, 26 Nov 2019 09:15:12 +0100 Message-Id: <20191126081512.5138-7-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191126081512.5138-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpkleLIzCtJLcpLzFFi42LZduzneV2j+3diDeZflbPYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGsUl01Kak5mWWqRvl0CV8ahPZvYClbIVjRtWsDcwDhNsouRk0NCwETi360+xi5G Lg4hgRWMEi/PXmaCcL4wShyZPpcdpEpI4DOjxMTNBTAdt/fcgupYzijxeeF9NriOOVvvgnWw CRhKdL3tYgOxRQQkJH71XwXrYBbYziTR3nqdBSQhLOAtMfvAf6B9HBwsAqoSSw8LgoR5BWwk 3sxvYYbYJi+xesMBMJtTwFbi17x/7CBzJAS+s0ks7fnMCFHkInG6r58JwhaWeHV8CzuELSPx f+d8JoiGZkaJh+fWQnX3MEpcbpoB1W0tcfj4RVaQK5gFNCXW79KHCDtK/D/XCXachACfxI23 YMcxA5mTtk1nhgjzSnS0CUFUq0nMOr4Obu3BC5eg7veQeHTiPgskgCYwSjz7s4JxAqP8LIRl CxgZVzGKp5YW56anFhvlpZbrFSfmFpfmpesl5+duYgQmjNP/jn/ZwbjrT9IhRgEORiUe3h9n b8cKsSaWFVfmHmKU4GBWEuHVPnwnVog3JbGyKrUoP76oNCe1+BCjNAeLkjhvNcODaCGB9MSS 1OzU1ILUIpgsEwenVAOj5oadX3SXe2xwuhOZIv9enGHF5iwR0Y1nFIKc9gYu7Heqary3q3nH JYOSNQa3A3dVL+KUWfjXpf2ncP/PdvuJps01rF3l1wRzDlkIPP3g67yscaHhKgYJTWGPd1vV T8fsjjgxR1WW6QJvkajOL+vlorMzjpgJeEu9P3bpk8fa5mlLK6f5cH1XYinOSDTUYi4qTgQA ZVOxNxQDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrELMWRmVeSWpSXmKPExsVy+t/xe7pG9+/EGvy4ymexccZ6Vosbv9pY LZ6/u8xksfbIXXaLBZOfsFpsmP+WxWLG5JdsFm/3drI7cHjMm3WCxePsnR2MHn1bVjF6rN9y lcVj0yuPANYoPZui/NKSVIWM/OISW6VoQwsjPUNLCz0jE0s9Q2PzWCsjUyV9O5uU1JzMstQi fbsEvYxDezaxFayQrWjatIC5gXGaZBcjJ4eEgInE7T23GLsYuTiEBJYySjR1tbBCJGQkTk5r gLKFJf5c62KDKPrEKPF9/w02kASbgKFE19suMFtEQELiV/9VsEnMAruZJK6vOsYIkhAW8JaY feA/UxcjBweLgKrE0sOCIGFeARuJN/NbmCEWyEus3nAAzOYUsJX4Ne8fO4gtBFQz8dg/5gmM fAsYGVYxiqSWFuem5xYb6hUn5haX5qXrJefnbmIEhu+2Yz8372C8tDH4EKMAB6MSD++Ps7dj hVgTy4orcw8xSnAwK4nwah++EyvEm5JYWZValB9fVJqTWnyI0RToponMUqLJ+cDYyiuJNzQ1 NLewNDQ3Njc2s1AS5+0QOBgjJJCeWJKanZpakFoE08fEwSnVwNjxSG6iZsj+q9Pn3rpYN6Oj Umt9wfHJkaJM6Yf4WteoyWqsmXCYQzpt+s6C5v9v47Ms/mXqCnR1OPN15gdWqm8+Laq/oFWz u9BzkmY2MwvHNeOp5o6v3dYfTq3VZBOYcS5mS7ISn8MzkQi+GSLanQ4HFWMVva7OCDcrFN9Y XZnZ4MUUGeWkxFKckWioxVxUnAgAxNcnOXUCAAA= X-CMS-MailID: 20191126081546eucas1p1675c62b81257bb33e08278d65eee2544 X-Msg-Generator: CA X-RootMTR: 20191126081546eucas1p1675c62b81257bb33e08278d65eee2544 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20191126081546eucas1p1675c62b81257bb33e08278d65eee2544 References: <20191126081512.5138-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH v3 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 dc696906fd..a0ba8782bc 100644 --- a/configs/rpi_4_32b_defconfig +++ b/configs/rpi_4_32b_defconfig @@ -11,6 +11,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_OF_BOARD=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 2954e17ac3..2fcd56ebf3 100644 --- a/configs/rpi_4_defconfig +++ b/configs/rpi_4_defconfig @@ -11,6 +11,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_OF_BOARD=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..6723c7cc92 100644 --- a/include/configs/rpi.h +++ b/include/configs/rpi.h @@ -70,6 +70,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 @@ -185,6 +204,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