@@ -135,6 +135,7 @@ struct meson_nfc_nand_chip {
135135struct meson_nand_ecc {
136136 u32 bch ;
137137 u32 strength ;
138+ u32 size ;
138139};
139140
140141struct meson_nfc_data {
@@ -190,23 +191,25 @@ struct meson_nfc {
190191};
191192
192193enum {
193- NFC_ECC_BCH8_1K = 2 ,
194+ NFC_ECC_BCH8_512 = 1 ,
195+ NFC_ECC_BCH8_1K ,
194196 NFC_ECC_BCH24_1K ,
195197 NFC_ECC_BCH30_1K ,
196198 NFC_ECC_BCH40_1K ,
197199 NFC_ECC_BCH50_1K ,
198200 NFC_ECC_BCH60_1K ,
199201};
200202
201- #define MESON_ECC_DATA (b , s ) { .bch = (b), .strength = (s)}
203+ #define MESON_ECC_DATA (b , s , sz ) { .bch = (b), .strength = (s), .size = (sz) }
202204
203205static struct meson_nand_ecc meson_ecc [] = {
204- MESON_ECC_DATA (NFC_ECC_BCH8_1K , 8 ),
205- MESON_ECC_DATA (NFC_ECC_BCH24_1K , 24 ),
206- MESON_ECC_DATA (NFC_ECC_BCH30_1K , 30 ),
207- MESON_ECC_DATA (NFC_ECC_BCH40_1K , 40 ),
208- MESON_ECC_DATA (NFC_ECC_BCH50_1K , 50 ),
209- MESON_ECC_DATA (NFC_ECC_BCH60_1K , 60 ),
206+ MESON_ECC_DATA (NFC_ECC_BCH8_512 , 8 , 512 ),
207+ MESON_ECC_DATA (NFC_ECC_BCH8_1K , 8 , 1024 ),
208+ MESON_ECC_DATA (NFC_ECC_BCH24_1K , 24 , 1024 ),
209+ MESON_ECC_DATA (NFC_ECC_BCH30_1K , 30 , 1024 ),
210+ MESON_ECC_DATA (NFC_ECC_BCH40_1K , 40 , 1024 ),
211+ MESON_ECC_DATA (NFC_ECC_BCH50_1K , 50 , 1024 ),
212+ MESON_ECC_DATA (NFC_ECC_BCH60_1K , 60 , 1024 ),
210213};
211214
212215static int meson_nand_calc_ecc_bytes (int step_size , int strength )
@@ -224,8 +227,27 @@ static int meson_nand_calc_ecc_bytes(int step_size, int strength)
224227
225228NAND_ECC_CAPS_SINGLE (meson_gxl_ecc_caps ,
226229 meson_nand_calc_ecc_bytes , 1024 , 8 , 24 , 30 , 40 , 50 , 60 );
227- NAND_ECC_CAPS_SINGLE (meson_axg_ecc_caps ,
228- meson_nand_calc_ecc_bytes , 1024 , 8 );
230+
231+ static const int axg_stepinfo_strengths [] = { 8 };
232+ static const struct nand_ecc_step_info axg_stepinfo_1024 = {
233+ .stepsize = 1024 ,
234+ .strengths = axg_stepinfo_strengths ,
235+ .nstrengths = ARRAY_SIZE (axg_stepinfo_strengths )
236+ };
237+
238+ static const struct nand_ecc_step_info axg_stepinfo_512 = {
239+ .stepsize = 512 ,
240+ .strengths = axg_stepinfo_strengths ,
241+ .nstrengths = ARRAY_SIZE (axg_stepinfo_strengths )
242+ };
243+
244+ static const struct nand_ecc_step_info axg_stepinfo [] = { axg_stepinfo_1024 , axg_stepinfo_512 };
245+
246+ static const struct nand_ecc_caps meson_axg_ecc_caps = {
247+ .stepinfos = axg_stepinfo ,
248+ .nstepinfos = ARRAY_SIZE (axg_stepinfo ),
249+ .calc_ecc_bytes = meson_nand_calc_ecc_bytes ,
250+ };
229251
230252static struct meson_nfc_nand_chip * to_meson_nand (struct nand_chip * nand )
231253{
@@ -1257,7 +1279,8 @@ static int meson_nand_bch_mode(struct nand_chip *nand)
12571279 return - EINVAL ;
12581280
12591281 for (i = 0 ; i < ARRAY_SIZE (meson_ecc ); i ++ ) {
1260- if (meson_ecc [i ].strength == nand -> ecc .strength ) {
1282+ if (meson_ecc [i ].strength == nand -> ecc .strength &&
1283+ meson_ecc [i ].size == nand -> ecc .size ) {
12611284 meson_chip -> bch_mode = meson_ecc [i ].bch ;
12621285 return 0 ;
12631286 }
0 commit comments