mtd: hisilicon: add a new driver for NAND controller of hisilicon hip04 Soc
Subsystems (3)
v5 cover mtd: hisilicon: add a new driver for NAND controller of hisilicon hip04 Soc
This patchset adds the support for NAND controller of hisilicon hip04 Soc. The NAND controller IP was developed by hisilicon and needs a new driver to support it. This patchset is based on l2-mtd/master.
I have tested this NAND flash controller driver in Hip04 D01 board using MTD test modules. All testes passed except mtd_nandbiterrs. The reason is that this NAND controller doesn't support to write raw page in ECC mode. In the test of mtd_nandbiterrs, when rewriting raw page(with some bits changed) back, this NAND controller will also produce ECC codes and write into NAND flash OOB area. As ECC codes in OOB area have been broken, read error comes out as follow.
Changes in v5:
- Make modifications according to the comments from Brian, thanks a lot.
- Add hisi_nand_read_oob callback function.
Changes in v4:
- Add mtd->dev.parent = &pdev->dev, thanks Frans Klaver.
Changes in v3:
- Modify code to eliminate some code style warnings.
- Add ecc-bits input check.
- Avoid using waterfall style in hisi_nfc_cmdfunc().
Changes in v2:
- Remove the patch for device tree, now patchset only has the driver and its
device tree binding documentation.
- Change the file name: hisi_nand.c to hisi504_nand.c.
Changes in v1:
- Remove callback functions out of struct hinfc_host, and call them directly in relative functions.
- Change hinfc_read and hinfc_write from macros to inline functions.
- Instead of putting pointers, embed struct nand_chip and struct mtd_info in struct hinfc_host directly.
- rewrite some unclear lines in device tree binding document, correct some code style error.
Link on v4:
- https://lkml.org/lkml/2014/11/4/377
Link on v3:
- https://lkml.org/lkml/2014/10/28/386
Link on v2:
- https://www.mail-archive.com/linux-kernel at vger.kernel.org/msg750071.html Link on v1:
- https://lkml.org/lkml/2014/7/15/198
Zhou Wang (2):
mtd: hisilicon: add a new NAND controller driver for hisilicon hip04 Soc
mtd: hisilicon: add device tree binding documentation
.../devicetree/bindings/mtd/hisi504-nand.txt | 48 ++ drivers/mtd/nand/Kconfig | 5 + drivers/mtd/nand/Makefile | 1 + drivers/mtd/nand/hisi504_nand.c | 907 ++++++++++++++++++++ 4 files changed, 961 insertions(+) create mode 100644 Documentation/devicetree/bindings/mtd/hisi504-nand.txt create mode 100644 drivers/mtd/nand/hisi504_nand.c
Signature · 1 line
1.7.9.5
PATCH v5 1/2 mtd: hisilicon: add a new NAND controller driver for hisilicon hip04 Soc
--- drivers/mtd/nand/Kconfig | 5 + drivers/mtd/nand/Makefile | 1 + drivers/mtd/nand/hisi504_nand.c | 907 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 913 insertions(+) create mode 100644 drivers/mtd/nand/hisi504_nand.c
drivers/mtd/nand/Kconfig +5 -0
@@ -524,4 +524,9 @@ config MTD_NAND_SUNXI help Enables support for NAND Flash chips on Allwinner SoCs. +config MTD_NAND_HISI504 + tristate "Support for NAND controller on Hisilicon SoC Hip04" + help + Enables support for NAND controller on Hisilicon SoC Hip04. + endif # MTD_NAND
drivers/mtd/nand/Makefile +1 -0
@@ -51,5 +51,6 @@ obj-$(CONFIG_MTD_NAND_GPMI_NAND) += gpmi-nand/ obj-$(CONFIG_MTD_NAND_XWAY) += xway_nand.o obj-$(CONFIG_MTD_NAND_BCM47XXNFLASH) += bcm47xxnflash/ obj-$(CONFIG_MTD_NAND_SUNXI) += sunxi_nand.o +obj-$(CONFIG_MTD_NAND_HISI504) += hisi504_nand.o nand-objs := nand_base.o nand_bbt.o nand_timings.o
drivers/mtd/nand/hisi504_nand.c new file +907 -0
907 lines not on this page · raw message
Signature · 1 line
1.7.9.5
PATCH v5 2/2 mtd: hisilicon: add device tree binding documentation
In reply to Zhou Wang--- .../devicetree/bindings/mtd/hisi504-nand.txt | 48 ++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Documentation/devicetree/bindings/mtd/hisi504-nand.txt
Documentation/devicetree/bindings/mtd/hisi504-nand.txt new file +48 -0
@@ -0,0 +1,48 @@ +Hisilicon Hip04 Soc NAND controller DT binding + +Required properties: + +- compatible: Should be "hisilicon,504-nfc". +- reg: The first contains base physical address and size of + NAND controller's registers. The second contains base + physical address and size of NAND controller's buffer. +- interrupts: Interrupt number for nfc. +- nand-bus-width: See nand.txt. +- nand-ecc-mode: Support none and hw ecc mode. +- #address-cells: Partition address, should be set 1. +- #size-cells: Partition size, should be set 1. + +Optional properties: + +- nand-ecc-strength: Number of bits to correct per ECC step. +- nand-ecc-step-size: Number of data bytes covered by a single ECC step. + +The following ECC strength and step size are currently supported: + + - nand-ecc-strength = <1>, nand-ecc-step-size = <512> + - nand-ecc-strength = <16>, nand-ecc-step-size = <1024> + +Flash chip may optionally contain additional sub-nodes describing partitions of +the address space. See partition.txt for more detail. + +Example: + + nand: nand at 4020000 { + compatible = "hisilicon,504-nfc"; + reg = <0x4020000 0x10000>, <0x5000000 0x1000>; + interrupts = <0 379 4>; + nand-bus-width = <8>; + nand-ecc-mode = "hw"; + nand-ecc-strength = <16>; + nand-ecc-step-size = <1024>; + #address-cells = <1>; + #size-cells = <1>; + + partition at 0 { + label = "nand_text"; + reg = <0x00000000 0x00400000>; + }; + + ... + + };
Signature · 1 line
1.7.9.5