Lines Matching defs:ecc

122 /* GPMC ecc engine settings for read */
129 /* GPMC ecc engine settings for write */
719 * @ecc_buf: buffer to store ecc code
739 * @ecc_data1: ecc code from nand spare area
740 * @ecc_data2: ecc code from hardware register obtained from hardware ecc
869 * @read_ecc: ecc read from nand flash
870 * @calc_ecc: ecc read from HW ECC registers
872 * Compares the ecc read from nand spare area with ECC registers values
887 if (info->nand.ecc.engine_type == NAND_ECC_ENGINE_TYPE_ON_HOST &&
888 info->nand.ecc.size == 2048)
911 * @dat: The pointer to data on which ecc is computed
930 /* read ecc result */
941 * omap_enable_hwecc - This function enables the hardware ecc functionality
951 /* clear ecc and enable bits */
955 /* program ecc and result sizes */
956 val = ((((info->nand.ecc.size >> 1) - 1) << ECCSIZE1_SHIFT) |
1055 nsectors = chip->ecc.steps;
1075 nsectors = chip->ecc.steps;
1088 nsectors = chip->ecc.steps;
1105 /* Configure ecc size for BCH */
1122 /* Clear ecc and enable bits */
1133 * @dat: The pointer to data on which ecc is computed
1144 int eccbytes = info->nand.ecc.bytes;
1261 * @dat: The pointer to data on which ecc is computed
1277 * @dat: The pointer to data on which ecc is computed
1280 * Support calculating of BCH4/8/16 ecc vectors for the entire page in one go.
1286 int eccbytes = info->nand.ecc.bytes;
1317 for (i = 0; i < info->nand.ecc.size; i++) {
1319 if (flip_bits > info->nand.ecc.strength)
1323 for (i = 0; i < info->nand.ecc.bytes - 1; i++) {
1325 if (flip_bits > info->nand.ecc.strength)
1334 memset(data, 0xFF, info->nand.ecc.size);
1335 memset(oob, 0xFF, info->nand.ecc.bytes);
1345 * @read_ecc: ecc read from nand flash
1346 * @calc_ecc: ecc read from HW ECC registers
1348 * Calculated ecc vector reported as zero in case of non-error pages.
1349 * In case of non-zero ecc vector, first filter out erased-pages, and
1356 struct nand_ecc_ctrl *ecc = &info->nand.ecc;
1357 int eccsteps = info->nand.ecc.steps;
1373 actual_eccbytes = ecc->bytes - 1;
1378 actual_eccbytes = ecc->bytes - 1;
1382 actual_eccbytes = ecc->bytes;
1398 * In case of error, non zero ecc reported.
1402 eccflag = 1; /* non zero ecc, error present */
1415 buf = &data[info->nand.ecc.size * i];
1442 /* Update the ecc vector */
1443 calc_ecc += ecc->bytes;
1444 read_ecc += ecc->bytes;
1475 error_max = (ecc->size + actual_eccbytes) * 8;
1507 data += ecc->size;
1508 spare_ecc += ecc->bytes;
1515 * omap_write_page_bch - BCH ecc based write page function for entire page
1528 uint8_t *ecc_calc = chip->ecc.calc_buf;
1532 /* Enable GPMC ecc engine */
1533 chip->ecc.hwctl(chip, NAND_ECC_WRITE);
1538 /* Update ecc vector from GPMC result registers */
1542 chip->ecc.total);
1546 /* Write ecc vector to OOB area */
1568 u8 *ecc_calc = chip->ecc.calc_buf;
1569 int ecc_size = chip->ecc.size;
1570 int ecc_bytes = chip->ecc.bytes;
1571 int ecc_steps = chip->ecc.steps;
1585 chip->ecc.hwctl(chip, NAND_ECC_WRITE);
1606 ecc_calc = chip->ecc.calc_buf;
1608 chip->ecc.total);
1619 * omap_read_page_bch - BCH ecc based page read function for entire page
1625 * For BCH ecc scheme, GPMC used for syndrome calculation and ELM module
1629 * ecc engine enabled. ecc vector updated after read of OOB data.
1630 * For non error pages ecc vector reported as zero.
1636 uint8_t *ecc_calc = chip->ecc.calc_buf;
1637 uint8_t *ecc_code = chip->ecc.code_buf;
1643 /* Enable GPMC ecc engine */
1644 chip->ecc.hwctl(chip, NAND_ECC_READ);
1653 chip->ecc.total, false);
1655 /* Calculate ecc bytes */
1659 chip->ecc.total);
1663 stat = chip->ecc.correct(chip, buf, ecc_code, ecc_calc);
1772 /* select ecc-scheme for NAND */
1773 if (of_property_read_string(child, "ti,nand-ecc-opt", &s)) {
1774 dev_err(dev, "ti,nand-ecc-opt not found\n");
1796 dev_err(dev, "unrecognized value for ti,nand-ecc-opt\n");
1831 oobregion->length = chip->ecc.total;
1850 off += chip->ecc.total;
1861 .ecc = omap_ooblayout_ecc,
1871 if (section >= chip->ecc.steps)
1878 oobregion->offset = off + (section * (chip->ecc.bytes + 1));
1879 oobregion->length = chip->ecc.bytes;
1897 off += ((chip->ecc.bytes + 1) * chip->ecc.steps);
1908 .ecc = omap_sw_ooblayout_ecc,
2013 chip->ecc.engine_type = NAND_ECC_ENGINE_TYPE_SOFT;
2014 chip->ecc.algo = NAND_ECC_ALGO_HAMMING;
2022 chip->ecc.engine_type = NAND_ECC_ENGINE_TYPE_ON_HOST;
2023 chip->ecc.bytes = 3;
2024 chip->ecc.size = 512;
2025 chip->ecc.strength = 1;
2026 chip->ecc.calculate = omap_calculate_ecc;
2027 chip->ecc.hwctl = omap_enable_hwecc;
2028 chip->ecc.correct = omap_correct_data;
2030 oobbytes_per_step = chip->ecc.bytes;
2039 chip->ecc.engine_type = NAND_ECC_ENGINE_TYPE_ON_HOST;
2040 chip->ecc.size = 512;
2041 chip->ecc.bytes = 7;
2042 chip->ecc.strength = 4;
2043 chip->ecc.hwctl = omap_enable_hwecc_bch;
2044 chip->ecc.correct = nand_bch_correct_data;
2045 chip->ecc.calculate = omap_calculate_ecc_bch_sw;
2048 oobbytes_per_step = chip->ecc.bytes + 1;
2050 chip->ecc.priv = nand_bch_init(mtd);
2051 if (!chip->ecc.priv) {
2059 chip->ecc.engine_type = NAND_ECC_ENGINE_TYPE_ON_HOST;
2060 chip->ecc.size = 512;
2062 chip->ecc.bytes = 7 + 1;
2063 chip->ecc.strength = 4;
2064 chip->ecc.hwctl = omap_enable_hwecc_bch;
2065 chip->ecc.correct = omap_elm_correct_data;
2066 chip->ecc.read_page = omap_read_page_bch;
2067 chip->ecc.write_page = omap_write_page_bch;
2068 chip->ecc.write_subpage = omap_write_subpage_bch;
2070 oobbytes_per_step = chip->ecc.bytes;
2073 mtd->writesize / chip->ecc.size,
2074 chip->ecc.size, chip->ecc.bytes);
2081 chip->ecc.engine_type = NAND_ECC_ENGINE_TYPE_ON_HOST;
2082 chip->ecc.size = 512;
2083 chip->ecc.bytes = 13;
2084 chip->ecc.strength = 8;
2085 chip->ecc.hwctl = omap_enable_hwecc_bch;
2086 chip->ecc.correct = nand_bch_correct_data;
2087 chip->ecc.calculate = omap_calculate_ecc_bch_sw;
2090 oobbytes_per_step = chip->ecc.bytes + 1;
2092 chip->ecc.priv = nand_bch_init(mtd);
2093 if (!chip->ecc.priv) {
2101 chip->ecc.engine_type = NAND_ECC_ENGINE_TYPE_ON_HOST;
2102 chip->ecc.size = 512;
2104 chip->ecc.bytes = 13 + 1;
2105 chip->ecc.strength = 8;
2106 chip->ecc.hwctl = omap_enable_hwecc_bch;
2107 chip->ecc.correct = omap_elm_correct_data;
2108 chip->ecc.read_page = omap_read_page_bch;
2109 chip->ecc.write_page = omap_write_page_bch;
2110 chip->ecc.write_subpage = omap_write_subpage_bch;
2112 oobbytes_per_step = chip->ecc.bytes;
2115 mtd->writesize / chip->ecc.size,
2116 chip->ecc.size, chip->ecc.bytes);
2124 chip->ecc.engine_type = NAND_ECC_ENGINE_TYPE_ON_HOST;
2125 chip->ecc.size = 512;
2126 chip->ecc.bytes = 26;
2127 chip->ecc.strength = 16;
2128 chip->ecc.hwctl = omap_enable_hwecc_bch;
2129 chip->ecc.correct = omap_elm_correct_data;
2130 chip->ecc.read_page = omap_read_page_bch;
2131 chip->ecc.write_page = omap_write_page_bch;
2132 chip->ecc.write_subpage = omap_write_subpage_bch;
2134 oobbytes_per_step = chip->ecc.bytes;
2137 mtd->writesize / chip->ecc.size,
2138 chip->ecc.size, chip->ecc.bytes);
2150 (mtd->writesize / chip->ecc.size));
2198 nand_chip->ecc.priv = NULL;
2274 if (nand_chip->ecc.priv) {
2275 nand_bch_free(nand_chip->ecc.priv);
2276 nand_chip->ecc.priv = NULL;
2288 if (nand_chip->ecc.priv) {
2289 nand_bch_free(nand_chip->ecc.priv);
2290 nand_chip->ecc.priv = NULL;