Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mtd: nand: fsmc: update of OF support

Add nand bank selection and timings to the device tree bindings.

Signed-off-by: Mian Yousaf Kaukab <mian.yousaf.kaukab@stericsson.com>
[Added some documentation]
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>

authored by

Mian Yousaf Kaukab and committed by
David Woodhouse
64ddba4d 52778b2e

+43 -1
+24 -1
Documentation/devicetree/bindings/mtd/fsmc-nand.txt
··· 1 - * FSMC NAND 1 + ST Microelectronics Flexible Static Memory Controller (FSMC) 2 + NAND Interface 2 3 3 4 Required properties: 4 5 - compatible : "st,spear600-fsmc-nand", "stericsson,fsmc-nand" ··· 10 9 - bank-width : Width (in bytes) of the device. If not present, the width 11 10 defaults to 1 byte 12 11 - nand-skip-bbtscan: Indicates the the BBT scanning should be skipped 12 + - timings: array of 6 bytes for NAND timings. The meanings of these bytes 13 + are: 14 + byte 0 TCLR : CLE to RE delay in number of AHB clock cycles, only 4 bits 15 + are valid. Zero means one clockcycle, 15 means 16 clock 16 + cycles. 17 + byte 1 TAR : ALE to RE delay, 4 bits are valid. Same format as TCLR. 18 + byte 2 THIZ : number of HCLK clock cycles during which the data bus is 19 + kept in Hi-Z (tristate) after the start of a write access. 20 + Only valid for write transactions. Zero means zero cycles, 21 + 255 means 255 cycles. 22 + byte 3 THOLD : number of HCLK clock cycles to hold the address (and data 23 + when writing) after the command deassertation. Zero means 24 + one cycle, 255 means 256 cycles. 25 + byte 4 TWAIT : number of HCLK clock cycles to assert the command to the 26 + NAND flash in response to SMWAITn. Zero means 1 cycle, 27 + 255 means 256 cycles. 28 + byte 5 TSET : number of HCLK clock cycles to assert the address before the 29 + command is asserted. Zero means one cycle, 255 means 256 30 + cycles. 31 + - bank: default NAND bank to use (0-3 are valid, 0 is the default). 13 32 14 33 Example: 15 34 ··· 45 24 46 25 bank-width = <1>; 47 26 nand-skip-bbtscan; 27 + timings = /bits/ 8 <0 0 0 2 3 0>; 28 + bank = <1>; 48 29 49 30 partition@0 { 50 31 ...
+18
drivers/mtd/nand/fsmc_nand.c
··· 889 889 if (of_get_property(np, "nand-skip-bbtscan", NULL)) 890 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 910 return 0; 893 911 } 894 912 #else
+1
include/linux/mtd/fsmc.h
··· 137 137 138 138 /** 139 139 * fsmc_nand_platform_data - platform specific NAND controller config 140 + * @nand_timings: timing setup for the physical NAND interface 140 141 * @partitions: partition table for the platform, use a default fallback 141 142 * if this is NULL 142 143 * @nr_partitions: the number of partitions in the previous entry