Home
last modified time | relevance | path

Searched full:oob (Results 1 – 25 of 191) sorted by relevance

12345678

/Linux-v5.10/drivers/mtd/parsers/
Dsharpslpart.c35 /* oob structure */
69 /* verify that the OOB bytes 8 to 15 are free and available for the FTL */
115 * The logical block number assigned to a physical block is stored in the OOB
128 * ECC BB xyxy oob[8]==oob[10] && oob[9]==oob[11] -> byte0=8 byte1=9
129 * ECC BB xyxy oob[10]==oob[12] && oob[11]==oob[13] -> byte0=10 byte1=11
130 * ECC BB xy xy oob[12]==oob[8] && oob[13]==oob[9] -> byte0=12 byte1=13
132 static int sharpsl_nand_get_logical_num(u8 *oob) in sharpsl_nand_get_logical_num() argument
137 if (oob[NAND_NOOB_LOGADDR_00] == oob[NAND_NOOB_LOGADDR_10] && in sharpsl_nand_get_logical_num()
138 oob[NAND_NOOB_LOGADDR_01] == oob[NAND_NOOB_LOGADDR_11]) { in sharpsl_nand_get_logical_num()
141 } else if (oob[NAND_NOOB_LOGADDR_10] == oob[NAND_NOOB_LOGADDR_20] && in sharpsl_nand_get_logical_num()
[all …]
/Linux-v5.10/drivers/mtd/nand/raw/
Dsm_common.h9 /* Full oob structure as written on the flash */
24 /* oob area is also 16 bytes, but might be from two pages */
39 static inline int sm_sector_valid(struct sm_oob *oob) in sm_sector_valid() argument
41 return hweight16(oob->data_status) >= 5; in sm_sector_valid()
44 static inline int sm_block_valid(struct sm_oob *oob) in sm_block_valid() argument
46 return hweight16(oob->block_status) >= 7; in sm_block_valid()
49 static inline int sm_block_erased(struct sm_oob *oob) in sm_block_erased() argument
55 if (!memcmp(oob, erased_pattern, sizeof(*oob))) in sm_block_erased()
Dnand_base.c337 * nand_fill_oob - [INTERN] Transfer client buffer to oob
339 * @oob: oob data buffer
340 * @len: oob data write length
341 * @ops: oob ops structure
343 static uint8_t *nand_fill_oob(struct nand_chip *chip, uint8_t *oob, size_t len, in nand_fill_oob() argument
350 * Initialise to all 0xFF, to avoid the possibility of left over OOB in nand_fill_oob()
351 * data from a previous OOB read. in nand_fill_oob()
359 memcpy(chip->oob_poi + ops->ooboffs, oob, len); in nand_fill_oob()
360 return oob + len; in nand_fill_oob()
363 ret = mtd_ooblayout_set_databytes(mtd, oob, chip->oob_poi, in nand_fill_oob()
[all …]
Dsunxi_nand.c534 * the randomizer engine does internally before de/scrambling OOB data.
716 static void sunxi_nfc_hw_ecc_get_prot_oob_bytes(struct nand_chip *nand, u8 *oob, in sunxi_nfc_hw_ecc_get_prot_oob_bytes() argument
722 oob); in sunxi_nfc_hw_ecc_get_prot_oob_bytes()
726 sunxi_nfc_randomize_bbm(nand, page, oob); in sunxi_nfc_hw_ecc_get_prot_oob_bytes()
730 const u8 *oob, int step, in sunxi_nfc_hw_ecc_set_prot_oob_bytes() argument
738 memcpy(user_data, oob, sizeof(user_data)); in sunxi_nfc_hw_ecc_set_prot_oob_bytes()
740 oob = user_data; in sunxi_nfc_hw_ecc_set_prot_oob_bytes()
743 writel(sunxi_nfc_buf_to_user_data(oob), in sunxi_nfc_hw_ecc_set_prot_oob_bytes()
760 static int sunxi_nfc_hw_ecc_correct(struct nand_chip *nand, u8 *data, u8 *oob, in sunxi_nfc_hw_ecc_correct() argument
785 if (oob) in sunxi_nfc_hw_ecc_correct()
[all …]
Dtango_nand.c393 * oob = | BBM | M | ECC_0 | ... | ECC_N |
400 static void raw_read(struct nand_chip *chip, u8 *buf, u8 *oob) in raw_read() argument
403 u8 *oob_orig = oob; in raw_read()
410 if (oob) in raw_read()
411 oob += BBM_SIZE; in raw_read()
413 aux_read(chip, &oob, METADATA_SIZE, &pos); in raw_read()
417 aux_read(chip, &oob, ecc_size, &pos); in raw_read()
424 aux_read(chip, &oob, ecc_size, &pos); in raw_read()
427 static void raw_write(struct nand_chip *chip, const u8 *buf, const u8 *oob) in raw_write() argument
430 const u8 *oob_orig = oob; in raw_write()
[all …]
Dfsl_elbc_nand.c62 unsigned int oob; /* Non zero if operating on OOB data */ member
119 * ELBC may use HW ECC, so that OOB offsets, that NAND core uses for bbt,
121 * OOB {11, 5}, works for both SP and LP chips, with ECCM = 1 and ECCM = 0.
152 static void set_addr(struct mtd_info *mtd, int column, int page_addr, int oob) in set_addr() argument
171 (oob ? FPAR_LP_MS : 0) | column); in set_addr()
181 (oob ? FPAR_SP_MS : 0) | column); in set_addr()
188 /* for OOB data point to the second half of the buffer */ in set_addr()
189 if (oob) in set_addr()
276 static void fsl_elbc_do_read(struct nand_chip *chip, int oob) in fsl_elbc_do_read() argument
299 if (oob) in fsl_elbc_do_read()
[all …]
Dsm_common.c56 /* because the 256 byte devices have page depenent oob layout */
103 struct sm_oob oob; in sm_block_markbad() local
106 memset(&oob, -1, SM_OOB_SIZE); in sm_block_markbad()
107 oob.block_status = 0x0F; in sm_block_markbad()
114 ops.oobbuf = (void *)&oob; in sm_block_markbad()
Dcadence-nand-controller.c513 * part of oob area of NAND flash memory page.
1442 /* Set oob data to 0xFF. */ in cadence_nand_write_page()
1453 u8 *oob; in cadence_nand_write_page() local
1456 oob = chip->oob_poi; in cadence_nand_write_page()
1458 oob = cdns_ctrl->buf + mtd->writesize; in cadence_nand_write_page()
1462 page, (void *)buf, oob, in cadence_nand_write_page()
1475 /* Transfer the data to the oob area. */ in cadence_nand_write_page()
1556 const u8 *oob = chip->oob_poi; in cadence_nand_write_page_raw() local
1561 /* BBM at the beginning of the OOB area. */ in cadence_nand_write_page_raw()
1562 memcpy(tmp_buf + writesize, oob, oob_skip); in cadence_nand_write_page_raw()
[all …]
/Linux-v5.10/drivers/mtd/
Dsm_ftl.c127 /* ----------------------- oob helpers -------------------------------------- */
148 static int sm_read_lba(struct sm_oob *oob) in sm_read_lba() argument
157 if (!memcmp(oob, erased_pattern, SM_OOB_SIZE)) in sm_read_lba()
161 lba_test = *(uint16_t *)oob->lba_copy1 ^ *(uint16_t*)oob->lba_copy2; in sm_read_lba()
166 lba = sm_get_lba(oob->lba_copy1); in sm_read_lba()
169 lba = sm_get_lba(oob->lba_copy2); in sm_read_lba()
174 static void sm_write_lba(struct sm_oob *oob, uint16_t lba) in sm_write_lba() argument
186 oob->lba_copy1[0] = oob->lba_copy2[0] = tmp[0]; in sm_write_lba()
187 oob->lba_copy1[1] = oob->lba_copy2[1] = tmp[1]; in sm_write_lba()
217 static int sm_correct_sector(uint8_t *buffer, struct sm_oob *oob) in sm_correct_sector() argument
[all …]
Dnftlcore.c121 * Read oob data from flash
142 * Write oob data to flash
165 * Write data and oob to flash
168 size_t *retlen, uint8_t *buf, uint8_t *oob) in nftl_write() argument
177 ops.oobbuf = oob; in nftl_write()
241 struct nftl_oob oob; in NFTL_foldchain() local
268 (char *)&oob); in NFTL_foldchain()
270 foldmark = oob.u.c.FoldMark | oob.u.c.FoldMark1; in NFTL_foldchain()
281 status = oob.b.Status | oob.b.Status1; in NFTL_foldchain()
380 oob.u.c.FoldMark = oob.u.c.FoldMark1 = cpu_to_le16(FOLD_MARK_IN_PROGRESS); in NFTL_foldchain()
[all …]
Dinftlcore.c134 * Read oob data from flash
154 * Write oob data to flash
174 * Write data and oob to flash
177 size_t *retlen, uint8_t *buf, uint8_t *oob) in inftl_write() argument
185 ops.oobbuf = oob; in inftl_write()
244 struct inftl_oob oob; in INFTL_foldchain() local
274 (char *)&oob) < 0) in INFTL_foldchain()
277 status = oob.b.Status | oob.b.Status1; in INFTL_foldchain()
347 memset(&oob, 0xff, sizeof(struct inftl_oob)); in INFTL_foldchain()
348 oob.b.Status = oob.b.Status1 = SECTOR_USED; in INFTL_foldchain()
[all …]
Dmtdcore.c1460 * mtd_ooblayout_ecc - Get the OOB region definition of a specific ECC section
1466 * @oobecc: OOB region struct filled with the appropriate ECC position
1469 * This function returns ECC section information in the OOB area. If you want
1493 * mtd_ooblayout_free - Get the OOB region definition of a specific free
1500 * @oobfree: OOB region struct filled with the appropriate free position
1503 * This function returns free bytes position in the OOB area. If you want
1582 * @oobregion: OOB region information
1599 * mtd_ooblayout_get_bytes - Extract OOB bytes from the oob buffer
1601 * @buf: destination buffer to store OOB bytes
1602 * @oobbuf: OOB buffer
[all …]
/Linux-v5.10/include/linux/mtd/
Dbbm.h24 * @offs: offset of the pattern in the oob area of the page
25 * @veroffs: offset of the bbt version counter in the oob are of the page
38 * that the pattern and the version count are always located in the oob area
73 * unavailable, for example, if the NAND controller has a different data and OOB
84 * Use a flash based bad block table. By default, OOB identifier is saved in
85 * OOB area. This option is passed to the default bad block table function.
89 * Do not store flash based bad block table marker in the OOB area; store it
94 * Do not write new bad block markers to OOB; useful, e.g., when ECC covers
Dmtd.h44 * struct mtd_oob_ops - oob operation operands
51 * @ooblen: number of oob bytes to write/read
52 * @oobretlen: number of oob bytes written/read
53 * @ooboffs: offset of oob data in the oob area (only relevant when
55 * @datbuf: data buffer - if NULL only oob data are read/written
56 * @oobbuf: oob data buffer
58 * Note, some MTD drivers do not allow you to write more than one OOB area at
78 * struct mtd_oob_region - oob region definition
82 * This structure describes a region of the OOB area, and is used
84 * Each section is defined by an offset within the OOB area and a
[all …]
/Linux-v5.10/include/uapi/mtd/
Dmtd-abi.h52 * @MTD_OPS_PLACE_OOB: OOB data are placed at the given offset (default)
53 * @MTD_OPS_AUTO_OOB: OOB data are automatically placed at the free areas
73 * @ooblen: length of OOB buffer
75 * @usr_oob: user-provided OOB buffer
79 * This structure supports ioctl(MEMWRITE) operations, allowing data and/or OOB
80 * writes in various modes. To write to OOB-only, set @usr_data == NULL, and to
134 __u32 oobsize; /* Amount of OOB data per block (e.g. 16) */
174 /* Get info about OOB modes (e.g., RAW, PLACE, AUTO) - legacy interface */
196 /* Write data to OOB (64-bit version) */
198 /* Read data from OOB (64-bit version) */
[all …]
/Linux-v5.10/drivers/mtd/tests/
Dreadtest.c63 pr_err("error: read oob failed at " in read_eraseblock_by_page()
83 int pg, oob; in dump_eraseblock() local
98 pr_info("dumping oob from eraseblock %d\n", ebnum); in dump_eraseblock()
101 for (oob = 0; oob < n;) { in dump_eraseblock()
105 for (j = 0; j < 32 && oob < n; j++, oob++, i++) in dump_eraseblock()
149 "eraseblock %u, OOB size %u\n", in mtd_readtest_init()
Doobtest.c5 * Test OOB read and write on MTD device.
281 /* read entire block's OOB at one go */ in verify_eraseblock_in_one_go()
293 /* verify one page OOB at a time for bitflip per page limit check */ in verify_eraseblock_in_one_go()
374 "eraseblock %u, OOB size %u\n", in mtd_oobtest_init()
398 /* First test: write all OOB, read it back and verify */ in mtd_oobtest_init()
416 * Second test: write all OOB, a block at a time, read it back and in mtd_oobtest_init()
449 * Third test: write OOB at varying offsets and lengths, read it back in mtd_oobtest_init()
495 /* Attempt to write off end of OOB */ in mtd_oobtest_init()
504 pr_info("attempting to start write past end of OOB\n"); in mtd_oobtest_init()
511 pr_err("error: can write past end of OOB\n"); in mtd_oobtest_init()
[all …]
/Linux-v5.10/drivers/mtd/devices/
Ddocg3.c40 * - a 1 byte Hamming code stored in the OOB for each page
41 * - a 7 bytes BCH code stored in the OOB for each page
594 * reading OOB only or write status byte).
625 * It's in fact recv_ecc ^ calc_ecc, where recv_ecc was read from OOB
859 * @ops: the mtd oob structure
861 * Reads flash memory OOB area of pages.
888 doc_dbg("doc_read_oob(from=%lld, mode=%d, data=(%p:%zu), oob=(%p:%zu))\n", in doc_read_oob()
928 doc_dbg("OOB - INFO: %*phC\n", 7, oobbuf); in doc_read_oob()
929 doc_dbg("OOB - HAMMING: %02x\n", oobbuf[7]); in doc_read_oob()
930 doc_dbg("OOB - BCH_ECC: %*phC\n", 7, oobbuf + 8); in doc_read_oob()
[all …]
/Linux-v5.10/drivers/usb/serial/
Ddigi_acceleport.c60 * "OOB": can be used on the out-of-band endpoint
62 #define DIGI_CMD_SET_BAUD_RATE 0 /* INB, OOB */
63 #define DIGI_CMD_SET_WORD_SIZE 1 /* INB, OOB */
64 #define DIGI_CMD_SET_PARITY 2 /* INB, OOB */
65 #define DIGI_CMD_SET_STOP_BITS 3 /* INB, OOB */
66 #define DIGI_CMD_SET_INPUT_FLOW_CONTROL 4 /* INB, OOB */
67 #define DIGI_CMD_SET_OUTPUT_FLOW_CONTROL 5 /* INB, OOB */
68 #define DIGI_CMD_SET_DTR_SIGNAL 6 /* INB, OOB */
69 #define DIGI_CMD_SET_RTS_SIGNAL 7 /* INB, OOB */
70 #define DIGI_CMD_READ_INPUT_SIGNALS 8 /* OOB */
[all …]
/Linux-v5.10/Documentation/devicetree/bindings/mtd/
Ddavinci-nand.txt52 - nand-on-flash-bbt: use flash based bad block table support. OOB
53 identifier is saved in OOB area. If not present
66 - ti,davinci-nand-use-bbt: use flash based bad block table support. OOB
67 identifier is saved in OOB area. If not present
Dgpmc-nand.txt120 Other factor which governs the selection of ecc-scheme is oob-size.
121 Higher ECC schemes require more OOB/Spare area to store ECC syndrome,
122 so the device should have enough free bytes available its OOB/Spare
127 OOBSIZE number of bytes in OOB/spare area
146 which can be accommodated in the OOB/Spare area of this device
Dnand-controller.yaml82 - enum: [ oob, interleaved ]
85 but can be explicitly set to "oob", if all ECC bytes are
86 known to be stored in the OOB area, or "interleaved" if ECC
131 providing the best strength and taking the OOB area size
/Linux-v5.10/Documentation/devicetree/bindings/ata/
Dahci-ceva.txt8 - ceva,p0-cominit-params: OOB timing value for COMINIT parameter for port 0.
9 - ceva,p1-cominit-params: OOB timing value for COMINIT parameter for port 1.
16 - ceva,p0-comwake-params: OOB timing value for COMWAKE parameter for port 0.
17 - ceva,p1-comwake-params: OOB timing value for COMWAKE parameter for port 1.
/Linux-v5.10/drivers/scsi/isci/
Dphy.c160 /* Hold OOB state machine in reset */ in sci_phy_link_layer_initialization()
541 /* Release the spinup hold state and reset the OOB state machine */ in sci_phy_consume_power_handler()
550 /* Now restart the OOB operation */ in sci_phy_consume_power_handler()
703 /* Start the oob/sn state machine over again */ in sci_phy_event_handler()
736 * continue OOB/SN as if this were a SATA PHY */ in sci_phy_event_handler()
750 /* Start the oob/sn state machine over again */ in sci_phy_event_handler()
767 * SATA PHY event continue OOB/SN as if this were a in sci_phy_event_handler()
776 /* Start the oob/sn state machine over again */ in sci_phy_event_handler()
783 /* Start the oob/sn state machine over again */ in sci_phy_event_handler()
821 /* There has been a change in the phy type before OOB/SN for the in sci_phy_event_handler()
[all …]
/Linux-v5.10/drivers/mtd/nand/raw/brcmnand/
Dbrcmnand.c1307 "error: ECC too large for OOB (ECC bytes %d, spare sector %d)\n", in brcmstb_choose_ecc_layout()
1359 /* Helper functions for reading and writing OOB registers */
1398 * read_oob_from_regs - read data from OOB registers
1401 * @oob: buffer to read to
1402 * @sas: spare area sector size (i.e., OOB size per FLASH_CACHE)
1405 static int read_oob_from_regs(struct brcmnand_controller *ctrl, int i, u8 *oob, in read_oob_from_regs() argument
1411 /* Adjust OOB values for 1K sector size */ in read_oob_from_regs()
1417 oob[j] = oob_reg_read(ctrl, j); in read_oob_from_regs()
1422 * write_oob_to_regs - write data to OOB registers
1424 * @oob: buffer to write from
[all …]

12345678