Lines Matching full:ecc
211 struct nand_ecc_ctrl *ecc, in rockchip_nand_hw_ecc_setup() argument
218 ecc->strength = strength; in rockchip_nand_hw_ecc_setup()
219 ecc->bytes = DIV_ROUND_UP(ecc->strength * 14, 8); in rockchip_nand_hw_ecc_setup()
220 ecc->bytes = ALIGN(ecc->bytes, 2); in rockchip_nand_hw_ecc_setup()
222 switch (ecc->strength) { in rockchip_nand_hw_ecc_setup()
286 struct nand_ecc_ctrl *ecc = &chip->ecc; in rockchip_nand_read_extra_oob() local
287 int offset = ((ecc->bytes + ecc->prepad) * ecc->steps); in rockchip_nand_read_extra_oob()
301 struct nand_ecc_ctrl *ecc = &chip->ecc; in rockchip_nand_write_extra_oob() local
302 int offset = ((ecc->bytes + ecc->prepad) * ecc->steps); in rockchip_nand_write_extra_oob()
320 struct nand_ecc_ctrl *ecc = &chip->ecc; in rockchip_nand_hw_syndrome_pio_read_page() local
327 rockchip_nand_hw_ecc_setup(mtd, ecc, NANDC_V6_BOOTROM_ECC); in rockchip_nand_hw_syndrome_pio_read_page()
331 for (step = 0; step < ecc->steps; step++) { in rockchip_nand_hw_syndrome_pio_read_page()
332 int data_off = step * ecc->size; in rockchip_nand_hw_syndrome_pio_read_page()
333 int oob_off = step * (ecc->bytes + ecc->prepad); in rockchip_nand_hw_syndrome_pio_read_page()
352 if ((step + 1) < ecc->steps) in rockchip_nand_hw_syndrome_pio_read_page()
357 (step & 1), ecc->size); in rockchip_nand_hw_syndrome_pio_read_page()
368 rockchip_nand_hw_ecc_setup(mtd, ecc, rknand->ecc_strength); in rockchip_nand_hw_syndrome_pio_read_page()
395 struct nand_ecc_ctrl *ecc = &chip->ecc; in rockchip_nand_hw_syndrome_pio_write_page() local
399 int data_off = step * ecc->size; in rockchip_nand_hw_syndrome_pio_write_page()
400 int oob_off = step * (ecc->bytes + ecc->prepad); in rockchip_nand_hw_syndrome_pio_write_page()
405 rockchip_nand_hw_ecc_setup(mtd, ecc, NANDC_V6_BOOTROM_ECC); in rockchip_nand_hw_syndrome_pio_write_page()
410 memcpy_toio(sram_base, data, ecc->size); in rockchip_nand_hw_syndrome_pio_write_page()
411 memcpy_toio(rknand->regs + NANDC_REG_V6_SPARE0, &index, ecc->prepad); in rockchip_nand_hw_syndrome_pio_write_page()
413 for (step = 1; step <= ecc->steps; step++) { in rockchip_nand_hw_syndrome_pio_write_page()
417 data_off = step * ecc->size; in rockchip_nand_hw_syndrome_pio_write_page()
418 oob_off = step * (ecc->bytes + ecc->prepad); in rockchip_nand_hw_syndrome_pio_write_page()
422 if (step < ecc->steps) { in rockchip_nand_hw_syndrome_pio_write_page()
424 (step & 1), data, ecc->size); in rockchip_nand_hw_syndrome_pio_write_page()
427 oob, ecc->prepad); in rockchip_nand_hw_syndrome_pio_write_page()
430 oob, ecc->prepad); in rockchip_nand_hw_syndrome_pio_write_page()
440 rockchip_nand_hw_ecc_setup(mtd, ecc, rknand->ecc_strength); in rockchip_nand_hw_syndrome_pio_write_page()
448 struct nand_ecc_ctrl *ecc) in rockchip_nand_ecc_max_strength() argument
452 max_strength = ((mtd->oobsize / ecc->steps) - ecc->prepad) * 8 / 14; in rockchip_nand_ecc_max_strength()
479 struct nand_ecc_ctrl *ecc) in rockchip_nand_hw_ecc_ctrl_init() argument
486 ecc->prepad = 4; in rockchip_nand_hw_ecc_ctrl_init()
487 ecc->steps = mtd->writesize / ecc->size; in rockchip_nand_hw_ecc_ctrl_init()
495 if (rockchip_nand_strength_is_valid(ecc->strength)) in rockchip_nand_hw_ecc_ctrl_init()
496 strength = ecc->strength; in rockchip_nand_hw_ecc_ctrl_init()
498 strength = rockchip_nand_ecc_max_strength(mtd, ecc); in rockchip_nand_hw_ecc_ctrl_init()
500 rockchip_nand_hw_ecc_setup(mtd, ecc, strength); in rockchip_nand_hw_ecc_ctrl_init()
502 rknand->ecc_strength = ecc->strength; in rockchip_nand_hw_ecc_ctrl_init()
504 nand_oob_fix.eccbytes = ecc->bytes * ecc->steps; in rockchip_nand_hw_ecc_ctrl_init()
505 for (index = 0; index < ecc->bytes; index++) in rockchip_nand_hw_ecc_ctrl_init()
506 nand_oob_fix.eccpos[index] = index + ecc->prepad; in rockchip_nand_hw_ecc_ctrl_init()
507 ecc->layout = &nand_oob_fix; in rockchip_nand_hw_ecc_ctrl_init()
509 if (mtd->oobsize < ((ecc->bytes + ecc->prepad) * ecc->steps)) { in rockchip_nand_hw_ecc_ctrl_init()
517 struct nand_ecc_ctrl *ecc) in rockchip_nand_ecc_init() argument
521 switch (ecc->mode) { in rockchip_nand_ecc_init()
524 ret = rockchip_nand_hw_ecc_ctrl_init(mtd, ecc); in rockchip_nand_ecc_init()
527 ecc->read_page = rockchip_nand_hw_syndrome_pio_read_page; in rockchip_nand_ecc_init()
528 ecc->write_page = rockchip_nand_hw_syndrome_pio_write_page; in rockchip_nand_ecc_init()
614 ret = rockchip_nand_ecc_init(mtd, &chip->ecc); in rockchip_nand_chip_init()