Lines Matching full:ecc

24  *	1024 bytes data + 4Bytes sys data + 28Bytes~124Bytes ECC data +
25 * 1024 bytes data + 4Bytes sys data + 28Bytes~124Bytes ECC data +
32 * 4Bytes sys data + .... + 4Bytes sys data + ECC data.
94 * struct rk_ecc_cnt_status: represent a ecc status data.
96 * @low: ECC count low bit index at register.
98 * @low_bn: ECC count low bit number.
99 * @high: ECC count high bit index at register.
113 * @ecc_strengths: ECC strengths
114 * @ecc_cfgs: ECC config values
198 return (u8 *)p + i * chip->ecc.size; in rk_nfc_buf_to_data_ptr()
215 poi = chip->oob_poi + rknand->metadata_size + chip->ecc.bytes * i; in rk_nfc_buf_to_oob_ecc_ptr()
222 return chip->ecc.size + chip->ecc.bytes + NFC_SYS_DATA_SIZE; in rk_nfc_data_len()
236 return nfc->page_buf + i * rk_nfc_data_len(chip) + chip->ecc.size; in rk_nfc_oob_ptr()
256 /* Save chip ECC setting */ in rk_nfc_hw_ecc_setup()
266 struct nand_ecc_ctrl *ecc = &chip->ecc; in rk_nfc_select_chip() local
297 * Compare current chip ECC setting with selected chip ECC setting and in rk_nfc_select_chip()
300 if (nfc->cur_ecc != ecc->strength) in rk_nfc_select_chip()
301 rk_nfc_hw_ecc_setup(chip, ecc->strength); in rk_nfc_select_chip()
513 struct nand_ecc_ctrl *ecc = &chip->ecc; in rk_nfc_write_page_raw() local
519 rknand->boot_ecc != ecc->strength) { in rk_nfc_write_page_raw()
522 * a different ECC strength is in use for the boot blocks. in rk_nfc_write_page_raw()
530 for (i = 0; i < ecc->steps; i++) { in rk_nfc_write_page_raw()
535 ecc->size); in rk_nfc_write_page_raw()
571 rk_nfc_buf_to_oob_ptr(chip, ecc->steps - 1), in rk_nfc_write_page_raw()
577 /* Copy ECC data to the NFC buffer. */ in rk_nfc_write_page_raw()
580 ecc->bytes); in rk_nfc_write_page_raw()
594 struct nand_ecc_ctrl *ecc = &chip->ecc; in rk_nfc_write_page_hwecc() local
595 int oob_step = (ecc->bytes > 60) ? NFC_MAX_OOB_PER_STEP : in rk_nfc_write_page_hwecc()
627 * Configure the ECC algorithm supported by the boot ROM. in rk_nfc_write_page_hwecc()
632 if (rknand->boot_ecc != ecc->strength) in rk_nfc_write_page_hwecc()
636 for (i = 0; i < ecc->steps; i++) { in rk_nfc_write_page_hwecc()
657 ecc->steps * oob_step, in rk_nfc_write_page_hwecc()
663 rk_nfc_xfer_start(nfc, NFC_WRITE, ecc->steps, dma_data, in rk_nfc_write_page_hwecc()
678 dma_unmap_single(nfc->dev, dma_oob, ecc->steps * oob_step, in rk_nfc_write_page_hwecc()
681 if (boot_rom_mode && rknand->boot_ecc != ecc->strength) in rk_nfc_write_page_hwecc()
682 rk_nfc_hw_ecc_setup(chip, ecc->strength); in rk_nfc_write_page_hwecc()
703 struct nand_ecc_ctrl *ecc = &chip->ecc; in rk_nfc_read_page_raw() local
709 rknand->boot_ecc != ecc->strength) { in rk_nfc_read_page_raw()
712 * a different ECC strength is in use for the boot blocks. in rk_nfc_read_page_raw()
719 for (i = 0; i < ecc->steps; i++) { in rk_nfc_read_page_raw()
728 memcpy(rk_nfc_buf_to_oob_ptr(chip, ecc->steps - 1), in rk_nfc_read_page_raw()
736 /* Copy ECC data from the NFC buffer. */ in rk_nfc_read_page_raw()
739 ecc->bytes); in rk_nfc_read_page_raw()
745 ecc->size); in rk_nfc_read_page_raw()
757 struct nand_ecc_ctrl *ecc = &chip->ecc; in rk_nfc_read_page_hwecc() local
758 int oob_step = (ecc->bytes > 60) ? NFC_MAX_OOB_PER_STEP : in rk_nfc_read_page_hwecc()
773 ecc->steps * oob_step, in rk_nfc_read_page_hwecc()
779 * Configure the ECC algorithm supported by the boot ROM. in rk_nfc_read_page_hwecc()
784 if (rknand->boot_ecc != ecc->strength) in rk_nfc_read_page_hwecc()
790 rk_nfc_xfer_start(nfc, NFC_READ, ecc->steps, dma_data, in rk_nfc_read_page_hwecc()
805 dma_unmap_single(nfc->dev, dma_oob, ecc->steps * oob_step, in rk_nfc_read_page_hwecc()
814 for (i = 1; i < ecc->steps; i++) { in rk_nfc_read_page_hwecc()
826 for (i = 0; i < (ecc->steps / 2); i++) { in rk_nfc_read_page_hwecc()
848 if (boot_rom_mode && rknand->boot_ecc != ecc->strength) in rk_nfc_read_page_hwecc()
849 rk_nfc_hw_ecc_setup(chip, ecc->strength); in rk_nfc_read_page_hwecc()
855 dev_err(nfc->dev, "read page: %x ecc error!\n", page); in rk_nfc_read_page_hwecc()
965 .ecc = rk_nfc_ooblayout_ecc,
972 struct nand_ecc_ctrl *ecc = &chip->ecc; in rk_nfc_ecc_init() local
979 if (!ecc->size || !ecc->strength || in rk_nfc_ecc_init()
980 ecc->strength > nfc_max_strength) { in rk_nfc_ecc_init()
981 chip->ecc.size = 1024; in rk_nfc_ecc_init()
982 ecc->steps = mtd->writesize / ecc->size; in rk_nfc_ecc_init()
985 * HW ECC always requests the number of ECC bytes per 1024 byte in rk_nfc_ecc_init()
988 max_strength = ((mtd->oobsize / ecc->steps) - 4) * 8 / in rk_nfc_ecc_init()
999 dev_err(nfc->dev, "unsupported ECC strength\n"); in rk_nfc_ecc_init()
1003 ecc->strength = strengths[i]; in rk_nfc_ecc_init()
1005 ecc->steps = mtd->writesize / ecc->size; in rk_nfc_ecc_init()
1006 ecc->bytes = DIV_ROUND_UP(ecc->strength * fls(8 * chip->ecc.size), 8); in rk_nfc_ecc_init()
1017 struct nand_ecc_ctrl *ecc = &chip->ecc; in rk_nfc_attach_chip() local
1027 if (ecc->engine_type != NAND_ECC_ENGINE_TYPE_ON_HOST) in rk_nfc_attach_chip()
1034 rknand->metadata_size = NFC_SYS_DATA_SIZE * ecc->steps; in rk_nfc_attach_chip()
1054 new_oob_len = ecc->steps * NFC_MAX_OOB_PER_STEP; in rk_nfc_attach_chip()
1084 chip->ecc.write_page_raw = rk_nfc_write_page_raw; in rk_nfc_attach_chip()
1085 chip->ecc.write_page = rk_nfc_write_page_hwecc; in rk_nfc_attach_chip()
1086 chip->ecc.write_oob = rk_nfc_write_oob; in rk_nfc_attach_chip()
1088 chip->ecc.read_page_raw = rk_nfc_read_page_raw; in rk_nfc_attach_chip()
1089 chip->ecc.read_page = rk_nfc_read_page_hwecc; in rk_nfc_attach_chip()
1090 chip->ecc.read_oob = rk_nfc_read_oob; in rk_nfc_attach_chip()
1157 chip->ecc.engine_type = NAND_ECC_ENGINE_TYPE_ON_HOST; in rk_nfc_nand_chip_init()
1178 ret = of_property_read_u32(np, "rockchip,boot-ecc-strength", in rk_nfc_nand_chip_init()
1180 rknand->boot_ecc = ret ? chip->ecc.strength : tmp; in rk_nfc_nand_chip_init()