Commit f6859ae7 authored by Sivaprakash Murugesan's avatar Sivaprakash Murugesan Committed by Greg Kroah-Hartman

mtd: rawnand: qcom: avoid write to unavailable register

commit 443440cc 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: dce84760 ("mtd: nand: qcom: Support for IPQ8074 QPIC NAND controller")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarSivaprakash Murugesan <sivaprak@codeaurora.org>
Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/1591948696-16015-2-git-send-email-sivaprak@codeaurora.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent acc8ff07
...@@ -466,11 +466,13 @@ struct qcom_nand_host { ...@@ -466,11 +466,13 @@ struct qcom_nand_host {
* among different NAND controllers. * among different NAND controllers.
* @ecc_modes - ecc mode for NAND * @ecc_modes - ecc mode for NAND
* @is_bam - whether NAND controller is using BAM * @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 * @dev_cmd_reg_start - NAND_DEV_CMD_* registers starting offset
*/ */
struct qcom_nandc_props { struct qcom_nandc_props {
u32 ecc_modes; u32 ecc_modes;
bool is_bam; bool is_bam;
bool is_qpic;
u32 dev_cmd_reg_start; u32 dev_cmd_reg_start;
}; };
...@@ -2766,6 +2768,7 @@ static int qcom_nandc_setup(struct qcom_nand_controller *nandc) ...@@ -2766,6 +2768,7 @@ static int qcom_nandc_setup(struct qcom_nand_controller *nandc)
u32 nand_ctrl; u32 nand_ctrl;
/* kill onenand */ /* kill onenand */
if (!nandc->props->is_qpic)
nandc_write(nandc, SFLASHC_BURST_CFG, 0); nandc_write(nandc, SFLASHC_BURST_CFG, 0);
nandc_write(nandc, dev_cmd_reg_addr(nandc, NAND_DEV_CMD_VLD), nandc_write(nandc, dev_cmd_reg_addr(nandc, NAND_DEV_CMD_VLD),
NAND_DEV_CMD_VLD_VAL); NAND_DEV_CMD_VLD_VAL);
...@@ -3022,12 +3025,14 @@ static const struct qcom_nandc_props ipq806x_nandc_props = { ...@@ -3022,12 +3025,14 @@ static const struct qcom_nandc_props ipq806x_nandc_props = {
static const struct qcom_nandc_props ipq4019_nandc_props = { static const struct qcom_nandc_props ipq4019_nandc_props = {
.ecc_modes = (ECC_BCH_4BIT | ECC_BCH_8BIT), .ecc_modes = (ECC_BCH_4BIT | ECC_BCH_8BIT),
.is_bam = true, .is_bam = true,
.is_qpic = true,
.dev_cmd_reg_start = 0x0, .dev_cmd_reg_start = 0x0,
}; };
static const struct qcom_nandc_props ipq8074_nandc_props = { static const struct qcom_nandc_props ipq8074_nandc_props = {
.ecc_modes = (ECC_BCH_4BIT | ECC_BCH_8BIT), .ecc_modes = (ECC_BCH_4BIT | ECC_BCH_8BIT),
.is_bam = true, .is_bam = true,
.is_qpic = true,
.dev_cmd_reg_start = 0x7000, .dev_cmd_reg_start = 0x7000,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment