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()
621 /* OOB area */ in nand_command()
1176 * nand_read_oob_op - Do a READ OOB operation
1179 * @offset_in_oob: offset within the OOB area
1183 * This function issues a READ OOB operation.
1683 * @extraoob: extra OOB buffer
1684 * @extraooblen: extra OOB length
1687 * Check if a data buffer and its associated ECC and OOB data contains only
1706 * 3/ The extraoob argument is optional, and should be used if some of your OOB
1709 * extra OOB data to an ECC chunk.
1758 * @oob_required: caller requires OOB data read to chip->oob_poi
1761 * Not for syndrome calculating ECC controllers, which use a special oob layout.
1787 * @oob_required: caller requires OOB data read to chip->oob_poi
1790 * We need a special oob layout and handling even when OOB isn't used.
1798 uint8_t *oob = chip->oob_poi; in nand_read_page_raw_syndrome() local
1809 ret = nand_read_data_op(chip, oob, chip->ecc.prepad, in nand_read_page_raw_syndrome()
1814 oob += chip->ecc.prepad; in nand_read_page_raw_syndrome()
1817 ret = nand_read_data_op(chip, oob, eccbytes, false); in nand_read_page_raw_syndrome()
1821 oob += eccbytes; in nand_read_page_raw_syndrome()
1824 ret = nand_read_data_op(chip, oob, chip->ecc.postpad, in nand_read_page_raw_syndrome()
1829 oob += chip->ecc.postpad; in nand_read_page_raw_syndrome()
1833 size = mtd->oobsize - (oob - chip->oob_poi); in nand_read_page_raw_syndrome()
1835 ret = nand_read_data_op(chip, oob, size, false); in nand_read_page_raw_syndrome()
1848 * @oob_required: caller requires OOB data read to chip->oob_poi
2005 * @oob_required: caller requires OOB data read to chip->oob_poi
2008 * Not for syndrome calculating ECC controllers which need a special oob layout.
2067 * nand_read_page_hwecc_oob_first - [REPLACEABLE] hw ecc, read oob first
2071 * @oob_required: caller requires OOB data read to chip->oob_poi
2074 * Hardware ECC for large page chips, require OOB to be read first. For this
2076 * read/write ECC from the OOB area, unlike the ECC_HW_SYNDROME support with
2093 /* Read the OOB area first */ in nand_read_page_hwecc_oob_first()
2141 * @oob_required: caller requires OOB data read to chip->oob_poi
2145 * need a special oob layout and handling.
2155 uint8_t *oob = chip->oob_poi; in nand_read_page_syndrome() local
2168 ret = nand_read_data_op(chip, oob, chip->ecc.prepad, in nand_read_page_syndrome()
2173 oob += chip->ecc.prepad; in nand_read_page_syndrome()
2178 ret = nand_read_data_op(chip, oob, eccbytes, false); in nand_read_page_syndrome()
2182 stat = chip->ecc.correct(mtd, p, oob, NULL); in nand_read_page_syndrome()
2184 oob += eccbytes; in nand_read_page_syndrome()
2187 ret = nand_read_data_op(chip, oob, chip->ecc.postpad, in nand_read_page_syndrome()
2192 oob += chip->ecc.postpad; in nand_read_page_syndrome()
2199 oob - eccpadbytes, in nand_read_page_syndrome()
2213 /* Calculate remaining oob bytes */ in nand_read_page_syndrome()
2214 i = mtd->oobsize - (oob - chip->oob_poi); in nand_read_page_syndrome()
2216 ret = nand_read_data_op(chip, oob, i, false); in nand_read_page_syndrome()
2225 * nand_transfer_oob - [INTERN] Transfer oob to client buffer
2227 * @oob: oob destination address
2228 * @ops: oob ops structure
2229 * @len: size of oob to transfer
2231 static uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob, in nand_transfer_oob() argument
2238 memcpy(oob, chip->oob_poi + ops->ooboffs, len); in nand_transfer_oob()
2239 return oob + len; in nand_transfer_oob()
2261 memcpy(oob, chip->oob_poi + boffs, bytes); in nand_transfer_oob()
2262 oob += bytes; in nand_transfer_oob()
2264 return oob; in nand_transfer_oob()
2300 * @ops: oob ops structure
2314 uint8_t *bufpoi, *oob, *buf; in nand_do_read_ops() local
2329 oob = ops->oobbuf; in nand_do_read_ops()
2330 oob_required = oob ? 1 : 0; in nand_do_read_ops()
2348 if (realpage != chip->pagebuf || oob) { in nand_do_read_ops()
2371 !oob) in nand_do_read_ops()
2389 if (!NAND_HAS_SUBPAGE_READ(chip) && !oob && in nand_do_read_ops()
2401 if (unlikely(oob)) { in nand_do_read_ops()
2405 oob = nand_transfer_oob(chip, in nand_do_read_ops()
2406 oob, ops, toread); in nand_do_read_ops()
2473 if (oob) in nand_do_read_ops()
2486 * nand_read_oob_std - [REPLACEABLE] the most common OOB data read function
2498 * nand_read_oob_syndrome - [REPLACEABLE] OOB data read function for HW ECC
2553 * nand_write_oob_std - [REPLACEABLE] the most common OOB data write function
2566 * nand_write_oob_syndrome - [REPLACEABLE] OOB data write function for HW ECC
2581 * data-ecc-data-ecc ... ecc-oob in nand_write_oob_syndrome()
2583 * data-pad-ecc-pad-data-pad .... ecc-pad-oob in nand_write_oob_syndrome()
2643 * @ops: oob operations description structure
2666 pr_debug("%s: attempt to start read outside oob\n", in nand_do_read_oob()
2741 * @ops: oob operation description structure
2787 * @oob_required: must write chip->oob_poi to OOB
2790 * Not for syndrome calculating ECC controllers, which use a special oob layout.
2816 * @oob_required: must write chip->oob_poi to OOB
2819 * We need a special oob layout and handling even when ECC isn't checked.
2828 uint8_t *oob = chip->oob_poi; in nand_write_page_raw_syndrome() local
2839 ret = nand_write_data_op(chip, oob, chip->ecc.prepad, in nand_write_page_raw_syndrome()
2844 oob += chip->ecc.prepad; in nand_write_page_raw_syndrome()
2847 ret = nand_write_data_op(chip, oob, eccbytes, false); in nand_write_page_raw_syndrome()
2851 oob += eccbytes; in nand_write_page_raw_syndrome()
2854 ret = nand_write_data_op(chip, oob, chip->ecc.postpad, in nand_write_page_raw_syndrome()
2859 oob += chip->ecc.postpad; in nand_write_page_raw_syndrome()
2863 size = mtd->oobsize - (oob - chip->oob_poi); in nand_write_page_raw_syndrome()
2865 ret = nand_write_data_op(chip, oob, size, false); in nand_write_page_raw_syndrome()
2877 * @oob_required: must write chip->oob_poi to OOB
2906 * @oob_required: must write chip->oob_poi to OOB
2949 * @oob_required: must write chip->oob_poi to OOB
2984 /* mask OOB of un-touched subpages by padding 0xFF */ in nand_write_subpage_hwecc()
2985 /* if oob_required, preserve OOB metadata of written subpage */ in nand_write_subpage_hwecc()
2994 /* copy calculated ECC for whole page to chip->buffer->oob */ in nand_write_subpage_hwecc()
3000 /* write OOB buffer to NAND device */ in nand_write_subpage_hwecc()
3014 * @oob_required: must write chip->oob_poi to OOB
3018 * need a special oob layout and handling.
3029 uint8_t *oob = chip->oob_poi; in nand_write_page_syndrome() local
3040 ret = nand_write_data_op(chip, oob, chip->ecc.prepad, in nand_write_page_syndrome()
3045 oob += chip->ecc.prepad; in nand_write_page_syndrome()
3048 chip->ecc.calculate(mtd, p, oob); in nand_write_page_syndrome()
3050 ret = nand_write_data_op(chip, oob, eccbytes, false); in nand_write_page_syndrome()
3054 oob += eccbytes; in nand_write_page_syndrome()
3057 ret = nand_write_data_op(chip, oob, chip->ecc.postpad, in nand_write_page_syndrome()
3062 oob += chip->ecc.postpad; in nand_write_page_syndrome()
3066 /* Calculate remaining oob bytes */ in nand_write_page_syndrome()
3067 i = mtd->oobsize - (oob - chip->oob_poi); in nand_write_page_syndrome()
3069 ret = nand_write_data_op(chip, oob, i, false); in nand_write_page_syndrome()
3084 * @oob_required: must write chip->oob_poi to OOB
3126 * nand_fill_oob - [INTERN] Transfer client buffer to oob
3128 * @oob: oob data buffer
3129 * @len: oob data write length
3130 * @ops: oob ops structure
3132 static uint8_t *nand_fill_oob(struct mtd_info *mtd, uint8_t *oob, size_t len, in nand_fill_oob() argument
3138 * Initialise to all 0xFF, to avoid the possibility of left over OOB in nand_fill_oob()
3139 * data from a previous OOB read. in nand_fill_oob()
3147 memcpy(chip->oob_poi + ops->ooboffs, oob, len); in nand_fill_oob()
3148 return oob + len; in nand_fill_oob()
3170 memcpy(chip->oob_poi + boffs, oob, bytes); in nand_fill_oob()
3171 oob += bytes; in nand_fill_oob()
3173 return oob; in nand_fill_oob()
3187 * @ops: oob operations description structure
3201 uint8_t *oob = ops->oobbuf; in nand_do_write_ops() local
3204 int oob_required = oob ? 1 : 0; in nand_do_write_ops()
3236 /* Don't allow multipage oob writes with offset */ in nand_do_write_ops()
3237 if (oob && ops->ooboffs && (ops->ooboffs + ops->ooblen > oobmaxlen)) { in nand_do_write_ops()
3269 if (unlikely(oob)) { in nand_do_write_ops()
3271 oob = nand_fill_oob(mtd, oob, len, ops); in nand_do_write_ops()
3274 /* We still need to erase leftover OOB data */ in nand_do_write_ops()
3301 if (unlikely(oob)) in nand_do_write_ops()
3348 * @ops: oob operation description structure
3371 pr_debug("%s: attempt to start write outside oob\n", in nand_do_write_oob()
3432 * @ops: oob operation description structure
4273 * Toshiba 24nm raw SLC (i.e., not BENAND) have 32B OOB per in nand_decode_ext_id()
4564 pr_info("%d MiB, %s, erase size: %d KiB, page size: %d, OOB size: %d\n", in nand_get_flash_type()
4727 * @oobavail: OOB size that the ECC engine can use
4730 * by the controller and the calculated ECC bytes fit within the chip's OOB.
4767 pr_err("ECC (step, strength) = (%d, %d) does not fit in OOB", in nand_check_ecc_caps()
4789 * @oobavail: OOB size that the ECC engine can use
4792 * number of ECC bytes (i.e. with the largest number of OOB-free bytes).
4874 * @oobavail: OOB size that the ECC engine can use
4877 * within the chip's OOB. On success, the chosen ECC settings are set.
5012 /* New bad blocks should be marked in OOB, flash-based BBT, or both */ in nand_scan_tail()
5029 /* Set the internal oob buffer location, just after the page data */ in nand_scan_tail()
5052 pr_warn("No oob scheme defined for oobsize %d\n", in nand_scan_tail()
5196 /* For many systems, the standard OOB write also works for raw */ in nand_scan_tail()