Lines Matching refs:fun
42 static int fun_chip_init(struct fsl_upm_nand *fun, in fun_chip_init() argument
46 struct mtd_info *mtd = nand_to_mtd(&fun->chip); in fun_chip_init()
50 fun->chip.ecc.engine_type = NAND_ECC_ENGINE_TYPE_SOFT; in fun_chip_init()
51 fun->chip.ecc.algo = NAND_ECC_ALGO_HAMMING; in fun_chip_init()
52 fun->chip.controller = &fun->base; in fun_chip_init()
53 mtd->dev.parent = fun->dev; in fun_chip_init()
59 nand_set_flash_node(&fun->chip, flash_np); in fun_chip_init()
60 mtd->name = devm_kasprintf(fun->dev, GFP_KERNEL, "0x%llx.%pOFn", in fun_chip_init()
68 ret = nand_scan(&fun->chip, fun->mchip_count); in fun_chip_init()
81 struct fsl_upm_nand *fun = to_fsl_upm_nand(nand_to_mtd(chip)); in func_exec_instr() local
82 u32 mar, reg_offs = fun->mchip_offsets[fun->mchip_number]; in func_exec_instr()
89 fsl_upm_start_pattern(&fun->upm, fun->upm_cmd_offset); in func_exec_instr()
90 mar = (instr->ctx.cmd.opcode << (32 - fun->upm.width)) | in func_exec_instr()
92 fsl_upm_run_pattern(&fun->upm, fun->io_base + reg_offs, mar); in func_exec_instr()
93 fsl_upm_end_pattern(&fun->upm); in func_exec_instr()
97 fsl_upm_start_pattern(&fun->upm, fun->upm_addr_offset); in func_exec_instr()
99 mar = (instr->ctx.addr.addrs[i] << (32 - fun->upm.width)) | in func_exec_instr()
101 fsl_upm_run_pattern(&fun->upm, fun->io_base + reg_offs, mar); in func_exec_instr()
103 fsl_upm_end_pattern(&fun->upm); in func_exec_instr()
109 in[i] = in_8(fun->io_base + reg_offs); in func_exec_instr()
115 out_8(fun->io_base + reg_offs, out[i]); in func_exec_instr()
119 if (!fun->rnb_gpio[fun->mchip_number]) in func_exec_instr()
122 return nand_gpio_waitrdy(chip, fun->rnb_gpio[fun->mchip_number], in func_exec_instr()
135 struct fsl_upm_nand *fun = to_fsl_upm_nand(nand_to_mtd(chip)); in fun_exec_op() local
145 fun->mchip_number = op->cs; in fun_exec_op()
165 struct fsl_upm_nand *fun; in fun_probe() local
172 fun = devm_kzalloc(&ofdev->dev, sizeof(*fun), GFP_KERNEL); in fun_probe()
173 if (!fun) in fun_probe()
176 fun->io_base = devm_platform_get_and_ioremap_resource(ofdev, 0, &io_res); in fun_probe()
177 if (IS_ERR(fun->io_base)) in fun_probe()
178 return PTR_ERR(fun->io_base); in fun_probe()
180 ret = fsl_upm_find(io_res->start, &fun->upm); in fun_probe()
192 fun->upm_addr_offset = *prop; in fun_probe()
199 fun->upm_cmd_offset = *prop; in fun_probe()
204 fun->mchip_count = size / sizeof(uint32_t); in fun_probe()
205 if (fun->mchip_count >= NAND_MAX_CHIPS) { in fun_probe()
209 for (i = 0; i < fun->mchip_count; i++) in fun_probe()
210 fun->mchip_offsets[i] = be32_to_cpu(prop[i]); in fun_probe()
212 fun->mchip_count = 1; in fun_probe()
215 for (i = 0; i < fun->mchip_count; i++) { in fun_probe()
216 fun->rnb_gpio[i] = devm_gpiod_get_index_optional(&ofdev->dev, in fun_probe()
219 if (IS_ERR(fun->rnb_gpio[i])) { in fun_probe()
221 return PTR_ERR(fun->rnb_gpio[i]); in fun_probe()
225 nand_controller_init(&fun->base); in fun_probe()
226 fun->base.ops = &fun_ops; in fun_probe()
227 fun->dev = &ofdev->dev; in fun_probe()
229 ret = fun_chip_init(fun, ofdev->dev.of_node, io_res); in fun_probe()
233 dev_set_drvdata(&ofdev->dev, fun); in fun_probe()
240 struct fsl_upm_nand *fun = dev_get_drvdata(&ofdev->dev); in fun_remove() local
241 struct nand_chip *chip = &fun->chip; in fun_remove()