| From 443440cc4a901af462239d286cd10721aa1c7dfc Mon Sep 17 00:00:00 2001 |
| From: Sivaprakash Murugesan <sivaprak@codeaurora.org> |
| Date: Fri, 12 Jun 2020 13:28:15 +0530 |
| Subject: mtd: rawnand: qcom: avoid write to unavailable register |
| |
| From: Sivaprakash Murugesan <sivaprak@codeaurora.org> |
| |
| commit 443440cc4a901af462239d286cd10721aa1c7dfc upstream. |
| |
| SFLASHC_BURST_CFG is only available on older ipq NAND platforms, this |
| register has been removed when the NAND controller got implemented in |
| the qpic controller. |
| |
| Avoid writing this register on devices which are based on qpic NAND |
| controller. |
| |
| Fixes: dce84760b09f ("mtd: nand: qcom: Support for IPQ8074 QPIC NAND controller") |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Sivaprakash Murugesan <sivaprak@codeaurora.org> |
| Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> |
| Link: https://lore.kernel.org/linux-mtd/1591948696-16015-2-git-send-email-sivaprak@codeaurora.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/mtd/nand/raw/qcom_nandc.c | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/mtd/nand/raw/qcom_nandc.c |
| +++ b/drivers/mtd/nand/raw/qcom_nandc.c |
| @@ -459,11 +459,13 @@ struct qcom_nand_host { |
| * among different NAND controllers. |
| * @ecc_modes - ecc mode for NAND |
| * @is_bam - whether NAND controller is using BAM |
| + * @is_qpic - whether NAND CTRL is part of qpic IP |
| * @dev_cmd_reg_start - NAND_DEV_CMD_* registers starting offset |
| */ |
| struct qcom_nandc_props { |
| u32 ecc_modes; |
| bool is_bam; |
| + bool is_qpic; |
| u32 dev_cmd_reg_start; |
| }; |
| |
| @@ -2774,7 +2776,8 @@ static int qcom_nandc_setup(struct qcom_ |
| u32 nand_ctrl; |
| |
| /* kill onenand */ |
| - nandc_write(nandc, SFLASHC_BURST_CFG, 0); |
| + if (!nandc->props->is_qpic) |
| + nandc_write(nandc, SFLASHC_BURST_CFG, 0); |
| nandc_write(nandc, dev_cmd_reg_addr(nandc, NAND_DEV_CMD_VLD), |
| NAND_DEV_CMD_VLD_VAL); |
| |
| @@ -3030,12 +3033,14 @@ static const struct qcom_nandc_props ipq |
| static const struct qcom_nandc_props ipq4019_nandc_props = { |
| .ecc_modes = (ECC_BCH_4BIT | ECC_BCH_8BIT), |
| .is_bam = true, |
| + .is_qpic = true, |
| .dev_cmd_reg_start = 0x0, |
| }; |
| |
| static const struct qcom_nandc_props ipq8074_nandc_props = { |
| .ecc_modes = (ECC_BCH_4BIT | ECC_BCH_8BIT), |
| .is_bam = true, |
| + .is_qpic = true, |
| .dev_cmd_reg_start = 0x7000, |
| }; |
| |