X-Git-Url: https://git.kernelconcepts.de/?p=karo-tx-uboot.git;a=blobdiff_plain;f=board%2Fkaro%2Ftx53%2Fflash.c;h=2d5bcde891ac4f34d9a79e09f76a6818c4253322;hp=76e994cd954254e0c0f6ad0b5022f63aca84d19c;hb=ffa2038407d1dc610146b2e677cc16ea8838fce4;hpb=61ea5ed9f7834205aabc264d4843ab8c9afa1c3d diff --git a/board/karo/tx53/flash.c b/board/karo/tx53/flash.c index 76e994cd95..2d5bcde891 100644 --- a/board/karo/tx53/flash.c +++ b/board/karo/tx53/flash.c @@ -111,7 +111,8 @@ static struct mx53_fcb *create_fcb(void *buf, int fw1_start_block, fcb->fw1_start_page = fw1_start_block * sectors_per_block; pr_fcb_val(fcb, fw1_start_page); - if (fw2_start_block != 0 && fw2_start_block < mtd->size / mtd->erasesize) { + if (fw2_start_block != 0 && + fw2_start_block < lldiv(mtd->size, mtd->erasesize)) { fcb->fw2_start_page = fw2_start_block * sectors_per_block; pr_fcb_val(fcb, fw2_start_page); } @@ -158,8 +159,6 @@ static int write_fcb(void *buf, int block) return 0; } - printf("Erasing FCB block %08x..%08x\n", block * mtd->erasesize, - block * mtd->erasesize + mtd->erasesize - 1); if (doit) { ret = nand_erase(mtd, block * mtd->erasesize, mtd->erasesize); if (ret) { @@ -266,7 +265,7 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) size_t size = 0; void *addr = NULL; struct mx53_fcb *fcb; - unsigned long mtd_num_blocks = mtd->size / mtd->erasesize; + unsigned long mtd_num_blocks = lldiv(mtd->size, mtd->erasesize); #ifdef CONFIG_ENV_IS_IN_NAND unsigned long env_start_block = CONFIG_ENV_OFFSET / mtd->erasesize; unsigned long env_end_block = env_start_block + @@ -279,7 +278,7 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) unsigned long fw_num_blocks; int fw1_skip, fw2_skip; unsigned long extra_blocks = 0; - size_t max_len1, max_len2; + u64 max_len1, max_len2; struct mtd_device *dev; struct part_info *part_info; struct part_info *redund_part_info; @@ -403,12 +402,12 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) uboot_part, ret); return ret; } - fw1_start_block = part_info->offset / mtd->erasesize; + fw1_start_block = lldiv(part_info->offset, mtd->erasesize); max_len1 = part_info->size; if (size == 0) - fw_num_blocks = max_len1 / mtd->erasesize; + fw_num_blocks = lldiv(max_len1, mtd->erasesize); } else { - max_len1 = (fw_num_blocks + extra_blocks) * mtd->erasesize; + max_len1 = (u64)(fw_num_blocks + extra_blocks) * mtd->erasesize; } if (redund_part) { @@ -419,26 +418,26 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) redund_part, ret); return ret; } - fw2_start_block = redund_part_info->offset / mtd->erasesize; + fw2_start_block = lldiv(redund_part_info->offset, mtd->erasesize); max_len2 = redund_part_info->size; if (fw2_start_block == fcb_start_block) { fw2_start_block++; max_len2 -= mtd->erasesize; } if (size == 0) - fw_num_blocks = max_len2 / mtd->erasesize; + fw_num_blocks = lldiv(max_len2, mtd->erasesize); } else if (fw2_set) { - max_len2 = (fw_num_blocks + extra_blocks) * mtd->erasesize; + max_len2 = (u64)(fw_num_blocks + extra_blocks) * mtd->erasesize; } else { max_len2 = 0; } fw1_skip = find_contig_space(fw1_start_block, fw_num_blocks, - max_len1 / mtd->erasesize); + lldiv(max_len1, mtd->erasesize)); if (fw1_skip < 0) { - printf("Could not find %lu contiguous good blocks for fw image in blocks %lu..%lu\n", + printf("Could not find %lu contiguous good blocks for fw image in blocks %lu..%llu\n", fw_num_blocks, fw1_start_block, - fw1_start_block + max_len1 / mtd->erasesize - 1); + fw1_start_block + lldiv(max_len1, mtd->erasesize) - 1); if (uboot_part) { #ifdef CONFIG_ENV_IS_IN_NAND if (part_info->offset <= CONFIG_ENV_OFFSET + TOTAL_ENV_SIZE) { @@ -465,11 +464,11 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) fw2_start_block = fw1_end_block + 1; if (fw2_start_block > 0) { fw2_skip = find_contig_space(fw2_start_block, fw_num_blocks, - max_len2 / mtd->erasesize); + lldiv(max_len2, mtd->erasesize)); if (fw2_skip < 0) { - printf("Could not find %lu contiguous good blocks for redundant fw image in blocks %lu..%lu\n", + printf("Could not find %lu contiguous good blocks for redundant fw image in blocks %lu..%llu\n", fw_num_blocks, fw2_start_block, - fw2_start_block + max_len2 / mtd->erasesize - 1); + fw2_start_block + lldiv(max_len2, mtd->erasesize) - 1); if (redund_part) { printf("Increase the size of the '%s' partition or use a different partition\n", redund_part); @@ -491,7 +490,7 @@ int do_update(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) fail_if_overlap(fw1, env, "FW1", "Environment"); #endif if (fw2_set) { - fail_if_overlap(fw2, fcb, "FW2", "FCB"); + fail_if_overlap(fcb, fw2, "FCB", "FW2"); #ifdef CONFIG_ENV_IS_IN_NAND fail_if_overlap(fw2, env, "FW2", "Environment"); #endif