- ret = patch_ivt(addr, size ?: fw_num_blocks * mtd->erasesize);
- if (ret) {
- return ret;
- }
-
- printf("Programming U-Boot image from %p to block %lu\n",
- addr, fw1_start_block);
- if (size & (page_size - 1)) {
- memset(addr + size, 0xff, size & (page_size - 1));
- size = ALIGN(size, page_size);
- }
-
- erase_opts.offset = fcb->fw1_start_page * page_size;
- erase_opts.length = (fw1_end_block - fw1_start_block + 1) *
- mtd->erasesize;
- erase_opts.quiet = 1;
-
- printf("Erasing flash @ %08llx..%08llx\n", erase_opts.offset,
- erase_opts.offset + erase_opts.length - 1);
-
- ret = nand_erase_opts(mtd, &erase_opts);
- if (ret) {
- printf("Failed to erase flash: %d\n", ret);
- return ret;
- }
- if (size == 0)
- max_len1 *= mtd->erasesize;
- else
- max_len1 = size;
-
- printf("Programming flash @ %08x..%08x from %p\n",
- fcb->fw1_start_page * page_size,
- fcb->fw1_start_page * page_size + max_len1 - 1, addr);
- ret = nand_write_skip_bad(mtd, fcb->fw1_start_page * page_size,
- &max_len1, &actual, erase_opts.length, addr,
- WITH_DROP_FFS);
- if (ret || actual < size) {
- printf("Failed to program flash: %d\n", ret);
- return ret ?: -EIO;
- }
- if (fw2_start_block == 0) {
- return ret;
- }
+ printf("Programming U-Boot image from %p to block %lu @ %08llx\n",
+ buf, fw1_start_block, (u64)fw1_start_block * mtd->erasesize);
+ ret = tx6_prog_uboot(addr, fw1_start_block, fw1_skip, size,
+ max_len1);