From 59d79e1661f64566d88bb3a8770a4f2996799d2c Mon Sep 17 00:00:00 2001 From: Karthick Shanmugham Date: Tue, 22 Sep 2020 11:33:59 +0530 Subject: [PATCH] ipq: Handled unaligned data written in nand flash while dump collection During dump collection, when dump_to_flash enabled, nand erases are skipped due to unaligned written. This changes handles that and write after erasing Signed-off-by: Karthick Shanmugham Change-Id: Idfc6b3a0596a5ddb5c7e0b0da5c7bcb2751769b8 --- board/qca/arm/common/crashdump.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/board/qca/arm/common/crashdump.c b/board/qca/arm/common/crashdump.c index d0f6af7618..b7b4097541 100644 --- a/board/qca/arm/common/crashdump.c +++ b/board/qca/arm/common/crashdump.c @@ -769,7 +769,7 @@ static int check_and_write_crashdump_nand_flash( uint32_t part_start = nand_cnxt->part_start; uint32_t part_end = nand_cnxt->part_start + nand_cnxt->part_size; unsigned int remaining_len = req_size; - unsigned int data_offset = 0; + unsigned int write_length, data_offset = 0; loff_t skipoff, skipoff_cmp, *offset; int ret = 0; static int first_erase = 1; @@ -813,15 +813,20 @@ static int check_and_write_crashdump_nand_flash( if( remaining_len > nand->erasesize) { - ret = nand_write(nand, *offset, &nand->erasesize, + skipoff = (*offset & (nand->erasesize - 1)); + + write_length = (skipoff != 0) ? (nand->erasesize - skipoff) + : (nand->erasesize); + + ret = nand_write(nand, *offset, &write_length, data + data_offset); if (ret) return ret; - remaining_len -= nand->erasesize; - *offset += nand->erasesize; - data_offset += nand->erasesize; + remaining_len -= write_length; + *offset += write_length; + data_offset += write_length; } else {