mediatek: backport upstream mediatek patches
[openwrt/openwrt.git] / target / linux / mediatek / patches-4.14 / 0167-mtd-nand-mtk-Support-MT7622-NAND-flash-controller.patch
1 From f395a149fbbc190afbadbdcf9ce95f85f78da22f Mon Sep 17 00:00:00 2001
2 From: RogerCC Lin <rogercc.lin@mediatek.com>
3 Date: Thu, 30 Nov 2017 22:10:45 +0800
4 Subject: [PATCH 167/224] mtd: nand: mtk: Support MT7622 NAND flash controller.
5
6 Add tables to support MT7622 NAND flash controller.
7
8 Signed-off-by: RogerCC Lin <rogercc.lin@mediatek.com>
9 Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
10 ---
11 drivers/mtd/nand/mtk_ecc.c | 26 ++++++++++++++++++++++++++
12 drivers/mtd/nand/mtk_nand.c | 16 ++++++++++++++++
13 2 files changed, 42 insertions(+)
14
15 diff --git a/drivers/mtd/nand/mtk_ecc.c b/drivers/mtd/nand/mtk_ecc.c
16 index 6610eefaa92b..40d86a861a70 100644
17 --- a/drivers/mtd/nand/mtk_ecc.c
18 +++ b/drivers/mtd/nand/mtk_ecc.c
19 @@ -83,6 +83,10 @@ static const u8 ecc_strength_mt2712[] = {
20 40, 44, 48, 52, 56, 60, 68, 72, 80
21 };
22
23 +static const u8 ecc_strength_mt7622[] = {
24 + 4, 6, 8, 10, 12, 14, 16
25 +};
26 +
27 enum mtk_ecc_regs {
28 ECC_ENCPAR00,
29 ECC_ENCIRQ_EN,
30 @@ -110,6 +114,15 @@ static int mt2712_ecc_regs[] = {
31 [ECC_DECIRQ_STA] = 0x204,
32 };
33
34 +static int mt7622_ecc_regs[] = {
35 + [ECC_ENCPAR00] = 0x10,
36 + [ECC_ENCIRQ_EN] = 0x30,
37 + [ECC_ENCIRQ_STA] = 0x34,
38 + [ECC_DECDONE] = 0x11c,
39 + [ECC_DECIRQ_EN] = 0x140,
40 + [ECC_DECIRQ_STA] = 0x144,
41 +};
42 +
43 static inline void mtk_ecc_wait_idle(struct mtk_ecc *ecc,
44 enum mtk_ecc_operation op)
45 {
46 @@ -458,6 +471,16 @@ static const struct mtk_ecc_caps mtk_ecc_caps_mt2712 = {
47 .pg_irq_sel = 1,
48 };
49
50 +static const struct mtk_ecc_caps mtk_ecc_caps_mt7622 = {
51 + .err_mask = 0x3f,
52 + .ecc_strength = ecc_strength_mt7622,
53 + .ecc_regs = mt7622_ecc_regs,
54 + .num_ecc_strength = 7,
55 + .ecc_mode_shift = 4,
56 + .parity_bits = 13,
57 + .pg_irq_sel = 0,
58 +};
59 +
60 static const struct of_device_id mtk_ecc_dt_match[] = {
61 {
62 .compatible = "mediatek,mt2701-ecc",
63 @@ -465,6 +488,9 @@ static const struct of_device_id mtk_ecc_dt_match[] = {
64 }, {
65 .compatible = "mediatek,mt2712-ecc",
66 .data = &mtk_ecc_caps_mt2712,
67 + }, {
68 + .compatible = "mediatek,mt7622-ecc",
69 + .data = &mtk_ecc_caps_mt7622,
70 },
71 {},
72 };
73 diff --git a/drivers/mtd/nand/mtk_nand.c b/drivers/mtd/nand/mtk_nand.c
74 index 7349aa846f9a..8f71b405d639 100644
75 --- a/drivers/mtd/nand/mtk_nand.c
76 +++ b/drivers/mtd/nand/mtk_nand.c
77 @@ -174,6 +174,10 @@ static const u8 spare_size_mt2712[] = {
78 74
79 };
80
81 +static const u8 spare_size_mt7622[] = {
82 + 16, 26, 27, 28
83 +};
84 +
85 static inline struct mtk_nfc_nand_chip *to_mtk_nand(struct nand_chip *nand)
86 {
87 return container_of(nand, struct mtk_nfc_nand_chip, nand);
88 @@ -1409,6 +1413,15 @@ static const struct mtk_nfc_caps mtk_nfc_caps_mt2712 = {
89 .max_sector_size = 1024,
90 };
91
92 +static const struct mtk_nfc_caps mtk_nfc_caps_mt7622 = {
93 + .spare_size = spare_size_mt7622,
94 + .num_spare_size = 4,
95 + .pageformat_spare_shift = 4,
96 + .nfi_clk_div = 1,
97 + .max_sector = 8,
98 + .max_sector_size = 512,
99 +};
100 +
101 static const struct of_device_id mtk_nfc_id_table[] = {
102 {
103 .compatible = "mediatek,mt2701-nfc",
104 @@ -1416,6 +1429,9 @@ static const struct of_device_id mtk_nfc_id_table[] = {
105 }, {
106 .compatible = "mediatek,mt2712-nfc",
107 .data = &mtk_nfc_caps_mt2712,
108 + }, {
109 + .compatible = "mediatek,mt7622-nfc",
110 + .data = &mtk_nfc_caps_mt7622,
111 },
112 {}
113 };
114 --
115 2.11.0
116