Lines Matching full:oob
56 /* Define default oob placement schemes for large and small page devices */
508 * specify how to write bad block markers to OOB (chip->block_markbad).
512 * (1) erase the affected block, to allow OOB marker to be written cleanly
513 * (2) write bad block marker to OOB area of affected block (unless flag
528 /* Attempt erase before marking OOB */ in nand_block_markbad_lowlevel()
534 /* Write bad block marker to OOB */ in nand_block_markbad_lowlevel()
776 /* OOB area */ in nand_command()
1411 * On small page NANDs, there's a dedicated command to access the OOB in nand_fill_column_cycles()
1412 * area, and the column address is relative to the start of the OOB in nand_fill_column_cycles()
1678 * nand_read_oob_op - Do a READ OOB operation
1681 * @offset_in_oob: offset within the OOB area
1685 * This function issues a READ OOB operation.
2899 * @extraoob: extra OOB buffer
2900 * @extraooblen: extra OOB length
2903 * Check if a data buffer and its associated ECC and OOB data contains only
2922 * 3/ The extraoob argument is optional, and should be used if some of your OOB
2925 * extra OOB data to an ECC chunk.
2974 * @oob_required: caller requires OOB data read to chip->oob_poi
2991 * @oob_required: caller requires OOB data read to chip->oob_poi
2994 * Not for syndrome calculating ECC controllers, which use a special oob layout.
3021 * @oob_required: caller requires OOB data read to chip->oob_poi
3024 * We need a special oob layout and handling even when OOB isn't used.
3032 uint8_t *oob = chip->oob_poi; in nand_read_page_raw_syndrome() local
3047 ret = nand_read_data_op(chip, oob, chip->ecc.prepad, in nand_read_page_raw_syndrome()
3052 oob += chip->ecc.prepad; in nand_read_page_raw_syndrome()
3055 ret = nand_read_data_op(chip, oob, eccbytes, false); in nand_read_page_raw_syndrome()
3059 oob += eccbytes; in nand_read_page_raw_syndrome()
3062 ret = nand_read_data_op(chip, oob, chip->ecc.postpad, in nand_read_page_raw_syndrome()
3067 oob += chip->ecc.postpad; in nand_read_page_raw_syndrome()
3071 size = mtd->oobsize - (oob - chip->oob_poi); in nand_read_page_raw_syndrome()
3073 ret = nand_read_data_op(chip, oob, size, false); in nand_read_page_raw_syndrome()
3086 * @oob_required: caller requires OOB data read to chip->oob_poi
3244 * @oob_required: caller requires OOB data read to chip->oob_poi
3247 * Not for syndrome calculating ECC controllers which need a special oob layout.
3310 * nand_read_page_hwecc_oob_first - [REPLACEABLE] hw ecc, read oob first
3314 * @oob_required: caller requires OOB data read to chip->oob_poi
3317 * Hardware ECC for large page chips, require OOB to be read first. For this
3319 * read/write ECC from the OOB area, unlike the ECC_HW_SYNDROME support with
3334 /* Read the OOB area first */ in nand_read_page_hwecc_oob_first()
3384 * @oob_required: caller requires OOB data read to chip->oob_poi
3388 * need a special oob layout and handling.
3398 uint8_t *oob = chip->oob_poi; in nand_read_page_syndrome() local
3415 ret = nand_read_data_op(chip, oob, chip->ecc.prepad, in nand_read_page_syndrome()
3420 oob += chip->ecc.prepad; in nand_read_page_syndrome()
3425 ret = nand_read_data_op(chip, oob, eccbytes, false); in nand_read_page_syndrome()
3429 stat = chip->ecc.correct(mtd, p, oob, NULL); in nand_read_page_syndrome()
3431 oob += eccbytes; in nand_read_page_syndrome()
3434 ret = nand_read_data_op(chip, oob, chip->ecc.postpad, in nand_read_page_syndrome()
3439 oob += chip->ecc.postpad; in nand_read_page_syndrome()
3446 oob - eccpadbytes, in nand_read_page_syndrome()
3460 /* Calculate remaining oob bytes */ in nand_read_page_syndrome()
3461 i = mtd->oobsize - (oob - chip->oob_poi); in nand_read_page_syndrome()
3463 ret = nand_read_data_op(chip, oob, i, false); in nand_read_page_syndrome()
3472 * nand_transfer_oob - [INTERN] Transfer oob to client buffer
3474 * @oob: oob destination address
3475 * @ops: oob ops structure
3476 * @len: size of oob to transfer
3478 static uint8_t *nand_transfer_oob(struct mtd_info *mtd, uint8_t *oob, in nand_transfer_oob() argument
3488 memcpy(oob, chip->oob_poi + ops->ooboffs, len); in nand_transfer_oob()
3489 return oob + len; in nand_transfer_oob()
3492 ret = mtd_ooblayout_get_databytes(mtd, oob, chip->oob_poi, in nand_transfer_oob()
3495 return oob + len; in nand_transfer_oob()
3531 * @ops: oob ops structure
3545 uint8_t *bufpoi, *oob, *buf; in nand_do_read_ops() local
3560 oob = ops->oobbuf; in nand_do_read_ops()
3561 oob_required = oob ? 1 : 0; in nand_do_read_ops()
3579 if (realpage != chip->pagebuf || oob) { in nand_do_read_ops()
3596 !oob) in nand_do_read_ops()
3612 if (!NAND_HAS_SUBPAGE_READ(chip) && !oob && in nand_do_read_ops()
3624 if (unlikely(oob)) { in nand_do_read_ops()
3628 oob = nand_transfer_oob(mtd, in nand_do_read_ops()
3629 oob, ops, toread); in nand_do_read_ops()
3697 if (oob) in nand_do_read_ops()
3710 * nand_read_oob_std - [REPLACEABLE] the most common OOB data read function
3722 * nand_read_oob_syndrome - [REPLACEABLE] OOB data read function for HW ECC
3778 * nand_write_oob_std - [REPLACEABLE] the most common OOB data write function
3791 * nand_write_oob_syndrome - [REPLACEABLE] OOB data write function for HW ECC
3806 * data-ecc-data-ecc ... ecc-oob in nand_write_oob_syndrome()
3808 * data-pad-ecc-pad-data-pad .... ecc-pad-oob in nand_write_oob_syndrome()
3869 * @ops: oob operations description structure
3953 * @ops: oob operation description structure
3985 * @oob_required: must write chip->oob_poi to OOB
4002 * @oob_required: must write chip->oob_poi to OOB
4005 * Not for syndrome calculating ECC controllers, which use a special oob layout.
4032 * @oob_required: must write chip->oob_poi to OOB
4035 * We need a special oob layout and handling even when ECC isn't checked.
4044 uint8_t *oob = chip->oob_poi; in nand_write_page_raw_syndrome() local
4059 ret = nand_write_data_op(chip, oob, chip->ecc.prepad, in nand_write_page_raw_syndrome()
4064 oob += chip->ecc.prepad; in nand_write_page_raw_syndrome()
4067 ret = nand_write_data_op(chip, oob, eccbytes, false); in nand_write_page_raw_syndrome()
4071 oob += eccbytes; in nand_write_page_raw_syndrome()
4074 ret = nand_write_data_op(chip, oob, chip->ecc.postpad, in nand_write_page_raw_syndrome()
4079 oob += chip->ecc.postpad; in nand_write_page_raw_syndrome()
4083 size = mtd->oobsize - (oob - chip->oob_poi); in nand_write_page_raw_syndrome()
4085 ret = nand_write_data_op(chip, oob, size, false); in nand_write_page_raw_syndrome()
4097 * @oob_required: must write chip->oob_poi to OOB
4127 * @oob_required: must write chip->oob_poi to OOB
4174 * @oob_required: must write chip->oob_poi to OOB
4211 /* mask OOB of un-touched subpages by padding 0xFF */ in nand_write_subpage_hwecc()
4212 /* if oob_required, preserve OOB metadata of written subpage */ in nand_write_subpage_hwecc()
4221 /* copy calculated ECC for whole page to chip->buffer->oob */ in nand_write_subpage_hwecc()
4229 /* write OOB buffer to NAND device */ in nand_write_subpage_hwecc()
4243 * @oob_required: must write chip->oob_poi to OOB
4247 * need a special oob layout and handling.
4258 uint8_t *oob = chip->oob_poi; in nand_write_page_syndrome() local
4273 ret = nand_write_data_op(chip, oob, chip->ecc.prepad, in nand_write_page_syndrome()
4278 oob += chip->ecc.prepad; in nand_write_page_syndrome()
4281 chip->ecc.calculate(mtd, p, oob); in nand_write_page_syndrome()
4283 ret = nand_write_data_op(chip, oob, eccbytes, false); in nand_write_page_syndrome()
4287 oob += eccbytes; in nand_write_page_syndrome()
4290 ret = nand_write_data_op(chip, oob, chip->ecc.postpad, in nand_write_page_syndrome()
4295 oob += chip->ecc.postpad; in nand_write_page_syndrome()
4299 /* Calculate remaining oob bytes */ in nand_write_page_syndrome()
4300 i = mtd->oobsize - (oob - chip->oob_poi); in nand_write_page_syndrome()
4302 ret = nand_write_data_op(chip, oob, i, false); in nand_write_page_syndrome()
4317 * @oob_required: must write chip->oob_poi to OOB
4350 * nand_fill_oob - [INTERN] Transfer client buffer to oob
4352 * @oob: oob data buffer
4353 * @len: oob data write length
4354 * @ops: oob ops structure
4356 static uint8_t *nand_fill_oob(struct mtd_info *mtd, uint8_t *oob, size_t len, in nand_fill_oob() argument
4363 * Initialise to all 0xFF, to avoid the possibility of left over OOB in nand_fill_oob()
4364 * data from a previous OOB read. in nand_fill_oob()
4372 memcpy(chip->oob_poi + ops->ooboffs, oob, len); in nand_fill_oob()
4373 return oob + len; in nand_fill_oob()
4376 ret = mtd_ooblayout_set_databytes(mtd, oob, chip->oob_poi, in nand_fill_oob()
4379 return oob + len; in nand_fill_oob()
4393 * @ops: oob operations description structure
4407 uint8_t *oob = ops->oobbuf; in nand_do_write_ops() local
4410 int oob_required = oob ? 1 : 0; in nand_do_write_ops()
4442 /* Don't allow multipage oob writes with offset */ in nand_do_write_ops()
4443 if (oob && ops->ooboffs && (ops->ooboffs + ops->ooblen > oobmaxlen)) { in nand_do_write_ops()
4475 if (unlikely(oob)) { in nand_do_write_ops()
4477 oob = nand_fill_oob(mtd, oob, len, ops); in nand_do_write_ops()
4480 /* We still need to erase leftover OOB data */ in nand_do_write_ops()
4508 if (unlikely(oob)) in nand_do_write_ops()
4558 * @ops: oob operation description structure
4626 * @ops: oob operation description structure
5796 pr_info("%d MiB, %s, erase size: %d KiB, page size: %d, OOB size: %d\n", in nand_detect()
6106 WARN(1, "OOB layout is required when using software BCH on small pages\n"); in nand_set_ecc_soft_ops()
6150 * @oobavail: OOB size that the ECC engine can use
6153 * by the controller and the calculated ECC bytes fit within the chip's OOB.
6183 pr_err("ECC (step, strength) = (%d, %d) does not fit in OOB", in nand_check_ecc_caps()
6204 * @oobavail: OOB size that the ECC engine can use
6207 * number of ECC bytes (i.e. with the largest number of OOB-free bytes).
6286 * @oobavail: OOB size that the ECC engine can use
6289 * within the chip's OOB. On success, the chosen ECC settings are set.
6356 * @oobavail: OOB size that the ECC engine can use
6364 * to the chip's requirement. If available OOB size can't fit the chip
6438 /* New bad blocks should be marked in OOB, flash-based BBT, or both */ in nand_scan_tail()
6460 /* Set the internal oob buffer location, just after the page data */ in nand_scan_tail()
6479 * Expose the whole OOB area to users if ECC_NONE in nand_scan_tail()
6491 WARN(1, "No oob scheme defined for oobsize %d\n", in nand_scan_tail()
6618 /* For many systems, the standard OOB write also works for raw */ in nand_scan_tail()