Lines Matching refs:nfc
153 struct ingenic_nfc *nfc = to_ingenic_nfc(nand->chip.controller); in ingenic_nand_ecc_calculate() local
167 return ingenic_ecc_calculate(nfc->ecc, ¶ms, dat, ecc_code); in ingenic_nand_ecc_calculate()
174 struct ingenic_nfc *nfc = to_ingenic_nfc(nand->chip.controller); in ingenic_nand_ecc_correct() local
181 return ingenic_ecc_correct(nfc->ecc, ¶ms, dat, read_ecc); in ingenic_nand_ecc_correct()
187 struct ingenic_nfc *nfc = to_ingenic_nfc(chip->controller); in ingenic_nand_attach_chip() local
200 if (!nfc->ecc) { in ingenic_nand_attach_chip()
201 dev_err(nfc->dev, "HW ECC selected, but ECC controller not found\n"); in ingenic_nand_attach_chip()
210 dev_info(nfc->dev, "using %s (strength %d, size %d, bytes %d)\n", in ingenic_nand_attach_chip()
211 (nfc->ecc) ? "hardware ECC" : "software ECC", in ingenic_nand_attach_chip()
215 dev_info(nfc->dev, "not using ECC\n"); in ingenic_nand_attach_chip()
218 dev_err(nfc->dev, "ECC mode %d not supported\n", in ingenic_nand_attach_chip()
231 dev_err(nfc->dev, in ingenic_nand_attach_chip()
244 if (nfc->soc_info->oob_first) in ingenic_nand_attach_chip()
250 else if (nfc->soc_info->oob_layout) in ingenic_nand_attach_chip()
251 mtd_set_ooblayout(mtd, nfc->soc_info->oob_layout); in ingenic_nand_attach_chip()
263 struct ingenic_nfc *nfc = to_ingenic_nfc(chip->controller); in ingenic_nand_exec_instr() local
269 cs->base + nfc->soc_info->cmd_offset); in ingenic_nand_exec_instr()
274 cs->base + nfc->soc_info->addr_offset); in ingenic_nand_exec_instr()
279 ioread8_rep(cs->base + nfc->soc_info->data_offset, in ingenic_nand_exec_instr()
283 ioread16_rep(cs->base + nfc->soc_info->data_offset, in ingenic_nand_exec_instr()
290 iowrite8_rep(cs->base + nfc->soc_info->data_offset, in ingenic_nand_exec_instr()
294 iowrite16_rep(cs->base + nfc->soc_info->data_offset, in ingenic_nand_exec_instr()
317 struct ingenic_nfc *nfc = to_ingenic_nfc(nand->chip.controller); in ingenic_nand_exec_op() local
325 cs = &nfc->cs[op->cs]; in ingenic_nand_exec_op()
326 jz4780_nemc_assert(nfc->dev, cs->bank, true); in ingenic_nand_exec_op()
335 jz4780_nemc_assert(nfc->dev, cs->bank, false); in ingenic_nand_exec_op()
346 struct ingenic_nfc *nfc, in ingenic_nand_init_chip() argument
358 cs = &nfc->cs[chipnr]; in ingenic_nand_init_chip()
366 jz4780_nemc_set_type(nfc->dev, cs->bank, JZ4780_NEMC_BANK_NAND); in ingenic_nand_init_chip()
414 chip->controller = &nfc->controller; in ingenic_nand_init_chip()
428 list_add_tail(&nand->chip_list, &nfc->chips); in ingenic_nand_init_chip()
433 static void ingenic_nand_cleanup_chips(struct ingenic_nfc *nfc) in ingenic_nand_cleanup_chips() argument
439 while (!list_empty(&nfc->chips)) { in ingenic_nand_cleanup_chips()
440 ingenic_chip = list_first_entry(&nfc->chips, in ingenic_nand_cleanup_chips()
450 static int ingenic_nand_init_chips(struct ingenic_nfc *nfc, in ingenic_nand_init_chips() argument
459 if (num_chips > nfc->num_banks) { in ingenic_nand_init_chips()
461 num_chips, nfc->num_banks); in ingenic_nand_init_chips()
466 ret = ingenic_nand_init_chip(pdev, nfc, np, i); in ingenic_nand_init_chips()
468 ingenic_nand_cleanup_chips(nfc); in ingenic_nand_init_chips()
483 struct ingenic_nfc *nfc; in ingenic_nand_probe() local
492 nfc = devm_kzalloc(dev, struct_size(nfc, cs, num_banks), GFP_KERNEL); in ingenic_nand_probe()
493 if (!nfc) in ingenic_nand_probe()
496 nfc->soc_info = device_get_match_data(dev); in ingenic_nand_probe()
497 if (!nfc->soc_info) in ingenic_nand_probe()
504 nfc->ecc = of_ingenic_ecc_get(dev->of_node); in ingenic_nand_probe()
505 if (IS_ERR(nfc->ecc)) in ingenic_nand_probe()
506 return PTR_ERR(nfc->ecc); in ingenic_nand_probe()
508 nfc->dev = dev; in ingenic_nand_probe()
509 nfc->num_banks = num_banks; in ingenic_nand_probe()
511 nand_controller_init(&nfc->controller); in ingenic_nand_probe()
512 INIT_LIST_HEAD(&nfc->chips); in ingenic_nand_probe()
514 ret = ingenic_nand_init_chips(nfc, pdev); in ingenic_nand_probe()
516 if (nfc->ecc) in ingenic_nand_probe()
517 ingenic_ecc_release(nfc->ecc); in ingenic_nand_probe()
521 platform_set_drvdata(pdev, nfc); in ingenic_nand_probe()
527 struct ingenic_nfc *nfc = platform_get_drvdata(pdev); in ingenic_nand_remove() local
529 if (nfc->ecc) in ingenic_nand_remove()
530 ingenic_ecc_release(nfc->ecc); in ingenic_nand_remove()
532 ingenic_nand_cleanup_chips(nfc); in ingenic_nand_remove()