mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-19 21:58:04 +00:00
kernel: add support for mediatek NMBM flash mapping support
This NAND flash remapping method is used on newer MediaTek devices with NAND flash. Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
55e8d52157
commit
06382d1af7
@ -392,6 +392,8 @@ int mtk_bmt_attach(struct mtd_info *mtd)
|
||||
|
||||
if (of_property_read_bool(np, "mediatek,bmt-v2"))
|
||||
bmtd.ops = &mtk_bmt_v2_ops;
|
||||
else if (of_property_read_bool(np, "mediatek,nmbm"))
|
||||
bmtd.ops = &mtk_bmt_nmbm_ops;
|
||||
else if (of_property_read_bool(np, "mediatek,bbt"))
|
||||
bmtd.ops = &mtk_bmt_bbt_ops;
|
||||
else
|
||||
@ -410,14 +412,14 @@ int mtk_bmt_attach(struct mtd_info *mtd)
|
||||
bmtd.pg_shift = ffs(bmtd.pg_size) - 1;
|
||||
bmtd.total_blks = mtd->size >> bmtd.blk_shift;
|
||||
|
||||
bmtd.data_buf = kzalloc(bmtd.pg_size, GFP_KERNEL);
|
||||
bmtd.data_buf = kzalloc(bmtd.pg_size + bmtd.mtd->oobsize, GFP_KERNEL);
|
||||
if (!bmtd.data_buf) {
|
||||
pr_info("nand: FATAL ERR: allocate buffer failed!\n");
|
||||
ret = -1;
|
||||
goto error;
|
||||
}
|
||||
|
||||
memset(bmtd.data_buf, 0xff, bmtd.pg_size);
|
||||
memset(bmtd.data_buf, 0xff, bmtd.pg_size + bmtd.mtd->oobsize);
|
||||
|
||||
ret = bmtd.ops->init(np);
|
||||
if (ret)
|
||||
|
@ -23,6 +23,9 @@ struct mtk_bmt_ops {
|
||||
int (*debug)(void *data, u64 val);
|
||||
};
|
||||
|
||||
struct bbbt;
|
||||
struct nmbm_instance;
|
||||
|
||||
struct bmt_desc {
|
||||
struct mtd_info *mtd;
|
||||
unsigned char *bbt_buf;
|
||||
@ -38,7 +41,10 @@ struct bmt_desc {
|
||||
|
||||
const struct mtk_bmt_ops *ops;
|
||||
|
||||
struct bbbt *bbt;
|
||||
union {
|
||||
struct bbbt *bbt;
|
||||
struct nmbm_instance *ni;
|
||||
};
|
||||
|
||||
struct dentry *debugfs_dir;
|
||||
|
||||
@ -70,6 +76,7 @@ struct bmt_desc {
|
||||
extern struct bmt_desc bmtd;
|
||||
extern const struct mtk_bmt_ops mtk_bmt_v2_ops;
|
||||
extern const struct mtk_bmt_ops mtk_bmt_bbt_ops;
|
||||
extern const struct mtk_bmt_ops mtk_bmt_nmbm_ops;
|
||||
|
||||
static inline u32 blk_pg(u16 block)
|
||||
{
|
||||
|
2348
target/linux/generic/files/drivers/mtd/nand/mtk_bmt_nmbm.c
Normal file
2348
target/linux/generic/files/drivers/mtd/nand/mtk_bmt_nmbm.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -17,7 +17,7 @@
|
||||
|
||||
nandcore-objs := core.o bbt.o
|
||||
obj-$(CONFIG_MTD_NAND_CORE) += nandcore.o
|
||||
+obj-$(CONFIG_MTD_NAND_MTK_BMT) += mtk_bmt.o mtk_bmt_v2.o mtk_bmt_bbt.o
|
||||
+obj-$(CONFIG_MTD_NAND_MTK_BMT) += mtk_bmt.o mtk_bmt_v2.o mtk_bmt_bbt.o mtk_bmt_nmbm.o
|
||||
|
||||
obj-y += onenand/
|
||||
obj-y += raw/
|
||||
|
Loading…
Reference in New Issue
Block a user