Lines Matching refs:mtd

86 	struct mtd_info mtd;  member
120 static void rockchip_nand_select_chip(struct mtd_info *mtd, int chipnr) in rockchip_nand_select_chip() argument
122 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_select_chip()
147 static void rockchip_nand_cmd_ctrl(struct mtd_info *mtd, in rockchip_nand_cmd_ctrl() argument
151 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_cmd_ctrl()
168 static void rockchip_nand_read_buf(struct mtd_info *mtd, in rockchip_nand_read_buf() argument
172 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_read_buf()
182 static void rockchip_nand_write_buf(struct mtd_info *mtd, in rockchip_nand_write_buf() argument
186 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_write_buf()
196 static uint8_t rockchip_nand_read_byte(struct mtd_info *mtd) in rockchip_nand_read_byte() argument
200 rockchip_nand_read_buf(mtd, &ret, 1); in rockchip_nand_read_byte()
205 static int rockchip_nand_dev_ready(struct mtd_info *mtd) in rockchip_nand_dev_ready() argument
207 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_dev_ready()
216 static int rockchip_nand_hw_ecc_setup(struct mtd_info *mtd, in rockchip_nand_hw_ecc_setup() argument
220 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_hw_ecc_setup()
284 static void rockchip_nand_read_extra_oob(struct mtd_info *mtd, u8 *oob) in rockchip_nand_read_extra_oob() argument
286 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_read_extra_oob()
289 int len = mtd->oobsize - offset; in rockchip_nand_read_extra_oob()
294 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset + mtd->writesize, -1); in rockchip_nand_read_extra_oob()
296 rockchip_nand_read_buf(mtd, oob + offset, len); in rockchip_nand_read_extra_oob()
299 static void rockchip_nand_write_extra_oob(struct mtd_info *mtd, u8 *oob) in rockchip_nand_write_extra_oob() argument
301 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_write_extra_oob()
304 int len = mtd->oobsize - offset; in rockchip_nand_write_extra_oob()
309 chip->cmdfunc(mtd, NAND_CMD_RNDIN, offset + mtd->writesize, -1); in rockchip_nand_write_extra_oob()
311 rockchip_nand_write_buf(mtd, oob + offset, len); in rockchip_nand_write_extra_oob()
314 static int rockchip_nand_hw_syndrome_pio_read_page(struct mtd_info *mtd, in rockchip_nand_hw_syndrome_pio_read_page() argument
325 int offset = page * mtd->writesize; in rockchip_nand_hw_syndrome_pio_read_page()
327 if (rknand->bootromblocks && (offset < (4 * mtd->erasesize))) in rockchip_nand_hw_syndrome_pio_read_page()
328 rockchip_nand_hw_ecc_setup(mtd, ecc, NANDC_V9_BOOTROM_ECC); in rockchip_nand_hw_syndrome_pio_read_page()
345 mtd->ecc_stats.failed++; in rockchip_nand_hw_syndrome_pio_read_page()
349 mtd->ecc_stats.corrected += ret; in rockchip_nand_hw_syndrome_pio_read_page()
366 rockchip_nand_read_extra_oob(mtd, chip->oob_poi); in rockchip_nand_hw_syndrome_pio_read_page()
369 rockchip_nand_hw_ecc_setup(mtd, ecc, rknand->ecc_strength); in rockchip_nand_hw_syndrome_pio_read_page()
374 static uint32_t rockchip_nand_make_bootrom_compat(struct mtd_info *mtd, in rockchip_nand_make_bootrom_compat() argument
379 int pages_per_block = mtd->erasesize / mtd->writesize; in rockchip_nand_make_bootrom_compat()
380 int offset = page * mtd->writesize; in rockchip_nand_make_bootrom_compat()
382 if ((offset < (2 * mtd->erasesize)) || !(page % 2) || in rockchip_nand_make_bootrom_compat()
383 (offset >= (7 * mtd->erasesize)) || !bootromblocks) in rockchip_nand_make_bootrom_compat()
389 static int rockchip_nand_hw_syndrome_pio_write_page(struct mtd_info *mtd, in rockchip_nand_hw_syndrome_pio_write_page() argument
399 int offset = page * mtd->writesize; in rockchip_nand_hw_syndrome_pio_write_page()
405 if (rknand->bootromblocks && (offset < (7 * mtd->erasesize))) in rockchip_nand_hw_syndrome_pio_write_page()
406 rockchip_nand_hw_ecc_setup(mtd, ecc, NANDC_V9_BOOTROM_ECC); in rockchip_nand_hw_syndrome_pio_write_page()
408 index = rockchip_nand_make_bootrom_compat(mtd, page, oob, in rockchip_nand_hw_syndrome_pio_write_page()
438 rockchip_nand_write_extra_oob(mtd, chip->oob_poi); in rockchip_nand_hw_syndrome_pio_write_page()
441 rockchip_nand_hw_ecc_setup(mtd, ecc, rknand->ecc_strength); in rockchip_nand_hw_syndrome_pio_write_page()
448 static int rockchip_nand_ecc_max_strength(struct mtd_info *mtd, in rockchip_nand_ecc_max_strength() argument
453 max_strength = ((mtd->oobsize / ecc->steps) - ecc->prepad) * 8 / 14; in rockchip_nand_ecc_max_strength()
479 static int rockchip_nand_hw_ecc_ctrl_init(struct mtd_info *mtd, in rockchip_nand_hw_ecc_ctrl_init() argument
482 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_hw_ecc_ctrl_init()
488 ecc->steps = mtd->writesize / ecc->size; in rockchip_nand_hw_ecc_ctrl_init()
499 strength = rockchip_nand_ecc_max_strength(mtd, ecc); in rockchip_nand_hw_ecc_ctrl_init()
501 rockchip_nand_hw_ecc_setup(mtd, ecc, strength); in rockchip_nand_hw_ecc_ctrl_init()
510 if (mtd->oobsize < ((ecc->bytes + ecc->prepad) * ecc->steps)) { in rockchip_nand_hw_ecc_ctrl_init()
517 static int rockchip_nand_ecc_init(struct mtd_info *mtd, in rockchip_nand_ecc_init() argument
525 ret = rockchip_nand_hw_ecc_ctrl_init(mtd, ecc); in rockchip_nand_ecc_init()
542 static int rockchip_nand_block_bad(struct mtd_info *mtd, loff_t ofs) in rockchip_nand_block_bad() argument
545 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_block_bad()
550 chip->select_chip(mtd, chipnr); in rockchip_nand_block_bad()
551 chip->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page); in rockchip_nand_block_bad()
552 if(rockchip_nand_hw_syndrome_pio_read_page(mtd, in rockchip_nand_block_bad()
555 chip->cmdfunc(mtd, NAND_CMD_READOOB, chip->badblockpos, page); in rockchip_nand_block_bad()
556 bad = chip->read_byte(mtd); in rockchip_nand_block_bad()
560 chip->cmdfunc(mtd, NAND_CMD_READOOB, chip->badblockpos, in rockchip_nand_block_bad()
562 bad = chip->read_byte(mtd); in rockchip_nand_block_bad()
566 page += ((mtd->erasesize - mtd->writesize) >> chip->page_shift); in rockchip_nand_block_bad()
567 chip->cmdfunc(mtd, NAND_CMD_READOOB, chip->badblockpos, page); in rockchip_nand_block_bad()
568 bad = chip->read_byte(mtd); in rockchip_nand_block_bad()
572 chip->select_chip(mtd, -1); in rockchip_nand_block_bad()
582 struct mtd_info *mtd; in rockchip_nand_chip_init() local
605 mtd = nand_to_mtd(chip); in rockchip_nand_chip_init()
606 mtd->dev = rknand->dev; in rockchip_nand_chip_init()
608 rknand->dev->priv = mtd; in rockchip_nand_chip_init()
610 ret = nand_scan_ident(mtd, 1, NULL); in rockchip_nand_chip_init()
614 ret = rockchip_nand_ecc_init(mtd, &chip->ecc); in rockchip_nand_chip_init()
620 ret = nand_scan_tail(mtd); in rockchip_nand_chip_init()
626 ret = nand_register(devnum, mtd); in rockchip_nand_chip_init()
631 memcpy(&rknand->mtd, mtd, sizeof(struct mtd_info)); in rockchip_nand_chip_init()
662 struct mtd_info *mtd = dev_get_uclass_priv(dev); in rockchip_nandc_probe() local
687 memcpy(mtd, &rknand->mtd, sizeof(struct mtd_info)); in rockchip_nandc_probe()
780 struct mtd_info *mtd; in nand_spl_load_image() local
783 mtd = get_nand_dev_by_index(0); in nand_spl_load_image()
784 return nand_read_skip_bad(mtd, offs, &length, NULL, size, (u_char *)dst); in nand_spl_load_image()