[U-Boot] [U-Boot, PATCH v3 2/2] fastboot: Flash command support
Dileep Katta
dileep.katta at linaro.org
Thu Sep 18 01:33:24 CEST 2014
Thanks for the review comments. Working on the fix.
Regards,
Dileep
On 11 September 2014 13:42, Wolfgang Denk <wd at denx.de> wrote:
>
> Dear Dileep Katta,
>
> In message <1410417650-16522-2-git-send-email-dileep.katta at linaro.org> you wrote:
> > Flash command internally uses DFU, and Fastboot command initialization is modified to add DFU and partition initialization
> > Added oem format functionality for GPT table creation
> > partitioning code is added as disk/part_fastboot.c for better usability
> >
> > Fastboot flash command code is enabled and being tested on BeagleBone Black.
> > OMAP3 Beagle configuration is modified to fix the build errors, but this configuration needs to be updated as per the flash functionality.
>
> Please fix the line length in the commit message.
>
> Also, checkpatch says:
>
> WARNING: do not add new typedefs
> #1073: FILE: include/usb/fastboot.h:98:
> +typedef struct fastboot_ptentry fastboot_ptentry;
>
> > +int handle_flash(char *part_name, char *response, char *transfer_buffer)
> > +{
> > + int status = 0;
> > + printf("download_bytes: 0x%x\n", download_bytes);
> > + if (download_bytes) {
> > + struct fastboot_ptentry *ptn;
> > +
> > + /* Next is the partition name */
> > + ptn = fastboot_flash_find_ptn(part_name);
> > +
> > + if (ptn == 0) {
> > + printf("Partition:[%s] does not exist\n", part_name);
> > + sprintf(response, "FAILpartition does not exist");
> > + } else if ((download_bytes > ptn->length) &&
> > + !(ptn->flags & FASTBOOT_PTENTRY_FLAGS_WRITE_ENV)) {
> > + printf("Image too large for the partition\n");
> > + sprintf(response, "FAILimage too large for partition");
> > + } else if (ptn->flags & FASTBOOT_PTENTRY_FLAGS_WRITE_ENV) {
> > + /* Check if this is not really a flash write,
> > + * but instead a saveenv
> > + */
> > + unsigned int i = 0;
> > + /* Env file is expected with a NULL delimeter between
> > + * env variables So replace New line Feeds(0x0a) with
> > + * NULL (0x00)
> > + */
>
> Incorrect multiline comment style. Please fix globally.
>
> Also this sequence of comment - declaration - comment is highly
> confusing. What is the first comment ("Check if..") actually related
> to?
>
> > + for (i = 0; i < download_bytes; i++) {
> > + if (transfer_buffer[i] == 0x0a)
> > + transfer_buffer[i] = 0x00;
> > + }
> > + memset(env_ptr->data, 0, ENV_SIZE);
> > + memcpy(env_ptr->data, transfer_buffer, download_bytes);
> > + do_env_save(NULL, 0, 1, NULL);
> > + printf("saveenv to '%s' DONE!\n", ptn->name);
>
> I think it is a bad idea to split formatting / reformatting
> envrionment data alll over the place. This should be done only once,
> in the environment handling code. Also, I do not like you using
> do_env_save() here - this should remain a static function. Why do't
> you simply use saveenv() here?
>
> Finally, the "saveenv to '%s' DONE!\n" is IMO too verbose. No news is
> Good News - we usually do not report abot the success of operations,
> as this is what we expect. We should only print error messages when
> such occur - which points out another problem of that code: there is
> no error checking nor handling there...
>
>
> > +static void end_ptbl(struct ptable *ptbl)
> > +{
> > + struct efi_header *hdr = &ptbl->header;
> > + u32 n;
> > +
> > + n = crc32(0, 0, 0);
>
> What exactly is this good for?
>
> > + n = crc32(n, (void *)ptbl->entry, sizeof(ptbl->entry));
> > + hdr->entries_crc32 = n;
> > +
> > + n = crc32(0, 0, 0);
>
> What exactly is this good for?
>
> > + n = crc32(0, (void *)&ptbl->header, sizeof(ptbl->header));
> > + hdr->crc32 = n;
> > +}
>
>
> > + for (n = 0; n < (128/4); n++) {
> > + /* read partition */
> > + source[0] = '\0';
> > + dest[0] = '\0';
> > + length[0] = '\0';
>
> You overwrite source, dest, and length by the sprintf()s just a few
> lines below. So why are you doing this here?
>
> > + mmc_read[2] = source;
> > + mmc_read[3] = dest;
> > + mmc_read[4] = length;
> > +
> > + sprintf(source, "%p", entry);
> > + sprintf(dest, "0x%x", 0x1+n);
> > + sprintf(length, "0x%x", 1);
>
>
> > +int board_mmc_fbtptn_init(void)
> > +{
> > + char *mmc_init[2] = {"mmc", "rescan",};
> > + char dev[2];
> > + char *mmc_dev[3] = {"mmc", "dev", NULL};
> > +
> > + mmc_dev[2] = dev;
>
> Why do you initialize mmc_dev[2] with another value just a line
> above? Why don't you use the correct value right from the beginning?
>
> > + if (do_mmcops(NULL, 0, 3, mmc_dev)) {
> > + printf("MMC DEV: %d selection FAILED!\n", CONFIG_FB_MMCDEV);
> > + return -1;
> > + }
> > +
> > + if (do_mmcops(NULL, 0, 2, mmc_init)) {
> > + printf("FAIL:Init of MMC card\n");
> > + return 1;
> > + }
>
> What exactly are your return codes? Here you return -1 in case of
> error, there +1 - what's the logic behind that?
>
> > +int do_format(void)
> > +{
> > + struct ptable *ptbl = &the_ptable;
> > + /* unsigned sector_sz; */
>
> Please remove dead code.
>
> > + printf("\ndo_format ..!!");
>
> Is this not overly verbose?
>
> > + /* get mmc info */
> > + struct mmc *mmc = find_mmc_device(CONFIG_FB_MMCDEV);
>
> Please do not mix code and declarations. Also, always add a blank
> line after declarations.
>
> > + if (mmc_init(mmc)) {
> > + printf("\n mmc init FAILED");
> > + return -1;
> > + } else{
>
> After the return, no else is needed here.
>
> > + printf("\nmmc capacity is: %llu", mmc->capacity);
> > + printf("\nmmc: number of blocks:0x%lx", mmc->block_dev.lba);
> > + printf("\nmmc: block size:0x%lx", mmc->block_dev.blksz);
> > + }
>
> > + /* 10/11:modified as per PSP release support */
> > + char *mmc_write[5] = {"mmc", "write", NULL, NULL, NULL};
> > + char source[32], dest[32], length[32];
> > +
> > + char dev[2];
> > + char *mmc_dev[3] = {"mmc", "dev", NULL};
> > + mmc_dev[2] = dev;
>
> See above - please do not mix code and declarations, please use the
> right initialization right away.
>
> > + } else {
> > + printf("Writing mbr is DONE!\n");
>
> Less verbose, please.
>
>
> Best regards,
>
> Wolfgang Denk
>
> --
> DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
> At the source of every error which is blamed on the computer you will
> find at least two human errors, including the error of blaming it on
> the computer.
More information about the U-Boot
mailing list