mtd: rawnand: qcom: Fix broken OP_RESET_DEVICE command in qcom_misc_cmd_type_exec()
Subsystems (5)
PATCH v4 1/1 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.
---
Changes v4:
- Rework commit title and description as suggested.
- Add Reviewed-by tag
Changes v3:
- Merge patches
- Rework commit description
Changes v2:
- Split patches
drivers/mtd/nand/raw/qcom_nandc.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
drivers/mtd/nand/raw/qcom_nandc.c +3 -4
@@ -2815,7 +2815,7 @@ static int qcom_misc_cmd_type_exec(struct nand_chip *chip, const struct nand_sub host->cfg0_raw & ~(7 << CW_PER_PAGE));nandc_set_reg (chip,NAND_DEV0_CFG1 , host->cfg1_raw); instrs =3 ; - }else { + }else if (q_op.cmd_reg !=OP_RESET_DEVICE ) {return 0 ; }
@@ -2830,9 +2830,8 @@ static int qcom_misc_cmd_type_exec(struct nand_chip *chip, const struct nand_subnandc_set_reg (chip,NAND_EXEC_CMD ,1 );write_reg_dma (nandc,NAND_FLASH_CMD , instrs,NAND_BAM_NEXT_SGL ); - (q_op.cmd_reg ==OP_BLOCK_ERASE ) ?write_reg_dma (nandc,NAND_DEV0_CFG0 , -2 ,NAND_BAM_NEXT_SGL ) :read_reg_dma (nandc, -NAND_FLASH_STATUS ,1 ,NAND_BAM_NEXT_SGL ); +if (q_op.cmd_reg ==OP_BLOCK_ERASE ) +write_reg_dma (nandc,NAND_DEV0_CFG0 ,2 ,NAND_BAM_NEXT_SGL );write_reg_dma (nandc,NAND_EXEC_CMD ,1 ,NAND_BAM_NEXT_SGL );read_reg_dma (nandc,NAND_FLASH_STATUS ,1 ,NAND_BAM_NEXT_SGL );
Signature · 1 line
2.43.0
Quoted 8 lines · Christian Marangi
While migrating to
exec_opsin commita82990c8a409("mtd: rawnand: qcom:
Add read/read_start ops inexec_oppath"),OP_RESET_DEVICEcommand handling got broken unintentionally. Right now for theOP_RESET_DEVICEcommand,qcom_misc_cmd_type_exec()will simply return 0 without handling it. Even, if that gets fixed, an unnecessaryFLASH_STATUSread descriptor command is being added in the middle and that seems to be causing the command to fail on IPQ806x devices.
Quoted 7 lines
So let's fix the above two issues to make
OP_RESET_DEVICEcommand working again.Fixes a82990c8a409 ("mtd: rawnand: qcom: Add read/read_start ops in exec_op path")Reviewed-by Manivannan Sadhasivam <[email protected]>Signed-off-by Christian Marangi <[email protected]>
Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git mtd/fixes, thanks.
Miquel