kernel: bump 4.14 to 4.14.52 for 18.06
[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 --- a/drivers/mtd/nand/mtk_ecc.c
16 +++ b/drivers/mtd/nand/mtk_ecc.c
17 @@ -83,6 +83,10 @@ static const u8 ecc_strength_mt2712[] =
18 40, 44, 48, 52, 56, 60, 68, 72, 80
19 };
20
21 +static const u8 ecc_strength_mt7622[] = {
22 + 4, 6, 8, 10, 12, 14, 16
23 +};
24 +
25 enum mtk_ecc_regs {
26 ECC_ENCPAR00,
27 ECC_ENCIRQ_EN,
28 @@ -110,6 +114,15 @@ static int mt2712_ecc_regs[] = {
29 [ECC_DECIRQ_STA] = 0x204,
30 };
31
32 +static int mt7622_ecc_regs[] = {
33 + [ECC_ENCPAR00] = 0x10,
34 + [ECC_ENCIRQ_EN] = 0x30,
35 + [ECC_ENCIRQ_STA] = 0x34,
36 + [ECC_DECDONE] = 0x11c,
37 + [ECC_DECIRQ_EN] = 0x140,
38 + [ECC_DECIRQ_STA] = 0x144,
39 +};
40 +
41 static inline void mtk_ecc_wait_idle(struct mtk_ecc *ecc,
42 enum mtk_ecc_operation op)
43 {
44 @@ -458,6 +471,16 @@ static const struct mtk_ecc_caps mtk_ecc
45 .pg_irq_sel = 1,
46 };
47
48 +static const struct mtk_ecc_caps mtk_ecc_caps_mt7622 = {
49 + .err_mask = 0x3f,
50 + .ecc_strength = ecc_strength_mt7622,
51 + .ecc_regs = mt7622_ecc_regs,
52 + .num_ecc_strength = 7,
53 + .ecc_mode_shift = 4,
54 + .parity_bits = 13,
55 + .pg_irq_sel = 0,
56 +};
57 +
58 static const struct of_device_id mtk_ecc_dt_match[] = {
59 {
60 .compatible = "mediatek,mt2701-ecc",
61 @@ -465,6 +488,9 @@ static const struct of_device_id mtk_ecc
62 }, {
63 .compatible = "mediatek,mt2712-ecc",
64 .data = &mtk_ecc_caps_mt2712,
65 + }, {
66 + .compatible = "mediatek,mt7622-ecc",
67 + .data = &mtk_ecc_caps_mt7622,
68 },
69 {},
70 };
71 --- a/drivers/mtd/nand/mtk_nand.c
72 +++ b/drivers/mtd/nand/mtk_nand.c
73 @@ -174,6 +174,10 @@ static const u8 spare_size_mt2712[] = {
74 74
75 };
76
77 +static const u8 spare_size_mt7622[] = {
78 + 16, 26, 27, 28
79 +};
80 +
81 static inline struct mtk_nfc_nand_chip *to_mtk_nand(struct nand_chip *nand)
82 {
83 return container_of(nand, struct mtk_nfc_nand_chip, nand);
84 @@ -1409,6 +1413,15 @@ static const struct mtk_nfc_caps mtk_nfc
85 .max_sector_size = 1024,
86 };
87
88 +static const struct mtk_nfc_caps mtk_nfc_caps_mt7622 = {
89 + .spare_size = spare_size_mt7622,
90 + .num_spare_size = 4,
91 + .pageformat_spare_shift = 4,
92 + .nfi_clk_div = 1,
93 + .max_sector = 8,
94 + .max_sector_size = 512,
95 +};
96 +
97 static const struct of_device_id mtk_nfc_id_table[] = {
98 {
99 .compatible = "mediatek,mt2701-nfc",
100 @@ -1416,6 +1429,9 @@ static const struct of_device_id mtk_nfc
101 }, {
102 .compatible = "mediatek,mt2712-nfc",
103 .data = &mtk_nfc_caps_mt2712,
104 + }, {
105 + .compatible = "mediatek,mt7622-nfc",
106 + .data = &mtk_nfc_caps_mt7622,
107 },
108 {}
109 };