Lines Matching full:oob

49 /* Define default oob placement schemes for large and small page devices */
435 * specify how to write bad block markers to OOB (chip->block_markbad).
438 * (1) erase the affected block, to allow OOB marker to be written cleanly
439 * (2) write bad block marker to OOB area of affected block (unless flag
453 /* Attempt erase before marking OOB */ in nand_block_markbad_lowlevel()
460 /* Write bad block marker to OOB */ in nand_block_markbad_lowlevel()
609 /* OOB area */ in nand_command()
1140 * @extraoob: extra OOB buffer
1141 * @extraooblen: extra OOB length
1144 * Check if a data buffer and its associated ECC and OOB data contains only
1163 * 3/ The extraoob argument is optional, and should be used if some of your OOB
1166 * extra OOB data to an ECC chunk.
1215 * @oob_required: caller requires OOB data read to chip->oob_poi
1218 * Not for syndrome calculating ECC controllers, which use a special oob layout.
1234 * @oob_required: caller requires OOB data read to chip->oob_poi
1237 * We need a special oob layout and handling even when OOB isn't used.
1245 uint8_t *oob = chip->oob_poi; in nand_read_page_raw_syndrome() local
1253 chip->read_buf(mtd, oob, chip->ecc.prepad); in nand_read_page_raw_syndrome()
1254 oob += chip->ecc.prepad; in nand_read_page_raw_syndrome()
1257 chip->read_buf(mtd, oob, eccbytes); in nand_read_page_raw_syndrome()
1258 oob += eccbytes; in nand_read_page_raw_syndrome()
1261 chip->read_buf(mtd, oob, chip->ecc.postpad); in nand_read_page_raw_syndrome()
1262 oob += chip->ecc.postpad; in nand_read_page_raw_syndrome()
1266 size = mtd->oobsize - (oob - chip->oob_poi); in nand_read_page_raw_syndrome()
1268 chip->read_buf(mtd, oob, size); in nand_read_page_raw_syndrome()
1278 * @oob_required: caller requires OOB data read to chip->oob_poi
1426 * @oob_required: caller requires OOB data read to chip->oob_poi
1429 * Not for syndrome calculating ECC controllers which need a special oob layout.
1480 * nand_read_page_hwecc_oob_first - [REPLACEABLE] hw ecc, read oob first
1484 * @oob_required: caller requires OOB data read to chip->oob_poi
1487 * Hardware ECC for large page chips, require OOB to be read first. For this
1489 * read/write ECC from the OOB area, unlike the ECC_HW_SYNDROME support with
1505 /* Read the OOB area first */ in nand_read_page_hwecc_oob_first()
1545 * @oob_required: caller requires OOB data read to chip->oob_poi
1549 * need a special oob layout and handling.
1559 uint8_t *oob = chip->oob_poi; in nand_read_page_syndrome() local
1569 chip->read_buf(mtd, oob, chip->ecc.prepad); in nand_read_page_syndrome()
1570 oob += chip->ecc.prepad; in nand_read_page_syndrome()
1574 chip->read_buf(mtd, oob, eccbytes); in nand_read_page_syndrome()
1575 stat = chip->ecc.correct(mtd, p, oob, NULL); in nand_read_page_syndrome()
1577 oob += eccbytes; in nand_read_page_syndrome()
1580 chip->read_buf(mtd, oob, chip->ecc.postpad); in nand_read_page_syndrome()
1581 oob += chip->ecc.postpad; in nand_read_page_syndrome()
1588 oob - eccpadbytes, in nand_read_page_syndrome()
1602 /* Calculate remaining oob bytes */ in nand_read_page_syndrome()
1603 i = mtd->oobsize - (oob - chip->oob_poi); in nand_read_page_syndrome()
1605 chip->read_buf(mtd, oob, i); in nand_read_page_syndrome()
1611 * nand_transfer_oob - [INTERN] Transfer oob to client buffer
1613 * @oob: oob destination address
1614 * @ops: oob ops structure
1615 * @len: size of oob to transfer
1617 static uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob, in nand_transfer_oob() argument
1624 memcpy(oob, chip->oob_poi + ops->ooboffs, len); in nand_transfer_oob()
1625 return oob + len; in nand_transfer_oob()
1647 memcpy(oob, chip->oob_poi + boffs, bytes); in nand_transfer_oob()
1648 oob += bytes; in nand_transfer_oob()
1650 return oob; in nand_transfer_oob()
1686 * @ops: oob ops structure
1700 uint8_t *bufpoi, *oob, *buf; in nand_do_read_ops() local
1715 oob = ops->oobbuf; in nand_do_read_ops()
1716 oob_required = oob ? 1 : 0; in nand_do_read_ops()
1734 if (realpage != chip->pagebuf || oob) { in nand_do_read_ops()
1754 !oob) in nand_do_read_ops()
1772 if (!NAND_HAS_SUBPAGE_READ(chip) && !oob && in nand_do_read_ops()
1784 if (unlikely(oob)) { in nand_do_read_ops()
1788 oob = nand_transfer_oob(chip, in nand_do_read_ops()
1789 oob, ops, toread); in nand_do_read_ops()
1856 if (oob) in nand_do_read_ops()
1869 * nand_read_oob_std - [REPLACEABLE] the most common OOB data read function
1883 * nand_read_oob_syndrome - [REPLACEABLE] OOB data read function for HW ECC
1920 * nand_write_oob_std - [REPLACEABLE] the most common OOB data write function
1934 /* Send command to program the OOB data */ in nand_write_oob_std()
1943 * nand_write_oob_syndrome - [REPLACEABLE] OOB data write function for HW ECC
1958 * data-ecc-data-ecc ... ecc-oob in nand_write_oob_syndrome()
1960 * data-pad-ecc-pad-data-pad .... ecc-pad-oob in nand_write_oob_syndrome()
2005 * @ops: oob operations description structure
2028 pr_debug("%s: attempt to start read outside oob\n", in nand_do_read_oob()
2103 * @ops: oob operation description structure
2149 * @oob_required: must write chip->oob_poi to OOB
2152 * Not for syndrome calculating ECC controllers, which use a special oob layout.
2169 * @oob_required: must write chip->oob_poi to OOB
2172 * We need a special oob layout and handling even when ECC isn't checked.
2181 uint8_t *oob = chip->oob_poi; in nand_write_page_raw_syndrome() local
2189 chip->write_buf(mtd, oob, chip->ecc.prepad); in nand_write_page_raw_syndrome()
2190 oob += chip->ecc.prepad; in nand_write_page_raw_syndrome()
2193 chip->write_buf(mtd, oob, eccbytes); in nand_write_page_raw_syndrome()
2194 oob += eccbytes; in nand_write_page_raw_syndrome()
2197 chip->write_buf(mtd, oob, chip->ecc.postpad); in nand_write_page_raw_syndrome()
2198 oob += chip->ecc.postpad; in nand_write_page_raw_syndrome()
2202 size = mtd->oobsize - (oob - chip->oob_poi); in nand_write_page_raw_syndrome()
2204 chip->write_buf(mtd, oob, size); in nand_write_page_raw_syndrome()
2213 * @oob_required: must write chip->oob_poi to OOB
2242 * @oob_required: must write chip->oob_poi to OOB
2278 * @oob_required: must write chip->oob_poi to OOB
2310 /* mask OOB of un-touched subpages by padding 0xFF */ in nand_write_subpage_hwecc()
2311 /* if oob_required, preserve OOB metadata of written subpage */ in nand_write_subpage_hwecc()
2320 /* copy calculated ECC for whole page to chip->buffer->oob */ in nand_write_subpage_hwecc()
2326 /* write OOB buffer to NAND device */ in nand_write_subpage_hwecc()
2338 * @oob_required: must write chip->oob_poi to OOB
2342 * need a special oob layout and handling.
2353 uint8_t *oob = chip->oob_poi; in nand_write_page_syndrome() local
2361 chip->write_buf(mtd, oob, chip->ecc.prepad); in nand_write_page_syndrome()
2362 oob += chip->ecc.prepad; in nand_write_page_syndrome()
2365 chip->ecc.calculate(mtd, p, oob); in nand_write_page_syndrome()
2366 chip->write_buf(mtd, oob, eccbytes); in nand_write_page_syndrome()
2367 oob += eccbytes; in nand_write_page_syndrome()
2370 chip->write_buf(mtd, oob, chip->ecc.postpad); in nand_write_page_syndrome()
2371 oob += chip->ecc.postpad; in nand_write_page_syndrome()
2375 /* Calculate remaining oob bytes */ in nand_write_page_syndrome()
2376 i = mtd->oobsize - (oob - chip->oob_poi); in nand_write_page_syndrome()
2378 chip->write_buf(mtd, oob, i); in nand_write_page_syndrome()
2390 * @oob_required: must write chip->oob_poi to OOB
2434 * nand_fill_oob - [INTERN] Transfer client buffer to oob
2436 * @oob: oob data buffer
2437 * @len: oob data write length
2438 * @ops: oob ops structure
2440 static uint8_t *nand_fill_oob(struct mtd_info *mtd, uint8_t *oob, size_t len, in nand_fill_oob() argument
2446 * Initialise to all 0xFF, to avoid the possibility of left over OOB in nand_fill_oob()
2447 * data from a previous OOB read. in nand_fill_oob()
2455 memcpy(chip->oob_poi + ops->ooboffs, oob, len); in nand_fill_oob()
2456 return oob + len; in nand_fill_oob()
2478 memcpy(chip->oob_poi + boffs, oob, bytes); in nand_fill_oob()
2479 oob += bytes; in nand_fill_oob()
2481 return oob; in nand_fill_oob()
2495 * @ops: oob operations description structure
2509 uint8_t *oob = ops->oobbuf; in nand_do_write_ops() local
2512 int oob_required = oob ? 1 : 0; in nand_do_write_ops()
2544 /* Don't allow multipage oob writes with offset */ in nand_do_write_ops()
2545 if (oob && ops->ooboffs && (ops->ooboffs + ops->ooblen > oobmaxlen)) { in nand_do_write_ops()
2577 if (unlikely(oob)) { in nand_do_write_ops()
2579 oob = nand_fill_oob(mtd, oob, len, ops); in nand_do_write_ops()
2582 /* We still need to erase leftover OOB data */ in nand_do_write_ops()
2609 if (unlikely(oob)) in nand_do_write_ops()
2656 * @ops: oob operation description structure
2679 pr_debug("%s: attempt to start write outside oob\n", in nand_do_write_oob()
2740 * @ops: oob operation description structure
3585 * Toshiba 24nm raw SLC (i.e., not BENAND) have 32B OOB per in nand_decode_ext_id()
3873 pr_info("%d MiB, %s, erase size: %d KiB, page size: %d, OOB size: %d\n", in nand_get_flash_type()
4034 * @oobavail: OOB size that the ECC engine can use
4037 * by the controller and the calculated ECC bytes fit within the chip's OOB.
4074 pr_err("ECC (step, strength) = (%d, %d) does not fit in OOB", in nand_check_ecc_caps()
4096 * @oobavail: OOB size that the ECC engine can use
4099 * number of ECC bytes (i.e. with the largest number of OOB-free bytes).
4181 * @oobavail: OOB size that the ECC engine can use
4184 * within the chip's OOB. On success, the chosen ECC settings are set.
4319 /* New bad blocks should be marked in OOB, flash-based BBT, or both */ in nand_scan_tail()
4336 /* Set the internal oob buffer location, just after the page data */ in nand_scan_tail()
4359 pr_warn("No oob scheme defined for oobsize %d\n", in nand_scan_tail()
4503 /* For many systems, the standard OOB write also works for raw */ in nand_scan_tail()