Hi Bin, On 4 December 2014 at 08:00, Bin Meng <bmeng...@gmail.com> wrote: > Currently ifdtool only supports writing one file (-w) at a time. > This looks verbose when generating u-boot.rom for x86 targets. > This change allows at most 16 files to be written simultaneously. > > Signed-off-by: Bin Meng <bmeng...@gmail.com> > --- > tools/ifdtool.c | 29 ++++++++++++++++++++++------- > tools/ifdtool.h | 2 ++ > 2 files changed, 24 insertions(+), 7 deletions(-) > > diff --git a/tools/ifdtool.c b/tools/ifdtool.c > index a4b481f..58640ca 100644 > --- a/tools/ifdtool.c > +++ b/tools/ifdtool.c > @@ -732,6 +732,7 @@ static void print_usage(const char *name) > " -x | --extract: extract intel fd > modules\n" > " -i | --inject <region>:<module> inject file <module> > into region <region>\n" > " -w | --write <addr>:<file> write file to appear at > memory address <addr>\n" > + " multiple files can be > written simultaneously\n" > " -s | --spifreq <20|33|50> set the SPI frequency\n" > " -e | --em100 set SPI frequency to > 20MHz and disable\n" > " Dual Output Fast Read > Support\n" > @@ -782,7 +783,9 @@ int main(int argc, char *argv[]) > char *addr_str = NULL; > int region_type = -1, inputfreq = 0; > enum spi_frequency spifreq = SPI_FREQUENCY_20MHZ; > - unsigned int addr = 0; > + unsigned int addr[WRITE_NUM] = { 0 }; > + char *wr_fname[WRITE_NUM] = { NULL };
Do you need the initialiser? > + unsigned char wr_idx, wr_num = 0; > int rom_size = -1; > bool write_it; > char *filename; > @@ -886,11 +889,17 @@ int main(int argc, char *argv[]) > break; > case 'w': > mode_write = 1; > - if (get_two_words(optarg, &addr_str, &src_fname)) { > - print_usage(argv[0]); > - exit(EXIT_FAILURE); > + if (wr_num < WRITE_NUM) { > + if (get_two_words(optarg, &addr_str, > + &wr_fname[wr_num])) { > + print_usage(argv[0]); > + exit(EXIT_FAILURE); > + } > + addr[wr_num] = strtol(optarg, NULL, 0); > + wr_num++; > + } else { > + fprintf(stderr, "The number of files to write > simultaneously exceeds the limitation (%d)\n", WRITE_NUM); 80cols. > } > - addr = strtol(optarg, NULL, 0); > break; > case 'x': > mode_extract = 1; > @@ -1002,8 +1011,14 @@ int main(int argc, char *argv[]) > if (mode_inject) > ret = inject_region(image, size, region_type, src_fname); > > - if (mode_write) > - ret = write_data(image, size, addr, src_fname); > + if (mode_write) { > + for (wr_idx = 0; wr_idx < wr_num; wr_idx++) { > + ret = write_data(image, size, > + addr[wr_idx], wr_fname[wr_idx]); > + if (ret) > + break; > + } > + } > > if (mode_spifreq) > set_spi_frequency(image, size, spifreq); > diff --git a/tools/ifdtool.h b/tools/ifdtool.h > index fbec421..72ba1de 100644 > --- a/tools/ifdtool.h > +++ b/tools/ifdtool.h > @@ -14,6 +14,8 @@ > > #define IFDTOOL_VERSION "1.1-U-Boot" > > +#define WRITE_NUM 16 How about WRITE_MAX? > + > enum spi_frequency { > SPI_FREQUENCY_20MHZ = 0, > SPI_FREQUENCY_33MHZ = 1, > -- > 1.8.2.1 > Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot