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
32 static const char driver_name[] = "pasemi-nand";
37 memcpy_fromio(buf, chip->legacy.IO_ADDR_R, 0x800); in pasemi_read_buf()
39 len -= 0x800; in pasemi_read_buf()
41 memcpy_fromio(buf, chip->legacy.IO_ADDR_R, len); in pasemi_read_buf()
48 memcpy_toio(chip->legacy.IO_ADDR_R, buf, 0x800); in pasemi_write_buf()
50 len -= 0x800; in pasemi_write_buf()
52 memcpy_toio(chip->legacy.IO_ADDR_R, buf, len); in pasemi_write_buf()
62 out_8(chip->legacy.IO_ADDR_W + (1 << CLE_PIN_CTL), cmd); in pasemi_hwcontrol()
64 out_8(chip->legacy.IO_ADDR_W + (1 << ALE_PIN_CTL), cmd); in pasemi_hwcontrol()
78 chip->ecc.engine_type = NAND_ECC_ENGINE_TYPE_SOFT; in pasemi_attach_chip()
80 if (chip->ecc.algo == NAND_ECC_ALGO_UNKNOWN) in pasemi_attach_chip()
81 chip->ecc.algo = NAND_ECC_ALGO_HAMMING; in pasemi_attach_chip()
92 struct device *dev = &ofdev->dev; in pasemi_nand_probe()
94 struct device_node *np = dev->of_node; in pasemi_nand_probe()
102 return -EINVAL; in pasemi_nand_probe()
106 return -ENODEV; in pasemi_nand_probe()
113 err = -ENOMEM; in pasemi_nand_probe()
119 chip->controller = &controller; in pasemi_nand_probe()
124 pasemi_nand_mtd->dev.parent = dev; in pasemi_nand_probe()
126 chip->legacy.IO_ADDR_R = of_iomap(np, 0); in pasemi_nand_probe()
127 chip->legacy.IO_ADDR_W = chip->legacy.IO_ADDR_R; in pasemi_nand_probe()
129 if (!chip->legacy.IO_ADDR_R) { in pasemi_nand_probe()
130 err = -EIO; in pasemi_nand_probe()
136 err = -ENODEV; in pasemi_nand_probe()
144 err = -EBUSY; in pasemi_nand_probe()
148 chip->legacy.cmd_ctrl = pasemi_hwcontrol; in pasemi_nand_probe()
149 chip->legacy.dev_ready = pasemi_device_ready; in pasemi_nand_probe()
150 chip->legacy.read_buf = pasemi_read_buf; in pasemi_nand_probe()
151 chip->legacy.write_buf = pasemi_write_buf; in pasemi_nand_probe()
152 chip->legacy.chip_delay = 0; in pasemi_nand_probe()
155 chip->bbt_options = NAND_BBT_USE_FLASH; in pasemi_nand_probe()
164 err = -ENODEV; in pasemi_nand_probe()
168 dev_info(dev, "PA Semi NAND flash at %pR, control at I/O %x\n", &res, in pasemi_nand_probe()
178 iounmap(chip->legacy.IO_ADDR_R); in pasemi_nand_probe()
202 iounmap(chip->legacy.IO_ADDR_R); in pasemi_nand_remove()
215 .compatible = "pasemi,localbus-nand",
236 MODULE_DESCRIPTION("NAND flash interface driver for PA Semi PWRficient");