Hi Wolfgang, On Wed, Jun 27, 2012 at 03:12:07, Wolfgang Denk wrote: > Dear Prabhakar Lad, > > In message <1340708826-26707-1-git-send-email-prabhakar....@ti.com> you wrote: > > From: Alagu Sankar <alagusan...@embwise.com> > > > > This is a Linux command line tool specific to TI's Davinci platforms, for > > flashing UBL (User Boot Loader), u-boot and u-boot Environment in the MMC/SD > > card. This MMC/SD card can be used for booting Davinci platforms that > > supports > > MMC/SD boot option. > > Do we also build UBL as part of the U-Boot source tree? > No, we do not build UBL as part of U-Boot.
> If not, then why is this tool supposed to be part of the U-Boot tree? > > How does this work with a SPL? > This command has options to flash u-boot images to MMC/SD card. When SPL is supported, this command can be used to flash the single SPL image to MMC/SD card. > > --- a/Makefile > > +++ b/Makefile > > @@ -726,7 +726,7 @@ clean: > > @rm -f $(obj)examples/api/demo{,.bin} > > @rm -f $(obj)tools/bmp_logo $(obj)tools/easylogo/easylogo \ > > $(obj)tools/env/{fw_printenv,fw_setenv} \ > > - $(obj)tools/envcrc \ > > + $(obj)tools/envcrc $(obj)tools/uflash/uflash \ > > $(obj)tools/gdb/{astest,gdbcont,gdbsend} \ > > $(obj)tools/gen_eth_addr $(obj)tools/img2srec \ > > $(obj)tools/mk{env,}image $(obj)tools/mpc86x_clk \ > > Please keep list sorted. > Ok. > > > +e. Using the 'uflash' utility, place the UBL and u-uoot binaries on the MMC > > + card. Copy the u-boot.bin to tools/uflash directory > > Why is this copy operation needed? > This copy is not needed as long as the path to u-boot.bin is specified Correctly in command line. > And where is the UBL binary coming from? > UBL binary is optional. We can flash only u-boot.bin. > > > > diff --git a/tools/uflash/config.txt b/tools/uflash/config.txt > > new file mode 100644 > > index 0000000..f6acb22 > > --- /dev/null > > +++ b/tools/uflash/config.txt > > @@ -0,0 +1,11 @@ > > +bootargs=console=ttyS0,115200n8 root=/dev/mmcblk0p1 rootwait > > rootfstype=ext3 rw > > +bootcmd=ext2load mmc 0 0x80700000 boot/uImage; bootm 0x80700000 > > +bootdelay=1 > > +baudrate=115200 > > +bootfile="uImage" > > +stdin=serial > > +stdout=serial > > +stderr=serial > > +ethact=dm9000 > > +videostd=ntsc > > This looks like U-Boot environment settings? Why are these in the > tools/uflash/ directory? I would expect these are board specific? > For example, what in case a board uses a different baud rate? > > Is this really supposed to be board independent? It doesn't look > so... > I agree with this. Can you think of any other scenario? > > + > > And please, no trailing empty lines! > Ok. > ... > > + if (!strcmp(platform, "DM3XX")) { > > + if (!uboot_load_address) > > + uboot_load_address = DM3XX_UBOOT_LOAD_ADDRESS; > > + if (!uboot_entry_point) > > + uboot_entry_point = DM3XX_UBOOT_LOAD_ADDRESS; > > + } > > + > > + if (!strcmp(platform, "OMAPL138")) { > > + if (!uboot_load_address) > > + uboot_load_address = DA850_UBOOT_LOAD_ADDRESS; > > + if (!uboot_entry_point) > > + uboot_entry_point = DA850_UBOOT_LOAD_ADDRESS; > > + } > > So this is actually all hardwired for a few very specific board > configurations, right? > Yes. > . > > +static int get_file_size(char *fname) > > +{ > > + FILE *fp; > > + int size; > > + > > + fp = fopen(fname, "rb"); > > + if (fp == NULL) { > > + fprintf(stdout, "File %s Open Error : %s\n", > > + fname, strerror(errno)); > > + return -1; > > + } > > + > > + fseek(fp, 0, SEEK_END); > > + size = ftell(fp); > > + fclose(fp); > > Why not simply using stat() ? > Yes that makes sense. > > +static int write_file(int devfd, char *fname) > > +{ > > + FILE *fp; > > + int readlen, writelen; > > + > > + fp = fopen(fname, "rb"); > > + if (fp == NULL) { > > + fprintf(stderr, "File %s Open Error: %s", > > + fname, strerror(errno)); > > + return -1; > > + } > > + > > + while ((readlen = fread(readbuf, 1, BLOCK_SIZE, fp)) > 0) { > > + if (readlen < BLOCK_SIZE) > > + memset(&readbuf[readlen], 0, BLOCK_SIZE-readlen); > > + > > + writelen = write(devfd, readbuf, BLOCK_SIZE); > > + if (writelen < BLOCK_SIZE) { > > + close(devfd); > > + return -1; > > + } > > + } > > + > > + fclose(fp); > > You don't even print a warning or error message in case of read > errors? Ouch... > Ok , I'll fix it in V2 version. Thx, --Prabhakar Lad > > 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: w...@denx.de > C makes it easy for you to shoot yourself in the foot. C++ makes that > harder, but when you do, it blows away your whole leg. > -- Bjarne Stroustrup > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot