This pull request contains the following core changes:
* Fix memory leaks in the core * Remove unused NAND locking support * Rename nand.h into rawnand.h (preparing support for spi NANDs) * Use NAND_MAX_ID_LEN where appropriate * Fix support for 20nm Hynix chips * Fix support for Samsung and Hynix SLC NANDs and the following driver changes: * Various cleanup, improvements and fixes in the qcom driver * Fixes for bugs detected by various static code analysis tools * Fix mxc ooblayout definition * Add a new part_parsers to tmio and sharpsl platform data in order to define a custom list of partition parsers * Request the reset line in exclusive mode in the sunxi driver * Fix a build error in the orion-nand driver when compiled for ARMv4 * Allow 64-bit mvebu platforms to select the PXA3XX driver -----BEGIN PGP SIGNATURE----- iQJABAABCAAqBQJZpwMZIxxib3Jpcy5icmV6aWxsb25AZnJlZS1lbGVjdHJvbnMu Y29tAAoJEGXtNgF+CLcAJEoP/jRnEjPznWT3+ngw6k/rnykkn/wexKV3iyX/6b71 MQT/ZFuT3HsHnUjyprPvyRWJeKun6XyIH5fk7FlXIei9TaWCt6/UGTKousaPKeR2 maggGeEjxGVpHJM/jpIYCyjt83zpezBqTupv52XhXxPaU7ROSpuHCd92YcPzIaT5 tcn8JrI7TGuGlBrBbA2y8ZrPtuug3IKqUfpIiQmoqr0jzQR+AbZKHg0kk5a8piOn OguK67uhxeOvq831bGPehCPDbuE0loNi4CssayJ1HrisfS95kH/cqrveapgKsUG/ fxaHh1i65I0lxa8sgUgeUiU04Zsy1YcgNbCj41AY4AHnjJ0+Qp1cV6KAB/x5/wH9 ES/fW06how+1BLEeLvOr+rIQ41WeP0qV2H3r/PtkeswKKAV3gSERBXVHmg1E7Yum HkmPqzhu+nSk3mP7p3yxpd7EwWQh2xpvVYrfQ5vQbtdfm8Uw9n6S8x+O89ch9wWi +KbMWFsmF78nuRWW3WTsaiOFKcTRLBT5RoU2z4i9hCvQT2Pnx3SBhHrIj6xqBI1S 8MpeDdlXHmRQfZxj+jDqU77JYqVEmy/5it9OjhjMpOqxfCf4K6Nlb75TEdR5Nh/9 BA1qqTBEslg3UqS8ofGFHGFZWrW3JHf02SYo2zU9IvBninh3HrqHiFhBc3p1xNDE 7GwD =bC1+ -----END PGP SIGNATURE----- Merge tag 'nand/for-4.14' of git://git.infradead.org/l2-mtd into mtd/next From Boris: " This pull request contains the following core changes: * Fix memory leaks in the core * Remove unused NAND locking support * Rename nand.h into rawnand.h (preparing support for spi NANDs) * Use NAND_MAX_ID_LEN where appropriate * Fix support for 20nm Hynix chips * Fix support for Samsung and Hynix SLC NANDs and the following driver changes: * Various cleanup, improvements and fixes in the qcom driver * Fixes for bugs detected by various static code analysis tools * Fix mxc ooblayout definition * Add a new part_parsers to tmio and sharpsl platform data in order to define a custom list of partition parsers * Request the reset line in exclusive mode in the sunxi driver * Fix a build error in the orion-nand driver when compiled for ARMv4 * Allow 64-bit mvebu platforms to select the PXA3XX driver "
This commit is contained in:
commit
d1f936d736
|
@ -1,11 +1,20 @@
|
||||||
* Qualcomm NAND controller
|
* Qualcomm NAND controller
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- compatible: should be "qcom,ipq806x-nand"
|
- compatible: must be one of the following:
|
||||||
|
* "qcom,ipq806x-nand" - for EBI2 NAND controller being used in IPQ806x
|
||||||
|
SoC and it uses ADM DMA
|
||||||
|
* "qcom,ipq4019-nand" - for QPIC NAND controller v1.4.0 being used in
|
||||||
|
IPQ4019 SoC and it uses BAM DMA
|
||||||
|
* "qcom,ipq8074-nand" - for QPIC NAND controller v1.5.0 being used in
|
||||||
|
IPQ8074 SoC and it uses BAM DMA
|
||||||
|
|
||||||
- reg: MMIO address range
|
- reg: MMIO address range
|
||||||
- clocks: must contain core clock and always on clock
|
- clocks: must contain core clock and always on clock
|
||||||
- clock-names: must contain "core" for the core clock and "aon" for the
|
- clock-names: must contain "core" for the core clock and "aon" for the
|
||||||
always on clock
|
always on clock
|
||||||
|
|
||||||
|
EBI2 specific properties:
|
||||||
- dmas: DMA specifier, consisting of a phandle to the ADM DMA
|
- dmas: DMA specifier, consisting of a phandle to the ADM DMA
|
||||||
controller node and the channel number to be used for
|
controller node and the channel number to be used for
|
||||||
NAND. Refer to dma.txt and qcom_adm.txt for more details
|
NAND. Refer to dma.txt and qcom_adm.txt for more details
|
||||||
|
@ -16,6 +25,12 @@ Required properties:
|
||||||
- qcom,data-crci: must contain the ADM data type CRCI block instance
|
- qcom,data-crci: must contain the ADM data type CRCI block instance
|
||||||
number specified for the NAND controller on the given
|
number specified for the NAND controller on the given
|
||||||
platform
|
platform
|
||||||
|
|
||||||
|
QPIC specific properties:
|
||||||
|
- dmas: DMA specifier, consisting of a phandle to the BAM DMA
|
||||||
|
and the channel number to be used for NAND. Refer to
|
||||||
|
dma.txt, qcom_bam_dma.txt for more details
|
||||||
|
- dma-names: must contain all 3 channel names : "tx", "rx", "cmd"
|
||||||
- #address-cells: <1> - subnodes give the chip-select number
|
- #address-cells: <1> - subnodes give the chip-select number
|
||||||
- #size-cells: <0>
|
- #size-cells: <0>
|
||||||
|
|
||||||
|
@ -26,7 +41,6 @@ chip-selects which (may) contain NAND flash chips. Their properties are as
|
||||||
follows.
|
follows.
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- compatible: should contain "qcom,nandcs"
|
|
||||||
- reg: a single integer representing the chip-select
|
- reg: a single integer representing the chip-select
|
||||||
number (e.g., 0, 1, 2, etc.)
|
number (e.g., 0, 1, 2, etc.)
|
||||||
- #address-cells: see partition.txt
|
- #address-cells: see partition.txt
|
||||||
|
@ -43,8 +57,8 @@ partition.txt for more detail.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
nand@1ac00000 {
|
nand-controller@1ac00000 {
|
||||||
compatible = "qcom,ebi2-nandc";
|
compatible = "qcom,ipq806x-nand";
|
||||||
reg = <0x1ac00000 0x800>;
|
reg = <0x1ac00000 0x800>;
|
||||||
|
|
||||||
clocks = <&gcc EBI2_CLK>,
|
clocks = <&gcc EBI2_CLK>,
|
||||||
|
@ -59,8 +73,7 @@ nand@1ac00000 {
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|
||||||
nandcs@0 {
|
nand@0 {
|
||||||
compatible = "qcom,nandcs";
|
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
|
|
||||||
nand-ecc-strength = <4>;
|
nand-ecc-strength = <4>;
|
||||||
|
@ -84,3 +97,43 @@ nand@1ac00000 {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
nand-controller@79b0000 {
|
||||||
|
compatible = "qcom,ipq4019-nand";
|
||||||
|
reg = <0x79b0000 0x1000>;
|
||||||
|
|
||||||
|
clocks = <&gcc GCC_QPIC_CLK>,
|
||||||
|
<&gcc GCC_QPIC_AHB_CLK>;
|
||||||
|
clock-names = "core", "aon";
|
||||||
|
|
||||||
|
dmas = <&qpicbam 0>,
|
||||||
|
<&qpicbam 1>,
|
||||||
|
<&qpicbam 2>;
|
||||||
|
dma-names = "tx", "rx", "cmd";
|
||||||
|
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
nand@0 {
|
||||||
|
reg = <0>;
|
||||||
|
nand-ecc-strength = <4>;
|
||||||
|
nand-ecc-step-size = <512>;
|
||||||
|
nand-bus-width = <8>;
|
||||||
|
|
||||||
|
partitions {
|
||||||
|
compatible = "fixed-partitions";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
label = "boot-nand";
|
||||||
|
reg = <0 0x58a0000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@58a0000 {
|
||||||
|
label = "fs-nand";
|
||||||
|
reg = <0x58a0000 0x4000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
|
@ -516,7 +516,7 @@ mirrored table is performed.
|
||||||
|
|
||||||
The most important field in the nand_bbt_descr structure is the
|
The most important field in the nand_bbt_descr structure is the
|
||||||
options field. The options define most of the table properties. Use the
|
options field. The options define most of the table properties. Use the
|
||||||
predefined constants from nand.h to define the options.
|
predefined constants from rawnand.h to define the options.
|
||||||
|
|
||||||
- Number of bits per block
|
- Number of bits per block
|
||||||
|
|
||||||
|
@ -843,7 +843,7 @@ Chip option constants
|
||||||
Constants for chip id table
|
Constants for chip id table
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
These constants are defined in nand.h. They are OR-ed together to
|
These constants are defined in rawnand.h. They are OR-ed together to
|
||||||
describe the chip functionality::
|
describe the chip functionality::
|
||||||
|
|
||||||
/* Buswitdh is 16 bit */
|
/* Buswitdh is 16 bit */
|
||||||
|
@ -865,7 +865,7 @@ describe the chip functionality::
|
||||||
Constants for runtime options
|
Constants for runtime options
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
These constants are defined in nand.h. They are OR-ed together to
|
These constants are defined in rawnand.h. They are OR-ed together to
|
||||||
describe the functionality::
|
describe the functionality::
|
||||||
|
|
||||||
/* The hw ecc generator provides a syndrome instead a ecc value on read
|
/* The hw ecc generator provides a syndrome instead a ecc value on read
|
||||||
|
@ -956,7 +956,7 @@ developer. Each struct member has a short description which is marked
|
||||||
with an [XXX] identifier. See the chapter "Documentation hints" for an
|
with an [XXX] identifier. See the chapter "Documentation hints" for an
|
||||||
explanation.
|
explanation.
|
||||||
|
|
||||||
.. kernel-doc:: include/linux/mtd/nand.h
|
.. kernel-doc:: include/linux/mtd/rawnand.h
|
||||||
:internal:
|
:internal:
|
||||||
|
|
||||||
Public Functions Provided
|
Public Functions Provided
|
||||||
|
|
|
@ -9027,7 +9027,7 @@ T: git git://git.infradead.org/linux-mtd.git nand/fixes
|
||||||
T: git git://git.infradead.org/l2-mtd.git nand/next
|
T: git git://git.infradead.org/l2-mtd.git nand/next
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/mtd/nand/
|
F: drivers/mtd/nand/
|
||||||
F: include/linux/mtd/nand*.h
|
F: include/linux/mtd/*nand*.h
|
||||||
|
|
||||||
NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER
|
NATIVE INSTRUMENTS USB SOUND INTERFACE DRIVER
|
||||||
M: Daniel Mack <zonque@gmail.com>
|
M: Daniel Mack <zonque@gmail.com>
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include <linux/input/tps6507x-ts.h>
|
#include <linux/input/tps6507x-ts.h>
|
||||||
#include <linux/mfd/tps6507x.h>
|
#include <linux/mfd/tps6507x.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <linux/spi/spi.h>
|
#include <linux/spi/spi.h>
|
||||||
#include <linux/spi/eeprom.h>
|
#include <linux/spi/eeprom.h>
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
#include <linux/platform_data/pcf857x.h>
|
#include <linux/platform_data/pcf857x.h>
|
||||||
#include <linux/platform_data/at24.h>
|
#include <linux/platform_data/at24.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/phy.h>
|
#include <linux/phy.h>
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include <media/i2c/adv7343.h>
|
#include <media/i2c/adv7343.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/platform_data/at24.h>
|
#include <linux/platform_data/at24.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/timer.h>
|
#include <linux/timer.h>
|
||||||
#include <linux/ata_platform.h>
|
#include <linux/ata_platform.h>
|
||||||
#include <linux/mv643xx_eth.h>
|
#include <linux/mv643xx_eth.h>
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
#include <linux/fb.h>
|
#include <linux/fb.h>
|
||||||
|
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <linux/platform_data/video-ep93xx.h>
|
#include <linux/platform_data/video-ep93xx.h>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
#include <linux/memory.h>
|
#include <linux/memory.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
#include <linux/i2c-gpio.h>
|
#include <linux/i2c-gpio.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#include <linux/smc91x.h>
|
#include <linux/smc91x.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/platform_data/mv_usb.h>
|
#include <linux/platform_data/mv_usb.h>
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/timer.h>
|
#include <linux/timer.h>
|
||||||
#include <linux/mv643xx_eth.h>
|
#include <linux/mv643xx_eth.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mv643xx_eth.h>
|
#include <linux/mv643xx_eth.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/serial_reg.h>
|
#include <linux/serial_reg.h>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mv643xx_eth.h>
|
#include <linux/mv643xx_eth.h>
|
||||||
#include <linux/gpio_keys.h>
|
#include <linux/gpio_keys.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mv643xx_eth.h>
|
#include <linux/mv643xx_eth.h>
|
||||||
#include <linux/ata_platform.h>
|
#include <linux/ata_platform.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/timeriomem-rng.h>
|
#include <linux/timeriomem-rng.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/platform_data/pcf857x.h>
|
#include <linux/platform_data/pcf857x.h>
|
||||||
#include <linux/i2c/pxa-i2c.h>
|
#include <linux/i2c/pxa-i2c.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/regulator/max1586.h>
|
#include <linux/regulator/max1586.h>
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
#include <linux/dm9000.h>
|
#include <linux/dm9000.h>
|
||||||
#include <linux/platform_data/rtc-v3020.h>
|
#include <linux/platform_data/rtc-v3020.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#include <linux/mfd/tc6387xb.h>
|
#include <linux/mfd/tc6387xb.h>
|
||||||
#include <linux/mfd/tc6393xb.h>
|
#include <linux/mfd/tc6393xb.h>
|
||||||
#include <linux/mfd/t7l66xb.h>
|
#include <linux/mfd/t7l66xb.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/usb/gpio_vbus.h>
|
#include <linux/usb/gpio_vbus.h>
|
||||||
#include <linux/memblock.h>
|
#include <linux/memblock.h>
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include <linux/wm97xx.h>
|
#include <linux/wm97xx.h>
|
||||||
#include <linux/power_supply.h>
|
#include <linux/power_supply.h>
|
||||||
#include <linux/usb/gpio_vbus.h>
|
#include <linux/usb/gpio_vbus.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
#include <linux/mmc/host.h>
|
#include <linux/mmc/host.h>
|
||||||
#include <linux/mfd/tc6393xb.h>
|
#include <linux/mfd/tc6393xb.h>
|
||||||
#include <linux/mfd/tmio.h>
|
#include <linux/mfd/tmio.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/pm.h>
|
#include <linux/pm.h>
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
#include <linux/platform_data/i2c-s3c2410.h>
|
#include <linux/platform_data/i2c-s3c2410.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
#include <linux/platform_data/i2c-s3c2410.h>
|
#include <linux/platform_data/i2c-s3c2410.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
#include <linux/mfd/pcf50633/pmic.h>
|
#include <linux/mfd/pcf50633/pmic.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
#include <linux/platform_data/usb-s3c2410_udc.h>
|
#include <linux/platform_data/usb-s3c2410_udc.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
#include <linux/platform_data/i2c-s3c2410.h>
|
#include <linux/platform_data/i2c-s3c2410.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
#include <linux/spi/spi_gpio.h>
|
#include <linux/spi/spi_gpio.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include <linux/serial.h>
|
#include <linux/serial.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/memblock.h>
|
#include <linux/memblock.h>
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/plat-ram.h>
|
#include <linux/mtd/plat-ram.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/plat-ram.h>
|
#include <linux/mtd/plat-ram.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/plat-ram.h>
|
#include <linux/mtd/plat-ram.h>
|
||||||
#include <linux/spi/spi.h>
|
#include <linux/spi/spi.h>
|
||||||
#include <linux/spi/flash.h>
|
#include <linux/spi/flash.h>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <arch/memmap.h>
|
#include <arch/memmap.h>
|
||||||
#include <hwregs/reg_map.h>
|
#include <hwregs/reg_map.h>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <arch/memmap.h>
|
#include <arch/memmap.h>
|
||||||
#include <hwregs/reg_map.h>
|
#include <hwregs/reg_map.h>
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include <linux/leds.h>
|
#include <linux/leds.h>
|
||||||
#include <linux/mmc/host.h>
|
#include <linux/mmc/host.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/serial_8250.h>
|
#include <linux/serial_8250.h>
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
#include <linux/mmc/host.h>
|
#include <linux/mmc/host.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/smsc911x.h>
|
#include <linux/smsc911x.h>
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/pm.h>
|
#include <linux/pm.h>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
#ifndef __ASM_MACH_JZ4740_JZ4740_NAND_H__
|
#ifndef __ASM_MACH_JZ4740_JZ4740_NAND_H__
|
||||||
#define __ASM_MACH_JZ4740_JZ4740_NAND_H__
|
#define __ASM_MACH_JZ4740_JZ4740_NAND_H__
|
||||||
|
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
#define JZ_NAND_NUM_BANKS 4
|
#define JZ_NAND_NUM_BANKS 4
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
#include <asm/netlogic/haldefs.h>
|
#include <asm/netlogic/haldefs.h>
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#include <linux/resource.h>
|
#include <linux/resource.h>
|
||||||
#include <linux/serial.h>
|
#include <linux/serial.h>
|
||||||
#include <linux/serial_pnx8xxx.h>
|
#include <linux/serial_pnx8xxx.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
#include <irq.h>
|
#include <irq.h>
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#include <linux/ctype.h>
|
#include <linux/ctype.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
#include <linux/mmc/host.h>
|
#include <linux/mmc/host.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/mfd/tmio.h>
|
#include <linux/mfd/tmio.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/i2c.h>
|
#include <linux/i2c.h>
|
||||||
#include <linux/regulator/fixed.h>
|
#include <linux/regulator/fixed.h>
|
||||||
#include <linux/regulator/machine.h>
|
#include <linux/regulator/machine.h>
|
||||||
|
|
|
@ -2073,15 +2073,17 @@ static int stfsm_probe(struct platform_device *pdev)
|
||||||
ret = stfsm_init(fsm);
|
ret = stfsm_init(fsm);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(&pdev->dev, "Failed to initialise FSM Controller\n");
|
dev_err(&pdev->dev, "Failed to initialise FSM Controller\n");
|
||||||
return ret;
|
goto err_clk_unprepare;
|
||||||
}
|
}
|
||||||
|
|
||||||
stfsm_fetch_platform_configs(pdev);
|
stfsm_fetch_platform_configs(pdev);
|
||||||
|
|
||||||
/* Detect SPI FLASH device */
|
/* Detect SPI FLASH device */
|
||||||
info = stfsm_jedec_probe(fsm);
|
info = stfsm_jedec_probe(fsm);
|
||||||
if (!info)
|
if (!info) {
|
||||||
return -ENODEV;
|
ret = -ENODEV;
|
||||||
|
goto err_clk_unprepare;
|
||||||
|
}
|
||||||
fsm->info = info;
|
fsm->info = info;
|
||||||
|
|
||||||
/* Use device size to determine address width */
|
/* Use device size to determine address width */
|
||||||
|
@ -2095,11 +2097,11 @@ static int stfsm_probe(struct platform_device *pdev)
|
||||||
if (info->config) {
|
if (info->config) {
|
||||||
ret = info->config(fsm);
|
ret = info->config(fsm);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
goto err_clk_unprepare;
|
||||||
} else {
|
} else {
|
||||||
ret = stfsm_prepare_rwe_seqs_default(fsm);
|
ret = stfsm_prepare_rwe_seqs_default(fsm);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
goto err_clk_unprepare;
|
||||||
}
|
}
|
||||||
|
|
||||||
fsm->mtd.name = info->name;
|
fsm->mtd.name = info->name;
|
||||||
|
@ -2124,6 +2126,10 @@ static int stfsm_probe(struct platform_device *pdev)
|
||||||
fsm->mtd.erasesize, (fsm->mtd.erasesize >> 10));
|
fsm->mtd.erasesize, (fsm->mtd.erasesize >> 10));
|
||||||
|
|
||||||
return mtd_device_register(&fsm->mtd, NULL, 0);
|
return mtd_device_register(&fsm->mtd, NULL, 0);
|
||||||
|
|
||||||
|
err_clk_unprepare:
|
||||||
|
clk_disable_unprepare(fsm->clk);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int stfsm_remove(struct platform_device *pdev)
|
static int stfsm_remove(struct platform_device *pdev)
|
||||||
|
@ -2147,9 +2153,7 @@ static int stfsmfsm_resume(struct device *dev)
|
||||||
{
|
{
|
||||||
struct stfsm *fsm = dev_get_drvdata(dev);
|
struct stfsm *fsm = dev_get_drvdata(dev);
|
||||||
|
|
||||||
clk_prepare_enable(fsm->clk);
|
return clk_prepare_enable(fsm->clk);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nftl.h>
|
#include <linux/mtd/nftl.h>
|
||||||
#include <linux/mtd/inftl.h>
|
#include <linux/mtd/inftl.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
|
@ -315,7 +315,7 @@ config MTD_NAND_ATMEL
|
||||||
|
|
||||||
config MTD_NAND_PXA3xx
|
config MTD_NAND_PXA3xx
|
||||||
tristate "NAND support on PXA3xx and Armada 370/XP"
|
tristate "NAND support on PXA3xx and Armada 370/XP"
|
||||||
depends on PXA3xx || ARCH_MMP || PLAT_ORION
|
depends on PXA3xx || ARCH_MMP || PLAT_ORION || ARCH_MVEBU
|
||||||
help
|
help
|
||||||
This enables the driver for the NAND flash device found on
|
This enables the driver for the NAND flash device found on
|
||||||
PXA3xx processors (NFCv1) and also on Armada 370/XP (NFCv2).
|
PXA3xx processors (NFCv1) and also on Armada 370/XP (NFCv2).
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/platform_data/gpio-omap.h>
|
#include <linux/platform_data/gpio-omap.h>
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
#include <linux/mfd/syscon/atmel-matrix.h>
|
#include <linux/mfd/syscon/atmel-matrix.h>
|
||||||
#include <linux/mfd/syscon/atmel-smc.h>
|
#include <linux/mfd/syscon/atmel-smc.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/of_address.h>
|
#include <linux/of_address.h>
|
||||||
#include <linux/of_irq.h>
|
#include <linux/of_irq.h>
|
||||||
#include <linux/of_platform.h>
|
#include <linux/of_platform.h>
|
||||||
|
@ -2089,8 +2089,8 @@ atmel_hsmc_nand_controller_legacy_init(struct atmel_hsmc_nand_controller *nc)
|
||||||
}
|
}
|
||||||
|
|
||||||
nc->irq = of_irq_get(nand_np, 0);
|
nc->irq = of_irq_get(nand_np, 0);
|
||||||
if (nc->irq < 0) {
|
if (nc->irq <= 0) {
|
||||||
ret = nc->irq;
|
ret = nc->irq ?: -ENXIO;
|
||||||
if (ret != -EPROBE_DEFER)
|
if (ret != -EPROBE_DEFER)
|
||||||
dev_err(dev, "Failed to get IRQ number (err = %d)\n",
|
dev_err(dev, "Failed to get IRQ number (err = %d)\n",
|
||||||
ret);
|
ret);
|
||||||
|
@ -2179,11 +2179,12 @@ atmel_hsmc_nand_controller_init(struct atmel_hsmc_nand_controller *nc)
|
||||||
|
|
||||||
nc->irq = of_irq_get(np, 0);
|
nc->irq = of_irq_get(np, 0);
|
||||||
of_node_put(np);
|
of_node_put(np);
|
||||||
if (nc->irq < 0) {
|
if (nc->irq <= 0) {
|
||||||
if (nc->irq != -EPROBE_DEFER)
|
ret = nc->irq ?: -ENXIO;
|
||||||
|
if (ret != -EPROBE_DEFER)
|
||||||
dev_err(dev, "Failed to get IRQ number (err = %d)\n",
|
dev_err(dev, "Failed to get IRQ number (err = %d)\n",
|
||||||
nc->irq);
|
ret);
|
||||||
return nc->irq;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
np = of_parse_phandle(dev->of_node, "atmel,nfc-io", 0);
|
np = of_parse_phandle(dev->of_node, "atmel,nfc-io", 0);
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
#include <linux/genalloc.h>
|
#include <linux/genalloc.h>
|
||||||
#include <linux/iopoll.h>
|
#include <linux/iopoll.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/of_irq.h>
|
#include <linux/of_irq.h>
|
||||||
#include <linux/of_platform.h>
|
#include <linux/of_platform.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
|
|
||||||
struct bcm47xxnflash {
|
struct bcm47xxnflash {
|
||||||
struct bcma_drv_cc *cc;
|
struct bcma_drv_cc *cc;
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
#include <linux/of_platform.h>
|
#include <linux/of_platform.h>
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#undef DEBUG
|
#undef DEBUG
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/rslib.h>
|
#include <linux/rslib.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
* CM-X270 board.
|
* CM-X270 board.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/of_device.h>
|
#include <linux/of_device.h>
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
#define __DENALI_H__
|
#define __DENALI_H__
|
||||||
|
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
|
|
||||||
#define DEVICE_RESET 0x0
|
#define DEVICE_RESET 0x0
|
||||||
#define DEVICE_RESET__BANK(bank) BIT(bank)
|
#define DEVICE_RESET__BANK(bank) BIT(bank)
|
||||||
|
|
|
@ -118,7 +118,9 @@ static int denali_dt_probe(struct platform_device *pdev)
|
||||||
dev_err(&pdev->dev, "no clk available\n");
|
dev_err(&pdev->dev, "no clk available\n");
|
||||||
return PTR_ERR(dt->clk);
|
return PTR_ERR(dt->clk);
|
||||||
}
|
}
|
||||||
clk_prepare_enable(dt->clk);
|
ret = clk_prepare_enable(dt->clk);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
denali->clk_x_rate = clk_get_rate(dt->clk);
|
denali->clk_x_rate = clk_get_rate(dt->clk);
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/doc2000.h>
|
#include <linux/mtd/doc2000.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/inftl.h>
|
#include <linux/mtd/inftl.h>
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/bch.h>
|
#include <linux/bch.h>
|
||||||
#include <linux/bitrev.h>
|
#include <linux/bitrev.h>
|
||||||
#include <linux/jiffies.h>
|
#include <linux/jiffies.h>
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include <linux/of_address.h>
|
#include <linux/of_address.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/fsl_ifc.h>
|
#include <linux/fsl_ifc.h>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/nand-gpio.h>
|
#include <linux/mtd/nand-gpio.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
#ifndef __DRIVERS_MTD_NAND_GPMI_NAND_H
|
#ifndef __DRIVERS_MTD_NAND_GPMI_NAND_H
|
||||||
#define __DRIVERS_MTD_NAND_GPMI_NAND_H
|
#define __DRIVERS_MTD_NAND_GPMI_NAND_H
|
||||||
|
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/dmaengine.h>
|
#include <linux/dmaengine.h>
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
|
|
||||||
#include <linux/jz4780-nemc.h>
|
#include <linux/jz4780-nemc.h>
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
|
@ -705,7 +705,9 @@ static int lpc32xx_nand_probe(struct platform_device *pdev)
|
||||||
res = -ENOENT;
|
res = -ENOENT;
|
||||||
goto err_exit1;
|
goto err_exit1;
|
||||||
}
|
}
|
||||||
clk_prepare_enable(host->clk);
|
res = clk_prepare_enable(host->clk);
|
||||||
|
if (res)
|
||||||
|
goto err_exit1;
|
||||||
|
|
||||||
nand_chip->cmd_ctrl = lpc32xx_nand_cmd_ctrl;
|
nand_chip->cmd_ctrl = lpc32xx_nand_cmd_ctrl;
|
||||||
nand_chip->dev_ready = lpc32xx_nand_device_ready;
|
nand_chip->dev_ready = lpc32xx_nand_device_ready;
|
||||||
|
@ -846,9 +848,12 @@ static int lpc32xx_nand_remove(struct platform_device *pdev)
|
||||||
static int lpc32xx_nand_resume(struct platform_device *pdev)
|
static int lpc32xx_nand_resume(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct lpc32xx_nand_host *host = platform_get_drvdata(pdev);
|
struct lpc32xx_nand_host *host = platform_get_drvdata(pdev);
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* Re-enable NAND clock */
|
/* Re-enable NAND clock */
|
||||||
clk_prepare_enable(host->clk);
|
ret = clk_prepare_enable(host->clk);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
/* Fresh init of NAND controller */
|
/* Fresh init of NAND controller */
|
||||||
lpc32xx_nand_setup(host);
|
lpc32xx_nand_setup(host);
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
|
@ -840,7 +840,9 @@ static int lpc32xx_nand_probe(struct platform_device *pdev)
|
||||||
res = -ENOENT;
|
res = -ENOENT;
|
||||||
goto err_exit1;
|
goto err_exit1;
|
||||||
}
|
}
|
||||||
clk_prepare_enable(host->clk);
|
res = clk_prepare_enable(host->clk);
|
||||||
|
if (res)
|
||||||
|
goto err_exit1;
|
||||||
|
|
||||||
/* Set NAND IO addresses and command/ready functions */
|
/* Set NAND IO addresses and command/ready functions */
|
||||||
chip->IO_ADDR_R = SLC_DATA(host->io_base);
|
chip->IO_ADDR_R = SLC_DATA(host->io_base);
|
||||||
|
@ -972,9 +974,12 @@ static int lpc32xx_nand_remove(struct platform_device *pdev)
|
||||||
static int lpc32xx_nand_resume(struct platform_device *pdev)
|
static int lpc32xx_nand_resume(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct lpc32xx_nand_host *host = platform_get_drvdata(pdev);
|
struct lpc32xx_nand_host *host = platform_get_drvdata(pdev);
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* Re-enable NAND clock */
|
/* Re-enable NAND clock */
|
||||||
clk_prepare_enable(host->clk);
|
ret = clk_prepare_enable(host->clk);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
/* Fresh init of NAND controller */
|
/* Fresh init of NAND controller */
|
||||||
lpc32xx_nand_setup(host);
|
lpc32xx_nand_setup(host);
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/of_address.h>
|
#include <linux/of_address.h>
|
||||||
#include <linux/of_device.h>
|
#include <linux/of_device.h>
|
||||||
|
|
|
@ -464,8 +464,8 @@ static int mtk_ecc_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
irq = platform_get_irq(pdev, 0);
|
irq = platform_get_irq(pdev, 0);
|
||||||
if (irq < 0) {
|
if (irq < 0) {
|
||||||
dev_err(dev, "failed to get irq\n");
|
dev_err(dev, "failed to get irq: %d\n", irq);
|
||||||
return -EINVAL;
|
return irq;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = dma_set_mask(dev, DMA_BIT_MASK(32));
|
ret = dma_set_mask(dev, DMA_BIT_MASK(32));
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/iopoll.h>
|
#include <linux/iopoll.h>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
|
@ -876,6 +876,8 @@ static void mxc_do_addr_cycle(struct mtd_info *mtd, int column, int page_addr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define MXC_V1_ECCBYTES 5
|
||||||
|
|
||||||
static int mxc_v1_ooblayout_ecc(struct mtd_info *mtd, int section,
|
static int mxc_v1_ooblayout_ecc(struct mtd_info *mtd, int section,
|
||||||
struct mtd_oob_region *oobregion)
|
struct mtd_oob_region *oobregion)
|
||||||
{
|
{
|
||||||
|
@ -885,7 +887,7 @@ static int mxc_v1_ooblayout_ecc(struct mtd_info *mtd, int section,
|
||||||
return -ERANGE;
|
return -ERANGE;
|
||||||
|
|
||||||
oobregion->offset = (section * 16) + 6;
|
oobregion->offset = (section * 16) + 6;
|
||||||
oobregion->length = nand_chip->ecc.bytes;
|
oobregion->length = MXC_V1_ECCBYTES;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -907,8 +909,7 @@ static int mxc_v1_ooblayout_free(struct mtd_info *mtd, int section,
|
||||||
oobregion->length = 4;
|
oobregion->length = 4;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
oobregion->offset = ((section - 1) * 16) +
|
oobregion->offset = ((section - 1) * 16) + MXC_V1_ECCBYTES + 6;
|
||||||
nand_chip->ecc.bytes + 6;
|
|
||||||
if (section < nand_chip->ecc.steps)
|
if (section < nand_chip->ecc.steps)
|
||||||
oobregion->length = (section * 16) + 6 -
|
oobregion->length = (section * 16) + 6 -
|
||||||
oobregion->offset;
|
oobregion->offset;
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
|
|
||||||
static void amd_nand_decode_id(struct nand_chip *chip)
|
static void amd_nand_decode_id(struct nand_chip *chip)
|
||||||
{
|
{
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
#include <linux/nmi.h>
|
#include <linux/nmi.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <linux/mtd/nand_bch.h>
|
#include <linux/mtd/nand_bch.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
@ -1247,179 +1247,6 @@ int nand_reset(struct nand_chip *chip, int chipnr)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* __nand_unlock - [REPLACEABLE] unlocks specified locked blocks
|
|
||||||
* @mtd: mtd info
|
|
||||||
* @ofs: offset to start unlock from
|
|
||||||
* @len: length to unlock
|
|
||||||
* @invert:
|
|
||||||
* - when = 0, unlock the range of blocks within the lower and
|
|
||||||
* upper boundary address
|
|
||||||
* - when = 1, unlock the range of blocks outside the boundaries
|
|
||||||
* of the lower and upper boundary address
|
|
||||||
*
|
|
||||||
* Returs unlock status.
|
|
||||||
*/
|
|
||||||
static int __nand_unlock(struct mtd_info *mtd, loff_t ofs,
|
|
||||||
uint64_t len, int invert)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
int status, page;
|
|
||||||
struct nand_chip *chip = mtd_to_nand(mtd);
|
|
||||||
|
|
||||||
/* Submit address of first page to unlock */
|
|
||||||
page = ofs >> chip->page_shift;
|
|
||||||
chip->cmdfunc(mtd, NAND_CMD_UNLOCK1, -1, page & chip->pagemask);
|
|
||||||
|
|
||||||
/* Submit address of last page to unlock */
|
|
||||||
page = (ofs + len) >> chip->page_shift;
|
|
||||||
chip->cmdfunc(mtd, NAND_CMD_UNLOCK2, -1,
|
|
||||||
(page | invert) & chip->pagemask);
|
|
||||||
|
|
||||||
/* Call wait ready function */
|
|
||||||
status = chip->waitfunc(mtd, chip);
|
|
||||||
/* See if device thinks it succeeded */
|
|
||||||
if (status & NAND_STATUS_FAIL) {
|
|
||||||
pr_debug("%s: error status = 0x%08x\n",
|
|
||||||
__func__, status);
|
|
||||||
ret = -EIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* nand_unlock - [REPLACEABLE] unlocks specified locked blocks
|
|
||||||
* @mtd: mtd info
|
|
||||||
* @ofs: offset to start unlock from
|
|
||||||
* @len: length to unlock
|
|
||||||
*
|
|
||||||
* Returns unlock status.
|
|
||||||
*/
|
|
||||||
int nand_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
int chipnr;
|
|
||||||
struct nand_chip *chip = mtd_to_nand(mtd);
|
|
||||||
|
|
||||||
pr_debug("%s: start = 0x%012llx, len = %llu\n",
|
|
||||||
__func__, (unsigned long long)ofs, len);
|
|
||||||
|
|
||||||
if (check_offs_len(mtd, ofs, len))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
/* Align to last block address if size addresses end of the device */
|
|
||||||
if (ofs + len == mtd->size)
|
|
||||||
len -= mtd->erasesize;
|
|
||||||
|
|
||||||
nand_get_device(mtd, FL_UNLOCKING);
|
|
||||||
|
|
||||||
/* Shift to get chip number */
|
|
||||||
chipnr = ofs >> chip->chip_shift;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Reset the chip.
|
|
||||||
* If we want to check the WP through READ STATUS and check the bit 7
|
|
||||||
* we must reset the chip
|
|
||||||
* some operation can also clear the bit 7 of status register
|
|
||||||
* eg. erase/program a locked block
|
|
||||||
*/
|
|
||||||
nand_reset(chip, chipnr);
|
|
||||||
|
|
||||||
chip->select_chip(mtd, chipnr);
|
|
||||||
|
|
||||||
/* Check, if it is write protected */
|
|
||||||
if (nand_check_wp(mtd)) {
|
|
||||||
pr_debug("%s: device is write protected!\n",
|
|
||||||
__func__);
|
|
||||||
ret = -EIO;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = __nand_unlock(mtd, ofs, len, 0);
|
|
||||||
|
|
||||||
out:
|
|
||||||
chip->select_chip(mtd, -1);
|
|
||||||
nand_release_device(mtd);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(nand_unlock);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* nand_lock - [REPLACEABLE] locks all blocks present in the device
|
|
||||||
* @mtd: mtd info
|
|
||||||
* @ofs: offset to start unlock from
|
|
||||||
* @len: length to unlock
|
|
||||||
*
|
|
||||||
* This feature is not supported in many NAND parts. 'Micron' NAND parts do
|
|
||||||
* have this feature, but it allows only to lock all blocks, not for specified
|
|
||||||
* range for block. Implementing 'lock' feature by making use of 'unlock', for
|
|
||||||
* now.
|
|
||||||
*
|
|
||||||
* Returns lock status.
|
|
||||||
*/
|
|
||||||
int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
int chipnr, status, page;
|
|
||||||
struct nand_chip *chip = mtd_to_nand(mtd);
|
|
||||||
|
|
||||||
pr_debug("%s: start = 0x%012llx, len = %llu\n",
|
|
||||||
__func__, (unsigned long long)ofs, len);
|
|
||||||
|
|
||||||
if (check_offs_len(mtd, ofs, len))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
nand_get_device(mtd, FL_LOCKING);
|
|
||||||
|
|
||||||
/* Shift to get chip number */
|
|
||||||
chipnr = ofs >> chip->chip_shift;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Reset the chip.
|
|
||||||
* If we want to check the WP through READ STATUS and check the bit 7
|
|
||||||
* we must reset the chip
|
|
||||||
* some operation can also clear the bit 7 of status register
|
|
||||||
* eg. erase/program a locked block
|
|
||||||
*/
|
|
||||||
nand_reset(chip, chipnr);
|
|
||||||
|
|
||||||
chip->select_chip(mtd, chipnr);
|
|
||||||
|
|
||||||
/* Check, if it is write protected */
|
|
||||||
if (nand_check_wp(mtd)) {
|
|
||||||
pr_debug("%s: device is write protected!\n",
|
|
||||||
__func__);
|
|
||||||
status = MTD_ERASE_FAILED;
|
|
||||||
ret = -EIO;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Submit address of first page to lock */
|
|
||||||
page = ofs >> chip->page_shift;
|
|
||||||
chip->cmdfunc(mtd, NAND_CMD_LOCK, -1, page & chip->pagemask);
|
|
||||||
|
|
||||||
/* Call wait ready function */
|
|
||||||
status = chip->waitfunc(mtd, chip);
|
|
||||||
/* See if device thinks it succeeded */
|
|
||||||
if (status & NAND_STATUS_FAIL) {
|
|
||||||
pr_debug("%s: error status = 0x%08x\n",
|
|
||||||
__func__, status);
|
|
||||||
ret = -EIO;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = __nand_unlock(mtd, ofs, len, 0x1);
|
|
||||||
|
|
||||||
out:
|
|
||||||
chip->select_chip(mtd, -1);
|
|
||||||
nand_release_device(mtd);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(nand_lock);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* nand_check_erased_buf - check if a buffer contains (almost) only 0xff data
|
* nand_check_erased_buf - check if a buffer contains (almost) only 0xff data
|
||||||
* @buf: buffer to test
|
* @buf: buffer to test
|
||||||
|
@ -3993,10 +3820,13 @@ static void nand_manufacturer_detect(struct nand_chip *chip)
|
||||||
* nand_decode_ext_id() otherwise.
|
* nand_decode_ext_id() otherwise.
|
||||||
*/
|
*/
|
||||||
if (chip->manufacturer.desc && chip->manufacturer.desc->ops &&
|
if (chip->manufacturer.desc && chip->manufacturer.desc->ops &&
|
||||||
chip->manufacturer.desc->ops->detect)
|
chip->manufacturer.desc->ops->detect) {
|
||||||
|
/* The 3rd id byte holds MLC / multichip data */
|
||||||
|
chip->bits_per_cell = nand_get_bits_per_cell(chip->id.data[2]);
|
||||||
chip->manufacturer.desc->ops->detect(chip);
|
chip->manufacturer.desc->ops->detect(chip);
|
||||||
else
|
} else {
|
||||||
nand_decode_ext_id(chip);
|
nand_decode_ext_id(chip);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -4036,7 +3866,7 @@ static int nand_detect(struct nand_chip *chip, struct nand_flash_dev *type)
|
||||||
const struct nand_manufacturer *manufacturer;
|
const struct nand_manufacturer *manufacturer;
|
||||||
struct mtd_info *mtd = nand_to_mtd(chip);
|
struct mtd_info *mtd = nand_to_mtd(chip);
|
||||||
int busw;
|
int busw;
|
||||||
int i, ret;
|
int i;
|
||||||
u8 *id_data = chip->id.data;
|
u8 *id_data = chip->id.data;
|
||||||
u8 maf_id, dev_id;
|
u8 maf_id, dev_id;
|
||||||
|
|
||||||
|
@ -4066,7 +3896,7 @@ static int nand_detect(struct nand_chip *chip, struct nand_flash_dev *type)
|
||||||
chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
|
chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
|
||||||
|
|
||||||
/* Read entire ID string */
|
/* Read entire ID string */
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < ARRAY_SIZE(chip->id.data); i++)
|
||||||
id_data[i] = chip->read_byte(mtd);
|
id_data[i] = chip->read_byte(mtd);
|
||||||
|
|
||||||
if (id_data[0] != maf_id || id_data[1] != dev_id) {
|
if (id_data[0] != maf_id || id_data[1] != dev_id) {
|
||||||
|
@ -4075,7 +3905,7 @@ static int nand_detect(struct nand_chip *chip, struct nand_flash_dev *type)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
chip->id.len = nand_id_len(id_data, 8);
|
chip->id.len = nand_id_len(id_data, ARRAY_SIZE(chip->id.data));
|
||||||
|
|
||||||
/* Try to identify manufacturer */
|
/* Try to identify manufacturer */
|
||||||
manufacturer = nand_get_manufacturer(maf_id);
|
manufacturer = nand_get_manufacturer(maf_id);
|
||||||
|
@ -4177,10 +4007,6 @@ static int nand_detect(struct nand_chip *chip, struct nand_flash_dev *type)
|
||||||
if (mtd->writesize > 512 && chip->cmdfunc == nand_command)
|
if (mtd->writesize > 512 && chip->cmdfunc == nand_command)
|
||||||
chip->cmdfunc = nand_command_lp;
|
chip->cmdfunc = nand_command_lp;
|
||||||
|
|
||||||
ret = nand_manufacturer_init(chip);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
|
pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
|
||||||
maf_id, dev_id);
|
maf_id, dev_id);
|
||||||
|
|
||||||
|
@ -4388,23 +4214,6 @@ int nand_scan_ident(struct mtd_info *mtd, int maxchips,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize the ->data_interface field. */
|
|
||||||
ret = nand_init_data_interface(chip);
|
|
||||||
if (ret)
|
|
||||||
goto err_nand_init;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Setup the data interface correctly on the chip and controller side.
|
|
||||||
* This explicit call to nand_setup_data_interface() is only required
|
|
||||||
* for the first die, because nand_reset() has been called before
|
|
||||||
* ->data_interface and ->default_onfi_timing_mode were set.
|
|
||||||
* For the other dies, nand_reset() will automatically switch to the
|
|
||||||
* best mode for us.
|
|
||||||
*/
|
|
||||||
ret = nand_setup_data_interface(chip, 0);
|
|
||||||
if (ret)
|
|
||||||
goto err_nand_init;
|
|
||||||
|
|
||||||
nand_maf_id = chip->id.data[0];
|
nand_maf_id = chip->id.data[0];
|
||||||
nand_dev_id = chip->id.data[1];
|
nand_dev_id = chip->id.data[1];
|
||||||
|
|
||||||
|
@ -4434,12 +4243,6 @@ int nand_scan_ident(struct mtd_info *mtd, int maxchips,
|
||||||
mtd->size = i * chip->chipsize;
|
mtd->size = i * chip->chipsize;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_nand_init:
|
|
||||||
/* Free manufacturer priv data. */
|
|
||||||
nand_manufacturer_cleanup(chip);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(nand_scan_ident);
|
EXPORT_SYMBOL(nand_scan_ident);
|
||||||
|
|
||||||
|
@ -4826,55 +4629,60 @@ int nand_scan_tail(struct mtd_info *mtd)
|
||||||
struct nand_chip *chip = mtd_to_nand(mtd);
|
struct nand_chip *chip = mtd_to_nand(mtd);
|
||||||
struct nand_ecc_ctrl *ecc = &chip->ecc;
|
struct nand_ecc_ctrl *ecc = &chip->ecc;
|
||||||
struct nand_buffers *nbuf = NULL;
|
struct nand_buffers *nbuf = NULL;
|
||||||
int ret;
|
int ret, i;
|
||||||
|
|
||||||
/* New bad blocks should be marked in OOB, flash-based BBT, or both */
|
/* New bad blocks should be marked in OOB, flash-based BBT, or both */
|
||||||
if (WARN_ON((chip->bbt_options & NAND_BBT_NO_OOB_BBM) &&
|
if (WARN_ON((chip->bbt_options & NAND_BBT_NO_OOB_BBM) &&
|
||||||
!(chip->bbt_options & NAND_BBT_USE_FLASH))) {
|
!(chip->bbt_options & NAND_BBT_USE_FLASH))) {
|
||||||
ret = -EINVAL;
|
return -EINVAL;
|
||||||
goto err_ident;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (invalid_ecc_page_accessors(chip)) {
|
if (invalid_ecc_page_accessors(chip)) {
|
||||||
pr_err("Invalid ECC page accessors setup\n");
|
pr_err("Invalid ECC page accessors setup\n");
|
||||||
ret = -EINVAL;
|
return -EINVAL;
|
||||||
goto err_ident;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(chip->options & NAND_OWN_BUFFERS)) {
|
if (!(chip->options & NAND_OWN_BUFFERS)) {
|
||||||
nbuf = kzalloc(sizeof(*nbuf), GFP_KERNEL);
|
nbuf = kzalloc(sizeof(*nbuf), GFP_KERNEL);
|
||||||
if (!nbuf) {
|
if (!nbuf)
|
||||||
ret = -ENOMEM;
|
return -ENOMEM;
|
||||||
goto err_ident;
|
|
||||||
}
|
|
||||||
|
|
||||||
nbuf->ecccalc = kmalloc(mtd->oobsize, GFP_KERNEL);
|
nbuf->ecccalc = kmalloc(mtd->oobsize, GFP_KERNEL);
|
||||||
if (!nbuf->ecccalc) {
|
if (!nbuf->ecccalc) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto err_free;
|
goto err_free_nbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
nbuf->ecccode = kmalloc(mtd->oobsize, GFP_KERNEL);
|
nbuf->ecccode = kmalloc(mtd->oobsize, GFP_KERNEL);
|
||||||
if (!nbuf->ecccode) {
|
if (!nbuf->ecccode) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto err_free;
|
goto err_free_nbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
nbuf->databuf = kmalloc(mtd->writesize + mtd->oobsize,
|
nbuf->databuf = kmalloc(mtd->writesize + mtd->oobsize,
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!nbuf->databuf) {
|
if (!nbuf->databuf) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto err_free;
|
goto err_free_nbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
chip->buffers = nbuf;
|
chip->buffers = nbuf;
|
||||||
} else {
|
} else if (!chip->buffers) {
|
||||||
if (!chip->buffers) {
|
return -ENOMEM;
|
||||||
ret = -ENOMEM;
|
|
||||||
goto err_ident;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FIXME: some NAND manufacturer drivers expect the first die to be
|
||||||
|
* selected when manufacturer->init() is called. They should be fixed
|
||||||
|
* to explictly select the relevant die when interacting with the NAND
|
||||||
|
* chip.
|
||||||
|
*/
|
||||||
|
chip->select_chip(mtd, 0);
|
||||||
|
ret = nand_manufacturer_init(chip);
|
||||||
|
chip->select_chip(mtd, -1);
|
||||||
|
if (ret)
|
||||||
|
goto err_free_nbuf;
|
||||||
|
|
||||||
/* Set the internal oob buffer location, just after the page data */
|
/* Set the internal oob buffer location, just after the page data */
|
||||||
chip->oob_poi = chip->buffers->databuf + mtd->writesize;
|
chip->oob_poi = chip->buffers->databuf + mtd->writesize;
|
||||||
|
|
||||||
|
@ -4896,7 +4704,7 @@ int nand_scan_tail(struct mtd_info *mtd)
|
||||||
WARN(1, "No oob scheme defined for oobsize %d\n",
|
WARN(1, "No oob scheme defined for oobsize %d\n",
|
||||||
mtd->oobsize);
|
mtd->oobsize);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err_free;
|
goto err_nand_manuf_cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4911,7 +4719,7 @@ int nand_scan_tail(struct mtd_info *mtd)
|
||||||
if (!ecc->calculate || !ecc->correct || !ecc->hwctl) {
|
if (!ecc->calculate || !ecc->correct || !ecc->hwctl) {
|
||||||
WARN(1, "No ECC functions supplied; hardware ECC not possible\n");
|
WARN(1, "No ECC functions supplied; hardware ECC not possible\n");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err_free;
|
goto err_nand_manuf_cleanup;
|
||||||
}
|
}
|
||||||
if (!ecc->read_page)
|
if (!ecc->read_page)
|
||||||
ecc->read_page = nand_read_page_hwecc_oob_first;
|
ecc->read_page = nand_read_page_hwecc_oob_first;
|
||||||
|
@ -4943,7 +4751,7 @@ int nand_scan_tail(struct mtd_info *mtd)
|
||||||
ecc->write_page == nand_write_page_hwecc)) {
|
ecc->write_page == nand_write_page_hwecc)) {
|
||||||
WARN(1, "No ECC functions supplied; hardware ECC not possible\n");
|
WARN(1, "No ECC functions supplied; hardware ECC not possible\n");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err_free;
|
goto err_nand_manuf_cleanup;
|
||||||
}
|
}
|
||||||
/* Use standard syndrome read/write page function? */
|
/* Use standard syndrome read/write page function? */
|
||||||
if (!ecc->read_page)
|
if (!ecc->read_page)
|
||||||
|
@ -4963,7 +4771,7 @@ int nand_scan_tail(struct mtd_info *mtd)
|
||||||
if (!ecc->strength) {
|
if (!ecc->strength) {
|
||||||
WARN(1, "Driver must set ecc.strength when using hardware ECC\n");
|
WARN(1, "Driver must set ecc.strength when using hardware ECC\n");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err_free;
|
goto err_nand_manuf_cleanup;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -4976,7 +4784,7 @@ int nand_scan_tail(struct mtd_info *mtd)
|
||||||
ret = nand_set_ecc_soft_ops(mtd);
|
ret = nand_set_ecc_soft_ops(mtd);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err_free;
|
goto err_nand_manuf_cleanup;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -4984,7 +4792,7 @@ int nand_scan_tail(struct mtd_info *mtd)
|
||||||
if (!ecc->read_page || !ecc->write_page) {
|
if (!ecc->read_page || !ecc->write_page) {
|
||||||
WARN(1, "No ECC functions supplied; on-die ECC not possible\n");
|
WARN(1, "No ECC functions supplied; on-die ECC not possible\n");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err_free;
|
goto err_nand_manuf_cleanup;
|
||||||
}
|
}
|
||||||
if (!ecc->read_oob)
|
if (!ecc->read_oob)
|
||||||
ecc->read_oob = nand_read_oob_std;
|
ecc->read_oob = nand_read_oob_std;
|
||||||
|
@ -5008,7 +4816,7 @@ int nand_scan_tail(struct mtd_info *mtd)
|
||||||
default:
|
default:
|
||||||
WARN(1, "Invalid NAND_ECC_MODE %d\n", ecc->mode);
|
WARN(1, "Invalid NAND_ECC_MODE %d\n", ecc->mode);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err_free;
|
goto err_nand_manuf_cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For many systems, the standard OOB write also works for raw */
|
/* For many systems, the standard OOB write also works for raw */
|
||||||
|
@ -5029,13 +4837,13 @@ int nand_scan_tail(struct mtd_info *mtd)
|
||||||
if (ecc->steps * ecc->size != mtd->writesize) {
|
if (ecc->steps * ecc->size != mtd->writesize) {
|
||||||
WARN(1, "Invalid ECC parameters\n");
|
WARN(1, "Invalid ECC parameters\n");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err_free;
|
goto err_nand_manuf_cleanup;
|
||||||
}
|
}
|
||||||
ecc->total = ecc->steps * ecc->bytes;
|
ecc->total = ecc->steps * ecc->bytes;
|
||||||
if (ecc->total > mtd->oobsize) {
|
if (ecc->total > mtd->oobsize) {
|
||||||
WARN(1, "Total number of ECC bytes exceeded oobsize\n");
|
WARN(1, "Total number of ECC bytes exceeded oobsize\n");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err_free;
|
goto err_nand_manuf_cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -5117,6 +4925,21 @@ int nand_scan_tail(struct mtd_info *mtd)
|
||||||
if (!mtd->bitflip_threshold)
|
if (!mtd->bitflip_threshold)
|
||||||
mtd->bitflip_threshold = DIV_ROUND_UP(mtd->ecc_strength * 3, 4);
|
mtd->bitflip_threshold = DIV_ROUND_UP(mtd->ecc_strength * 3, 4);
|
||||||
|
|
||||||
|
/* Initialize the ->data_interface field. */
|
||||||
|
ret = nand_init_data_interface(chip);
|
||||||
|
if (ret)
|
||||||
|
goto err_nand_manuf_cleanup;
|
||||||
|
|
||||||
|
/* Enter fastest possible mode on all dies. */
|
||||||
|
for (i = 0; i < chip->numchips; i++) {
|
||||||
|
chip->select_chip(mtd, i);
|
||||||
|
ret = nand_setup_data_interface(chip, i);
|
||||||
|
chip->select_chip(mtd, -1);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
goto err_nand_data_iface_cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check, if we should skip the bad block table scan */
|
/* Check, if we should skip the bad block table scan */
|
||||||
if (chip->options & NAND_SKIP_BBTSCAN)
|
if (chip->options & NAND_SKIP_BBTSCAN)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -5124,10 +4947,17 @@ int nand_scan_tail(struct mtd_info *mtd)
|
||||||
/* Build bad block table */
|
/* Build bad block table */
|
||||||
ret = chip->scan_bbt(mtd);
|
ret = chip->scan_bbt(mtd);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_free;
|
goto err_nand_data_iface_cleanup;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_free:
|
err_nand_data_iface_cleanup:
|
||||||
|
nand_release_data_interface(chip);
|
||||||
|
|
||||||
|
err_nand_manuf_cleanup:
|
||||||
|
nand_manufacturer_cleanup(chip);
|
||||||
|
|
||||||
|
err_free_nbuf:
|
||||||
if (nbuf) {
|
if (nbuf) {
|
||||||
kfree(nbuf->databuf);
|
kfree(nbuf->databuf);
|
||||||
kfree(nbuf->ecccode);
|
kfree(nbuf->ecccode);
|
||||||
|
@ -5135,12 +4965,6 @@ int nand_scan_tail(struct mtd_info *mtd)
|
||||||
kfree(nbuf);
|
kfree(nbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
err_ident:
|
|
||||||
/* Clean up nand_scan_ident(). */
|
|
||||||
|
|
||||||
/* Free manufacturer priv data. */
|
|
||||||
nand_manufacturer_cleanup(chip);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(nand_scan_tail);
|
EXPORT_SYMBOL(nand_scan_tail);
|
||||||
|
|
|
@ -61,7 +61,7 @@
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/bbm.h>
|
#include <linux/mtd/bbm.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/vmalloc.h>
|
#include <linux/vmalloc.h>
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/bitops.h>
|
#include <linux/bitops.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_bch.h>
|
#include <linux/mtd/nand_bch.h>
|
||||||
#include <linux/bch.h>
|
#include <linux/bch.h>
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_ecc.h>
|
#include <linux/mtd/nand_ecc.h>
|
||||||
#include <asm/byteorder.h>
|
#include <asm/byteorder.h>
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/sizes.h>
|
#include <linux/sizes.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
|
||||||
|
@ -477,7 +477,7 @@ static void hynix_nand_extract_ecc_requirements(struct nand_chip *chip,
|
||||||
* The ECC requirements field meaning depends on the
|
* The ECC requirements field meaning depends on the
|
||||||
* NAND technology.
|
* NAND technology.
|
||||||
*/
|
*/
|
||||||
u8 nand_tech = chip->id.data[5] & 0x3;
|
u8 nand_tech = chip->id.data[5] & 0x7;
|
||||||
|
|
||||||
if (nand_tech < 3) {
|
if (nand_tech < 3) {
|
||||||
/* > 26nm, reference: H27UBG8T2A datasheet */
|
/* > 26nm, reference: H27UBG8T2A datasheet */
|
||||||
|
@ -533,7 +533,7 @@ static void hynix_nand_extract_scrambling_requirements(struct nand_chip *chip,
|
||||||
if (nand_tech > 0)
|
if (nand_tech > 0)
|
||||||
chip->options |= NAND_NEED_SCRAMBLING;
|
chip->options |= NAND_NEED_SCRAMBLING;
|
||||||
} else {
|
} else {
|
||||||
nand_tech = chip->id.data[5] & 0x3;
|
nand_tech = chip->id.data[5] & 0x7;
|
||||||
|
|
||||||
/* < 32nm */
|
/* < 32nm */
|
||||||
if (nand_tech > 2)
|
if (nand_tech > 2)
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/sizes.h>
|
#include <linux/sizes.h>
|
||||||
|
|
||||||
#define LP_OPTIONS 0
|
#define LP_OPTIONS 0
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
|
|
||||||
static int macronix_nand_init(struct nand_chip *chip)
|
static int macronix_nand_init(struct nand_chip *chip)
|
||||||
{
|
{
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Special Micron status bit that indicates when the block has been
|
* Special Micron status bit that indicates when the block has been
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
|
|
||||||
static void samsung_nand_decode_id(struct nand_chip *chip)
|
static void samsung_nand_decode_id(struct nand_chip *chip)
|
||||||
{
|
{
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
|
|
||||||
static const struct nand_data_interface onfi_sdr_timings[] = {
|
static const struct nand_data_interface onfi_sdr_timings[] = {
|
||||||
/* Mode 0 */
|
/* Mode 0 */
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
|
|
||||||
static void toshiba_nand_decode_id(struct nand_chip *chip)
|
static void toshiba_nand_decode_id(struct nand_chip *chip)
|
||||||
{
|
{
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/rawnand.h>
|
||||||
#include <linux/mtd/nand_bch.h>
|
#include <linux/mtd/nand_bch.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue