Lines Matching refs:fun

57 	struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd);  in fun_chip_ready()  local
59 if (gpio_get_value(fun->rnb_gpio[fun->mchip_number])) in fun_chip_ready()
62 dev_vdbg(fun->dev, "busy\n"); in fun_chip_ready()
66 static void fun_wait_rnb(struct fsl_upm_nand *fun) in fun_wait_rnb() argument
68 if (fun->rnb_gpio[fun->mchip_number] >= 0) { in fun_wait_rnb()
71 while (--cnt && !fun_chip_ready(&fun->mtd)) in fun_wait_rnb()
74 dev_err(fun->dev, "tired waiting for RNB\n"); in fun_wait_rnb()
83 struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd); in fun_cmd_ctrl() local
86 if (!(ctrl & fun->last_ctrl)) { in fun_cmd_ctrl()
87 fsl_upm_end_pattern(&fun->upm); in fun_cmd_ctrl()
92 fun->last_ctrl = ctrl & (NAND_ALE | NAND_CLE); in fun_cmd_ctrl()
97 fsl_upm_start_pattern(&fun->upm, fun->upm_addr_offset); in fun_cmd_ctrl()
99 fsl_upm_start_pattern(&fun->upm, fun->upm_cmd_offset); in fun_cmd_ctrl()
102 mar = (cmd << (32 - fun->upm.width)) | in fun_cmd_ctrl()
103 fun->mchip_offsets[fun->mchip_number]; in fun_cmd_ctrl()
104 fsl_upm_run_pattern(&fun->upm, chip->IO_ADDR_R, mar); in fun_cmd_ctrl()
106 if (fun->wait_flags & FSL_UPM_WAIT_RUN_PATTERN) in fun_cmd_ctrl()
107 fun_wait_rnb(fun); in fun_cmd_ctrl()
113 struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd); in fun_select_chip() local
118 fun->mchip_number = mchip_nr; in fun_select_chip()
119 chip->IO_ADDR_R = fun->io_base + fun->mchip_offsets[mchip_nr]; in fun_select_chip()
128 struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd); in fun_read_byte() local
130 return in_8(fun->chip.IO_ADDR_R); in fun_read_byte()
135 struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd); in fun_read_buf() local
139 buf[i] = in_8(fun->chip.IO_ADDR_R); in fun_read_buf()
144 struct fsl_upm_nand *fun = to_fsl_upm_nand(mtd); in fun_write_buf() local
148 out_8(fun->chip.IO_ADDR_W, buf[i]); in fun_write_buf()
149 if (fun->wait_flags & FSL_UPM_WAIT_WRITE_BYTE) in fun_write_buf()
150 fun_wait_rnb(fun); in fun_write_buf()
152 if (fun->wait_flags & FSL_UPM_WAIT_WRITE_BUFFER) in fun_write_buf()
153 fun_wait_rnb(fun); in fun_write_buf()
156 static int fun_chip_init(struct fsl_upm_nand *fun, in fun_chip_init() argument
164 fun->chip.IO_ADDR_R = fun->io_base; in fun_chip_init()
165 fun->chip.IO_ADDR_W = fun->io_base; in fun_chip_init()
166 fun->chip.cmd_ctrl = fun_cmd_ctrl; in fun_chip_init()
167 fun->chip.chip_delay = fun->chip_delay; in fun_chip_init()
168 fun->chip.read_byte = fun_read_byte; in fun_chip_init()
169 fun->chip.read_buf = fun_read_buf; in fun_chip_init()
170 fun->chip.write_buf = fun_write_buf; in fun_chip_init()
171 fun->chip.ecc.mode = NAND_ECC_SOFT; in fun_chip_init()
172 if (fun->mchip_count > 1) in fun_chip_init()
173 fun->chip.select_chip = fun_select_chip; in fun_chip_init()
175 if (fun->rnb_gpio[0] >= 0) in fun_chip_init()
176 fun->chip.dev_ready = fun_chip_ready; in fun_chip_init()
178 fun->mtd.priv = &fun->chip; in fun_chip_init()
179 fun->mtd.dev.parent = fun->dev; in fun_chip_init()
185 fun->mtd.name = kasprintf(GFP_KERNEL, "0x%llx.%s", (u64)io_res->start, in fun_chip_init()
187 if (!fun->mtd.name) { in fun_chip_init()
192 ret = nand_scan(&fun->mtd, fun->mchip_count); in fun_chip_init()
197 ret = mtd_device_parse_register(&fun->mtd, NULL, &ppdata, NULL, 0); in fun_chip_init()
201 kfree(fun->mtd.name); in fun_chip_init()
207 struct fsl_upm_nand *fun; in fun_probe() local
215 fun = kzalloc(sizeof(*fun), GFP_KERNEL); in fun_probe()
216 if (!fun) in fun_probe()
225 ret = fsl_upm_find(io_res.start, &fun->upm); in fun_probe()
238 fun->upm_addr_offset = *prop; in fun_probe()
246 fun->upm_cmd_offset = *prop; in fun_probe()
251 fun->mchip_count = size / sizeof(uint32_t); in fun_probe()
252 if (fun->mchip_count >= NAND_MAX_CHIPS) { in fun_probe()
256 for (i = 0; i < fun->mchip_count; i++) in fun_probe()
257 fun->mchip_offsets[i] = be32_to_cpu(prop[i]); in fun_probe()
259 fun->mchip_count = 1; in fun_probe()
262 for (i = 0; i < fun->mchip_count; i++) { in fun_probe()
263 fun->rnb_gpio[i] = -1; in fun_probe()
273 fun->rnb_gpio[i] = rnb_gpio; in fun_probe()
282 fun->chip_delay = be32_to_cpup(prop); in fun_probe()
284 fun->chip_delay = 50; in fun_probe()
288 fun->wait_flags = be32_to_cpup(prop); in fun_probe()
290 fun->wait_flags = FSL_UPM_WAIT_RUN_PATTERN | in fun_probe()
293 fun->io_base = devm_ioremap_nocache(&ofdev->dev, io_res.start, in fun_probe()
295 if (!fun->io_base) { in fun_probe()
300 fun->dev = &ofdev->dev; in fun_probe()
301 fun->last_ctrl = NAND_CLE; in fun_probe()
303 ret = fun_chip_init(fun, ofdev->dev.of_node, &io_res); in fun_probe()
307 dev_set_drvdata(&ofdev->dev, fun); in fun_probe()
311 for (i = 0; i < fun->mchip_count; i++) { in fun_probe()
312 if (fun->rnb_gpio[i] < 0) in fun_probe()
314 gpio_free(fun->rnb_gpio[i]); in fun_probe()
317 kfree(fun); in fun_probe()
324 struct fsl_upm_nand *fun = dev_get_drvdata(&ofdev->dev); in fun_remove() local
327 nand_release(&fun->mtd); in fun_remove()
328 kfree(fun->mtd.name); in fun_remove()
330 for (i = 0; i < fun->mchip_count; i++) { in fun_remove()
331 if (fun->rnb_gpio[i] < 0) in fun_remove()
333 gpio_free(fun->rnb_gpio[i]); in fun_remove()
336 kfree(fun); in fun_remove()