|
|
@@ -805,33 +805,6 @@
|
|
|
+MODULE_AUTHOR("Xiangsheng Hou <[email protected]>, Felix Fietkau <[email protected]>");
|
|
|
+MODULE_DESCRIPTION("Bad Block mapping management v2 for MediaTek NAND Flash Driver");
|
|
|
+
|
|
|
---- a/drivers/mtd/nand/spi/core.c
|
|
|
-+++ b/drivers/mtd/nand/spi/core.c
|
|
|
-@@ -19,6 +19,7 @@
|
|
|
- #include <linux/string.h>
|
|
|
- #include <linux/spi/spi.h>
|
|
|
- #include <linux/spi/spi-mem.h>
|
|
|
-+#include <linux/mtd/mtk_bmt.h>
|
|
|
-
|
|
|
- static int spinand_read_reg_op(struct spinand_device *spinand, u8 reg, u8 *val)
|
|
|
- {
|
|
|
-@@ -1140,6 +1141,8 @@ static int spinand_probe(struct spi_mem
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
-
|
|
|
-+ mtk_bmt_attach(mtd);
|
|
|
-+
|
|
|
- ret = mtd_device_register(mtd, NULL, 0);
|
|
|
- if (ret)
|
|
|
- goto err_spinand_cleanup;
|
|
|
-@@ -1165,6 +1168,7 @@ static int spinand_remove(struct spi_mem
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
-
|
|
|
-+ mtk_bmt_detach(mtd);
|
|
|
- spinand_cleanup(spinand);
|
|
|
-
|
|
|
- return 0;
|
|
|
--- /dev/null
|
|
|
+++ b/include/linux/mtd/mtk_bmt.h
|
|
|
@@ -0,0 +1,18 @@
|
|
|
@@ -853,3 +826,39 @@
|
|
|
+#endif
|
|
|
+
|
|
|
+#endif
|
|
|
+--- a/drivers/mtd/mtk-snand/mtk-snand-mtd.c
|
|
|
++++ b/drivers/mtd/mtk-snand/mtk-snand-mtd.c
|
|
|
+@@ -16,6 +16,7 @@
|
|
|
+ #include <linux/dma-mapping.h>
|
|
|
+ #include <linux/wait.h>
|
|
|
+ #include <linux/mtd/mtd.h>
|
|
|
++#include <linux/mtd/mtk_bmt.h>
|
|
|
+ #include <linux/mtd/partitions.h>
|
|
|
+ #include <linux/of_platform.h>
|
|
|
+
|
|
|
+@@ -608,6 +609,8 @@ static int mtk_snand_probe(struct platfo
|
|
|
+ mtd->_block_isbad = mtk_snand_mtd_block_isbad;
|
|
|
+ mtd->_block_markbad = mtk_snand_mtd_block_markbad;
|
|
|
+
|
|
|
++ mtk_bmt_attach(mtd);
|
|
|
++
|
|
|
+ ret = mtd_device_register(mtd, NULL, 0);
|
|
|
+ if (ret) {
|
|
|
+ dev_err(msm->pdev.dev, "failed to register mtd partition\n");
|
|
|
+@@ -619,6 +622,7 @@ static int mtk_snand_probe(struct platfo
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ errout4:
|
|
|
++ mtk_bmt_detach(mtd);
|
|
|
+ devm_kfree(msm->pdev.dev, msm->page_cache);
|
|
|
+
|
|
|
+ errout3:
|
|
|
+@@ -646,6 +650,8 @@ static int mtk_snand_remove(struct platf
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
++ mtk_bmt_detach(mtd);
|
|
|
++
|
|
|
+ mtk_snand_cleanup(msm->snf);
|
|
|
+
|
|
|
+ if (msm->irq >= 0)
|