On Fri, Apr 12, 2013 at 05:06:35PM +0200, Ruud Commandeur wrote:
> Hi Mats,
> 
> Thanks a lot, this seems to solve my problem. Nothing more actualy than 
> adding a "if(size)" around the code block of set_sector( ). I could have 
> thought of that myself, but was not sure if anything else should be done in 
> this case...

Since your change sounds slightly different, can you confirm that it
also solves the problem and if so post it as patch with Signed-off-by
and so forth?  Thanks!

> 
> Regards,
> 
> Ruud 
> 
> -----Oorspronkelijk bericht-----
> Van: Mats K?rrman [mailto:mats.karr...@tritech.se] 
> Verzonden: vrijdag 12 april 2013 16:11
> Aan: Ruud Commandeur
> CC: u-boot@lists.denx.de
> Onderwerp: RE: fatwrite problem
> 
> Hi Ruud,
> 
> Ruud Commandeur wrote:
> > Once the size of the set_cluster call equals 0, the mmc command is
> > incomplete and times out. In the earlier reported problem, a patch is
> > mentioned, but not available for dowload here. Also in the latest
> > versions of the git repository I could not find a patch for this
> > problem. Can anyone tell me if there is a fix for this problem?
> 
> I asked Damien Huang (back then) and got the following reply (I think there 
> was
> some character encoding problem so his mail never was accepted by the list).
> I have not further analyzed the contents, anyway it wasn't the solution to my 
> problem.
> BR // Mats
> 
> Damien Huang wrote:
> As requested from Mats, I am resending this email. The patch is given below:
> 
> diff -cr ./u-boot-original/u-boot/fs/fat/fat_write.c 
> ./u-boot-test/u-boot/fs/fat/fat_write.c
> *** ./u-boot-original/u-boot/fs/fat/fat_write.c    2013-02-07 
> 14:47:33.314732999 +1100
> --- ./u-boot-test/u-boot/fs/fat/fat_write.c    2013-02-28 15:36:24.551861920 
> +1100
> ***************
> *** 562,596 ****
>   {
>       int idx = 0;
>       __u32 startsect;
> !
> !     if (clustnum > 0)
> !         startsect = mydata->data_begin +
> !                 clustnum * mydata->clust_size;
> !     else
> !         startsect = mydata->rootdir_sect;
> !
> !     debug("clustnum: %d, startsect: %d\n", clustnum, startsect);
> !
> !     if (disk_write(startsect, size / mydata->sect_size, buffer) < 0) {
> !         debug("Error writing data\n");
> !         return -1;
> !     }
> !
> !     if (size % mydata->sect_size) {
> !         __u8 tmpbuf[mydata->sect_size];
> !
> !         idx = size / mydata->sect_size;
> !         buffer += idx * mydata->sect_size;
> !         memcpy(tmpbuf, buffer, size % mydata->sect_size);
> !
> !         if (disk_write(startsect + idx, 1, tmpbuf) < 0) {
> !             debug("Error writing data\n");
> !             return -1;
> !         }
> !
> !         return 0;
> !     }
> !
>       return 0;
>   }
>  
> --- 562,595 ----
>   {
>       int idx = 0;
>       __u32 startsect;
> !     if(size) //if there are data to be set
> !     {
> !         if (clustnum > 0)
> !             startsect = mydata->data_begin +
> !                     clustnum * mydata->clust_size;
> !         else
> !             startsect = mydata->rootdir_sect;
> !
> !         debug("clustnum: %d, startsect: %d\n", clustnum, startsect);
> !
> !         if (disk_write(startsect, size / mydata->sect_size, buffer) < 0) {
> !             debug("Error writing data\n");
> !             return -1;
> !         }
> !
> !         if (size % mydata->sect_size) {
> !             __u8 tmpbuf[mydata->sect_size];
> !
> !             idx = size / mydata->sect_size;
> !             buffer += idx * mydata->sect_size;
> !             memcpy(tmpbuf, buffer, size % mydata->sect_size);
> !
> !             if (disk_write(startsect + idx, 1, tmpbuf) < 0) {
> !                 debug("Error writing data\n");
> !                 return -1;
> !             }
> !         }
> !     }//end if data to be set
>       return 0;
>   }
>  
> diff -cr ./u-boot-original/u-boot/include/configs/am335x_evm.h 
> ./u-boot-test/u-boot/include/configs/am335x_evm.h
> *** ./u-boot-original/u-boot/include/configs/am335x_evm.h    2013-02-07 
> 14:47:35.754702325 +1100
> --- ./u-boot-test/u-boot/include/configs/am335x_evm.h    2013-03-01 
> 12:25:23.942104474 +1100
> ***************
> *** 143,148 ****
> --- 143,149 ----
>   #define CONFIG_CMD_MMC
>   #define CONFIG_DOS_PARTITION
>   #define CONFIG_FS_FAT
> + #define CONFIG_FAT_WRITE
>   #define CONFIG_FS_EXT4
>   #define CONFIG_CMD_FAT
>   #define CONFIG_CMD_EXT2

Benoit, what do you think?  Thanks!

-- 
Tom

Attachment: signature.asc
Description: Digital signature

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to