* [U-Boot] [PATCH v4 0/6] Raspberry Pi4: add support for DFU over USB [not found] <CGME20191202111128eucas1p1398c5729ba6af763c7866cfd5462e3d1@eucas1p1.samsung.com> @ 2019-12-02 11:11 ` Marek Szyprowski [not found] ` <CGME20191202111129eucas1p271b4ed0d90cb10addce5fefa0af576aa@eucas1p2.samsung.com> ` (6 more replies) 0 siblings, 7 replies; 16+ messages in thread From: Marek Szyprowski @ 2019-12-02 11:11 UTC (permalink / raw) To: u-boot Hi All! This patchset enables support for DFU over USB protocol on Raspberry Pi4 board. The board has DWC2 UDC controller connected to the USB-C power connector. Enabling DFU on it, make the u-boot development much more convenient, as one no longer needs to swap SD-card between RPi4 board and host machine to update the u-boot binary. Patches are based on current 'master' u-boot branch. They were tested on the 2019-07-10-raspbian-buster-lite.img sd-card image with the following lines added to config.txt: dtoverlay=dwc2,dr_mode=peripheral dtparam=i2c_arm=on dtparam=spi=on enable_uart=1 uart_2ndstage=1 kernel=u-boot.bin To enable DFU, one has to enter follwing command: # dfu 0 mmc 0 During the development of this feature I've encountered a serious bugs in FAT write code. Over-writing discontiguous files always caused serious filesystem corruption. This was especially anoying, because the system environment is kept on FAT volume in uboot.env file, so 'saveenv' basically corrupted the boot partiting on the second call. Another bunch of the issues in the FAT write code has been revealed while removing predefined file size limit in DFU MMC code and then running sandbox tests. I hope that my fixes for FAT code will be helpful for non-RPi users too. Best regards Marek Szyprowski Samsung R&D Institute Poland Changelog: v4: - rechecked the FAT related fixes, it turned out that much simpler patch fixes both issues discovered while working on DFU support; added simple sandbox based tests reveleaing the issue and showing correctness of the fix - rebased patches onto current u-boot's master branch: 4b19b89ca4a8 ("Merge tag 'rpi-next-2020.01' of https://github.com/mbgg/u-boot") v3: https://patchwork.ozlabs.org/cover/1200793/ - fixed one more FAT issue revealed by sandbox tests v3: (patch 6/6 posted separately): https://patchwork.ozlabs.org/patch/1195645/ - fixed non-RPi4 builds (missing #else ENV_DFU_SETTINGS def) - removed config.txt entity (not needed in uboot-based boot) - switched arm64 kernel filename to 'Image' v2: https://patchwork.ozlabs.org/cover/1166589/ - added changes to rpi_4_defconfig too (arm64 version) - extended DFU entity list by confix.txt, cmdline.txt and Image.gz - fixed missing '\0' at the end of dfu_alt_info env - added reviewed-by tags - added patches for DFU MMC to remove file size limit - added patch for fat write to fix issues on non-zero file offset (revealed by previous patch) v1: https://patchwork.ozlabs.org/cover/1162770/ - initial version Patch summary: Marek Szyprowski (6): fat: write: fix broken write to fragmented files fat: write: adjust data written in each partial write dfu: mmc: rearrange the code dfu: mmc: remove file size limit for io operations usb: dwc2_udc_otg: add bcm2835 SoC (Raspberry Pi4) support config: enable DFU over USB on Raspberry Pi4 boards configs/rpi_4_32b_defconfig | 11 +++ configs/rpi_4_defconfig | 11 +++ drivers/dfu/dfu_mmc.c | 93 +++++++++++++--------- drivers/usb/gadget/dwc2_udc_otg.c | 2 + drivers/usb/gadget/dwc2_udc_otg_xfer_dma.c | 12 +-- fs/fat/fat_write.c | 8 +- include/configs/rpi.h | 20 +++++ 7 files changed, 112 insertions(+), 45 deletions(-) -- 2.17.1 ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <CGME20191202111129eucas1p271b4ed0d90cb10addce5fefa0af576aa@eucas1p2.samsung.com>]
* [U-Boot] [PATCH v4 1/6] fat: write: fix broken write to fragmented files [not found] ` <CGME20191202111129eucas1p271b4ed0d90cb10addce5fefa0af576aa@eucas1p2.samsung.com> @ 2019-12-02 11:11 ` Marek Szyprowski 2019-12-05 16:52 ` Lukasz Majewski 2020-02-08 0:05 ` [U-Boot] " Tom Rini 0 siblings, 2 replies; 16+ messages in thread From: Marek Szyprowski @ 2019-12-02 11:11 UTC (permalink / raw) To: 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 <m.szyprowski@samsung.com> --- This patch partially fixes the issue revealed by the following test script: --->8-fat_test1.sh--- #!/bin/bash make sandbox_defconfig make dd if=/dev/zero of=/tmp/10M.img bs=1024 count=10k mkfs.vfat -v /tmp/10M.img cat >/tmp/cmds <<EOF x host bind 0 /tmp/10M.img fatls host 0 mw 0x1000000 0x0a434241 0x1000 # "ABC\n" mw 0x1100000 0x0a464544 0x8000 # "DEF\n" fatwrite host 0 0x1000000 file0001.raw 0x1000 fatwrite host 0 0x1000000 file0002.raw 0x1000 fatwrite host 0 0x1000000 file0003.raw 0x1000 fatwrite host 0 0x1000000 file0004.raw 0x1000 fatwrite host 0 0x1000000 file0005.raw 0x1000 fatrm host 0 file0002.raw fatrm host 0 file0004.raw fatls host 0 fatwrite host 0 0x1100000 file0007.raw 0x4000 fatwrite host 0 0x1100000 file0007.raw 0x4000 reset EOF ./u-boot </tmp/cmds #verify rm -r /tmp/result /tmp/model mkdir /tmp/result mkdir /tmp/model yes ABC | head -c 4096 >/tmp/model/file0001.raw yes ABC | head -c 4096 >/tmp/model/file0003.raw yes ABC | head -c 4096 >/tmp/model/file0005.raw yes DEF | head -c 16384 >/tmp/model/file0007.raw mcopy -n -i /tmp/10M.img ::file0001.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0003.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0005.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0007.raw /tmp/result hd /tmp/10M.img if diff -urq /tmp/model /tmp/result then echo Test okay else echo Test fail fi --->8--- Overwritting a discontiguous test file (file0007.raw) no longer causes corruption to file0003.raw, which's data lies between the chunks of the test file. The amount of data written to disk is still incorrect, what causes damage to the file (file0005.raw), which's data lies next to the test file. This will be fixed by the next patch. Feel free to prepare a proper sandbox/py_test based tests based on the provided test scripts. --- fs/fat/fat_write.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index 729cf39630..f946030f7d 100644 --- a/fs/fat/fat_write.c +++ b/fs/fat/fat_write.c @@ -794,6 +794,8 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, newclust = get_fatent(mydata, endclust); + if (newclust != endclust + 1) + break; if (IS_LAST_CLUST(newclust, mydata->fatsize)) break; if (CHECK_CLUST(newclust, mydata->fatsize)) { @@ -824,8 +826,6 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, if (filesize <= cur_pos) break; - /* CHECK: newclust = get_fatent(mydata, endclust); */ - if (IS_LAST_CLUST(newclust, mydata->fatsize)) /* no more clusters */ break; -- 2.17.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 1/6] fat: write: fix broken write to fragmented files 2019-12-02 11:11 ` [U-Boot] [PATCH v4 1/6] fat: write: fix broken write to fragmented files Marek Szyprowski @ 2019-12-05 16:52 ` Lukasz Majewski 2019-12-05 17:58 ` Matthias Brugger 2020-02-08 0:05 ` [U-Boot] " Tom Rini 1 sibling, 1 reply; 16+ messages in thread From: Lukasz Majewski @ 2019-12-05 16:52 UTC (permalink / raw) To: u-boot Hi Tom, Matthias, > 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 <m.szyprowski@samsung.com> > --- > > This patch partially fixes the issue revealed by the following test > script: > Tom could you pic this patch and the following one (2/6): https://patchwork.ozlabs.org/patch/1203101/ to -master as a fix? This seems like a _real_ fix for FAT. The dfu part of this series IMHO shall be grabbed by Matthias or me into the -next branch of u-boot-dfu/rpi4 tree. I do guess that Matthias shall fetch this series as he is assigned to it in the patchwork? I'm fine for this as I've already acked / reviewed DFU part of this series. > --->8-fat_test1.sh--- > #!/bin/bash > make sandbox_defconfig > make > dd if=/dev/zero of=/tmp/10M.img bs=1024 count=10k > mkfs.vfat -v /tmp/10M.img > cat >/tmp/cmds <<EOF > x > host bind 0 /tmp/10M.img > fatls host 0 > mw 0x1000000 0x0a434241 0x1000 # "ABC\n" > mw 0x1100000 0x0a464544 0x8000 # "DEF\n" > fatwrite host 0 0x1000000 file0001.raw 0x1000 > fatwrite host 0 0x1000000 file0002.raw 0x1000 > fatwrite host 0 0x1000000 file0003.raw 0x1000 > fatwrite host 0 0x1000000 file0004.raw 0x1000 > fatwrite host 0 0x1000000 file0005.raw 0x1000 > fatrm host 0 file0002.raw > fatrm host 0 file0004.raw > fatls host 0 > fatwrite host 0 0x1100000 file0007.raw 0x4000 > fatwrite host 0 0x1100000 file0007.raw 0x4000 > reset > EOF > ./u-boot </tmp/cmds > #verify > rm -r /tmp/result /tmp/model > mkdir /tmp/result > mkdir /tmp/model > yes ABC | head -c 4096 >/tmp/model/file0001.raw > yes ABC | head -c 4096 >/tmp/model/file0003.raw > yes ABC | head -c 4096 >/tmp/model/file0005.raw > yes DEF | head -c 16384 >/tmp/model/file0007.raw > mcopy -n -i /tmp/10M.img ::file0001.raw /tmp/result > mcopy -n -i /tmp/10M.img ::file0003.raw /tmp/result > mcopy -n -i /tmp/10M.img ::file0005.raw /tmp/result > mcopy -n -i /tmp/10M.img ::file0007.raw /tmp/result > hd /tmp/10M.img > if diff -urq /tmp/model /tmp/result > then > echo Test okay > else > echo Test fail > fi > --->8--- > > Overwritting a discontiguous test file (file0007.raw) no longer causes > corruption to file0003.raw, which's data lies between the chunks of > the test file. The amount of data written to disk is still incorrect, > what causes damage to the file (file0005.raw), which's data lies next > to the test file. This will be fixed by the next patch. > > Feel free to prepare a proper sandbox/py_test based tests based on the > provided test scripts. > --- > fs/fat/fat_write.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c > index 729cf39630..f946030f7d 100644 > --- a/fs/fat/fat_write.c > +++ b/fs/fat/fat_write.c > @@ -794,6 +794,8 @@ set_contents(fsdata *mydata, dir_entry *dentptr, > loff_t pos, __u8 *buffer, > newclust = get_fatent(mydata, endclust); > > + if (newclust != endclust + 1) > + break; > if (IS_LAST_CLUST(newclust, mydata->fatsize)) > break; > if (CHECK_CLUST(newclust, mydata->fatsize)) { > @@ -824,8 +826,6 @@ set_contents(fsdata *mydata, dir_entry *dentptr, > loff_t pos, __u8 *buffer, if (filesize <= cur_pos) > break; > > - /* CHECK: newclust = get_fatent(mydata, endclust); */ > - > if (IS_LAST_CLUST(newclust, mydata->fatsize)) > /* no more clusters */ > break; Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 488 bytes Desc: OpenPGP digital signature URL: <https://lists.denx.de/pipermail/u-boot/attachments/20191205/b2f0d7c5/attachment.sig> ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v4 1/6] fat: write: fix broken write to fragmented files 2019-12-05 16:52 ` Lukasz Majewski @ 2019-12-05 17:58 ` Matthias Brugger 2019-12-05 18:37 ` Tom Rini 0 siblings, 1 reply; 16+ messages in thread From: Matthias Brugger @ 2019-12-05 17:58 UTC (permalink / raw) To: u-boot On 05/12/2019 17:52, Lukasz Majewski wrote: > Hi Tom, Matthias, > >> 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 <m.szyprowski@samsung.com> >> --- >> >> This patch partially fixes the issue revealed by the following test >> script: >> > > Tom could you pic this patch and the following one (2/6): > https://patchwork.ozlabs.org/patch/1203101/ > > to -master as a fix? > > This seems like a _real_ fix for FAT. Right, I think the first patches should go in for v2020.01. I can send them together with some fixes for RPi I'm working on. Tom what do you think? Regards, Matthias > > The dfu part of this series IMHO shall be grabbed by Matthias or me into > the -next branch of u-boot-dfu/rpi4 tree. > > I do guess that Matthias shall fetch this series as he is assigned to > it in the patchwork? > I'm fine for this as I've already acked / reviewed DFU part of this > series. > >> --->8-fat_test1.sh--- >> #!/bin/bash >> make sandbox_defconfig >> make >> dd if=/dev/zero of=/tmp/10M.img bs=1024 count=10k >> mkfs.vfat -v /tmp/10M.img >> cat >/tmp/cmds <<EOF >> x >> host bind 0 /tmp/10M.img >> fatls host 0 >> mw 0x1000000 0x0a434241 0x1000 # "ABC\n" >> mw 0x1100000 0x0a464544 0x8000 # "DEF\n" >> fatwrite host 0 0x1000000 file0001.raw 0x1000 >> fatwrite host 0 0x1000000 file0002.raw 0x1000 >> fatwrite host 0 0x1000000 file0003.raw 0x1000 >> fatwrite host 0 0x1000000 file0004.raw 0x1000 >> fatwrite host 0 0x1000000 file0005.raw 0x1000 >> fatrm host 0 file0002.raw >> fatrm host 0 file0004.raw >> fatls host 0 >> fatwrite host 0 0x1100000 file0007.raw 0x4000 >> fatwrite host 0 0x1100000 file0007.raw 0x4000 >> reset >> EOF >> ./u-boot </tmp/cmds >> #verify >> rm -r /tmp/result /tmp/model >> mkdir /tmp/result >> mkdir /tmp/model >> yes ABC | head -c 4096 >/tmp/model/file0001.raw >> yes ABC | head -c 4096 >/tmp/model/file0003.raw >> yes ABC | head -c 4096 >/tmp/model/file0005.raw >> yes DEF | head -c 16384 >/tmp/model/file0007.raw >> mcopy -n -i /tmp/10M.img ::file0001.raw /tmp/result >> mcopy -n -i /tmp/10M.img ::file0003.raw /tmp/result >> mcopy -n -i /tmp/10M.img ::file0005.raw /tmp/result >> mcopy -n -i /tmp/10M.img ::file0007.raw /tmp/result >> hd /tmp/10M.img >> if diff -urq /tmp/model /tmp/result >> then >> echo Test okay >> else >> echo Test fail >> fi >> --->8--- >> >> Overwritting a discontiguous test file (file0007.raw) no longer causes >> corruption to file0003.raw, which's data lies between the chunks of >> the test file. The amount of data written to disk is still incorrect, >> what causes damage to the file (file0005.raw), which's data lies next >> to the test file. This will be fixed by the next patch. >> >> Feel free to prepare a proper sandbox/py_test based tests based on the >> provided test scripts. >> --- >> fs/fat/fat_write.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c >> index 729cf39630..f946030f7d 100644 >> --- a/fs/fat/fat_write.c >> +++ b/fs/fat/fat_write.c >> @@ -794,6 +794,8 @@ set_contents(fsdata *mydata, dir_entry *dentptr, >> loff_t pos, __u8 *buffer, >> newclust = get_fatent(mydata, endclust); >> >> + if (newclust != endclust + 1) >> + break; >> if (IS_LAST_CLUST(newclust, mydata->fatsize)) >> break; >> if (CHECK_CLUST(newclust, mydata->fatsize)) { >> @@ -824,8 +826,6 @@ set_contents(fsdata *mydata, dir_entry *dentptr, >> loff_t pos, __u8 *buffer, if (filesize <= cur_pos) >> break; >> >> - /* CHECK: newclust = get_fatent(mydata, endclust); */ >> - >> if (IS_LAST_CLUST(newclust, mydata->fatsize)) >> /* no more clusters */ >> break; > > > > > Best regards, > > Lukasz Majewski > > -- > > DENX Software Engineering GmbH, Managing Director: Wolfgang Denk > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de > -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: <https://lists.denx.de/pipermail/u-boot/attachments/20191205/3761086d/attachment.sig> ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v4 1/6] fat: write: fix broken write to fragmented files 2019-12-05 17:58 ` Matthias Brugger @ 2019-12-05 18:37 ` Tom Rini 0 siblings, 0 replies; 16+ messages in thread From: Tom Rini @ 2019-12-05 18:37 UTC (permalink / raw) To: u-boot On Thu, Dec 05, 2019 at 06:58:15PM +0100, Matthias Brugger wrote: > > > On 05/12/2019 17:52, Lukasz Majewski wrote: > > Hi Tom, Matthias, > > > >> 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 <m.szyprowski@samsung.com> > >> --- > >> > >> This patch partially fixes the issue revealed by the following test > >> script: > >> > > > > Tom could you pic this patch and the following one (2/6): > > https://patchwork.ozlabs.org/patch/1203101/ > > > > to -master as a fix? > > > > This seems like a _real_ fix for FAT. > > Right, I think the first patches should go in for v2020.01. I can send them > together with some fixes for RPi I'm working on. > > Tom what do you think? I'd _really_ like to see the test that's in the commit message turned in to a test we can run from CI as Travis will be doing those Soon(TM) and GitLab/Azure do. Then I'll pick them up (I'm testing some other fat fixes right now). Thanks! -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: not available URL: <https://lists.denx.de/pipermail/u-boot/attachments/20191205/ca63e64d/attachment.sig> ^ permalink raw reply [flat|nested] 16+ messages in thread
* [U-Boot] [PATCH v4 1/6] fat: write: fix broken write to fragmented files 2019-12-02 11:11 ` [U-Boot] [PATCH v4 1/6] fat: write: fix broken write to fragmented files Marek Szyprowski 2019-12-05 16:52 ` Lukasz Majewski @ 2020-02-08 0:05 ` Tom Rini 1 sibling, 0 replies; 16+ messages in thread From: Tom Rini @ 2020-02-08 0:05 UTC (permalink / raw) To: u-boot On Mon, Dec 02, 2019 at 12:11:13PM +0100, Marek Szyprowski wrote: > 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 <m.szyprowski@samsung.com> > > This patch partially fixes the issue revealed by the following test > script: > > --->8-fat_test1.sh--- > #!/bin/bash > make sandbox_defconfig > make > dd if=/dev/zero of=/tmp/10M.img bs=1024 count=10k > mkfs.vfat -v /tmp/10M.img > cat >/tmp/cmds <<EOF > x > host bind 0 /tmp/10M.img > fatls host 0 > mw 0x1000000 0x0a434241 0x1000 # "ABC\n" > mw 0x1100000 0x0a464544 0x8000 # "DEF\n" > fatwrite host 0 0x1000000 file0001.raw 0x1000 > fatwrite host 0 0x1000000 file0002.raw 0x1000 > fatwrite host 0 0x1000000 file0003.raw 0x1000 > fatwrite host 0 0x1000000 file0004.raw 0x1000 > fatwrite host 0 0x1000000 file0005.raw 0x1000 > fatrm host 0 file0002.raw > fatrm host 0 file0004.raw > fatls host 0 > fatwrite host 0 0x1100000 file0007.raw 0x4000 > fatwrite host 0 0x1100000 file0007.raw 0x4000 > reset > EOF > ./u-boot </tmp/cmds > #verify > rm -r /tmp/result /tmp/model > mkdir /tmp/result > mkdir /tmp/model > yes ABC | head -c 4096 >/tmp/model/file0001.raw > yes ABC | head -c 4096 >/tmp/model/file0003.raw > yes ABC | head -c 4096 >/tmp/model/file0005.raw > yes DEF | head -c 16384 >/tmp/model/file0007.raw > mcopy -n -i /tmp/10M.img ::file0001.raw /tmp/result > mcopy -n -i /tmp/10M.img ::file0003.raw /tmp/result > mcopy -n -i /tmp/10M.img ::file0005.raw /tmp/result > mcopy -n -i /tmp/10M.img ::file0007.raw /tmp/result > hd /tmp/10M.img > if diff -urq /tmp/model /tmp/result > then > echo Test okay > else > echo Test fail > fi Applied to u-boot/master, thanks! -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: not available URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200207/aceddb5d/attachment.sig> ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <CGME20191202111129eucas1p29846d2823438c5f9e7192925862e1df5@eucas1p2.samsung.com>]
* [U-Boot] [PATCH v4 2/6] fat: write: adjust data written in each partial write [not found] ` <CGME20191202111129eucas1p29846d2823438c5f9e7192925862e1df5@eucas1p2.samsung.com> @ 2019-12-02 11:11 ` Marek Szyprowski 2020-02-08 0:05 ` Tom Rini 0 siblings, 1 reply; 16+ messages in thread From: Marek Szyprowski @ 2019-12-02 11:11 UTC (permalink / raw) To: u-boot The code for handing file overwrite incorrectly calculated the amount of data to write when writing to the last non-cluster aligned chunk. Fix this by ensuring that no more data than the 'filesize' is written to disk. While touching min()-based calculations, change it to type-safe min_t() function. Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> --- This patch finally fixes the issue revealed by the test script from the previous patch. The correctness of the change has been also verified by the following additional test scripts: --->8-fat_test2.sh--- #!/bin/bash make sandbox_defconfig make dd if=/dev/zero of=/tmp/10M.img bs=1024 count=10k mkfs.vfat -v /tmp/10M.img cat >/tmp/cmds <<EOF x host bind 0 /tmp/10M.img fatls host 0 mw 0x1000000 0x0a434241 0x1000 # "ABC\n" mw 0x1100000 0x0a464544 0x8000 # "DEF\n" fatwrite host 0 0x1000000 file0001.raw 0x1000 fatwrite host 0 0x1000000 file0002.raw 0x1000 fatwrite host 0 0x1000000 file0003.raw 0x1000 fatwrite host 0 0x1000000 file0004.raw 0x1000 fatwrite host 0 0x1000000 file0005.raw 0x1000 fatrm host 0 file0002.raw fatrm host 0 file0004.raw fatls host 0 fatwrite host 0 0x1100000 file0007.raw 0x2000 fatwrite host 0 0x1100000 file0007.raw 0x1f00 reset EOF ./u-boot </tmp/cmds #verify rm -r /tmp/result /tmp/model mkdir /tmp/result mkdir /tmp/model yes ABC | head -c 4096 >/tmp/model/file0001.raw yes ABC | head -c 4096 >/tmp/model/file0003.raw yes ABC | head -c 4096 >/tmp/model/file0005.raw yes DEF | head -c 7936 >/tmp/model/file0007.raw mcopy -n -i /tmp/10M.img ::file0001.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0003.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0005.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0007.raw /tmp/result hd /tmp/10M.img if diff -urq /tmp/model /tmp/result then echo Test okay else echo Test fail fi --->8-fat_test3.sh--- #!/bin/bash make sandbox_defconfig make dd if=/dev/zero of=/tmp/10M.img bs=1024 count=10k mkfs.vfat -v /tmp/10M.img cat >/tmp/cmds <<EOF x host bind 0 /tmp/10M.img fatls host 0 mw 0x1000000 0x0a434241 0x1000 # "ABC\n" mw 0x1100000 0x0a464544 0x8000 # "DEF\n" fatwrite host 0 0x1000000 file0001.raw 0x1000 fatwrite host 0 0x1000000 file0002.raw 0x1000 fatwrite host 0 0x1000000 file0003.raw 0x1000 fatwrite host 0 0x1000000 file0004.raw 0x1000 fatwrite host 0 0x1000000 file0005.raw 0x1000 fatrm host 0 file0002.raw fatrm host 0 file0004.raw fatls host 0 fatwrite host 0 0x1100000 file0007.raw 0x2000 fatwrite host 0 0x1100000 file0007.raw 0x2100 reset EOF ./u-boot </tmp/cmds #verify rm -r /tmp/result /tmp/model mkdir /tmp/result mkdir /tmp/model yes ABC | head -c 4096 >/tmp/model/file0001.raw yes ABC | head -c 4096 >/tmp/model/file0003.raw yes ABC | head -c 4096 >/tmp/model/file0005.raw yes DEF | head -c 8448 >/tmp/model/file0007.raw mcopy -n -i /tmp/10M.img ::file0001.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0003.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0005.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0007.raw /tmp/result hd /tmp/10M.img if diff -urq /tmp/model /tmp/result then echo Test okay else echo Test fail fi --->8-fat_test4.sh--- #!/bin/bash make sandbox_defconfig make dd if=/dev/zero of=/tmp/10M.img bs=1024 count=10k mkfs.vfat -v /tmp/10M.img cat >/tmp/cmds <<EOF x host bind 0 /tmp/10M.img fatls host 0 mw 0x1000000 0x0a434241 0x1000 # "ABC\n" mw 0x1100000 0x0a464544 0x8000 # "DEF\n" mw 0x1200000 0x0a494847 0x8000 # "GHI\n" fatwrite host 0 0x1000000 file0001.raw 0x1000 fatwrite host 0 0x1000000 file0002.raw 0x1000 fatwrite host 0 0x1000000 file0003.raw 0x1000 fatwrite host 0 0x1000000 file0004.raw 0x1000 fatwrite host 0 0x1000000 file0005.raw 0x1000 fatrm host 0 file0002.raw fatrm host 0 file0004.raw fatls host 0 fatwrite host 0 0x1100000 file0007.raw 0x900 fatwrite host 0 0x1200000 file0007.raw 0x900 0x900 fatwrite host 0 0x1100000 file0007.raw 0x900 0x1200 fatwrite host 0 0x1200000 file0007.raw 0x900 0x1b00 reset EOF ./u-boot </tmp/cmds #verify rm -r /tmp/result /tmp/model mkdir /tmp/result mkdir /tmp/model yes ABC | head -c 4096 >/tmp/model/file0001.raw yes ABC | head -c 4096 >/tmp/model/file0003.raw yes ABC | head -c 4096 >/tmp/model/file0005.raw yes DEF | head -c 2304 >/tmp/model/file0007.raw yes GHI | head -c 2304 >>/tmp/model/file0007.raw yes DEF | head -c 2304 >>/tmp/model/file0007.raw yes GHI | head -c 2304 >>/tmp/model/file0007.raw mcopy -n -i /tmp/10M.img ::file0001.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0003.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0005.raw /tmp/result mcopy -n -i /tmp/10M.img ::file0007.raw /tmp/result hd /tmp/10M.img if diff -urq /tmp/model /tmp/result then echo Test okay else echo Test fail fi --->8--- Feel free to prepare a proper sandbox/py_test based tests based on the provided test scripts. --- fs/fat/fat_write.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index f946030f7d..8e4a235d7c 100644 --- a/fs/fat/fat_write.c +++ b/fs/fat/fat_write.c @@ -813,7 +813,9 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, offset = 0; else offset = pos - cur_pos; - wsize = min(cur_pos + actsize, filesize) - pos; + wsize = min_t(unsigned long long, actsize, filesize - cur_pos); + wsize -= offset; + if (get_set_cluster(mydata, curclust, offset, buffer, wsize, &actsize)) { printf("Error get-and-setting cluster\n"); -- 2.17.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [U-Boot] [PATCH v4 2/6] fat: write: adjust data written in each partial write 2019-12-02 11:11 ` [U-Boot] [PATCH v4 2/6] fat: write: adjust data written in each partial write Marek Szyprowski @ 2020-02-08 0:05 ` Tom Rini 0 siblings, 0 replies; 16+ messages in thread From: Tom Rini @ 2020-02-08 0:05 UTC (permalink / raw) To: u-boot On Mon, Dec 02, 2019 at 12:11:14PM +0100, Marek Szyprowski wrote: > The code for handing file overwrite incorrectly calculated the amount of > data to write when writing to the last non-cluster aligned chunk. Fix > this by ensuring that no more data than the 'filesize' is written to disk. > While touching min()-based calculations, change it to type-safe min_t() > function. > > Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> > > This patch finally fixes the issue revealed by the test script from the > previous patch. The correctness of the change has been also verified by > the following additional test scripts: > Applied to u-boot/master, thanks! -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: not available URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200207/b188b2cd/attachment.sig> ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <CGME20191202111130eucas1p22c4bc5190db03f1f3e0f2bdaf0f839e6@eucas1p2.samsung.com>]
* [U-Boot] [PATCH v4 3/6] dfu: mmc: rearrange the code [not found] ` <CGME20191202111130eucas1p22c4bc5190db03f1f3e0f2bdaf0f839e6@eucas1p2.samsung.com> @ 2019-12-02 11:11 ` Marek Szyprowski 0 siblings, 0 replies; 16+ messages in thread From: Marek Szyprowski @ 2019-12-02 11:11 UTC (permalink / raw) To: 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 <m.szyprowski@samsung.com> Acked-by: Lukasz Majewski <lukma@denx.de> --- 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__, -- 2.17.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
[parent not found: <CGME20191202111131eucas1p1ed88eead5f2dc4cb4bd6218aefde50fe@eucas1p1.samsung.com>]
* [U-Boot] [PATCH v4 4/6] dfu: mmc: remove file size limit for io operations [not found] ` <CGME20191202111131eucas1p1ed88eead5f2dc4cb4bd6218aefde50fe@eucas1p1.samsung.com> @ 2019-12-02 11:11 ` Marek Szyprowski 0 siblings, 0 replies; 16+ messages in thread From: Marek Szyprowski @ 2019-12-02 11:11 UTC (permalink / raw) To: 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 <m.szyprowski@samsung.com> Acked-by: Lukasz Majewski <lukma@denx.de> --- 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; } -- 2.17.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
[parent not found: <CGME20191202111131eucas1p27821b1ee9dcca16146060fd744726a3c@eucas1p2.samsung.com>]
* [U-Boot] [PATCH v4 5/6] usb: dwc2_udc_otg: add bcm2835 SoC (Raspberry Pi4) support [not found] ` <CGME20191202111131eucas1p27821b1ee9dcca16146060fd744726a3c@eucas1p2.samsung.com> @ 2019-12-02 11:11 ` Marek Szyprowski 0 siblings, 0 replies; 16+ messages in thread From: Marek Szyprowski @ 2019-12-02 11:11 UTC (permalink / raw) To: 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 <m.szyprowski@samsung.com> Reviewed-by: Lukasz Majewski <lukma@denx.de> --- 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 <linux/usb/otg.h> #include <linux/usb/gadget.h> +#include <phys2bus.h> #include <asm/byteorder.h> #include <asm/unaligned.h> #include <asm/io.h> @@ -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); -- 2.17.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
[parent not found: <CGME20191202111132eucas1p1e25756addc317af3069b77557c8de60b@eucas1p1.samsung.com>]
* [U-Boot] [PATCH v4 6/6] config: enable DFU over USB on Raspberry Pi4 boards [not found] ` <CGME20191202111132eucas1p1e25756addc317af3069b77557c8de60b@eucas1p1.samsung.com> @ 2019-12-02 11:11 ` Marek Szyprowski 2020-01-28 11:20 ` Matthias Brugger 0 siblings, 1 reply; 16+ messages in thread From: Marek Szyprowski @ 2019-12-02 11:11 UTC (permalink / raw) To: 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 <m.szyprowski@samsung.com> Reviewed-by: Lukasz Majewski <lukma@denx.de> --- configs/rpi_4_32b_defconfig | 11 +++++++++++ configs/rpi_4_defconfig | 11 +++++++++++ include/configs/rpi.h | 20 ++++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig index 7ff390cd24..9d0515029c 100644 --- a/configs/rpi_4_32b_defconfig +++ b/configs/rpi_4_32b_defconfig @@ -12,6 +12,7 @@ CONFIG_MISC_INIT_R=y # CONFIG_DISPLAY_CPUINFO is not set # CONFIG_DISPLAY_BOARDINFO is not set CONFIG_SYS_PROMPT="U-Boot> " +CONFIG_CMD_DFU=y # CONFIG_CMD_FLASH is not set CONFIG_CMD_GPIO=y CONFIG_CMD_MMC=y @@ -21,6 +22,7 @@ CONFIG_ENV_FAT_INTERFACE="mmc" CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" CONFIG_SYS_RELOC_GD_ENV_ADDR=y CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +CONFIG_DFU_MMC=y CONFIG_DM_KEYBOARD=y CONFIG_DM_MMC=y CONFIG_MMC_SDHCI=y @@ -28,6 +30,15 @@ CONFIG_MMC_SDHCI_BCM2835=y CONFIG_PINCTRL=y # CONFIG_PINCTRL_GENERIC is not set # CONFIG_REQUIRE_SERIAL_CONSOLE is not set +CONFIG_USB=y +CONFIG_DM_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="FSL" +CONFIG_USB_GADGET_VENDOR_NUM=0x0525 +CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 +CONFIG_USB_GADGET_DWC2_OTG=y +CONFIG_USB_GADGET_DOWNLOAD=y CONFIG_DM_VIDEO=y CONFIG_SYS_WHITE_ON_BLACK=y CONFIG_CONSOLE_SCROLL_LINES=10 diff --git a/configs/rpi_4_defconfig b/configs/rpi_4_defconfig index c5089eb9c8..3d660d182a 100644 --- a/configs/rpi_4_defconfig +++ b/configs/rpi_4_defconfig @@ -12,6 +12,7 @@ CONFIG_MISC_INIT_R=y # CONFIG_DISPLAY_CPUINFO is not set # CONFIG_DISPLAY_BOARDINFO is not set CONFIG_SYS_PROMPT="U-Boot> " +CONFIG_CMD_DFU=y # CONFIG_CMD_FLASH is not set CONFIG_CMD_GPIO=y CONFIG_CMD_MMC=y @@ -21,6 +22,7 @@ CONFIG_ENV_FAT_INTERFACE="mmc" CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" CONFIG_SYS_RELOC_GD_ENV_ADDR=y CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +CONFIG_DFU_MMC=y CONFIG_DM_KEYBOARD=y CONFIG_DM_MMC=y CONFIG_MMC_SDHCI=y @@ -28,6 +30,15 @@ CONFIG_MMC_SDHCI_BCM2835=y CONFIG_PINCTRL=y # CONFIG_PINCTRL_GENERIC is not set # CONFIG_REQUIRE_SERIAL_CONSOLE is not set +CONFIG_USB=y +CONFIG_DM_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_MANUFACTURER="FSL" +CONFIG_USB_GADGET_VENDOR_NUM=0x0525 +CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 +CONFIG_USB_GADGET_DWC2_OTG=y +CONFIG_USB_GADGET_DOWNLOAD=y CONFIG_DM_VIDEO=y CONFIG_SYS_WHITE_ON_BLACK=y CONFIG_CONSOLE_SCROLL_LINES=10 diff --git a/include/configs/rpi.h b/include/configs/rpi.h index 83e258a6b9..b53a4b65d0 100644 --- a/include/configs/rpi.h +++ b/include/configs/rpi.h @@ -74,6 +74,25 @@ #define CONFIG_TFTP_TSIZE #endif +/* DFU over USB/UDC */ +#ifdef CONFIG_CMD_DFU +#define CONFIG_SYS_DFU_DATA_BUF_SIZE SZ_1M +#define CONFIG_SYS_DFU_MAX_FILE_SIZE SZ_2M + +#ifdef CONFIG_ARM64 +#define KERNEL_FILENAME "Image" +#else +#define KERNEL_FILENAME "zImage" +#endif + +#define ENV_DFU_SETTINGS \ + "dfu_alt_info=u-boot.bin fat 0 1;uboot.env fat 0 1;" \ + "config.txt fat 0 1;" \ + KERNEL_FILENAME " fat 0 1\0" +#else +#define ENV_DFU_SETTINGS "" +#endif + /* Console configuration */ #define CONFIG_SYS_CBSIZE 1024 @@ -188,6 +207,7 @@ #define CONFIG_EXTRA_ENV_SETTINGS \ "dhcpuboot=usb start; dhcp u-boot.uimg; bootm\0" \ ENV_DEVICE_SETTINGS \ + ENV_DFU_SETTINGS \ ENV_MEM_LAYOUT_SETTINGS \ BOOTENV -- 2.17.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 6/6] config: enable DFU over USB on Raspberry Pi4 boards 2019-12-02 11:11 ` [U-Boot] [PATCH v4 6/6] config: enable DFU over USB on Raspberry Pi4 boards Marek Szyprowski @ 2020-01-28 11:20 ` Matthias Brugger 2020-01-28 11:31 ` Jaehoon Chung 0 siblings, 1 reply; 16+ messages in thread From: Matthias Brugger @ 2020-01-28 11:20 UTC (permalink / raw) To: u-boot On 02/12/2019 12:11, Marek Szyprowski wrote: > 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 <m.szyprowski@samsung.com> > Reviewed-by: Lukasz Majewski <lukma@denx.de> > --- > configs/rpi_4_32b_defconfig | 11 +++++++++++ > configs/rpi_4_defconfig | 11 +++++++++++ In the meanwhile we have a third config rpi_arm64_defconfig does it make sense to add DFU support there too? I suppose it works on RPi3 as well. If so, would you mind to send a follow-up patch? Regards, Matthias > include/configs/rpi.h | 20 ++++++++++++++++++++ > 3 files changed, 42 insertions(+) > > diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig > index 7ff390cd24..9d0515029c 100644 > --- a/configs/rpi_4_32b_defconfig > +++ b/configs/rpi_4_32b_defconfig > @@ -12,6 +12,7 @@ CONFIG_MISC_INIT_R=y > # CONFIG_DISPLAY_CPUINFO is not set > # CONFIG_DISPLAY_BOARDINFO is not set > CONFIG_SYS_PROMPT="U-Boot> " > +CONFIG_CMD_DFU=y > # CONFIG_CMD_FLASH is not set > CONFIG_CMD_GPIO=y > CONFIG_CMD_MMC=y > @@ -21,6 +22,7 @@ CONFIG_ENV_FAT_INTERFACE="mmc" > CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" > CONFIG_SYS_RELOC_GD_ENV_ADDR=y > CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y > +CONFIG_DFU_MMC=y > CONFIG_DM_KEYBOARD=y > CONFIG_DM_MMC=y > CONFIG_MMC_SDHCI=y > @@ -28,6 +30,15 @@ CONFIG_MMC_SDHCI_BCM2835=y > CONFIG_PINCTRL=y > # CONFIG_PINCTRL_GENERIC is not set > # CONFIG_REQUIRE_SERIAL_CONSOLE is not set > +CONFIG_USB=y > +CONFIG_DM_USB=y > +CONFIG_DM_USB_GADGET=y > +CONFIG_USB_GADGET=y > +CONFIG_USB_GADGET_MANUFACTURER="FSL" > +CONFIG_USB_GADGET_VENDOR_NUM=0x0525 > +CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 > +CONFIG_USB_GADGET_DWC2_OTG=y > +CONFIG_USB_GADGET_DOWNLOAD=y > CONFIG_DM_VIDEO=y > CONFIG_SYS_WHITE_ON_BLACK=y > CONFIG_CONSOLE_SCROLL_LINES=10 > diff --git a/configs/rpi_4_defconfig b/configs/rpi_4_defconfig > index c5089eb9c8..3d660d182a 100644 > --- a/configs/rpi_4_defconfig > +++ b/configs/rpi_4_defconfig > @@ -12,6 +12,7 @@ CONFIG_MISC_INIT_R=y > # CONFIG_DISPLAY_CPUINFO is not set > # CONFIG_DISPLAY_BOARDINFO is not set > CONFIG_SYS_PROMPT="U-Boot> " > +CONFIG_CMD_DFU=y > # CONFIG_CMD_FLASH is not set > CONFIG_CMD_GPIO=y > CONFIG_CMD_MMC=y > @@ -21,6 +22,7 @@ CONFIG_ENV_FAT_INTERFACE="mmc" > CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" > CONFIG_SYS_RELOC_GD_ENV_ADDR=y > CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y > +CONFIG_DFU_MMC=y > CONFIG_DM_KEYBOARD=y > CONFIG_DM_MMC=y > CONFIG_MMC_SDHCI=y > @@ -28,6 +30,15 @@ CONFIG_MMC_SDHCI_BCM2835=y > CONFIG_PINCTRL=y > # CONFIG_PINCTRL_GENERIC is not set > # CONFIG_REQUIRE_SERIAL_CONSOLE is not set > +CONFIG_USB=y > +CONFIG_DM_USB=y > +CONFIG_DM_USB_GADGET=y > +CONFIG_USB_GADGET=y > +CONFIG_USB_GADGET_MANUFACTURER="FSL" > +CONFIG_USB_GADGET_VENDOR_NUM=0x0525 > +CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 > +CONFIG_USB_GADGET_DWC2_OTG=y > +CONFIG_USB_GADGET_DOWNLOAD=y > CONFIG_DM_VIDEO=y > CONFIG_SYS_WHITE_ON_BLACK=y > CONFIG_CONSOLE_SCROLL_LINES=10 > diff --git a/include/configs/rpi.h b/include/configs/rpi.h > index 83e258a6b9..b53a4b65d0 100644 > --- a/include/configs/rpi.h > +++ b/include/configs/rpi.h > @@ -74,6 +74,25 @@ > #define CONFIG_TFTP_TSIZE > #endif > > +/* DFU over USB/UDC */ > +#ifdef CONFIG_CMD_DFU > +#define CONFIG_SYS_DFU_DATA_BUF_SIZE SZ_1M > +#define CONFIG_SYS_DFU_MAX_FILE_SIZE SZ_2M > + > +#ifdef CONFIG_ARM64 > +#define KERNEL_FILENAME "Image" > +#else > +#define KERNEL_FILENAME "zImage" > +#endif > + > +#define ENV_DFU_SETTINGS \ > + "dfu_alt_info=u-boot.bin fat 0 1;uboot.env fat 0 1;" \ > + "config.txt fat 0 1;" \ > + KERNEL_FILENAME " fat 0 1\0" > +#else > +#define ENV_DFU_SETTINGS "" > +#endif > + > /* Console configuration */ > #define CONFIG_SYS_CBSIZE 1024 > > @@ -188,6 +207,7 @@ > #define CONFIG_EXTRA_ENV_SETTINGS \ > "dhcpuboot=usb start; dhcp u-boot.uimg; bootm\0" \ > ENV_DEVICE_SETTINGS \ > + ENV_DFU_SETTINGS \ > ENV_MEM_LAYOUT_SETTINGS \ > BOOTENV > > ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v4 6/6] config: enable DFU over USB on Raspberry Pi4 boards 2020-01-28 11:20 ` Matthias Brugger @ 2020-01-28 11:31 ` Jaehoon Chung 0 siblings, 0 replies; 16+ messages in thread From: Jaehoon Chung @ 2020-01-28 11:31 UTC (permalink / raw) To: u-boot On 1/28/20 8:20 PM, Matthias Brugger wrote: > > > On 02/12/2019 12:11, Marek Szyprowski wrote: >> 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 <m.szyprowski@samsung.com> >> Reviewed-by: Lukasz Majewski <lukma@denx.de> >> --- >> configs/rpi_4_32b_defconfig | 11 +++++++++++ >> configs/rpi_4_defconfig | 11 +++++++++++ > > In the meanwhile we have a third config rpi_arm64_defconfig > > does it make sense to add DFU support there too? > I suppose it works on RPi3 as well. If so, would you mind to send a follow-up patch? As i know, RPI3's HW doesn't support. SO it doesn't need to apply this patch on RPI3. Best Regards, Jaehoon Chung > > Regards, > Matthias > >> include/configs/rpi.h | 20 ++++++++++++++++++++ >> 3 files changed, 42 insertions(+) >> >> diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig >> index 7ff390cd24..9d0515029c 100644 >> --- a/configs/rpi_4_32b_defconfig >> +++ b/configs/rpi_4_32b_defconfig >> @@ -12,6 +12,7 @@ CONFIG_MISC_INIT_R=y >> # CONFIG_DISPLAY_CPUINFO is not set >> # CONFIG_DISPLAY_BOARDINFO is not set >> CONFIG_SYS_PROMPT="U-Boot> " >> +CONFIG_CMD_DFU=y >> # CONFIG_CMD_FLASH is not set >> CONFIG_CMD_GPIO=y >> CONFIG_CMD_MMC=y >> @@ -21,6 +22,7 @@ CONFIG_ENV_FAT_INTERFACE="mmc" >> CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" >> CONFIG_SYS_RELOC_GD_ENV_ADDR=y >> CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y >> +CONFIG_DFU_MMC=y >> CONFIG_DM_KEYBOARD=y >> CONFIG_DM_MMC=y >> CONFIG_MMC_SDHCI=y >> @@ -28,6 +30,15 @@ CONFIG_MMC_SDHCI_BCM2835=y >> CONFIG_PINCTRL=y >> # CONFIG_PINCTRL_GENERIC is not set >> # CONFIG_REQUIRE_SERIAL_CONSOLE is not set >> +CONFIG_USB=y >> +CONFIG_DM_USB=y >> +CONFIG_DM_USB_GADGET=y >> +CONFIG_USB_GADGET=y >> +CONFIG_USB_GADGET_MANUFACTURER="FSL" >> +CONFIG_USB_GADGET_VENDOR_NUM=0x0525 >> +CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 >> +CONFIG_USB_GADGET_DWC2_OTG=y >> +CONFIG_USB_GADGET_DOWNLOAD=y >> CONFIG_DM_VIDEO=y >> CONFIG_SYS_WHITE_ON_BLACK=y >> CONFIG_CONSOLE_SCROLL_LINES=10 >> diff --git a/configs/rpi_4_defconfig b/configs/rpi_4_defconfig >> index c5089eb9c8..3d660d182a 100644 >> --- a/configs/rpi_4_defconfig >> +++ b/configs/rpi_4_defconfig >> @@ -12,6 +12,7 @@ CONFIG_MISC_INIT_R=y >> # CONFIG_DISPLAY_CPUINFO is not set >> # CONFIG_DISPLAY_BOARDINFO is not set >> CONFIG_SYS_PROMPT="U-Boot> " >> +CONFIG_CMD_DFU=y >> # CONFIG_CMD_FLASH is not set >> CONFIG_CMD_GPIO=y >> CONFIG_CMD_MMC=y >> @@ -21,6 +22,7 @@ CONFIG_ENV_FAT_INTERFACE="mmc" >> CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" >> CONFIG_SYS_RELOC_GD_ENV_ADDR=y >> CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y >> +CONFIG_DFU_MMC=y >> CONFIG_DM_KEYBOARD=y >> CONFIG_DM_MMC=y >> CONFIG_MMC_SDHCI=y >> @@ -28,6 +30,15 @@ CONFIG_MMC_SDHCI_BCM2835=y >> CONFIG_PINCTRL=y >> # CONFIG_PINCTRL_GENERIC is not set >> # CONFIG_REQUIRE_SERIAL_CONSOLE is not set >> +CONFIG_USB=y >> +CONFIG_DM_USB=y >> +CONFIG_DM_USB_GADGET=y >> +CONFIG_USB_GADGET=y >> +CONFIG_USB_GADGET_MANUFACTURER="FSL" >> +CONFIG_USB_GADGET_VENDOR_NUM=0x0525 >> +CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5 >> +CONFIG_USB_GADGET_DWC2_OTG=y >> +CONFIG_USB_GADGET_DOWNLOAD=y >> CONFIG_DM_VIDEO=y >> CONFIG_SYS_WHITE_ON_BLACK=y >> CONFIG_CONSOLE_SCROLL_LINES=10 >> diff --git a/include/configs/rpi.h b/include/configs/rpi.h >> index 83e258a6b9..b53a4b65d0 100644 >> --- a/include/configs/rpi.h >> +++ b/include/configs/rpi.h >> @@ -74,6 +74,25 @@ >> #define CONFIG_TFTP_TSIZE >> #endif >> >> +/* DFU over USB/UDC */ >> +#ifdef CONFIG_CMD_DFU >> +#define CONFIG_SYS_DFU_DATA_BUF_SIZE SZ_1M >> +#define CONFIG_SYS_DFU_MAX_FILE_SIZE SZ_2M >> + >> +#ifdef CONFIG_ARM64 >> +#define KERNEL_FILENAME "Image" >> +#else >> +#define KERNEL_FILENAME "zImage" >> +#endif >> + >> +#define ENV_DFU_SETTINGS \ >> + "dfu_alt_info=u-boot.bin fat 0 1;uboot.env fat 0 1;" \ >> + "config.txt fat 0 1;" \ >> + KERNEL_FILENAME " fat 0 1\0" >> +#else >> +#define ENV_DFU_SETTINGS "" >> +#endif >> + >> /* Console configuration */ >> #define CONFIG_SYS_CBSIZE 1024 >> >> @@ -188,6 +207,7 @@ >> #define CONFIG_EXTRA_ENV_SETTINGS \ >> "dhcpuboot=usb start; dhcp u-boot.uimg; bootm\0" \ >> ENV_DEVICE_SETTINGS \ >> + ENV_DFU_SETTINGS \ >> ENV_MEM_LAYOUT_SETTINGS \ >> BOOTENV >> >> > > ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v4 0/6] Raspberry Pi4: add support for DFU over USB 2019-12-02 11:11 ` [U-Boot] [PATCH v4 0/6] Raspberry Pi4: add support for DFU over USB Marek Szyprowski ` (5 preceding siblings ...) [not found] ` <CGME20191202111132eucas1p1e25756addc317af3069b77557c8de60b@eucas1p1.samsung.com> @ 2020-01-27 22:36 ` Lukasz Majewski 2020-01-28 11:11 ` Matthias Brugger 6 siblings, 1 reply; 16+ messages in thread From: Lukasz Majewski @ 2020-01-27 22:36 UTC (permalink / raw) To: u-boot Hi Matthias, Do you plan to pull this patch series to RPI repository? I'm asking as it contains some DFU related patches (Acked already by me), which I would like to see pulled in this merge window. Thanks in advance for your help :-) > Hi All! > > This patchset enables support for DFU over USB protocol on Raspberry > Pi4 board. The board has DWC2 UDC controller connected to the USB-C > power connector. Enabling DFU on it, make the u-boot development much > more convenient, as one no longer needs to swap SD-card between RPi4 > board and host machine to update the u-boot binary. > > Patches are based on current 'master' u-boot branch. They were tested > on the 2019-07-10-raspbian-buster-lite.img sd-card image with the > following lines added to config.txt: > dtoverlay=dwc2,dr_mode=peripheral > dtparam=i2c_arm=on > dtparam=spi=on > enable_uart=1 > uart_2ndstage=1 > kernel=u-boot.bin > > To enable DFU, one has to enter follwing command: > # dfu 0 mmc 0 > > During the development of this feature I've encountered a serious bugs > in FAT write code. Over-writing discontiguous files always caused > serious filesystem corruption. This was especially anoying, because > the system environment is kept on FAT volume in uboot.env file, so > 'saveenv' basically corrupted the boot partiting on the second call. > Another bunch of the issues in the FAT write code has been revealed > while removing predefined file size limit in DFU MMC code and then > running sandbox tests. > > I hope that my fixes for FAT code will be helpful for non-RPi users > too. > > Best regards > Marek Szyprowski > Samsung R&D Institute Poland > > > Changelog: > > v4: > - rechecked the FAT related fixes, it turned out that much simpler > patch fixes both issues discovered while working on DFU support; > added simple sandbox based tests reveleaing the issue and showing > correctness of the fix > - rebased patches onto current u-boot's master branch: 4b19b89ca4a8 > ("Merge tag 'rpi-next-2020.01' of https://github.com/mbgg/u-boot") > > v3: https://patchwork.ozlabs.org/cover/1200793/ > - fixed one more FAT issue revealed by sandbox tests > > v3: (patch 6/6 posted separately): > https://patchwork.ozlabs.org/patch/1195645/ > - fixed non-RPi4 builds (missing #else ENV_DFU_SETTINGS def) > - removed config.txt entity (not needed in uboot-based boot) > - switched arm64 kernel filename to 'Image' > > v2: https://patchwork.ozlabs.org/cover/1166589/ > - added changes to rpi_4_defconfig too (arm64 version) > - extended DFU entity list by confix.txt, cmdline.txt and Image.gz > - fixed missing '\0' at the end of dfu_alt_info env > - added reviewed-by tags > - added patches for DFU MMC to remove file size limit > - added patch for fat write to fix issues on non-zero file offset > (revealed by previous patch) > > v1: https://patchwork.ozlabs.org/cover/1162770/ > - initial version > > > Patch summary: > > Marek Szyprowski (6): > fat: write: fix broken write to fragmented files > fat: write: adjust data written in each partial write > dfu: mmc: rearrange the code > dfu: mmc: remove file size limit for io operations > usb: dwc2_udc_otg: add bcm2835 SoC (Raspberry Pi4) support > config: enable DFU over USB on Raspberry Pi4 boards > > configs/rpi_4_32b_defconfig | 11 +++ > configs/rpi_4_defconfig | 11 +++ > drivers/dfu/dfu_mmc.c | 93 > +++++++++++++--------- drivers/usb/gadget/dwc2_udc_otg.c | > 2 + drivers/usb/gadget/dwc2_udc_otg_xfer_dma.c | 12 +-- > fs/fat/fat_write.c | 8 +- > include/configs/rpi.h | 20 +++++ > 7 files changed, 112 insertions(+), 45 deletions(-) > Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 488 bytes Desc: OpenPGP digital signature URL: <https://lists.denx.de/pipermail/u-boot/attachments/20200127/5d63a466/attachment.sig> ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v4 0/6] Raspberry Pi4: add support for DFU over USB 2020-01-27 22:36 ` [PATCH v4 0/6] Raspberry Pi4: add support for DFU over USB Lukasz Majewski @ 2020-01-28 11:11 ` Matthias Brugger 0 siblings, 0 replies; 16+ messages in thread From: Matthias Brugger @ 2020-01-28 11:11 UTC (permalink / raw) To: u-boot On 27/01/2020 23:36, Lukasz Majewski wrote: > Hi Matthias, > > Do you plan to pull this patch series to RPI repository? > > I'm asking as it contains some DFU related patches (Acked already by > me), which I would like to see pulled in this merge window. > Yes I was waiting on the first to patches for FAT as Tom asked to add a test. So I'm reluctant to take these two. I can take the rest of the series though. Regards, Matthias > Thanks in advance for your help :-) > >> Hi All! >> >> This patchset enables support for DFU over USB protocol on Raspberry >> Pi4 board. The board has DWC2 UDC controller connected to the USB-C >> power connector. Enabling DFU on it, make the u-boot development much >> more convenient, as one no longer needs to swap SD-card between RPi4 >> board and host machine to update the u-boot binary. >> >> Patches are based on current 'master' u-boot branch. They were tested >> on the 2019-07-10-raspbian-buster-lite.img sd-card image with the >> following lines added to config.txt: >> dtoverlay=dwc2,dr_mode=peripheral >> dtparam=i2c_arm=on >> dtparam=spi=on >> enable_uart=1 >> uart_2ndstage=1 >> kernel=u-boot.bin >> >> To enable DFU, one has to enter follwing command: >> # dfu 0 mmc 0 >> >> During the development of this feature I've encountered a serious bugs >> in FAT write code. Over-writing discontiguous files always caused >> serious filesystem corruption. This was especially anoying, because >> the system environment is kept on FAT volume in uboot.env file, so >> 'saveenv' basically corrupted the boot partiting on the second call. >> Another bunch of the issues in the FAT write code has been revealed >> while removing predefined file size limit in DFU MMC code and then >> running sandbox tests. >> >> I hope that my fixes for FAT code will be helpful for non-RPi users >> too. >> >> Best regards >> Marek Szyprowski >> Samsung R&D Institute Poland >> >> >> Changelog: >> >> v4: >> - rechecked the FAT related fixes, it turned out that much simpler >> patch fixes both issues discovered while working on DFU support; >> added simple sandbox based tests reveleaing the issue and showing >> correctness of the fix >> - rebased patches onto current u-boot's master branch: 4b19b89ca4a8 >> ("Merge tag 'rpi-next-2020.01' of https://github.com/mbgg/u-boot") >> >> v3: https://patchwork.ozlabs.org/cover/1200793/ >> - fixed one more FAT issue revealed by sandbox tests >> >> v3: (patch 6/6 posted separately): >> https://patchwork.ozlabs.org/patch/1195645/ >> - fixed non-RPi4 builds (missing #else ENV_DFU_SETTINGS def) >> - removed config.txt entity (not needed in uboot-based boot) >> - switched arm64 kernel filename to 'Image' >> >> v2: https://patchwork.ozlabs.org/cover/1166589/ >> - added changes to rpi_4_defconfig too (arm64 version) >> - extended DFU entity list by confix.txt, cmdline.txt and Image.gz >> - fixed missing '\0' at the end of dfu_alt_info env >> - added reviewed-by tags >> - added patches for DFU MMC to remove file size limit >> - added patch for fat write to fix issues on non-zero file offset >> (revealed by previous patch) >> >> v1: https://patchwork.ozlabs.org/cover/1162770/ >> - initial version >> >> >> Patch summary: >> >> Marek Szyprowski (6): >> fat: write: fix broken write to fragmented files >> fat: write: adjust data written in each partial write >> dfu: mmc: rearrange the code >> dfu: mmc: remove file size limit for io operations >> usb: dwc2_udc_otg: add bcm2835 SoC (Raspberry Pi4) support >> config: enable DFU over USB on Raspberry Pi4 boards >> >> configs/rpi_4_32b_defconfig | 11 +++ >> configs/rpi_4_defconfig | 11 +++ >> drivers/dfu/dfu_mmc.c | 93 >> +++++++++++++--------- drivers/usb/gadget/dwc2_udc_otg.c | >> 2 + drivers/usb/gadget/dwc2_udc_otg_xfer_dma.c | 12 +-- >> fs/fat/fat_write.c | 8 +- >> include/configs/rpi.h | 20 +++++ >> 7 files changed, 112 insertions(+), 45 deletions(-) >> > > > > > Best regards, > > Lukasz Majewski > > -- > > DENX Software Engineering GmbH, Managing Director: Wolfgang Denk > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de > ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2020-02-08 0:05 UTC | newest] Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <CGME20191202111128eucas1p1398c5729ba6af763c7866cfd5462e3d1@eucas1p1.samsung.com> 2019-12-02 11:11 ` [U-Boot] [PATCH v4 0/6] Raspberry Pi4: add support for DFU over USB Marek Szyprowski [not found] ` <CGME20191202111129eucas1p271b4ed0d90cb10addce5fefa0af576aa@eucas1p2.samsung.com> 2019-12-02 11:11 ` [U-Boot] [PATCH v4 1/6] fat: write: fix broken write to fragmented files Marek Szyprowski 2019-12-05 16:52 ` Lukasz Majewski 2019-12-05 17:58 ` Matthias Brugger 2019-12-05 18:37 ` Tom Rini 2020-02-08 0:05 ` [U-Boot] " Tom Rini [not found] ` <CGME20191202111129eucas1p29846d2823438c5f9e7192925862e1df5@eucas1p2.samsung.com> 2019-12-02 11:11 ` [U-Boot] [PATCH v4 2/6] fat: write: adjust data written in each partial write Marek Szyprowski 2020-02-08 0:05 ` Tom Rini [not found] ` <CGME20191202111130eucas1p22c4bc5190db03f1f3e0f2bdaf0f839e6@eucas1p2.samsung.com> 2019-12-02 11:11 ` [U-Boot] [PATCH v4 3/6] dfu: mmc: rearrange the code Marek Szyprowski [not found] ` <CGME20191202111131eucas1p1ed88eead5f2dc4cb4bd6218aefde50fe@eucas1p1.samsung.com> 2019-12-02 11:11 ` [U-Boot] [PATCH v4 4/6] dfu: mmc: remove file size limit for io operations Marek Szyprowski [not found] ` <CGME20191202111131eucas1p27821b1ee9dcca16146060fd744726a3c@eucas1p2.samsung.com> 2019-12-02 11:11 ` [U-Boot] [PATCH v4 5/6] usb: dwc2_udc_otg: add bcm2835 SoC (Raspberry Pi4) support Marek Szyprowski [not found] ` <CGME20191202111132eucas1p1e25756addc317af3069b77557c8de60b@eucas1p1.samsung.com> 2019-12-02 11:11 ` [U-Boot] [PATCH v4 6/6] config: enable DFU over USB on Raspberry Pi4 boards Marek Szyprowski 2020-01-28 11:20 ` Matthias Brugger 2020-01-28 11:31 ` Jaehoon Chung 2020-01-27 22:36 ` [PATCH v4 0/6] Raspberry Pi4: add support for DFU over USB Lukasz Majewski 2020-01-28 11:11 ` Matthias Brugger
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.