Lines Matching refs:geo

115 static inline int mxs_nand_calc_mark_offset(struct bch_geometry *geo,  in mxs_nand_calc_mark_offset()  argument
118 uint32_t chunk_data_size_in_bits = geo->ecc_chunk_size * 8; in mxs_nand_calc_mark_offset()
119 uint32_t chunk_ecc_size_in_bits = geo->ecc_strength * geo->gf_len; in mxs_nand_calc_mark_offset()
158 geo->block_mark_byte_offset = block_mark_bit_offset >> 3; in mxs_nand_calc_mark_offset()
159 geo->block_mark_bit_offset = block_mark_bit_offset & 0x7; in mxs_nand_calc_mark_offset()
164 static inline int mxs_nand_calc_ecc_layout_by_info(struct bch_geometry *geo, in mxs_nand_calc_ecc_layout_by_info() argument
174 geo->gf_len = 13; in mxs_nand_calc_ecc_layout_by_info()
177 geo->gf_len = 14; in mxs_nand_calc_ecc_layout_by_info()
183 geo->ecc_chunk_size = ecc_step; in mxs_nand_calc_ecc_layout_by_info()
184 geo->ecc_strength = round_up(ecc_strength, 2); in mxs_nand_calc_ecc_layout_by_info()
187 if (geo->ecc_chunk_size < mtd->oobsize) in mxs_nand_calc_ecc_layout_by_info()
190 if (geo->ecc_strength > nand_info->max_ecc_strength_supported) in mxs_nand_calc_ecc_layout_by_info()
193 geo->ecc_chunk_count = mtd->writesize / geo->ecc_chunk_size; in mxs_nand_calc_ecc_layout_by_info()
198 static inline int mxs_nand_calc_ecc_layout(struct bch_geometry *geo, in mxs_nand_calc_ecc_layout() argument
205 geo->gf_len = 13; in mxs_nand_calc_ecc_layout()
208 geo->ecc_chunk_size = 512; in mxs_nand_calc_ecc_layout()
210 if (geo->ecc_chunk_size < mtd->oobsize) { in mxs_nand_calc_ecc_layout()
211 geo->gf_len = 14; in mxs_nand_calc_ecc_layout()
212 geo->ecc_chunk_size *= 2; in mxs_nand_calc_ecc_layout()
215 if (mtd->oobsize > geo->ecc_chunk_size) { in mxs_nand_calc_ecc_layout()
217 geo->ecc_chunk_size); in mxs_nand_calc_ecc_layout()
221 geo->ecc_chunk_count = mtd->writesize / geo->ecc_chunk_size; in mxs_nand_calc_ecc_layout()
231 geo->ecc_strength = ((mtd->oobsize - MXS_NAND_METADATA_SIZE) * 8) in mxs_nand_calc_ecc_layout()
232 / (geo->gf_len * geo->ecc_chunk_count); in mxs_nand_calc_ecc_layout()
234 geo->ecc_strength = min(round_down(geo->ecc_strength, 2), in mxs_nand_calc_ecc_layout()
375 static void mxs_nand_swap_block_mark(struct bch_geometry *geo, in mxs_nand_swap_block_mark() argument
378 uint32_t bit_offset = geo->block_mark_bit_offset; in mxs_nand_swap_block_mark()
379 uint32_t buf_offset = geo->block_mark_byte_offset; in mxs_nand_swap_block_mark()
559 struct bch_geometry *geo = &nand_info->bch_geometry; in mxs_nand_ecc_read_page() local
658 mxs_nand_swap_block_mark(geo, nand_info->data_buf, nand_info->oob_buf); in mxs_nand_ecc_read_page()
662 for (i = 0; i < geo->ecc_chunk_count; i++) { in mxs_nand_ecc_read_page()
710 struct bch_geometry *geo = &nand_info->bch_geometry; in mxs_nand_ecc_write_page() local
719 mxs_nand_swap_block_mark(geo, nand_info->data_buf, nand_info->oob_buf); in mxs_nand_ecc_write_page()
967 static int mxs_nand_set_geometry(struct mtd_info *mtd, struct bch_geometry *geo) in mxs_nand_set_geometry() argument
974 return mxs_nand_calc_ecc_layout_by_info(geo, mtd, in mxs_nand_set_geometry()
978 mxs_nand_calc_ecc_layout(geo, mtd)) { in mxs_nand_set_geometry()
982 return mxs_nand_calc_ecc_layout_by_info(geo, mtd, in mxs_nand_set_geometry()
1002 struct bch_geometry *geo = &nand_info->bch_geometry; in mxs_nand_setup_ecc() local
1007 ret = mxs_nand_set_geometry(mtd, geo); in mxs_nand_setup_ecc()
1011 mxs_nand_calc_mark_offset(geo, mtd->writesize); in mxs_nand_setup_ecc()
1017 tmp = (geo->ecc_chunk_count - 1) << BCH_FLASHLAYOUT0_NBLOCKS_OFFSET; in mxs_nand_setup_ecc()
1019 tmp |= (geo->ecc_strength >> 1) << BCH_FLASHLAYOUT0_ECC0_OFFSET; in mxs_nand_setup_ecc()
1020 tmp |= geo->ecc_chunk_size >> MXS_NAND_CHUNK_DATA_CHUNK_SIZE_SHIFT; in mxs_nand_setup_ecc()
1021 tmp |= (geo->gf_len == 14 ? 1 : 0) << in mxs_nand_setup_ecc()
1027 tmp |= (geo->ecc_strength >> 1) << BCH_FLASHLAYOUT1_ECCN_OFFSET; in mxs_nand_setup_ecc()
1028 tmp |= geo->ecc_chunk_size >> MXS_NAND_CHUNK_DATA_CHUNK_SIZE_SHIFT; in mxs_nand_setup_ecc()
1029 tmp |= (geo->gf_len == 14 ? 1 : 0) << in mxs_nand_setup_ecc()