Lines Matching refs:ecc
217 struct nand_ecc_ctrl *ecc, in rockchip_nand_hw_ecc_setup() argument
224 ecc->strength = strength; in rockchip_nand_hw_ecc_setup()
225 ecc->bytes = DIV_ROUND_UP(ecc->strength * 14, 8); in rockchip_nand_hw_ecc_setup()
226 ecc->bytes = ALIGN(ecc->bytes, 2); in rockchip_nand_hw_ecc_setup()
228 switch (ecc->strength) { in rockchip_nand_hw_ecc_setup()
287 struct nand_ecc_ctrl *ecc = &chip->ecc; in rockchip_nand_read_extra_oob() local
288 int offset = ((ecc->bytes + ecc->prepad) * ecc->steps); in rockchip_nand_read_extra_oob()
302 struct nand_ecc_ctrl *ecc = &chip->ecc; in rockchip_nand_write_extra_oob() local
303 int offset = ((ecc->bytes + ecc->prepad) * ecc->steps); in rockchip_nand_write_extra_oob()
321 struct nand_ecc_ctrl *ecc = &chip->ecc; in rockchip_nand_hw_syndrome_pio_read_page() local
328 rockchip_nand_hw_ecc_setup(mtd, ecc, NANDC_V9_BOOTROM_ECC); in rockchip_nand_hw_syndrome_pio_read_page()
332 for (step = 0; step < ecc->steps; step++) { in rockchip_nand_hw_syndrome_pio_read_page()
333 int data_off = step * ecc->size; in rockchip_nand_hw_syndrome_pio_read_page()
334 int oob_off = step * (ecc->bytes + ecc->prepad); in rockchip_nand_hw_syndrome_pio_read_page()
353 if ((step + 1) < ecc->steps) in rockchip_nand_hw_syndrome_pio_read_page()
358 (step & 1), ecc->size); in rockchip_nand_hw_syndrome_pio_read_page()
369 rockchip_nand_hw_ecc_setup(mtd, ecc, rknand->ecc_strength); in rockchip_nand_hw_syndrome_pio_read_page()
396 struct nand_ecc_ctrl *ecc = &chip->ecc; in rockchip_nand_hw_syndrome_pio_write_page() local
400 int data_off = step * ecc->size; in rockchip_nand_hw_syndrome_pio_write_page()
401 int oob_off = step * (ecc->bytes + ecc->prepad); in rockchip_nand_hw_syndrome_pio_write_page()
406 rockchip_nand_hw_ecc_setup(mtd, ecc, NANDC_V9_BOOTROM_ECC); in rockchip_nand_hw_syndrome_pio_write_page()
411 memcpy_toio(sram_base, data, ecc->size); in rockchip_nand_hw_syndrome_pio_write_page()
412 memcpy_toio(rknand->regs + NANDC_REG_V9_SPARE0, &index, ecc->prepad); in rockchip_nand_hw_syndrome_pio_write_page()
414 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()
441 rockchip_nand_hw_ecc_setup(mtd, ecc, rknand->ecc_strength); in rockchip_nand_hw_syndrome_pio_write_page()
449 struct nand_ecc_ctrl *ecc) in rockchip_nand_ecc_max_strength() argument
453 max_strength = ((mtd->oobsize / ecc->steps) - ecc->prepad) * 8 / 14; in rockchip_nand_ecc_max_strength()
480 struct nand_ecc_ctrl *ecc) in rockchip_nand_hw_ecc_ctrl_init() argument
487 ecc->prepad = 4; in rockchip_nand_hw_ecc_ctrl_init()
488 ecc->steps = mtd->writesize / ecc->size; in rockchip_nand_hw_ecc_ctrl_init()
496 if (rockchip_nand_strength_is_valid(ecc->strength)) in rockchip_nand_hw_ecc_ctrl_init()
497 strength = ecc->strength; in rockchip_nand_hw_ecc_ctrl_init()
499 strength = rockchip_nand_ecc_max_strength(mtd, ecc); in rockchip_nand_hw_ecc_ctrl_init()
501 rockchip_nand_hw_ecc_setup(mtd, ecc, strength); in rockchip_nand_hw_ecc_ctrl_init()
503 rknand->ecc_strength = ecc->strength; in rockchip_nand_hw_ecc_ctrl_init()
505 nand_oob_fix.eccbytes = ecc->bytes * ecc->steps; in rockchip_nand_hw_ecc_ctrl_init()
506 for (index = 0; index < ecc->bytes; index++) in rockchip_nand_hw_ecc_ctrl_init()
507 nand_oob_fix.eccpos[index] = index + ecc->prepad; in rockchip_nand_hw_ecc_ctrl_init()
508 ecc->layout = &nand_oob_fix; in rockchip_nand_hw_ecc_ctrl_init()
510 if (mtd->oobsize < ((ecc->bytes + ecc->prepad) * ecc->steps)) { in rockchip_nand_hw_ecc_ctrl_init()
518 struct nand_ecc_ctrl *ecc) in rockchip_nand_ecc_init() argument
522 switch (ecc->mode) { in rockchip_nand_ecc_init()
525 ret = rockchip_nand_hw_ecc_ctrl_init(mtd, ecc); in rockchip_nand_ecc_init()
528 ecc->read_page = rockchip_nand_hw_syndrome_pio_read_page; in rockchip_nand_ecc_init()
529 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()