kernel: bump 4.14 to 4.14.125 (FS#2305 FS#2297)
[oweals/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  };