Lines Matching +full:nand +full:- +full:ecc +full:- +full:algo
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 2006-2007 PA Semi, Inc
8 * Driver for the PWRficient onchip NAND flash interface
33 static const char driver_name[] = "pasemi-nand";
38 memcpy_fromio(buf, chip->legacy.IO_ADDR_R, 0x800); in pasemi_read_buf()
40 len -= 0x800; in pasemi_read_buf()
42 memcpy_fromio(buf, chip->legacy.IO_ADDR_R, len); in pasemi_read_buf()
49 memcpy_toio(chip->legacy.IO_ADDR_R, buf, 0x800); in pasemi_write_buf()
51 len -= 0x800; in pasemi_write_buf()
53 memcpy_toio(chip->legacy.IO_ADDR_R, buf, len); in pasemi_write_buf()
63 out_8(chip->legacy.IO_ADDR_W + (1 << CLE_PIN_CTL), cmd); in pasemi_hwcontrol()
65 out_8(chip->legacy.IO_ADDR_W + (1 << ALE_PIN_CTL), cmd); in pasemi_hwcontrol()
79 chip->ecc.engine_type = NAND_ECC_ENGINE_TYPE_SOFT; in pasemi_attach_chip()
81 if (chip->ecc.algo == NAND_ECC_ALGO_UNKNOWN) in pasemi_attach_chip()
82 chip->ecc.algo = NAND_ECC_ALGO_HAMMING; in pasemi_attach_chip()
93 struct device *dev = &ofdev->dev; in pasemi_nand_probe()
95 struct device_node *np = dev->of_node; in pasemi_nand_probe()
103 return -EINVAL; in pasemi_nand_probe()
107 return -ENODEV; in pasemi_nand_probe()
114 err = -ENOMEM; in pasemi_nand_probe()
120 chip->controller = &controller; in pasemi_nand_probe()
125 pasemi_nand_mtd->dev.parent = dev; in pasemi_nand_probe()
127 chip->legacy.IO_ADDR_R = of_iomap(np, 0); in pasemi_nand_probe()
128 chip->legacy.IO_ADDR_W = chip->legacy.IO_ADDR_R; in pasemi_nand_probe()
130 if (!chip->legacy.IO_ADDR_R) { in pasemi_nand_probe()
131 err = -EIO; in pasemi_nand_probe()
137 err = -ENODEV; in pasemi_nand_probe()
145 err = -EBUSY; in pasemi_nand_probe()
149 chip->legacy.cmd_ctrl = pasemi_hwcontrol; in pasemi_nand_probe()
150 chip->legacy.dev_ready = pasemi_device_ready; in pasemi_nand_probe()
151 chip->legacy.read_buf = pasemi_read_buf; in pasemi_nand_probe()
152 chip->legacy.write_buf = pasemi_write_buf; in pasemi_nand_probe()
153 chip->legacy.chip_delay = 0; in pasemi_nand_probe()
156 chip->bbt_options = NAND_BBT_USE_FLASH; in pasemi_nand_probe()
165 err = -ENODEV; in pasemi_nand_probe()
169 dev_info(dev, "PA Semi NAND flash at %pR, control at I/O %x\n", &res, in pasemi_nand_probe()
179 iounmap(chip->legacy.IO_ADDR_R); in pasemi_nand_probe()
203 iounmap(chip->legacy.IO_ADDR_R); in pasemi_nand_remove()
216 .compatible = "pasemi,localbus-nand",
237 MODULE_DESCRIPTION("NAND flash interface driver for PA Semi PWRficient");