Lines Matching refs:fun
41 static int fun_chip_init(struct fsl_upm_nand *fun, in fun_chip_init() argument
45 struct mtd_info *mtd = nand_to_mtd(&fun->chip); in fun_chip_init()
49 fun->chip.ecc.engine_type = NAND_ECC_ENGINE_TYPE_SOFT; in fun_chip_init()
50 fun->chip.ecc.algo = NAND_ECC_ALGO_HAMMING; in fun_chip_init()
51 fun->chip.controller = &fun->base; in fun_chip_init()
52 mtd->dev.parent = fun->dev; in fun_chip_init()
58 nand_set_flash_node(&fun->chip, flash_np); in fun_chip_init()
59 mtd->name = devm_kasprintf(fun->dev, GFP_KERNEL, "0x%llx.%pOFn", in fun_chip_init()
67 ret = nand_scan(&fun->chip, fun->mchip_count); in fun_chip_init()
80 struct fsl_upm_nand *fun = to_fsl_upm_nand(nand_to_mtd(chip)); in func_exec_instr() local
81 u32 mar, reg_offs = fun->mchip_offsets[fun->mchip_number]; in func_exec_instr()
88 fsl_upm_start_pattern(&fun->upm, fun->upm_cmd_offset); in func_exec_instr()
89 mar = (instr->ctx.cmd.opcode << (32 - fun->upm.width)) | in func_exec_instr()
91 fsl_upm_run_pattern(&fun->upm, fun->io_base + reg_offs, mar); in func_exec_instr()
92 fsl_upm_end_pattern(&fun->upm); in func_exec_instr()
96 fsl_upm_start_pattern(&fun->upm, fun->upm_addr_offset); in func_exec_instr()
98 mar = (instr->ctx.addr.addrs[i] << (32 - fun->upm.width)) | in func_exec_instr()
100 fsl_upm_run_pattern(&fun->upm, fun->io_base + reg_offs, mar); in func_exec_instr()
102 fsl_upm_end_pattern(&fun->upm); in func_exec_instr()
108 in[i] = in_8(fun->io_base + reg_offs); in func_exec_instr()
114 out_8(fun->io_base + reg_offs, out[i]); in func_exec_instr()
118 if (!fun->rnb_gpio[fun->mchip_number]) in func_exec_instr()
121 return nand_gpio_waitrdy(chip, fun->rnb_gpio[fun->mchip_number], in func_exec_instr()
134 struct fsl_upm_nand *fun = to_fsl_upm_nand(nand_to_mtd(chip)); in fun_exec_op() local
144 fun->mchip_number = op->cs; in fun_exec_op()
164 struct fsl_upm_nand *fun; in fun_probe() local
171 fun = devm_kzalloc(&ofdev->dev, sizeof(*fun), GFP_KERNEL); in fun_probe()
172 if (!fun) in fun_probe()
176 fun->io_base = devm_ioremap_resource(&ofdev->dev, 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()