diff options
| -rw-r--r-- | Documentation/devicetree/bindings/mtd/fsmc-nand.txt | 25 | ||||
| -rw-r--r-- | drivers/mtd/nand/fsmc_nand.c | 18 | ||||
| -rw-r--r-- | include/linux/mtd/fsmc.h | 1 |
3 files changed, 43 insertions, 1 deletions
diff --git a/Documentation/devicetree/bindings/mtd/fsmc-nand.txt b/Documentation/devicetree/bindings/mtd/fsmc-nand.txt index 2240ac09f6ba..ec42935f3908 100644 --- a/Documentation/devicetree/bindings/mtd/fsmc-nand.txt +++ b/Documentation/devicetree/bindings/mtd/fsmc-nand.txt | |||
| @@ -1,4 +1,5 @@ | |||
| 1 | * FSMC NAND | 1 | ST Microelectronics Flexible Static Memory Controller (FSMC) |
| 2 | NAND Interface | ||
| 2 | 3 | ||
| 3 | Required properties: | 4 | Required properties: |
| 4 | - compatible : "st,spear600-fsmc-nand", "stericsson,fsmc-nand" | 5 | - compatible : "st,spear600-fsmc-nand", "stericsson,fsmc-nand" |
| @@ -9,6 +10,26 @@ Optional properties: | |||
| 9 | - bank-width : Width (in bytes) of the device. If not present, the width | 10 | - bank-width : Width (in bytes) of the device. If not present, the width |
| 10 | defaults to 1 byte | 11 | defaults to 1 byte |
| 11 | - nand-skip-bbtscan: Indicates the the BBT scanning should be skipped | 12 | - nand-skip-bbtscan: Indicates the the BBT scanning should be skipped |
| 13 | - timings: array of 6 bytes for NAND timings. The meanings of these bytes | ||
| 14 | are: | ||
| 15 | byte 0 TCLR : CLE to RE delay in number of AHB clock cycles, only 4 bits | ||
| 16 | are valid. Zero means one clockcycle, 15 means 16 clock | ||
| 17 | cycles. | ||
| 18 | byte 1 TAR : ALE to RE delay, 4 bits are valid. Same format as TCLR. | ||
| 19 | byte 2 THIZ : number of HCLK clock cycles during which the data bus is | ||
| 20 | kept in Hi-Z (tristate) after the start of a write access. | ||
| 21 | Only valid for write transactions. Zero means zero cycles, | ||
| 22 | 255 means 255 cycles. | ||
| 23 | byte 3 THOLD : number of HCLK clock cycles to hold the address (and data | ||
| 24 | when writing) after the command deassertation. Zero means | ||
| 25 | one cycle, 255 means 256 cycles. | ||
| 26 | byte 4 TWAIT : number of HCLK clock cycles to assert the command to the | ||
| 27 | NAND flash in response to SMWAITn. Zero means 1 cycle, | ||
| 28 | 255 means 256 cycles. | ||
| 29 | byte 5 TSET : number of HCLK clock cycles to assert the address before the | ||
| 30 | command is asserted. Zero means one cycle, 255 means 256 | ||
| 31 | cycles. | ||
| 32 | - bank: default NAND bank to use (0-3 are valid, 0 is the default). | ||
| 12 | 33 | ||
| 13 | Example: | 34 | Example: |
| 14 | 35 | ||
| @@ -24,6 +45,8 @@ Example: | |||
| 24 | 45 | ||
| 25 | bank-width = <1>; | 46 | bank-width = <1>; |
| 26 | nand-skip-bbtscan; | 47 | nand-skip-bbtscan; |
| 48 | timings = /bits/ 8 <0 0 0 2 3 0>; | ||
| 49 | bank = <1>; | ||
| 27 | 50 | ||
| 28 | partition@0 { | 51 | partition@0 { |
| 29 | ... | 52 | ... |
diff --git a/drivers/mtd/nand/fsmc_nand.c b/drivers/mtd/nand/fsmc_nand.c index 0e5a1d96a721..037838682f40 100644 --- a/drivers/mtd/nand/fsmc_nand.c +++ b/drivers/mtd/nand/fsmc_nand.c | |||
| @@ -889,6 +889,24 @@ static int fsmc_nand_probe_config_dt(struct platform_device *pdev, | |||
| 889 | if (of_get_property(np, "nand-skip-bbtscan", NULL)) | 889 | if (of_get_property(np, "nand-skip-bbtscan", NULL)) |
| 890 | pdata->options = NAND_SKIP_BBTSCAN; | 890 | pdata->options = NAND_SKIP_BBTSCAN; |
| 891 | 891 | ||
| 892 | pdata->nand_timings = devm_kzalloc(&pdev->dev, | ||
| 893 | sizeof(*pdata->nand_timings), GFP_KERNEL); | ||
| 894 | if (!pdata->nand_timings) { | ||
| 895 | dev_err(&pdev->dev, "no memory for nand_timing\n"); | ||
| 896 | return -ENOMEM; | ||
| 897 | } | ||
| 898 | of_property_read_u8_array(np, "timings", (u8 *)pdata->nand_timings, | ||
| 899 | sizeof(*pdata->nand_timings)); | ||
| 900 | |||
| 901 | /* Set default NAND bank to 0 */ | ||
| 902 | pdata->bank = 0; | ||
| 903 | if (!of_property_read_u32(np, "bank", &val)) { | ||
| 904 | if (val > 3) { | ||
| 905 | dev_err(&pdev->dev, "invalid bank %u\n", val); | ||
| 906 | return -EINVAL; | ||
| 907 | } | ||
| 908 | pdata->bank = val; | ||
| 909 | } | ||
| 892 | return 0; | 910 | return 0; |
| 893 | } | 911 | } |
| 894 | #else | 912 | #else |
diff --git a/include/linux/mtd/fsmc.h b/include/linux/mtd/fsmc.h index d6ed61ef451d..c8be32e9fc49 100644 --- a/include/linux/mtd/fsmc.h +++ b/include/linux/mtd/fsmc.h | |||
| @@ -137,6 +137,7 @@ enum access_mode { | |||
| 137 | 137 | ||
| 138 | /** | 138 | /** |
| 139 | * fsmc_nand_platform_data - platform specific NAND controller config | 139 | * fsmc_nand_platform_data - platform specific NAND controller config |
| 140 | * @nand_timings: timing setup for the physical NAND interface | ||
| 140 | * @partitions: partition table for the platform, use a default fallback | 141 | * @partitions: partition table for the platform, use a default fallback |
| 141 | * if this is NULL | 142 | * if this is NULL |
| 142 | * @nr_partitions: the number of partitions in the previous entry | 143 | * @nr_partitions: the number of partitions in the previous entry |
