add gpmi-nand dt support for mx6q and mx28
Subsystems (6)
v2 cover add gpmi-nand dt support for mx6q and mx28
The mx6q-arm2 and imx28evk have already support the device tree now. So i decide to add the gpmi-nand dt support to them.
The mx23 does not support the device tree now. I will add the gpmi dt support when it is ready.
Test this patch set on both MX6Q(arm2) and mx28(evk).
v1 --> v2
[1] merge the gpmi/bch device node into one node.
[2] add partitions support.
[3] misc
Huang Shijie (3):
mtd: gpmi: add device tree support for mx6q and mx28
ARM: mx28: add gpmi-nand dt support
ARM: mx6q: add gpmi-nand dt support
.../devicetree/bindings/mtd/gpmi-nand.txt | 34 +++++ arch/arm/boot/dts/imx28-evk.dts | 4 + arch/arm/boot/dts/imx28.dtsi | 18 ++-- arch/arm/boot/dts/imx6q-arm2.dts | 4 + arch/arm/boot/dts/imx6q.dtsi | 12 ++ arch/arm/mach-imx/clock-imx6q.c | 5 +- arch/arm/mach-mxs/clock-mx28.c | 2 +- drivers/mtd/nand/Kconfig | 2 +- drivers/mtd/nand/gpmi-nand/bch-regs.h | 42 +++++-- drivers/mtd/nand/gpmi-nand/gpmi-lib.c | 18 ++-- drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 131 ++++++++++---------- drivers/mtd/nand/gpmi-nand/gpmi-nand.h | 6 +- include/linux/mtd/gpmi-nand.h | 8 +- 13 files changed, 185 insertions(+), 101 deletions(-) create mode 100644 Documentation/devicetree/bindings/mtd/gpmi-nand.txt
PATCH v2 1/3 mtd: gpmi: add device tree support for mx6q and mx28
add gpmi support for mx6q.
add DT support to mx6q and mx28.
--- .../devicetree/bindings/mtd/gpmi-nand.txt | 34 +++++ drivers/mtd/nand/Kconfig | 2 +- drivers/mtd/nand/gpmi-nand/bch-regs.h | 42 +++++-- drivers/mtd/nand/gpmi-nand/gpmi-lib.c | 18 ++-- drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 131 ++++++++++---------- drivers/mtd/nand/gpmi-nand/gpmi-nand.h | 6 +- include/linux/mtd/gpmi-nand.h | 8 +- 7 files changed, 152 insertions(+), 89 deletions(-) create mode 100644 Documentation/devicetree/bindings/mtd/gpmi-nand.txt
Documentation/devicetree/bindings/mtd/gpmi-nand.txt new file +34 -0
@@ -0,0 +1,34 @@ +* Freescale General-Purpose Media Interface (GPMI) + +The GPMI nand controller provides an interface to control the +NAND flash chips. We support only one NAND chip now. + +Required properties: + - compatible : should be "fsl,<chip>-gpmi-nand" + - reg : should contain registers location and length for gpmi and bch. + - reg-names: Should contain the reg names "gpmi-nand" and "bch" + - interrupts : The first is the DMA interrupt number for GPMI. + The second is the BCH interrupt number. + - interrupt-names : The interrupt names "gpmi-dma", "bch"; + - fsl,gpmi-dma-channel : Should contain the dma channel it uses. + +Optional properties: + - partition : contain sub-nodes describing partitions of the + address space. See partition.txt for more detail. + +Examples: + +gpmi-nand at 8000c000 { + compatible = "fsl,imx28-gpmi-nand"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0x8000c000 2000>, <0x8000a000 2000>; + reg-names = "gpmi-nand", "bch"; + interrupts = <88>, <41>; + interrupt-names = "gpmi-dma", "bch"; + fsl,gpmi-dma-channel = <4>; + + partition at 0 { + ... + }; +};
drivers/mtd/nand/Kconfig +1 -1
@@ -440,7 +440,7 @@ config MTD_NAND_NANDSIM config MTD_NAND_GPMI_NAND bool "GPMI NAND Flash Controller driver" - depends on MTD_NAND && (SOC_IMX23 || SOC_IMX28) + depends on MTD_NAND && (SOC_IMX23 || SOC_IMX28 || SOC_IMX6Q) help Enables NAND Flash support for IMX23 or IMX28. The GPMI controller is very powerful, with the help of BCH
drivers/mtd/nand/gpmi-nand/bch-regs.h +32 -10
60 lines not on this page · raw message
drivers/mtd/nand/gpmi-nand/gpmi-lib.c +10 -8
@@ -224,13 +224,13 @@ int bch_set_geometry(struct gpmi_nand_data *this)/* Configure layout 0. */ writel (BF_BCH_FLASH0LAYOUT0_NBLOCKS (block_count) |BF_BCH_FLASH0LAYOUT0_META_SIZE (metadata_size) - |BF_BCH_FLASH0LAYOUT0_ECC0 (ecc_strength) - |BF_BCH_FLASH0LAYOUT0_DATA0_SIZE (block_size), + |BF_BCH_FLASH0LAYOUT0_ECC0 (ecc_strength, this) + |BF_BCH_FLASH0LAYOUT0_DATA0_SIZE (block_size, this), r->bch_regs +HW_BCH_FLASH0LAYOUT0 );writel (BF_BCH_FLASH0LAYOUT1_PAGE_SIZE (page_size) - |BF_BCH_FLASH0LAYOUT1_ECCN (ecc_strength) - |BF_BCH_FLASH0LAYOUT1_DATAN_SIZE (block_size), + |BF_BCH_FLASH0LAYOUT1_ECCN (ecc_strength, this) + |BF_BCH_FLASH0LAYOUT1_DATAN_SIZE (block_size, this), r->bch_regs +HW_BCH_FLASH0LAYOUT1 );/* Set *all* chip selects to use layout 0. */
@@ -256,11 +256,12 @@ static unsigned int ns_to_cycles(unsigned int time,return max (k, min); } +#define DEF_MIN_PROP_DELAY 5 +#define DEF_MAX_PROP_DELAY 9/* Apply timing to current hardware conditions. */ static int gpmi_nfc_compute_hardware_timing (struct gpmi_nand_data *this,struct gpmi_nfc_hardware_timing *hw) { -struct gpmi_nand_platform_data *pdata = this->pdata;struct timing_threshod *nfc = &timing_default_threshold;struct nand_chip *nand = &this->nand;struct nand_timing target = this->timing;
@@ -277,8 +278,8 @@ static int gpmi_nfc_compute_hardware_timing(struct gpmi_nand_data *this,int ideal_sample_delay_in_ns;unsigned int sample_delay_factor;int tEYE; -unsigned int min_prop_delay_in_ns = pdata->min_prop_delay_in_ns; -unsigned int max_prop_delay_in_ns = pdata->max_prop_delay_in_ns; +unsigned int min_prop_delay_in_ns =DEF_MIN_PROP_DELAY ; +unsigned int max_prop_delay_in_ns =DEF_MAX_PROP_DELAY ;/* * If there are multiple chips, we need to relax the timings to allow
@@ -804,7 +805,8 @@ int gpmi_is_ready(struct gpmi_nand_data *this, unsigned chip)if (GPMI_IS_MX23 (this)) { mask =MX23_BM_GPMI_DEBUG_READY0 << chip; reg =readl (r->gpmi_regs +HW_GPMI_DEBUG ); - }else if (GPMI_IS_MX28 (this)) { + }else if (GPMI_IS_MX28 (this) ||GPMI_IS_MX6Q (this)) { +/* MX28 shares the same R/B register as MX6Q. */ mask =MX28_BF_GPMI_STAT_READY_BUSY (1 << chip); reg =readl (r->gpmi_regs +HW_GPMI_STAT ); }else
drivers/mtd/nand/gpmi-nand/gpmi-nand.c +67 -64
218 lines not on this page · raw message
drivers/mtd/nand/gpmi-nand/gpmi-nand.h +4 -2
@@ -266,8 +266,10 @@ extern int gpmi_read_page(struct gpmi_nand_data *,#define STATUS_UNCORRECTABLE 0xfe/* Use the platform_id to distinguish different Archs. */ -#define IS_MX23 0x1 -#define IS_MX28 0x2 +#define IS_MX23 0x0 +#define IS_MX28 0x1 +#define IS_MX6Q 0x2#define GPMI_IS_MX23 (x) ((x)->pdev->id_entry->driver_data == IS_MX23)#define GPMI_IS_MX28 (x) ((x)->pdev->id_entry->driver_data == IS_MX28) +#define GPMI_IS_MX6Q (x) ((x)->pdev->id_entry->driver_data == IS_MX6Q)#endif
include/linux/mtd/gpmi-nand.h +4 -4
@@ -23,12 +23,12 @@#define GPMI_NAND_RES_SIZE 6/* Resource names for the GPMI NAND driver. */ -#define GPMI_NAND_GPMI_REGS_ADDR_RES_NAME "GPMI NAND GPMI Registers" +#define GPMI_NAND_GPMI_REGS_ADDR_RES_NAME "gpmi-nand"#define GPMI_NAND_GPMI_INTERRUPT_RES_NAME "GPMI NAND GPMI Interrupt" -#define GPMI_NAND_BCH_REGS_ADDR_RES_NAME "GPMI NAND BCH Registers" -#define GPMI_NAND_BCH_INTERRUPT_RES_NAME "GPMI NAND BCH Interrupt" +#define GPMI_NAND_BCH_REGS_ADDR_RES_NAME "bch" +#define GPMI_NAND_BCH_INTERRUPT_RES_NAME "bch"#define GPMI_NAND_DMA_CHANNELS_RES_NAME "GPMI NAND DMA Channels" -#define GPMI_NAND_DMA_INTERRUPT_RES_NAME "GPMI NAND DMA Interrupt" +#define GPMI_NAND_DMA_INTERRUPT_RES_NAME "gpmi-dma"/** * struct gpmi_nand_platform_data - GPMI NAND driver platform data.
Signature · 1 line
1.7.0.4
PATCH v2 1/3 mtd: gpmi: add device tree support for mx6q and mx28
Quoted 28 lines · Huang Shijie
add gpmi support for mx6q.
add DT support to mx6q and mx28.Signed-off-by Huang Shijie <[email protected]>--- .../devicetree/bindings/mtd/gpmi-nand.txt | 34 +++++ drivers/mtd/nand/Kconfig | 2 +- drivers/mtd/nand/gpmi-nand/bch-regs.h | 42 +++++-- drivers/mtd/nand/gpmi-nand/gpmi-lib.c | 18 ++-- drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 131 ++++++++++---------- drivers/mtd/nand/gpmi-nand/gpmi-nand.h | 6 +- include/linux/mtd/gpmi-nand.h | 8 +- 7 files changed, 152 insertions(+), 89 deletions(-) create mode 100644 Documentation/devicetree/bindings/mtd/gpmi-nand.txtDocumentation/devicetree/bindings/mtd/gpmi-nand.txt new file +7
-0@@ -0,0 +1,34 @@ +* Freescale General-Purpose Media Interface (GPMI) + +The GPMI nand controller provides an interface to control the +NAND flash chips. We support only one NAND chip now. + +Required properties: + - compatible : should be "fsl,<chip>-gpmi-nand"
Documentation/devicetree/bindings/mtd/gpmi-nand.txt line 17
Quoted 10 lines
Documentation/devicetree/bindings/mtd/gpmi-nand.txt new file +10
-0+ - reg : should contain registers location and length for gpmi and bch. + - reg-names: Should contain the reg names "gpmi-nand" and "bch" + - interrupts : The first is the DMA interrupt number for GPMI. + The second is the BCH interrupt number. + - interrupt-names : The interrupt names "gpmi-dma", "bch"; + - fsl,gpmi-dma-channel : Should contain the dma channel it uses. + +Optional properties: + - partition : contain sub-nodes describing partitions of the + address space. See partition.txt for more detail.
The partition here is not a property but a sub-node, so you should not document it as a property, but simply put a reference to partition.txt probably like what Documentation/devicetree/bindings/mtd/atmel-dataflash.txt does.
Quoted 158 lines
Documentation/devicetree/bindings/mtd/gpmi-nand.txt new file +17
-0+ +Examples: + +gpmi-nand at 8000c000 { + compatible = "fsl,imx28-gpmi-nand"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0x8000c000 2000>, <0x8000a000 2000>; + reg-names = "gpmi-nand", "bch"; + interrupts = <88>, <41>; + interrupt-names = "gpmi-dma", "bch"; + fsl,gpmi-dma-channel = <4>; + + partition at 0 { + ... + }; +};drivers/mtd/nand/Kconfig +1
-1@@ -440,7 +440,7 @@ config MTD_NAND_NANDSIM config MTD_NAND_GPMI_NAND bool "GPMI NAND Flash Controller driver" - depends on MTD_NAND && (SOC_IMX23 || SOC_IMX28) + depends on MTD_NAND && (SOC_IMX23 || SOC_IMX28 || SOC_IMX6Q) help Enables NAND Flash support for IMX23 or IMX28. The GPMI controller is very powerful, with the help of BCHdrivers/mtd/nand/gpmi-nand/bch-regs.h +32
-10@@ -51,15 +51,26 @@#define BP_BCH_FLASH0LAYOUT0_ECC0 12#define BM_BCH_FLASH0LAYOUT0_ECC0 (0xf << BP_BCH_FLASH0LAYOUT0_ECC0) -#define BF_BCH_FLASH0LAYOUT0_ECC0 (v) \ - (((v) << BP_BCH_FLASH0LAYOUT0_ECC0) & BM_BCH_FLASH0LAYOUT0_ECC0) +#define MX6Q_BP_BCH_FLASH0LAYOUT0_ECC0 11 +#define MX6Q_BM_BCH_FLASH0LAYOUT0_ECC0 (0x1f << MX6Q_BP_BCH_FLASH0LAYOUT0_ECC0) +#define BF_BCH_FLASH0LAYOUT0_ECC0 (v, x) \ + (GPMI_IS_MX6Q(x) \ + ? (((v) << MX6Q_BP_BCH_FLASH0LAYOUT0_ECC0) \ + & MX6Q_BM_BCH_FLASH0LAYOUT0_ECC0) \ + : (((v) << BP_BCH_FLASH0LAYOUT0_ECC0) \ + & BM_BCH_FLASH0LAYOUT0_ECC0) \ + )#define BP_BCH_FLASH0LAYOUT0_DATA0_SIZE 0#define BM_BCH_FLASH0LAYOUT0_DATA0_SIZE \ (0xfff << BP_BCH_FLASH0LAYOUT0_DATA0_SIZE) -#define BF_BCH_FLASH0LAYOUT0_DATA0_SIZE (v) \ - (((v) << BP_BCH_FLASH0LAYOUT0_DATA0_SIZE)\ - & BM_BCH_FLASH0LAYOUT0_DATA0_SIZE) +#define MX6Q_BM_BCH_FLASH0LAYOUT0_DATA0_SIZE \ + (0x3ff << BP_BCH_FLASH0LAYOUT0_DATA0_SIZE) +#define BF_BCH_FLASH0LAYOUT0_DATA0_SIZE (v, x) \ + (GPMI_IS_MX6Q(x) \ + ? (((v) >> 2) & MX6Q_BM_BCH_FLASH0LAYOUT0_DATA0_SIZE) \ + : ((v) & BM_BCH_FLASH0LAYOUT0_DATA0_SIZE) \ + )#define HW_BCH_FLASH0LAYOUT1 0x00000090@@ -72,13 +83,24 @@#define BP_BCH_FLASH0LAYOUT1_ECCN 12#define BM_BCH_FLASH0LAYOUT1_ECCN (0xf << BP_BCH_FLASH0LAYOUT1_ECCN) -#define BF_BCH_FLASH0LAYOUT1_ECCN (v) \ - (((v) << BP_BCH_FLASH0LAYOUT1_ECCN) & BM_BCH_FLASH0LAYOUT1_ECCN) +#define MX6Q_BP_BCH_FLASH0LAYOUT1_ECCN 11 +#define MX6Q_BM_BCH_FLASH0LAYOUT1_ECCN (0x1f << MX6Q_BP_BCH_FLASH0LAYOUT1_ECCN) +#define BF_BCH_FLASH0LAYOUT1_ECCN (v, x) \ + (GPMI_IS_MX6Q(x) \ + ? (((v) << MX6Q_BP_BCH_FLASH0LAYOUT1_ECCN) \ + & MX6Q_BM_BCH_FLASH0LAYOUT1_ECCN) \ + : (((v) << BP_BCH_FLASH0LAYOUT1_ECCN) \ + & BM_BCH_FLASH0LAYOUT1_ECCN) \ + )#define BP_BCH_FLASH0LAYOUT1_DATAN_SIZE 0#define BM_BCH_FLASH0LAYOUT1_DATAN_SIZE \ (0xfff << BP_BCH_FLASH0LAYOUT1_DATAN_SIZE) -#define BF_BCH_FLASH0LAYOUT1_DATAN_SIZE (v) \ - (((v) << BP_BCH_FLASH0LAYOUT1_DATAN_SIZE) \ - & BM_BCH_FLASH0LAYOUT1_DATAN_SIZE) +#define MX6Q_BM_BCH_FLASH0LAYOUT1_DATAN_SIZE \ + (0x3ff << BP_BCH_FLASH0LAYOUT1_DATAN_SIZE) +#define BF_BCH_FLASH0LAYOUT1_DATAN_SIZE (v, x) \ + (GPMI_IS_MX6Q(x) \ + ? (((v) >> 2) & MX6Q_BM_BCH_FLASH0LAYOUT1_DATAN_SIZE) \ + : ((v) & BM_BCH_FLASH0LAYOUT1_DATAN_SIZE) \ + )#endif drivers/mtd/nand/gpmi-nand/gpmi-lib.c +10
-8@@ -224,13 +224,13 @@ int bch_set_geometry(struct gpmi_nand_data *this)/* Configure layout 0. */ writel (BF_BCH_FLASH0LAYOUT0_NBLOCKS (block_count) |BF_BCH_FLASH0LAYOUT0_META_SIZE (metadata_size) - |BF_BCH_FLASH0LAYOUT0_ECC0 (ecc_strength) - |BF_BCH_FLASH0LAYOUT0_DATA0_SIZE (block_size), + |BF_BCH_FLASH0LAYOUT0_ECC0 (ecc_strength, this) + |BF_BCH_FLASH0LAYOUT0_DATA0_SIZE (block_size, this), r->bch_regs +HW_BCH_FLASH0LAYOUT0 );writel (BF_BCH_FLASH0LAYOUT1_PAGE_SIZE (page_size) - |BF_BCH_FLASH0LAYOUT1_ECCN (ecc_strength) - |BF_BCH_FLASH0LAYOUT1_DATAN_SIZE (block_size), + |BF_BCH_FLASH0LAYOUT1_ECCN (ecc_strength, this) + |BF_BCH_FLASH0LAYOUT1_DATAN_SIZE (block_size, this), r->bch_regs +HW_BCH_FLASH0LAYOUT1 );/* Set *all* chip selects to use layout 0. */ @@ -256,11 +256,12 @@ static unsigned int ns_to_cycles(unsigned int time,return max (k, min); } +#define DEF_MIN_PROP_DELAY 5 +#define DEF_MAX_PROP_DELAY 9/* Apply timing to current hardware conditions. */ static int gpmi_nfc_compute_hardware_timing (struct gpmi_nand_data *this,struct gpmi_nfc_hardware_timing *hw) { -struct gpmi_nand_platform_data *pdata = this->pdata;struct timing_threshod *nfc = &timing_default_threshold;struct nand_chip *nand = &this->nand;struct nand_timing target = this->timing;@@ -277,8 +278,8 @@ static int gpmi_nfc_compute_hardware_timing(struct gpmi_nand_data *this,int ideal_sample_delay_in_ns;unsigned int sample_delay_factor;int tEYE; -unsigned int min_prop_delay_in_ns = pdata->min_prop_delay_in_ns; -unsigned int max_prop_delay_in_ns = pdata->max_prop_delay_in_ns; +unsigned int min_prop_delay_in_ns =DEF_MIN_PROP_DELAY ; +unsigned int max_prop_delay_in_ns =DEF_MAX_PROP_DELAY ;/* * If there are multiple chips, we need to relax the timings to allow @@ -804,7 +805,8 @@ int gpmi_is_ready(struct gpmi_nand_data *this, unsigned chip)if (GPMI_IS_MX23 (this)) { mask =MX23_BM_GPMI_DEBUG_READY0 << chip; reg =readl (r->gpmi_regs +HW_GPMI_DEBUG ); - }else if (GPMI_IS_MX28 (this)) { + }else if (GPMI_IS_MX28 (this) ||GPMI_IS_MX6Q (this)) { +/* MX28 shares the same R/B register as MX6Q. */ mask =MX28_BF_GPMI_STAT_READY_BUSY (1 << chip); reg =readl (r->gpmi_regs +HW_GPMI_STAT ); }else drivers/mtd/nand/gpmi-nand/gpmi-nand.c +0
-0
drivers/mtd/nand/gpmi-nand/gpmi-nand.c line 27
Quoted 4 lines
drivers/mtd/nand/gpmi-nand/gpmi-nand.c +1
-0@@ -24,6 +24,9 @@#include <linux/module.h> #include <linux/mtd/gpmi-nand.h> #include <linux/mtd/partitions.h> +#include <linux/of_address.h>
This line is probably not needed?
drivers/mtd/nand/gpmi-nand/gpmi-nand.c line 29
Quoted 2 lines
drivers/mtd/nand/gpmi-nand/gpmi-nand.c +2
-0+#include <linux/of_device.h> +#include <linux/of_irq.h>
Ditto?
Quoted 37 lines
drivers/mtd/nand/gpmi-nand/gpmi-nand.c +10
-6#include "gpmi-nand.h" /* add our owner bbt descriptor */ @@ -385,7 +388,7 @@ static void release_bch_irq(struct gpmi_nand_data *this)static bool gpmi_dma_filter (struct dma_chan *chan,void *param) {struct gpmi_nand_data *this = param; -struct resource *r = this->private; +int dma_channel = (int )this->private;if (!mxs_dma_is_apbh (chan))return false;@@ -397,7 +400,7 @@ static bool gpmi_dma_filter(struct dma_chan *chan, void *param)* for mx28 : MX28_DMA_GPMI0 ~ MX28_DMA_GPMI7 * (These eight channels share the same IRQ!) */ -if (r->start <= chan->chan_id && chan->chan_id <= r->end) { +if (dma_channel == chan->chan_id) { chan->private = &this->dma_data;return true; }@@ -417,57 +420,45 @@ static void release_dma_channels(struct gpmi_nand_data *this)static int __devinit acquire_dma_channels (struct gpmi_nand_data *this) {struct platform_device *pdev = this->pdev; -struct gpmi_nand_platform_data *pdata = this->pdata; -struct resources *res = &this->resources; -struct resource *r, *r_dma; -unsigned int i; +struct resource *r_dma; +struct device_node *dn; +int dma_channel; +unsigned int ret; +struct dma_chan *dma_chan; +dma_cap_mask_t mask; + +/* dma channel, we only use the first one. */
drivers/mtd/nand/gpmi-nand/gpmi-nand.c static void release_dma_channels(struct gpmi_nand_data *this) · line 426
Quoted 10 lines
drivers/mtd/nand/gpmi-nand/gpmi-nand.c +7
-2+ dn = pdev->dev.of_node; + ret =of_property_read_u32 (dn,"fsl,gpmi-dma-channel" , &dma_channel); +if (ret) { +pr_err ("unable to get DMA channel from dt.\n" ); + goto acquire_err; + } + this->private = (void *)dma_channel; - r =platform_get_resource_byname (pdev,IORESOURCE_DMA , -GPMI_NAND_DMA_CHANNELS_RES_NAME );
You are adding device tree support into a driver that is working fine for non-DT probe. So before all the users of this driver are converted to DT, you have to ensure the driver works for both non-DT and DT users in a single image when you add DT support for it.
So above code should be something like:
if (dn) {
/* get channel number from device tree */
......
} else {
/* otherwise it works as before */
}Quoted 71 lines
drivers/mtd/nand/gpmi-nand/gpmi-nand.c +13
-34+/* gpmi dma interrupt */ r_dma =platform_get_resource_byname (pdev,IORESOURCE_IRQ ,GPMI_NAND_DMA_INTERRUPT_RES_NAME ); -if (!r || !r_dma) { +if (!r_dma) {pr_err ("Can't get resource for DMA\n" ); -return -ENXIO ; + goto acquire_err; } + this->dma_data.chan_irq = r_dma->start; -/* used in gpmi_dma_filter() */ - this->private = r; - -for (i = r->start; i <= r->end; i++) { -struct dma_chan *dma_chan; -dma_cap_mask_t mask; - -if (i - r->start >= pdata->max_chip_count) -break ; +/* request dma channel */ +dma_cap_zero (mask); +dma_cap_set (DMA_SLAVE , mask); -dma_cap_zero (mask); -dma_cap_set (DMA_SLAVE , mask); - -/* get the DMA interrupt */ -if (r_dma->start == r_dma->end) { -/* only register the first. */ -if (i == r->start) - this->dma_data.chan_irq = r_dma->start; -else - this->dma_data.chan_irq =NO_IRQ ; - }else - this->dma_data.chan_irq = r_dma->start + (i - r->start); - - dma_chan =dma_request_channel (mask, gpmi_dma_filter, this); -if (!dma_chan) - goto acquire_err; - -/* fill the first empty item */ - this->dma_chans[i - r->start] = dma_chan; + dma_chan =dma_request_channel (mask, gpmi_dma_filter, this); +if (!dma_chan) { +pr_err ("dma_request_channel failed.\n" ); + goto acquire_err; } - res->dma_low_channel = r->start; - res->dma_high_channel = i; + this->dma_chans[0 ] = dma_chan;return 0 ; acquire_err: -pr_err ("Can't acquire DMA channel %u\n" , i);release_dma_channels (this);return -EINVAL ; }@@ -1461,9 +1452,9 @@ void gpmi_nfc_exit(struct gpmi_nand_data *this)static int __devinit gpmi_nfc_init (struct gpmi_nand_data *this) { -struct gpmi_nand_platform_data *pdata = this->pdata;struct mtd_info *mtd = &this->mtd;struct nand_chip *chip = &this->nand; +struct mtd_part_parser_data ppdata = {};int ret;/* init current chip */
drivers/mtd/nand/gpmi-nand/gpmi-nand.c static int __devinit gpmi_nfc_init(struct gpmi_nand_data *this) · line 1495
Quoted 5 lines
drivers/mtd/nand/gpmi-nand/gpmi-nand.c +1
-1@@ -1501,14 +1492,14 @@ static int __devinit gpmi_nfc_init(struct gpmi_nand_data *this)if (ret) goto err_out; - ret =nand_scan (mtd, pdata->max_chip_count); + ret =nand_scan (mtd,1 );
Ditto, you should not break non-DT users.
Quoted 42 lines
drivers/mtd/nand/gpmi-nand/gpmi-nand.c +24
-3if (ret) {pr_err ("Chip scan failed\n" ); goto err_out; } - ret =mtd_device_parse_register (mtd,NULL ,NULL , - pdata->partitions, pdata->partition_count); + ppdata.of_node = this->pdev->dev.of_node; + ret =mtd_device_parse_register (mtd,NULL , &ppdata,NULL ,0 );if (ret) goto err_out;return 0 ;@@ -1518,12 +1509,41 @@ err_out:return ret; } +static const struct platform_device_id gpmi_ids[] = { + { .name ="imx23-gpmi-nand" , .driver_data =IS_MX23 , }, + { .name ="imx28-gpmi-nand" , .driver_data =IS_MX28 , }, + { .name ="imx6q-gpmi-nand" , .driver_data =IS_MX6Q , }, + {}, +}; + +static const struct of_device_id gpmi_nand_id_table[] = { + { + .compatible ="fsl,imx23-gpmi-nand" , + .data = (void *)&gpmi_ids[IS_MX23 ] + }, { + .compatible ="fsl,imx28-gpmi-nand" , + .data = (void *)&gpmi_ids[IS_MX28 ] + }, { + .compatible ="fsl,imx6q-gpmi-nand" , + .data = (void *)&gpmi_ids[IS_MX6Q ] + }, {} +}; +MODULE_DEVICE_TABLE (of, gpmi_nand_id_table); +static int __devinit gpmi_nand_probe (struct platform_device *pdev) { -struct gpmi_nand_platform_data *pdata = pdev->dev.platform_data;struct gpmi_nand_data *this; +const struct of_device_id *of_id;
drivers/mtd/nand/gpmi-nand/gpmi-nand.c err_out: · line 1546
Quoted 10 lines
drivers/mtd/nand/gpmi-nand/gpmi-nand.c +8
-0int ret; + of_id =of_match_device (gpmi_nand_id_table, &pdev->dev); +if (of_id) + pdev->id_entry = of_id->data; +else { +pr_err ("Failed to find the right device id.\n" ); +return -ENOMEM ; + } +
Ditto, it should still work for non-DT users.
BTW, it seems Documentation/CodingStyle suggest put brace like the following.
if (condition) {
do_this();
} else {
otherwise_do_this();
otherwise_do_that();
}Regards,
Shawn
Quoted 88 lines
drivers/mtd/nand/gpmi-nand/gpmi-nand.c +1
-18this =kzalloc (sizeof (*this),GFP_KERNEL );if (!this) {pr_err ("Failed to allocate per-device memory\n" );@@ -1533,13 +1553,6 @@ static int __devinit gpmi_nand_probe(struct platform_device *pdev)platform_set_drvdata (pdev, this); this->pdev = pdev; this->dev = &pdev->dev; - this->pdata = pdata; - -if (pdata->platform_init) { - ret = pdata->platform_init (); -if (ret) - goto platform_init_error; - } ret =acquire_resources (this);if (ret)@@ -1557,7 +1570,6 @@ static int __devinit gpmi_nand_probe(struct platform_device *pdev) exit_nfc_init:release_resources (this); -platform_init_error: exit_acquire_resources:platform_set_drvdata (pdev,NULL );kfree (this);@@ -1575,19 +1587,10 @@ static int __exit gpmi_nand_remove(struct platform_device *pdev)return 0 ; } -static const struct platform_device_id gpmi_ids[] = { - { - .name ="imx23-gpmi-nand" , - .driver_data =IS_MX23 , - }, { - .name ="imx28-gpmi-nand" , - .driver_data =IS_MX28 , - }, {}, -}; -static struct platform_driver gpmi_nand_driver = { .driver = { .name ="gpmi-nand" , + .of_match_table = gpmi_nand_id_table, }, .probe = gpmi_nand_probe, .remove =__exit_p (gpmi_nand_remove),drivers/mtd/nand/gpmi-nand/gpmi-nand.h +4
-2@@ -266,8 +266,10 @@ extern int gpmi_read_page(struct gpmi_nand_data *,#define STATUS_UNCORRECTABLE 0xfe/* Use the platform_id to distinguish different Archs. */ -#define IS_MX23 0x1 -#define IS_MX28 0x2 +#define IS_MX23 0x0 +#define IS_MX28 0x1 +#define IS_MX6Q 0x2#define GPMI_IS_MX23 (x) ((x)->pdev->id_entry->driver_data == IS_MX23)#define GPMI_IS_MX28 (x) ((x)->pdev->id_entry->driver_data == IS_MX28) +#define GPMI_IS_MX6Q (x) ((x)->pdev->id_entry->driver_data == IS_MX6Q)#endif include/linux/mtd/gpmi-nand.h +4
-4@@ -23,12 +23,12 @@#define GPMI_NAND_RES_SIZE 6/* Resource names for the GPMI NAND driver. */ -#define GPMI_NAND_GPMI_REGS_ADDR_RES_NAME "GPMI NAND GPMI Registers" +#define GPMI_NAND_GPMI_REGS_ADDR_RES_NAME "gpmi-nand"#define GPMI_NAND_GPMI_INTERRUPT_RES_NAME "GPMI NAND GPMI Interrupt" -#define GPMI_NAND_BCH_REGS_ADDR_RES_NAME "GPMI NAND BCH Registers" -#define GPMI_NAND_BCH_INTERRUPT_RES_NAME "GPMI NAND BCH Interrupt" +#define GPMI_NAND_BCH_REGS_ADDR_RES_NAME "bch" +#define GPMI_NAND_BCH_INTERRUPT_RES_NAME "bch"#define GPMI_NAND_DMA_CHANNELS_RES_NAME "GPMI NAND DMA Channels" -#define GPMI_NAND_DMA_INTERRUPT_RES_NAME "GPMI NAND DMA Interrupt" +#define GPMI_NAND_DMA_INTERRUPT_RES_NAME "gpmi-dma"/** * struct gpmi_nand_platform_data - GPMI NAND driver platform data. Signature · 1 line
1.7.0.4
PATCH v2 1/3 mtd: gpmi: add device tree support for mx6q and mx28
Hi Shawn:
thanks a lot for your review.
Quoted 4 lines
You are adding device tree support into a driver that is working fine for non-DT probe. So before all the users of this driver are converted to DT, you have to ensure the driver works for both non-DT and DT users in a single image when you add DT support for it.
The current gpmi-nand driver can not work in the non-DT, as you known, there are
several patches which are not accepted to you.
So, does it make sense to still maintain the support for non-DT?
So i prefer to convert the gpmi-nand to a pure DT driver. make the code clear and simple.
Quoted 144 lines
So above code should be something like:
if (dn) { /* get channel number from device tree */ ...... } else { /* otherwise it works as before */ }Quoted 69 lines
Quoted 69 lines
+ /* gpmi dma interrupt */
r_dma= platform_get_resource_byname(pdev,IORESOURCE_IRQ,
GPMI_NAND_DMA_INTERRUPT_RES_NAME);
- if (!r || !r_dma) {+ if (!r_dma) { pr_err("Can't get resource for DMA\n"); - return -ENXIO; + goto acquire_err; }+
this->dma_data.chan_irq=r_dma->start;- /* used in
gpmi_dma_filter()*/
-this->private= r;
-
- for (i =r->start; i<=r->end; i++) {
- structdma_chan*dma_chan;
-dma_cap_mask_tmask;
-
- if (i - r->start>=pdata->max_chip_count)
- break;
+ /* request dma channel */
+dma_cap_zero(mask);
+dma_cap_set(DMA_SLAVE, mask);-
dma_cap_zero(mask);
-dma_cap_set(DMA_SLAVE, mask);
-
- /* get the DMA interrupt */
- if (r_dma->start==r_dma->end) {
- /* only register the first. */
- if (i ==r->start)
-this->dma_data.chan_irq=r_dma->start;
- else
-this->dma_data.chan_irq=NO_IRQ;
- } else
-this->dma_data.chan_irq=r_dma->start+ (i -r->start);
-
-dma_chan=dma_request_channel(mask, gpmi_dma_filter, this);
- if (!dma_chan)
- gotoacquire_err;
-
- /* fill the first empty item */
- this->dma_chans[i -r->start] =dma_chan;
+dma_chan=dma_request_channel(mask, gpmi_dma_filter, this);
+ if (!dma_chan) {
+pr_err("dma_request_channel failed.\n");+ goto acquire_err; }-
res->dma_low_channel=r->start;
-res->dma_high_channel= i;+ this->dma_chans[0] = dma_chan; return 0; acquire_err: - pr_err("Can't acquire DMA channel %u\n", i); release_dma_channels(this); return -EINVAL; }@@ -1461,9 +1452,9 @@ void
gpmi_nfc_exit(struct gpmi_nand_data *this)static int
__devinitgpmi_nfc_init(struct gpmi_nand_data *this){- struct gpmi_nand_platform_data *pdata = this->pdata; struct mtd_info *mtd =&this->mtd; struct nand_chip *chip =&this->nand; + struct mtd_part_parser_data ppdata = {}; int ret;Quoted 7 lines
Quoted 7 lines
/* init current chip */@@ -1501,14 +1492,14 @@ static int
__devinitgpmi_nfc_init(struct gpmi_nand_data *this)
if (ret)
gotoerr_out;- ret =
nand_scan(mtd, pdata->max_chip_count);
+ ret =nand_scan(mtd, 1);Ditto, you should not break non-DT users.
Quoted 44 lines
Quoted 44 lines
if (ret) { pr_err("Chip scan failed\n"); goto err_out; }- ret = mtd_device_parse_register(mtd, NULL, NULL,
-pdata->partitions,pdata->partition_count);
+ ppdata.of_node =this->pdev->dev.of_node;+ ret = mtd_device_parse_register(mtd, NULL,&ppdata, NULL, 0); if (ret) goto err_out; return 0; @@ -1518,12 +1509,41 @@ err_out: return ret; }+static const struct
platform_device_idgpmi_ids[] = {
+ { .name = "imx23-gpmi-nand", .driver_data =IS_MX23, },
+ { .name = "imx28-gpmi-nand", .driver_data =IS_MX28, },
+ { .name = "imx6q-gpmi-nand", .driver_data =IS_MX6Q, },
+ {},
+};
+
+static const structof_device_idgpmi_nand_id_table[] = {
+ {
+ .compatible = "fsl,imx23-gpmi-nand",
+ .data = (void *)&gpmi_ids[IS_MX23]
+ }, {
+ .compatible = "fsl,imx28-gpmi-nand",
+ .data = (void *)&gpmi_ids[IS_MX28]
+ }, {
+ .compatible = "fsl,imx6q-gpmi-nand",
+ .data = (void *)&gpmi_ids[IS_MX6Q]
+ }, {}
+};
+MODULE_DEVICE_TABLE(of,gpmi_nand_id_table);
+
static int__devinitgpmi_nand_probe(struct platform_device *pdev){- struct gpmi_nand_platform_data *pdata = pdev->dev.platform_data; struct gpmi_nand_data *this; + const struct of_device_id *of_id; int ret;Quoted 8 lines
Quoted 8 lines
+
of_id=of_match_device(gpmi_nand_id_table,&pdev->dev);
+ if (of_id)
+pdev->id_entry=of_id->data;
+ else {
+pr_err("Failed to find the right device id.\n");
+ return-ENOMEM;
+ }
+Ditto, it should still work for non-DT users.
BTW, it seems
Documentation/CodingStylesuggest put brace like the following.
Quoted 6 lines
if (condition) {
do_this();
} else {
otherwise_do_this();
otherwise_do_that();
}thanks.
But the Documention/CodingStyle tells us "Do not unnecessarily use braces where a single statement will do."
Best Regards
Huang Shijie
PATCH v2 1/3 mtd: gpmi: add device tree support for mx6q and mx28
Quoted 7 lines · Huang Shijie
Hi Shawn:
thanks a lot for your review.
Quoted 4 lines
You are adding device tree support into a driver that is working fine for non-DT probe. So before all the users of this driver are converted to DT, you have to ensure the driver works for both non-DT and DT users in a single image when you add DT support for it.
Quoted 9 lines
The current gpmi-nand driver can not work in the non-DT, as you known, there are
several patches which are not accepted to you.So, does it make sense to still maintain the support for non-DT?
So i prefer to convert the gpmi-nand to a pure DT driver. make the code clear and simple.
Yeah, I'm fine with that.
Signature · 2 lines
Regards, Shawn
PATCH v2 1/3 mtd: gpmi: add device tree support for mx6q and mx28
In reply to Shawn Guo? 2012?05?01? 15:49, Shawn Guo ??:
Quoted 9 lines
BTW, it seems
Documentation/CodingStylesuggest put brace like the following.if (condition) { do_this(); } else { otherwise_do_this(); otherwise_do_that(); }
sorry. you are right.
Best Regards
Huang Shijie
PATCH v2 2/3 ARM: mx28: add gpmi-nand dt support
In reply to Huang Shijieadd gpmi-nand device tree support, and add proper clock for it. Also enable the gpmi support for mx28-evk board.
--- arch/arm/boot/dts/imx28-evk.dts | 4 ++++ arch/arm/boot/dts/imx28.dtsi | 18 +++++++++--------- arch/arm/mach-mxs/clock-mx28.c | 2 +- 3 files changed, 14 insertions(+), 10 deletions(-)
arch/arm/boot/dts/imx28-evk.dts +4 -0
@@ -22,6 +22,10 @@ apb at 80000000 { apbh at 80000000 { + gpmi-nand at 8000c000 { + status = "okay"; + }; + mmc1: ssp at 80010000 { slot-8bit; status = "okay";
arch/arm/boot/dts/imx28.dtsi +9 -9
@@ -62,15 +62,15 @@ status = "disabled"; }; - bch at 8000a000 { - reg = <0x8000a000 2000>; - interrupts = <41>; - status = "disabled"; - }; - - gpmi at 8000c000 { - reg = <0x8000c000 2000>; - interrupts = <42 88>; + gpmi-nand at 8000c000 { + compatible = "fsl,imx28-gpmi-nand"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0x8000c000 2000>, <0x8000a000 2000>; + reg-names = "gpmi-nand", "bch"; + interrupts = <88>, <41>; + interrupt-names = "gpmi-dma", "bch"; + fsl,gpmi-dma-channel = <4>; status = "disabled"; };
arch/arm/mach-mxs/clock-mx28.c +1 -1
@@ -617,7 +617,6 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK("duart", NULL, uart_clk) _REGISTER_CLOCK("imx28-fec.0", NULL, fec_clk) _REGISTER_CLOCK("imx28-fec.1", NULL, fec_clk) - _REGISTER_CLOCK("imx28-gpmi-nand", NULL, gpmi_clk) _REGISTER_CLOCK("mxs-auart.0", NULL, uart_clk) _REGISTER_CLOCK("mxs-auart.1", NULL, uart_clk)_REGISTER_CLOCK ("mxs-auart.2" ,NULL , uart_clk)
@@ -649,6 +648,7 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK("mxs-saif.0", NULL, saif0_clk)_REGISTER_CLOCK ("mxs-saif.1" ,NULL , saif1_clk) /* for DT */ + _REGISTER_CLOCK("8000c000.gpmi-nand", NULL, gpmi_clk) _REGISTER_CLOCK("80074000.serial", NULL, uart_clk) _REGISTER_CLOCK("800f0000.ethernet", NULL, fec_clk)_REGISTER_CLOCK ("800f4000.ethernet" ,NULL , fec_clk)
Signature · 1 line
1.7.0.4
PATCH v2 3/3 ARM: mx6q: add gpmi-nand dt support
In reply to Huang Shijieadd gpmi-nand dt support, and add the proper clock for gpmi-nand. Also enable the gpmi for mx6q-arm2 board.
--- arch/arm/boot/dts/imx6q-arm2.dts | 4 ++++ arch/arm/boot/dts/imx6q.dtsi | 12 ++++++++++++ arch/arm/mach-imx/clock-imx6q.c | 5 +++-- 3 files changed, 19 insertions(+), 2 deletions(-)
arch/arm/boot/dts/imx6q-arm2.dts +4 -0
@@ -26,6 +26,10 @@ }; soc { + gpmi-nand at 00112000 { + status = "okay"; + }; + aips-bus at 02100000 { /* AIPS2 */ enet at 02188000 { phy-mode = "rgmii";
arch/arm/boot/dts/imx6q.dtsi +12 -0
@@ -87,6 +87,18 @@ interrupt-parent = <&intc>; ranges; + gpmi-nand at 00112000 { + compatible = "fsl,imx6q-gpmi-nand"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0x00112000 0x2000>, <0x00114000 0x2000>; + reg-names = "gpmi-nand", "bch"; + interrupts = <0 13 0x04>, <0 15 0x04>; + interrupt-names = "gpmi-dma", "bch"; + fsl,gpmi-dma-channel = <0>; + status = "disabled"; + }; + timer at 00a00600 { compatible = "arm,cortex-a9-twd-timer"; reg = <0x00a00600 0x20>;
arch/arm/mach-imx/clock-imx6q.c +3 -2
@@ -1859,7 +1859,8 @@ DEF_CLK(pwm1_clk, CCGR4, CG8, &ipg_perclk, NULL);DEF_CLK (pwm2_clk,CCGR4 ,CG9 , &ipg_perclk,NULL );DEF_CLK (pwm3_clk,CCGR4 ,CG10 , &ipg_perclk,NULL );DEF_CLK (pwm4_clk,CCGR4 ,CG11 , &ipg_perclk,NULL ); -DEF_CLK (gpmi_bch_apb_clk,CCGR4 ,CG12 , &usdhc3_clk,NULL ); +DEF_CLK (per1_bch_clk,CCGR4 ,CG6 , &usdhc3_clk,NULL ); +DEF_CLK (gpmi_bch_apb_clk,CCGR4 ,CG12 , &usdhc3_clk, &per1_bch_clk);DEF_CLK (gpmi_bch_clk,CCGR4 ,CG13 , &usdhc4_clk, &gpmi_bch_apb_clk);DEF_CLK (gpmi_apb_clk,CCGR4 ,CG15 , &usdhc3_clk, &gpmi_bch_clk);DEF_CLK (gpmi_io_clk,CCGR4 ,CG14 , &enfc_clk, &gpmi_apb_clk);
@@ -1988,7 +1989,7 @@ static struct clk_lookup lookups[] = {_REGISTER_CLOCK (NULL ,"pwm2_clk" , pwm2_clk),_REGISTER_CLOCK (NULL ,"pwm3_clk" , pwm3_clk),_REGISTER_CLOCK (NULL ,"pwm4_clk" , pwm4_clk), -_REGISTER_CLOCK (NULL ,"gpmi_io_clk" , gpmi_io_clk), +_REGISTER_CLOCK ("112000.gpmi-nand" ,NULL , gpmi_io_clk),_REGISTER_CLOCK (NULL ,"usboh3_clk" , usboh3_clk),_REGISTER_CLOCK (NULL ,"sata_clk" , sata_clk), _REGISTER_CLOCK(NULL, "cko1_clk", cko1_clk),
Signature · 1 line
1.7.0.4
v2 cover add gpmi-nand dt support for mx6q and mx28
In reply to Huang ShijieHi Huang Shijie,
Quoted 13 lines · Huang Shijie
The mx6q-arm2 and imx28evk have already support the device tree now. So i decide to add the gpmi-nand dt support to them.
The mx23 does not support the device tree now. I will add the gpmi dt support when it is ready.
Test this patch set on both MX6Q(arm2) and mx28(evk).
v1 --> v2
[1] merge the gpmi/bch device node into one node.
[2] add partitions support.
[3] misc
Quoted 4 lines
Huang Shijie (3):
mtd: gpmi: add device tree support for mx6q and mx28
ARM: mx28: add gpmi-nand dt support
ARM: mx6q: add gpmi-nand dt support
For which kernel are these 3 patches? I tried to apply them on top of 3.4-rc4 and got a lot of rejects.
Best regards
Dirk
v2 cover add gpmi-nand dt support for mx6q and mx28
? 2012?04?25? 14:41, Dirk Behme ??:
Quoted 17 lines
Hi Huang Shijie,
Quoted 14 lines · Huang Shijie
The mx6q-arm2 and imx28evk have already support the device tree now. So i decide to add the gpmi-nand dt support to them.
The mx23 does not support the device tree now. I will add the gpmi dt support
when it is ready.Test this patch set on both MX6Q(arm2) and mx28(evk).
v1 --> v2
[1] merge the gpmi/bch device node into one node.
[2] add partitions support.
[3] misc
Quoted 8 lines
Quoted 4 lines
Huang Shijie (3):
mtd: gpmi: add device tree support for mx6q and mx28
ARM: mx28: add gpmi-nand dt support
ARM: mx6q: add gpmi-nand dt supportFor which kernel are these 3 patches? I tried to apply them on top of 3.4-rc4 and got a lot of rejects.
They are based on 3.4-rc4. but I also applied some mxs-dma patches.
Which one cause the rejects?
I think the first patch "mtd:gpmi .." will not meet any rejects. The other two small patches may meet rejects, but you can fix it by hand.
BR
Huang Shijie
v2 cover add gpmi-nand dt support for mx6q and mx28
Quoted 22 lines · Huang Shijie
? 2012?04?25? 14:41, Dirk Behme ??:
Quoted 21 lines
Hi Huang Shijie,
Quoted 18 lines · Huang Shijie
The mx6q-arm2 and imx28evk have already support the device tree now. So i decide to add the gpmi-nand dt support to them.
The mx23 does not support the device tree now. I will add the gpmi dt support
when it is ready.Test this patch set on both MX6Q(arm2) and mx28(evk).
v1 --> v2
[1] merge the gpmi/bch device node into one node.
[2] add partitions support.
[3] miscHuang Shijie (3):
mtd: gpmi: add device tree support for mx6q and mx28
ARM: mx28: add gpmi-nand dt support
ARM: mx6q: add gpmi-nand dt support
Quoted 6 lines
Quoted 3 lines
For which kernel are these 3 patches? I tried to apply them on top of 3.4-rc4 and got a lot of rejects.
They are based on 3.4-rc4. but I also applied some mxs-dma patches.
Which one cause the rejects?
Could you kindly try to apply "mtd: gpmi: add device tree support for mx6q and mx28" on a clean 3.4-rc4?
Many thanks
Dirk
v2 cover add gpmi-nand dt support for mx6q and mx28
? 2012?04?25? 15:10, Dirk Behme ??:
Quoted 26 lines · Huang Shijie
Quoted 25 lines
? 2012?04?25? 14:41, Dirk Behme ??:
Quoted 24 lines
Hi Huang Shijie,
Quoted 14 lines · Huang Shijie
The mx6q-arm2 and imx28evk have already support the device tree now. So i decide to add the gpmi-nand dt support to them.
The mx23 does not support the device tree now. I will add the gpmi dt support
when it is ready.Test this patch set on both MX6Q(arm2) and mx28(evk).
v1 --> v2
[1] merge the gpmi/bch device node into one node.
[2] add partitions support.
[3] miscQuoted 4 lines
Huang Shijie (3):
mtd: gpmi: add device tree support for mx6q and mx28
ARM: mx28: add gpmi-nand dt support
ARM: mx6q: add gpmi-nand dt supportFor which kernel are these 3 patches? I tried to apply them on top of 3.4-rc4 and got a lot of rejects.
Quoted 7 lines
Quoted 3 lines
They are based on 3.4-rc4. but I also applied some mxs-dma patches.
Which one cause the rejects?
Could you kindly try to apply "mtd: gpmi: add device tree support for mx6q and mx28" on a clean 3.4-rc4?
I tried just now, it works fine.
Huang Shijie
Quoted 4 lines
Many thanks
Dirk
v2 cover add gpmi-nand dt support for mx6q and mx28
In reply to Huang ShijieQuoted 5 lines · Huang Shijie
The mx6q-arm2 and imx28evk have already support the device tree now. So i decide to add the gpmi-nand dt support to them.
The mx23 does not support the device tree now. I will add the gpmi dt support when it is ready.
I cannot apply these patches to l2-mtd.git:
Applying: ARM: mx28: add gpmi-nand dt support
error: arch/arm/boot/dts/imx28-evk.dts: does not exist in index
error: arch/arm/boot/dts/imx28.dtsi: does not exist in index
Signature · 9 lines
Best Regards, Artem Bityutskiy -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: This is a digitally signed message part URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120428/6f581371/attachment-0001.sig>
v2 cover add gpmi-nand dt support for mx6q and mx28
Hi Artem:
Quoted 8 lines · Artem Bityutskiy
Quoted 5 lines · Huang Shijie
The mx6q-arm2 and imx28evk have already support the device tree now. So i decide to add the gpmi-nand dt support to them.
The mx23 does not support the device tree now. I will add the gpmi dt support when it is ready.
I cannot apply these patches to l2-mtd.git:
Could you only apply the gpmi-nand patch? The other two patches are for DT, and should be appled in Shawn's tree.
Best Regards
Huang Shijie
Quoted 14 lines
Applying: ARM: mx28: add gpmi-nand dt support
error:arch/arm/boot/dts/imx28-evk.dts: does not exist in index
error:arch/arm/boot/dts/imx28.dtsi: does not exist in index--
Best Regards,
Artem Bityutskiy_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel