Lines Matching refs:mtd
84 struct mtd_info mtd; member
114 static void rockchip_nand_select_chip(struct mtd_info *mtd, int chipnr) in rockchip_nand_select_chip() argument
116 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_select_chip()
141 static void rockchip_nand_cmd_ctrl(struct mtd_info *mtd, in rockchip_nand_cmd_ctrl() argument
145 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_cmd_ctrl()
162 static void rockchip_nand_read_buf(struct mtd_info *mtd, in rockchip_nand_read_buf() argument
166 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_read_buf()
176 static void rockchip_nand_write_buf(struct mtd_info *mtd, in rockchip_nand_write_buf() argument
180 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_write_buf()
190 static uint8_t rockchip_nand_read_byte(struct mtd_info *mtd) in rockchip_nand_read_byte() argument
194 rockchip_nand_read_buf(mtd, &ret, 1); in rockchip_nand_read_byte()
199 static int rockchip_nand_dev_ready(struct mtd_info *mtd) in rockchip_nand_dev_ready() argument
201 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_dev_ready()
210 static int rockchip_nand_hw_ecc_setup(struct mtd_info *mtd, in rockchip_nand_hw_ecc_setup() argument
214 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_hw_ecc_setup()
283 static void rockchip_nand_read_extra_oob(struct mtd_info *mtd, u8 *oob) in rockchip_nand_read_extra_oob() argument
285 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_read_extra_oob()
288 int len = mtd->oobsize - offset; in rockchip_nand_read_extra_oob()
293 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, offset + mtd->writesize, -1); in rockchip_nand_read_extra_oob()
295 rockchip_nand_read_buf(mtd, oob + offset, len); in rockchip_nand_read_extra_oob()
298 static void rockchip_nand_write_extra_oob(struct mtd_info *mtd, u8 *oob) in rockchip_nand_write_extra_oob() argument
300 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_write_extra_oob()
303 int len = mtd->oobsize - offset; in rockchip_nand_write_extra_oob()
308 chip->cmdfunc(mtd, NAND_CMD_RNDIN, offset + mtd->writesize, -1); in rockchip_nand_write_extra_oob()
310 rockchip_nand_write_buf(mtd, oob + offset, len); in rockchip_nand_write_extra_oob()
313 static int rockchip_nand_hw_syndrome_pio_read_page(struct mtd_info *mtd, in rockchip_nand_hw_syndrome_pio_read_page() argument
324 int offset = page * mtd->writesize; in rockchip_nand_hw_syndrome_pio_read_page()
326 if (rknand->bootromblocks && (offset < (7 * mtd->erasesize))) in rockchip_nand_hw_syndrome_pio_read_page()
327 rockchip_nand_hw_ecc_setup(mtd, ecc, NANDC_V6_BOOTROM_ECC); in rockchip_nand_hw_syndrome_pio_read_page()
344 mtd->ecc_stats.failed++; in rockchip_nand_hw_syndrome_pio_read_page()
348 mtd->ecc_stats.corrected += ret; in rockchip_nand_hw_syndrome_pio_read_page()
365 rockchip_nand_read_extra_oob(mtd, chip->oob_poi); in rockchip_nand_hw_syndrome_pio_read_page()
368 rockchip_nand_hw_ecc_setup(mtd, ecc, rknand->ecc_strength); in rockchip_nand_hw_syndrome_pio_read_page()
373 static uint32_t rockchip_nand_make_bootrom_compat(struct mtd_info *mtd, in rockchip_nand_make_bootrom_compat() argument
378 int pages_per_block = mtd->erasesize / mtd->writesize; in rockchip_nand_make_bootrom_compat()
379 int offset = page * mtd->writesize; in rockchip_nand_make_bootrom_compat()
381 if ((offset < (2 * mtd->erasesize)) || !(page % 2) || in rockchip_nand_make_bootrom_compat()
382 (offset >= (7 * mtd->erasesize)) || !bootromblocks) in rockchip_nand_make_bootrom_compat()
388 static int rockchip_nand_hw_syndrome_pio_write_page(struct mtd_info *mtd, in rockchip_nand_hw_syndrome_pio_write_page() argument
398 int offset = page * mtd->writesize; in rockchip_nand_hw_syndrome_pio_write_page()
404 if (rknand->bootromblocks && (offset < (7 * mtd->erasesize))) in rockchip_nand_hw_syndrome_pio_write_page()
405 rockchip_nand_hw_ecc_setup(mtd, ecc, NANDC_V6_BOOTROM_ECC); in rockchip_nand_hw_syndrome_pio_write_page()
407 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()
440 rockchip_nand_hw_ecc_setup(mtd, ecc, rknand->ecc_strength); in rockchip_nand_hw_syndrome_pio_write_page()
447 static int rockchip_nand_ecc_max_strength(struct mtd_info *mtd, in rockchip_nand_ecc_max_strength() argument
452 max_strength = ((mtd->oobsize / ecc->steps) - ecc->prepad) * 8 / 14; in rockchip_nand_ecc_max_strength()
478 static int rockchip_nand_hw_ecc_ctrl_init(struct mtd_info *mtd, in rockchip_nand_hw_ecc_ctrl_init() argument
481 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_hw_ecc_ctrl_init()
487 ecc->steps = mtd->writesize / ecc->size; in rockchip_nand_hw_ecc_ctrl_init()
498 strength = rockchip_nand_ecc_max_strength(mtd, ecc); in rockchip_nand_hw_ecc_ctrl_init()
500 rockchip_nand_hw_ecc_setup(mtd, ecc, strength); in rockchip_nand_hw_ecc_ctrl_init()
509 if (mtd->oobsize < ((ecc->bytes + ecc->prepad) * ecc->steps)) { in rockchip_nand_hw_ecc_ctrl_init()
516 static int rockchip_nand_ecc_init(struct mtd_info *mtd, in rockchip_nand_ecc_init() argument
524 ret = rockchip_nand_hw_ecc_ctrl_init(mtd, ecc); in rockchip_nand_ecc_init()
541 static int rockchip_nand_block_bad(struct mtd_info *mtd, loff_t ofs) in rockchip_nand_block_bad() argument
544 struct nand_chip *chip = mtd_to_nand(mtd); in rockchip_nand_block_bad()
549 chip->select_chip(mtd, chipnr); in rockchip_nand_block_bad()
550 chip->cmdfunc(mtd, NAND_CMD_READ0, 0x00, page); in rockchip_nand_block_bad()
551 if(rockchip_nand_hw_syndrome_pio_read_page(mtd, in rockchip_nand_block_bad()
554 chip->cmdfunc(mtd, NAND_CMD_READOOB, chip->badblockpos, page); in rockchip_nand_block_bad()
555 bad = chip->read_byte(mtd); in rockchip_nand_block_bad()
559 chip->cmdfunc(mtd, NAND_CMD_READOOB, chip->badblockpos, in rockchip_nand_block_bad()
561 bad = chip->read_byte(mtd); in rockchip_nand_block_bad()
565 page += ((mtd->erasesize - mtd->writesize) >> chip->page_shift); in rockchip_nand_block_bad()
566 chip->cmdfunc(mtd, NAND_CMD_READOOB, chip->badblockpos, page); in rockchip_nand_block_bad()
567 bad = chip->read_byte(mtd); in rockchip_nand_block_bad()
571 chip->select_chip(mtd, -1); in rockchip_nand_block_bad()
581 struct mtd_info *mtd; in rockchip_nand_chip_init() local
604 mtd = nand_to_mtd(chip); in rockchip_nand_chip_init()
605 mtd->dev = rknand->dev; in rockchip_nand_chip_init()
607 rknand->dev->priv = mtd; in rockchip_nand_chip_init()
609 ret = nand_scan_ident(mtd, 1, NULL); in rockchip_nand_chip_init()
613 ret = rockchip_nand_ecc_init(mtd, &chip->ecc); in rockchip_nand_chip_init()
619 ret = nand_scan_tail(mtd); in rockchip_nand_chip_init()
625 ret = nand_register(devnum, mtd); in rockchip_nand_chip_init()
630 memcpy(&rknand->mtd, mtd, sizeof(struct mtd_info)); in rockchip_nand_chip_init()
661 struct mtd_info *mtd = dev_get_uclass_priv(dev); in rockchip_nandc_probe() local
686 memcpy(mtd, &rknand->mtd, sizeof(struct mtd_info)); in rockchip_nandc_probe()
779 struct mtd_info *mtd; in nand_spl_load_image() local
782 mtd = get_nand_dev_by_index(0); in nand_spl_load_image()
783 return nand_read_skip_bad(mtd, offs, &length, NULL, size, (u_char *)dst); in nand_spl_load_image()