create mode 100644 drivers/mtd/nand/nand_device_list.h
create mode 100644 drivers/mtd/nand/partition.h
-Index: linux-4.9.30/drivers/mtd/nand/Kconfig
-===================================================================
---- linux-4.9.30.orig/drivers/mtd/nand/Kconfig
-+++ linux-4.9.30/drivers/mtd/nand/Kconfig
+--- a/drivers/mtd/nand/Kconfig
++++ b/drivers/mtd/nand/Kconfig
@@ -569,4 +569,10 @@ config MTD_NAND_MTK
Enables support for NAND controller on MTK SoCs.
This controller is found on mt27xx, mt81xx, mt65xx SoCs.
+ select MTD_NAND_ECC
+
endif # MTD_NAND
-Index: linux-4.9.30/drivers/mtd/nand/Makefile
-===================================================================
---- linux-4.9.30.orig/drivers/mtd/nand/Makefile
-+++ linux-4.9.30/drivers/mtd/nand/Makefile
+--- a/drivers/mtd/nand/Makefile
++++ b/drivers/mtd/nand/Makefile
@@ -58,5 +58,6 @@ obj-$(CONFIG_MTD_NAND_HISI504) +
obj-$(CONFIG_MTD_NAND_BRCMNAND) += brcmnand/
obj-$(CONFIG_MTD_NAND_QCOM) += qcom_nandc.o
+obj-$(CONFIG_MTK_MTD_NAND) += mtk_nand2.o bmt.o
nand-objs := nand_base.o nand_bbt.o nand_timings.o
-Index: linux-4.9.30/drivers/mtd/nand/bmt.c
-===================================================================
--- /dev/null
-+++ linux-4.9.30/drivers/mtd/nand/bmt.c
++++ b/drivers/mtd/nand/bmt.c
@@ -0,0 +1,750 @@
+#include "bmt.h"
+
+MODULE_AUTHOR("MediaTek");
+MODULE_DESCRIPTION("Bad Block mapping management for MediaTek NAND Flash Driver");
+#endif
-Index: linux-4.9.30/drivers/mtd/nand/bmt.h
-===================================================================
--- /dev/null
-+++ linux-4.9.30/drivers/mtd/nand/bmt.h
++++ b/drivers/mtd/nand/bmt.h
@@ -0,0 +1,80 @@
+#ifndef __BMT_H__
+#define __BMT_H__
+unsigned short get_mapping_block_index(int index);
+
+#endif // #ifndef __BMT_H__
-Index: linux-4.9.30/drivers/mtd/nand/dev-nand.c
-===================================================================
--- /dev/null
-+++ linux-4.9.30/drivers/mtd/nand/dev-nand.c
++++ b/drivers/mtd/nand/dev-nand.c
@@ -0,0 +1,63 @@
+#include <linux/init.h>
+#include <linux/kernel.h>
+ return retval;
+}
+arch_initcall(mtk_nand_register);
-Index: linux-4.9.30/drivers/mtd/nand/mt6575_typedefs.h
-===================================================================
--- /dev/null
-+++ linux-4.9.30/drivers/mtd/nand/mt6575_typedefs.h
++++ b/drivers/mtd/nand/mt6575_typedefs.h
@@ -0,0 +1,340 @@
+/* Copyright Statement:
+ *
+
+#endif // _MT6575_TYPEDEFS_H
+
-Index: linux-4.9.30/drivers/mtd/nand/mtk_nand2.c
-===================================================================
--- /dev/null
-+++ linux-4.9.30/drivers/mtd/nand/mtk_nand2.c
++++ b/drivers/mtd/nand/mtk_nand2.c
@@ -0,0 +1,2363 @@
+/******************************************************************************
+* mtk_nand2.c - MTK NAND Flash Device Driver
+module_init(mtk_nand_init);
+module_exit(mtk_nand_exit);
+MODULE_LICENSE("GPL");
-Index: linux-4.9.30/drivers/mtd/nand/mtk_nand2.h
-===================================================================
--- /dev/null
-+++ linux-4.9.30/drivers/mtd/nand/mtk_nand2.h
++++ b/drivers/mtd/nand/mtk_nand2.h
@@ -0,0 +1,452 @@
+#ifndef __MTK_NAND_H
+#define __MTK_NAND_H
+extern u32 CFG_BLOCKSIZE;
+#endif
+#endif
-Index: linux-4.9.30/drivers/mtd/nand/nand_base.c
-===================================================================
---- linux-4.9.30.orig/drivers/mtd/nand/nand_base.c
-+++ linux-4.9.30/drivers/mtd/nand/nand_base.c
+--- a/drivers/mtd/nand/nand_base.c
++++ b/drivers/mtd/nand/nand_base.c
@@ -47,7 +47,7 @@
#include <linux/mtd/partitions.h>
#include <linux/of.h>
static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
struct mtd_oob_ops *ops);
-@@ -233,7 +233,7 @@ static int check_offs_len(struct mtd_inf
+@@ -239,7 +239,7 @@ static int check_offs_len(struct mtd_inf
*
* Release chip lock and wake up anyone waiting on the device.
*/
{
struct nand_chip *chip = mtd_to_nand(mtd);
-@@ -915,7 +915,7 @@ static void panic_nand_get_device(struct
+@@ -921,7 +921,7 @@ static void panic_nand_get_device(struct
*
* Get the device and lock it for exclusive access
*/
nand_get_device(struct mtd_info *mtd, int new_state)
{
struct nand_chip *chip = mtd_to_nand(mtd);
-Index: linux-4.9.30/drivers/mtd/nand/nand_bbt.c
-===================================================================
---- linux-4.9.30.orig/drivers/mtd/nand/nand_bbt.c
-+++ linux-4.9.30/drivers/mtd/nand/nand_bbt.c
+--- a/drivers/mtd/nand/nand_bbt.c
++++ b/drivers/mtd/nand/nand_bbt.c
@@ -1215,6 +1215,25 @@ err:
return res;
}
/**
* nand_update_bbt - update bad block table(s)
* @mtd: MTD device structure
-Index: linux-4.9.30/drivers/mtd/nand/nand_def.h
-===================================================================
--- /dev/null
-+++ linux-4.9.30/drivers/mtd/nand/nand_def.h
++++ b/drivers/mtd/nand/nand_def.h
@@ -0,0 +1,123 @@
+#ifndef __NAND_DEF_H__
+#define __NAND_DEF_H__
+#include "mt6575_typedefs.h"
+
+#endif /* __NAND_DEF_H__ */
-Index: linux-4.9.30/drivers/mtd/nand/nand_device_list.h
-===================================================================
--- /dev/null
-+++ linux-4.9.30/drivers/mtd/nand/nand_device_list.h
-@@ -0,0 +1,55 @@
++++ b/drivers/mtd/nand/nand_device_list.h
+@@ -0,0 +1,56 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ {0x20BC, 0x105554, 5, 16, 512, 128, 2048, 64, 0x1123, "EHD013151MA_5", 0},
+ {0xECBC, 0x005554, 5, 16, 512, 128, 2048, 64, 0x1123, "K524G2GACB_A0", 0},
+ {0x2CBC, 0x905556, 5, 16, 512, 128, 2048, 64, 0x21044333, "MT29C4G96MAZA", 0},
++ {0x2CDA, 0x909506, 5, 8, 256, 128, 2048, 64, 0x30C77fff, "MT29F2G08ABAE", 0},
+ {0xADBC, 0x905554, 5, 16, 512, 128, 2048, 64, 0x10801011, "H9DA4GH4JJAMC", 0},
+ {0x01F1, 0x801D01, 4, 8, 128, 128, 2048, 64, 0x30C77fff, "S34ML01G100TF", 0},
+ {0x92F1, 0x8095FF, 4, 8, 128, 128, 2048, 64, 0x30C77fff, "F59L1G81A", 0},
+
+
+#endif
-Index: linux-4.9.30/drivers/mtd/nand/partition.h
-===================================================================
--- /dev/null
-+++ linux-4.9.30/drivers/mtd/nand/partition.h
++++ b/drivers/mtd/nand/partition.h
@@ -0,0 +1,115 @@
+/* Copyright Statement:
+ *