aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/nand/raw/nand_base.c
diff options
context:
space:
mode:
authorMiquel Raynal <miquel.raynal@bootlin.com>2018-03-19 09:47:25 -0400
committerBoris Brezillon <boris.brezillon@bootlin.com>2018-03-20 04:51:01 -0400
commit107b7d6a7ad4927e1b217cf5667ac94bab021e42 (patch)
tree511942796ec37273f267aaf84f22d257632f4ef7 /drivers/mtd/nand/raw/nand_base.c
parent415ae78ffb5d97343ada8e4c2d4bda5f6416b5ef (diff)
mtd: rawnand: avoid setting again the timings to mode 0 after a reset
After a nand_reset_data_interface(), both the NAND chip and the NAND controller use timing mode 0. The previously defined data interface for this chip has been saved and is supposed to be restored after that. However, if the saved data interface also refers to timing mode 0, there is no need to re-apply them again. Also, as nand_setup_data_interface() uses ->set/get_features(), it could lead to issues when doing the reset at probe time as the parameter page is not available yet to know if these functions are supported or not. Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
Diffstat (limited to 'drivers/mtd/nand/raw/nand_base.c')
-rw-r--r--drivers/mtd/nand/raw/nand_base.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/mtd/nand/raw/nand_base.c b/drivers/mtd/nand/raw/nand_base.c
index 837ea698af08..4099d8a1e25e 100644
--- a/drivers/mtd/nand/raw/nand_base.c
+++ b/drivers/mtd/nand/raw/nand_base.c
@@ -2816,6 +2816,16 @@ int nand_reset(struct nand_chip *chip, int chipnr)
2816 if (ret) 2816 if (ret)
2817 return ret; 2817 return ret;
2818 2818
2819 /*
2820 * A nand_reset_data_interface() put both the NAND chip and the NAND
2821 * controller in timings mode 0. If the default mode for this chip is
2822 * also 0, no need to proceed to the change again. Plus, at probe time,
2823 * nand_setup_data_interface() uses ->set/get_features() which would
2824 * fail anyway as the parameter page is not available yet.
2825 */
2826 if (!chip->onfi_timing_mode_default)
2827 return 0;
2828
2819 chip->data_interface = saved_data_intf; 2829 chip->data_interface = saved_data_intf;
2820 ret = nand_setup_data_interface(chip, chipnr); 2830 ret = nand_setup_data_interface(chip, chipnr);
2821 if (ret) 2831 if (ret)