Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mtd: rawnand: qcom: Fix broken OP_RESET_DEVICE command in qcom_misc_cmd_type_exec()

While migrating to exec_ops in commit a82990c8a409 ("mtd: rawnand: qcom:
Add read/read_start ops in exec_op path"), OP_RESET_DEVICE command handling
got broken unintentionally. Right now for the OP_RESET_DEVICE command,
qcom_misc_cmd_type_exec() will simply return 0 without handling it. Even,
if that gets fixed, an unnecessary FLASH_STATUS read descriptor command is
being added in the middle and that seems to be causing the command to fail
on IPQ806x devices.

So let's fix the above two issues to make OP_RESET_DEVICE command working
again.

Fixes: a82990c8a409 ("mtd: rawnand: qcom: Add read/read_start ops in exec_op path")
Cc: stable@vger.kernel.org
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20240404083157.940-1-ansuelsmth@gmail.com

authored by

Christian Marangi and committed by
Miquel Raynal
b61bb5bc 4053caf6

+3 -4
+3 -4
drivers/mtd/nand/raw/qcom_nandc.c
··· 2815 2815 host->cfg0_raw & ~(7 << CW_PER_PAGE)); 2816 2816 nandc_set_reg(chip, NAND_DEV0_CFG1, host->cfg1_raw); 2817 2817 instrs = 3; 2818 - } else { 2818 + } else if (q_op.cmd_reg != OP_RESET_DEVICE) { 2819 2819 return 0; 2820 2820 } 2821 2821 ··· 2830 2830 nandc_set_reg(chip, NAND_EXEC_CMD, 1); 2831 2831 2832 2832 write_reg_dma(nandc, NAND_FLASH_CMD, instrs, NAND_BAM_NEXT_SGL); 2833 - (q_op.cmd_reg == OP_BLOCK_ERASE) ? write_reg_dma(nandc, NAND_DEV0_CFG0, 2834 - 2, NAND_BAM_NEXT_SGL) : read_reg_dma(nandc, 2835 - NAND_FLASH_STATUS, 1, NAND_BAM_NEXT_SGL); 2833 + if (q_op.cmd_reg == OP_BLOCK_ERASE) 2834 + write_reg_dma(nandc, NAND_DEV0_CFG0, 2, NAND_BAM_NEXT_SGL); 2836 2835 2837 2836 write_reg_dma(nandc, NAND_EXEC_CMD, 1, NAND_BAM_NEXT_SGL); 2838 2837 read_reg_dma(nandc, NAND_FLASH_STATUS, 1, NAND_BAM_NEXT_SGL);