mtd: rawnand: qcom: Fix DMA sync on FLASH_STATUS register read
authorPraveenkumar I <ipkumar@codeaurora.org>
Fri, 9 Oct 2020 08:07:52 +0000 (13:37 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 30 Dec 2020 10:51:43 +0000 (11:51 +0100)
commit bc3686021122de953858a5be4cbf6e3f1d821e79 upstream.

After each codeword NAND_FLASH_STATUS is read for possible operational
failures. But there is no DMA sync for CPU operation before reading it
and this leads to incorrect or older copy of DMA buffer in reg_read_buf.

This patch adds the DMA sync on reg_read_buf for CPU before reading it.

Fixes: 5bc36b2bf6e2 ("mtd: rawnand: qcom: check for operation errors in case of raw read")
Cc: stable@vger.kernel.org
Signed-off-by: Praveenkumar I <ipkumar@codeaurora.org>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/1602230872-25616-1-git-send-email-ipkumar@codeaurora.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/mtd/nand/raw/qcom_nandc.c

index c1c53b02b35f4ebe1038373c2870a2d8f2c91eb5..963ebcdfcbce3e6eaf9a55fc807f595bbed49cc4 100644 (file)
@@ -1570,6 +1570,8 @@ static int check_flash_errors(struct qcom_nand_host *host, int cw_cnt)
        struct qcom_nand_controller *nandc = get_qcom_nand_controller(chip);
        int i;
 
+       nandc_read_buffer_sync(nandc, true);
+
        for (i = 0; i < cw_cnt; i++) {
                u32 flash = le32_to_cpu(nandc->reg_read_buf[i]);