From: Wolfgang Wallner Date: Tue, 14 Jan 2020 13:05:48 +0000 (+0100) Subject: spi: ich: Drop while loop in hardware sequencing erase case X-Git-Tag: v2020.04-rc2~18^2~9 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=5e579cc0044b8660fff7fbc043982ff80ff7be7a;p=oweals%2Fu-boot.git spi: ich: Drop while loop in hardware sequencing erase case When ich_spi_exec_op_hwseq() is called to erase a 4k block (opcode = SPINOR_OP_BE_4K), it expects to find a length value in op->data.nbytes, but that value is always 0. As a result, the while loop is never executed and no erase is carried out. Fix this by dropping the loop code entirely, only keeping the relevant parts of the loop body. See http://patchwork.ozlabs.org/patch/1222779/ for more detailed background information and discussion. Signed-off-by: Wolfgang Wallner Reviewed-by: Simon Glass Signed-off-by: Bin Meng --- diff --git a/drivers/spi/ich.c b/drivers/spi/ich.c index 133b25b72e..a9d7715a55 100644 --- a/drivers/spi/ich.c +++ b/drivers/spi/ich.c @@ -562,16 +562,8 @@ static int ich_spi_exec_op_hwseq(struct spi_slave *slave, return 0; /* ignore */ case SPINOR_OP_BE_4K: cycle = HSFSTS_CYCLE_4K_ERASE; - while (len) { - uint xfer_len = 0x1000; - - ret = exec_sync_hwseq_xfer(regs, cycle, offset, 0); - if (ret) - return ret; - offset += xfer_len; - len -= xfer_len; - } - return 0; + ret = exec_sync_hwseq_xfer(regs, cycle, offset, 0); + return ret; default: debug("Unknown cycle %x\n", op->cmd.opcode); return -EINVAL;