Lines Matching refs:chip
148 struct nand_chip chip; member
154 static inline struct stm32_fmc2_nand *to_fmc2_nand(struct nand_chip *chip) in to_fmc2_nand() argument
156 return container_of(chip, struct stm32_fmc2_nand, chip); in to_fmc2_nand()
179 static void stm32_fmc2_timings_init(struct nand_chip *chip) in stm32_fmc2_timings_init() argument
181 struct stm32_fmc2_nfc *fmc2 = to_stm32_nfc(chip->controller); in stm32_fmc2_timings_init()
182 struct stm32_fmc2_nand *nand = to_fmc2_nand(chip); in stm32_fmc2_timings_init()
211 static void stm32_fmc2_setup(struct nand_chip *chip) in stm32_fmc2_setup() argument
213 struct stm32_fmc2_nfc *fmc2 = to_stm32_nfc(chip->controller); in stm32_fmc2_setup()
219 if (chip->ecc.strength == FMC2_ECC_BCH8) { in stm32_fmc2_setup()
222 } else if (chip->ecc.strength == FMC2_ECC_BCH4) { in stm32_fmc2_setup()
228 if (chip->options & NAND_BUSWIDTH_16) in stm32_fmc2_setup()
241 struct nand_chip *chip = mtd_to_nand(mtd); in stm32_fmc2_select_chip() local
242 struct stm32_fmc2_nfc *fmc2 = to_stm32_nfc(chip->controller); in stm32_fmc2_select_chip()
243 struct stm32_fmc2_nand *nand = to_fmc2_nand(chip); in stm32_fmc2_select_chip()
252 chip->IO_ADDR_R = fmc2->data_base[fmc2->cs_sel]; in stm32_fmc2_select_chip()
253 chip->IO_ADDR_W = fmc2->data_base[fmc2->cs_sel]; in stm32_fmc2_select_chip()
256 stm32_fmc2_setup(chip); in stm32_fmc2_select_chip()
259 stm32_fmc2_timings_init(chip); in stm32_fmc2_select_chip()
294 struct nand_chip *chip = mtd_to_nand(mtd); in stm32_fmc2_cmd_ctrl() local
295 struct stm32_fmc2_nfc *fmc2 = to_stm32_nfc(chip->controller); in stm32_fmc2_cmd_ctrl()
314 struct nand_chip *chip = mtd_to_nand(mtd); in stm32_fmc2_hwctl() local
315 struct stm32_fmc2_nfc *fmc2 = to_stm32_nfc(chip->controller); in stm32_fmc2_hwctl()
319 if (chip->ecc.strength != FMC2_ECC_HAM) { in stm32_fmc2_hwctl()
342 struct nand_chip *chip = mtd_to_nand(mtd); in stm32_fmc2_ham_calculate() local
343 struct stm32_fmc2_nfc *fmc2 = to_stm32_nfc(chip->controller); in stm32_fmc2_ham_calculate()
427 struct nand_chip *chip = mtd_to_nand(mtd); in stm32_fmc2_bch_calculate() local
428 struct stm32_fmc2_nfc *fmc2 = to_stm32_nfc(chip->controller); in stm32_fmc2_bch_calculate()
452 if (chip->ecc.strength == FMC2_ECC_BCH8) { in stm32_fmc2_bch_calculate()
475 struct nand_chip *chip = mtd_to_nand(mtd); in stm32_fmc2_bch_correct() local
476 struct stm32_fmc2_nfc *fmc2 = to_stm32_nfc(chip->controller); in stm32_fmc2_bch_correct()
479 int i, ret, den, eccsize = chip->ecc.size; in stm32_fmc2_bch_correct()
528 struct nand_chip *chip, u8 *buf, in stm32_fmc2_read_page() argument
531 int i, s, stat, eccsize = chip->ecc.size; in stm32_fmc2_read_page()
532 int eccbytes = chip->ecc.bytes; in stm32_fmc2_read_page()
533 int eccsteps = chip->ecc.steps; in stm32_fmc2_read_page()
534 int eccstrength = chip->ecc.strength; in stm32_fmc2_read_page()
536 u8 *ecc_calc = chip->buffers->ecccalc; in stm32_fmc2_read_page()
537 u8 *ecc_code = chip->buffers->ecccode; in stm32_fmc2_read_page()
542 chip->ecc.hwctl(mtd, NAND_ECC_READ); in stm32_fmc2_read_page()
545 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, s * eccsize, -1); in stm32_fmc2_read_page()
546 chip->read_buf(mtd, p, eccsize); in stm32_fmc2_read_page()
549 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, i, -1); in stm32_fmc2_read_page()
550 chip->read_buf(mtd, ecc_code, eccbytes); in stm32_fmc2_read_page()
553 stat = chip->ecc.correct(mtd, p, ecc_code, ecc_calc); in stm32_fmc2_read_page()
571 chip->cmdfunc(mtd, NAND_CMD_RNDOUT, mtd->writesize, -1); in stm32_fmc2_read_page()
572 chip->read_buf(mtd, chip->oob_poi, mtd->oobsize); in stm32_fmc2_read_page()
622 static void stm32_fmc2_calc_timings(struct nand_chip *chip, in stm32_fmc2_calc_timings() argument
625 struct stm32_fmc2_nfc *fmc2 = to_stm32_nfc(chip->controller); in stm32_fmc2_calc_timings()
626 struct stm32_fmc2_nand *nand = to_fmc2_nand(chip); in stm32_fmc2_calc_timings()
787 struct nand_chip *chip = mtd_to_nand(mtd); in stm32_fmc2_setup_interface() local
797 stm32_fmc2_calc_timings(chip, sdrt); in stm32_fmc2_setup_interface()
800 stm32_fmc2_timings_init(chip); in stm32_fmc2_setup_interface()
806 static void stm32_fmc2_nand_callbacks_setup(struct nand_chip *chip) in stm32_fmc2_nand_callbacks_setup() argument
808 chip->ecc.hwctl = stm32_fmc2_hwctl; in stm32_fmc2_nand_callbacks_setup()
814 if (chip->ecc.strength == FMC2_ECC_HAM) { in stm32_fmc2_nand_callbacks_setup()
816 chip->ecc.calculate = stm32_fmc2_ham_calculate; in stm32_fmc2_nand_callbacks_setup()
817 chip->ecc.correct = stm32_fmc2_ham_correct; in stm32_fmc2_nand_callbacks_setup()
818 chip->ecc.bytes = chip->options & NAND_BUSWIDTH_16 ? 4 : 3; in stm32_fmc2_nand_callbacks_setup()
819 chip->ecc.options |= NAND_ECC_GENERIC_ERASED_CHECK; in stm32_fmc2_nand_callbacks_setup()
824 chip->ecc.read_page = stm32_fmc2_read_page; in stm32_fmc2_nand_callbacks_setup()
825 chip->ecc.calculate = stm32_fmc2_bch_calculate; in stm32_fmc2_nand_callbacks_setup()
826 chip->ecc.correct = stm32_fmc2_bch_correct; in stm32_fmc2_nand_callbacks_setup()
828 if (chip->ecc.strength == FMC2_ECC_BCH8) in stm32_fmc2_nand_callbacks_setup()
829 chip->ecc.bytes = chip->options & NAND_BUSWIDTH_16 ? 14 : 13; in stm32_fmc2_nand_callbacks_setup()
831 chip->ecc.bytes = chip->options & NAND_BUSWIDTH_16 ? 8 : 7; in stm32_fmc2_nand_callbacks_setup()
893 nand->chip.flash_node = ofnode_to_offset(node); in stm32_fmc2_parse_child()
930 struct nand_chip *chip = &nand->chip; in stm32_fmc2_probe() local
931 struct mtd_info *mtd = &chip->mtd; in stm32_fmc2_probe()
1002 chip->controller = &fmc2->base; in stm32_fmc2_probe()
1003 chip->select_chip = stm32_fmc2_select_chip; in stm32_fmc2_probe()
1004 chip->setup_data_interface = stm32_fmc2_setup_interface; in stm32_fmc2_probe()
1005 chip->cmd_ctrl = stm32_fmc2_cmd_ctrl; in stm32_fmc2_probe()
1006 chip->chip_delay = FMC2_RB_DELAY_US; in stm32_fmc2_probe()
1007 chip->options |= NAND_BUSWIDTH_AUTO | NAND_NO_SUBPAGE_WRITE | in stm32_fmc2_probe()
1011 chip->ecc.mode = NAND_ECC_HW; in stm32_fmc2_probe()
1012 chip->ecc.size = FMC2_ECC_STEP_SIZE; in stm32_fmc2_probe()
1013 chip->ecc.strength = FMC2_ECC_BCH8; in stm32_fmc2_probe()
1027 if (chip->ecc.mode != NAND_ECC_HW) { in stm32_fmc2_probe()
1032 ret = nand_check_ecc_caps(chip, &stm32_fmc2_ecc_caps, in stm32_fmc2_probe()
1039 if (chip->bbt_options & NAND_BBT_USE_FLASH) in stm32_fmc2_probe()
1040 chip->bbt_options |= NAND_BBT_NO_OOB; in stm32_fmc2_probe()
1043 stm32_fmc2_nand_callbacks_setup(chip); in stm32_fmc2_probe()
1047 ecclayout->eccbytes = chip->ecc.bytes * in stm32_fmc2_probe()
1048 (mtd->writesize / chip->ecc.size); in stm32_fmc2_probe()
1054 chip->ecc.layout = ecclayout; in stm32_fmc2_probe()
1057 if (chip->options & NAND_BUSWIDTH_16) in stm32_fmc2_probe()