From: Ladislav Michl <ladis@linux-mips.org> To: Roger Quadros <rogerq@ti.com> Cc: Boris Brezillon <boris.brezillon@free-electrons.com>, Tony Lindgren <tony@atomide.com>, Peter Ujfalusi <peter.ujfalusi@ti.com>, Kyungmin Park <kyungmin.park@samsung.com>, linux-mtd@lists.infradead.org, linux-omap@vger.kernel.org Subject: Re: [PATCH v4 10/16] mtd: onenand: omap2: Convert to use dmaengine for memcpy Date: Wed, 15 Nov 2017 10:32:30 +0100 [thread overview] Message-ID: <20171115093230.p7pyskaqtg5fu74y@lenoch> (raw) In-Reply-To: <758b3751-cd22-a53b-f323-90067108bd53@ti.com> On Wed, Nov 15, 2017 at 10:57:20AM +0200, Roger Quadros wrote: > On 11/11/17 23:23, Ladislav Michl wrote: > > From: Peter Ujfalusi <peter.ujfalusi@ti.com> > > > > Do not use the legacy and deprecated omap-dma interface for setting up the > > memcpy. > > > > Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> > > Signed-off-by: Ladislav Michl <ladis@linux-mips.org> > > Acked-by: Roger Quadros <rogerq@ti.com> > > Please see one comment below. > > > --- > > Changes: > > -v4: new patch > > > > drivers/mtd/onenand/omap2.c | 80 +++++++++++++++++++++------------------------ > > 1 file changed, 38 insertions(+), 42 deletions(-) > > > > diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c > > index 36314124488d..c9ff67100ef4 100644 > > --- a/drivers/mtd/onenand/omap2.c > > +++ b/drivers/mtd/onenand/omap2.c > > @@ -32,6 +32,7 @@ > > #include <linux/interrupt.h> > > #include <linux/delay.h> > > #include <linux/dma-mapping.h> > > +#include <linux/dmaengine.h> > > #include <linux/io.h> > > #include <linux/slab.h> > > #include <linux/gpio.h> > > @@ -39,8 +40,6 @@ > > #include <asm/mach/flash.h> > > #include <linux/platform_data/mtd-onenand-omap2.h> > > > > -#include <linux/omap-dma.h> > > - > > #define DRIVER_NAME "omap2-onenand" > > > > #define ONENAND_BUFRAM_SIZE (1024 * 5) > > @@ -55,17 +54,15 @@ struct omap2_onenand { > > struct onenand_chip onenand; > > struct completion irq_done; > > struct completion dma_done; > > - int dma_channel; > > + struct dma_chan *dma_chan; > > int freq; > > int (*setup)(void __iomem *base, int *freq_ptr); > > u8 flags; > > }; > > > > -static void omap2_onenand_dma_cb(int lch, u16 ch_status, void *data) > > +static void omap2_onenand_dma_complete_func(void *completion) > > { > > - struct omap2_onenand *c = data; > > - > > - complete(&c->dma_done); > > + complete(completion); > > } > > > > static irqreturn_t omap2_onenand_interrupt(int irq, void *dev_id) > > @@ -292,23 +289,31 @@ static inline int omap2_onenand_dma_transfer(struct omap2_onenand *c, > > dma_addr_t src, dma_addr_t dst, > > size_t count) > > { > > - int data_type = __ffs((src | dst | count)); > > + struct dma_async_tx_descriptor *tx; > > + dma_cookie_t cookie; > > > > - if (data_type > OMAP_DMA_DATA_TYPE_S32) > > - data_type = OMAP_DMA_DATA_TYPE_S32; > > - > > - omap_set_dma_transfer_params(c->dma_channel, data_type, > > - count / BIT(data_type), 1, 0, 0, 0); > > - omap_set_dma_src_params(c->dma_channel, 0, OMAP_DMA_AMODE_POST_INC, > > - src, 0, 0); > > - omap_set_dma_dest_params(c->dma_channel, 0, OMAP_DMA_AMODE_POST_INC, > > - dst, 0, 0); > > + tx = dmaengine_prep_dma_memcpy(c->dma_chan, dst, src, count, 0); > > + if (!tx) { > > + dev_err(&c->pdev->dev, "Failed to prepare DMA memcpy\n"); > > + return -EIO; > > + } > > > > reinit_completion(&c->dma_done); > > - omap_start_dma(c->dma_channel); > > + > > + tx->callback = omap2_onenand_dma_complete_func; > > + tx->callback_param = &c->dma_done; > > + > > + cookie = tx->tx_submit(tx); > > + if (dma_submit_error(cookie)) { > > + dev_err(&c->pdev->dev, "Failed to do DMA tx_submit\n"); > > + return -EIO; > > + } > > + > > + dma_async_issue_pending(c->dma_chan); > > + > > if (!wait_for_completion_io_timeout(&c->dma_done, > > msecs_to_jiffies(20))) { > > - omap_stop_dma(c->dma_channel); > > + dmaengine_terminate_sync(c->dma_chan); > > return -ETIMEDOUT; > > } > > > > @@ -468,8 +473,7 @@ static int omap2_onenand_probe(struct platform_device *pdev) > > c->flags = pdata->flags; > > c->gpmc_cs = pdata->cs; > > c->gpio_irq = pdata->gpio_irq; > > - c->dma_channel = pdata->dma_channel; > > - if (c->dma_channel < 0) { > > + if (pdata->dma_channel < 0) { > > /* if -1, don't use DMA */ > > c->gpio_irq = 0; > > Why are we ignoring gpio_irq if DMA channel is not available? > The wait mechanism could still benefit from the Interrupt even with no DMA right? That's what original driver does and logic is preserved here. > We could fix this in a separate patch of course. And indeed we did. See "mtd: onenand: omap2: Enable DMA by default" (*) and "mtd: onenand: omap2: Configure driver from DT". (*) Now looking at that patch is should be renamed, as enabling DMA still depends on pdata->dma_chan. It is enabled unconditionally in later patch. Will fix. > > } > > @@ -521,25 +525,17 @@ static int omap2_onenand_probe(struct platform_device *pdev) > > goto err_release_gpio; > > } > > > > - if (c->dma_channel >= 0) { > > - r = omap_request_dma(0, pdev->dev.driver->name, > > - omap2_onenand_dma_cb, (void *) c, > > - &c->dma_channel); > > - if (r == 0) { > > - omap_set_dma_write_mode(c->dma_channel, > > - OMAP_DMA_WRITE_NON_POSTED); > > - omap_set_dma_src_data_pack(c->dma_channel, 1); > > - omap_set_dma_src_burst_mode(c->dma_channel, > > - OMAP_DMA_DATA_BURST_8); > > - omap_set_dma_dest_data_pack(c->dma_channel, 1); > > - omap_set_dma_dest_burst_mode(c->dma_channel, > > - OMAP_DMA_DATA_BURST_8); > > - } else { > > + if (pdata->dma_channel >= 0) { > > + dma_cap_mask_t mask; > > + > > + dma_cap_zero(mask); > > + dma_cap_set(DMA_MEMCPY, mask); > > + > > + c->dma_chan = dma_request_channel(mask, NULL, NULL); > > + if (!c->dma_chan) > > dev_info(&pdev->dev, > > "failed to allocate DMA for OneNAND, " > > "using PIO instead\n"); > > - c->dma_channel = -1; > > - } > > } > > > > dev_info(&pdev->dev, "initializing on CS%d, phys base 0x%08lx, virtual " > > @@ -553,7 +549,7 @@ static int omap2_onenand_probe(struct platform_device *pdev) > > mtd_set_of_node(&c->mtd, pdata->of_node); > > > > this = &c->onenand; > > - if (c->dma_channel >= 0) { > > + if (c->dma_chan) { > > this->wait = omap2_onenand_wait; > > this->read_bufferram = omap2_onenand_read_bufferram; > > this->write_bufferram = omap2_onenand_write_bufferram; > > @@ -573,8 +569,8 @@ static int omap2_onenand_probe(struct platform_device *pdev) > > err_release_onenand: > > onenand_release(&c->mtd); > > err_release_dma: > > - if (c->dma_channel != -1) > > - omap_free_dma(c->dma_channel); > > + if (c->dma_chan) > > + dma_release_channel(c->dma_chan); > > if (c->gpio_irq) > > free_irq(gpio_to_irq(c->gpio_irq), c); > > err_release_gpio: > > @@ -595,8 +591,8 @@ static int omap2_onenand_remove(struct platform_device *pdev) > > struct omap2_onenand *c = dev_get_drvdata(&pdev->dev); > > > > onenand_release(&c->mtd); > > - if (c->dma_channel != -1) > > - omap_free_dma(c->dma_channel); > > + if (c->dma_chan) > > + dma_release_channel(c->dma_chan); > > omap2_onenand_shutdown(pdev); > > if (c->gpio_irq) { > > free_irq(gpio_to_irq(c->gpio_irq), c); > > > > -- > cheers, > -roger > > Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/
WARNING: multiple messages have this Message-ID (diff)
From: Ladislav Michl <ladis@linux-mips.org> To: Roger Quadros <rogerq@ti.com> Cc: linux-mtd@lists.infradead.org, linux-omap@vger.kernel.org, Tony Lindgren <tony@atomide.com>, Peter Ujfalusi <peter.ujfalusi@ti.com>, Boris Brezillon <boris.brezillon@free-electrons.com>, Kyungmin Park <kyungmin.park@samsung.com> Subject: Re: [PATCH v4 10/16] mtd: onenand: omap2: Convert to use dmaengine for memcpy Date: Wed, 15 Nov 2017 10:32:30 +0100 [thread overview] Message-ID: <20171115093230.p7pyskaqtg5fu74y@lenoch> (raw) In-Reply-To: <758b3751-cd22-a53b-f323-90067108bd53@ti.com> On Wed, Nov 15, 2017 at 10:57:20AM +0200, Roger Quadros wrote: > On 11/11/17 23:23, Ladislav Michl wrote: > > From: Peter Ujfalusi <peter.ujfalusi@ti.com> > > > > Do not use the legacy and deprecated omap-dma interface for setting up the > > memcpy. > > > > Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> > > Signed-off-by: Ladislav Michl <ladis@linux-mips.org> > > Acked-by: Roger Quadros <rogerq@ti.com> > > Please see one comment below. > > > --- > > Changes: > > -v4: new patch > > > > drivers/mtd/onenand/omap2.c | 80 +++++++++++++++++++++------------------------ > > 1 file changed, 38 insertions(+), 42 deletions(-) > > > > diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c > > index 36314124488d..c9ff67100ef4 100644 > > --- a/drivers/mtd/onenand/omap2.c > > +++ b/drivers/mtd/onenand/omap2.c > > @@ -32,6 +32,7 @@ > > #include <linux/interrupt.h> > > #include <linux/delay.h> > > #include <linux/dma-mapping.h> > > +#include <linux/dmaengine.h> > > #include <linux/io.h> > > #include <linux/slab.h> > > #include <linux/gpio.h> > > @@ -39,8 +40,6 @@ > > #include <asm/mach/flash.h> > > #include <linux/platform_data/mtd-onenand-omap2.h> > > > > -#include <linux/omap-dma.h> > > - > > #define DRIVER_NAME "omap2-onenand" > > > > #define ONENAND_BUFRAM_SIZE (1024 * 5) > > @@ -55,17 +54,15 @@ struct omap2_onenand { > > struct onenand_chip onenand; > > struct completion irq_done; > > struct completion dma_done; > > - int dma_channel; > > + struct dma_chan *dma_chan; > > int freq; > > int (*setup)(void __iomem *base, int *freq_ptr); > > u8 flags; > > }; > > > > -static void omap2_onenand_dma_cb(int lch, u16 ch_status, void *data) > > +static void omap2_onenand_dma_complete_func(void *completion) > > { > > - struct omap2_onenand *c = data; > > - > > - complete(&c->dma_done); > > + complete(completion); > > } > > > > static irqreturn_t omap2_onenand_interrupt(int irq, void *dev_id) > > @@ -292,23 +289,31 @@ static inline int omap2_onenand_dma_transfer(struct omap2_onenand *c, > > dma_addr_t src, dma_addr_t dst, > > size_t count) > > { > > - int data_type = __ffs((src | dst | count)); > > + struct dma_async_tx_descriptor *tx; > > + dma_cookie_t cookie; > > > > - if (data_type > OMAP_DMA_DATA_TYPE_S32) > > - data_type = OMAP_DMA_DATA_TYPE_S32; > > - > > - omap_set_dma_transfer_params(c->dma_channel, data_type, > > - count / BIT(data_type), 1, 0, 0, 0); > > - omap_set_dma_src_params(c->dma_channel, 0, OMAP_DMA_AMODE_POST_INC, > > - src, 0, 0); > > - omap_set_dma_dest_params(c->dma_channel, 0, OMAP_DMA_AMODE_POST_INC, > > - dst, 0, 0); > > + tx = dmaengine_prep_dma_memcpy(c->dma_chan, dst, src, count, 0); > > + if (!tx) { > > + dev_err(&c->pdev->dev, "Failed to prepare DMA memcpy\n"); > > + return -EIO; > > + } > > > > reinit_completion(&c->dma_done); > > - omap_start_dma(c->dma_channel); > > + > > + tx->callback = omap2_onenand_dma_complete_func; > > + tx->callback_param = &c->dma_done; > > + > > + cookie = tx->tx_submit(tx); > > + if (dma_submit_error(cookie)) { > > + dev_err(&c->pdev->dev, "Failed to do DMA tx_submit\n"); > > + return -EIO; > > + } > > + > > + dma_async_issue_pending(c->dma_chan); > > + > > if (!wait_for_completion_io_timeout(&c->dma_done, > > msecs_to_jiffies(20))) { > > - omap_stop_dma(c->dma_channel); > > + dmaengine_terminate_sync(c->dma_chan); > > return -ETIMEDOUT; > > } > > > > @@ -468,8 +473,7 @@ static int omap2_onenand_probe(struct platform_device *pdev) > > c->flags = pdata->flags; > > c->gpmc_cs = pdata->cs; > > c->gpio_irq = pdata->gpio_irq; > > - c->dma_channel = pdata->dma_channel; > > - if (c->dma_channel < 0) { > > + if (pdata->dma_channel < 0) { > > /* if -1, don't use DMA */ > > c->gpio_irq = 0; > > Why are we ignoring gpio_irq if DMA channel is not available? > The wait mechanism could still benefit from the Interrupt even with no DMA right? That's what original driver does and logic is preserved here. > We could fix this in a separate patch of course. And indeed we did. See "mtd: onenand: omap2: Enable DMA by default" (*) and "mtd: onenand: omap2: Configure driver from DT". (*) Now looking at that patch is should be renamed, as enabling DMA still depends on pdata->dma_chan. It is enabled unconditionally in later patch. Will fix. > > } > > @@ -521,25 +525,17 @@ static int omap2_onenand_probe(struct platform_device *pdev) > > goto err_release_gpio; > > } > > > > - if (c->dma_channel >= 0) { > > - r = omap_request_dma(0, pdev->dev.driver->name, > > - omap2_onenand_dma_cb, (void *) c, > > - &c->dma_channel); > > - if (r == 0) { > > - omap_set_dma_write_mode(c->dma_channel, > > - OMAP_DMA_WRITE_NON_POSTED); > > - omap_set_dma_src_data_pack(c->dma_channel, 1); > > - omap_set_dma_src_burst_mode(c->dma_channel, > > - OMAP_DMA_DATA_BURST_8); > > - omap_set_dma_dest_data_pack(c->dma_channel, 1); > > - omap_set_dma_dest_burst_mode(c->dma_channel, > > - OMAP_DMA_DATA_BURST_8); > > - } else { > > + if (pdata->dma_channel >= 0) { > > + dma_cap_mask_t mask; > > + > > + dma_cap_zero(mask); > > + dma_cap_set(DMA_MEMCPY, mask); > > + > > + c->dma_chan = dma_request_channel(mask, NULL, NULL); > > + if (!c->dma_chan) > > dev_info(&pdev->dev, > > "failed to allocate DMA for OneNAND, " > > "using PIO instead\n"); > > - c->dma_channel = -1; > > - } > > } > > > > dev_info(&pdev->dev, "initializing on CS%d, phys base 0x%08lx, virtual " > > @@ -553,7 +549,7 @@ static int omap2_onenand_probe(struct platform_device *pdev) > > mtd_set_of_node(&c->mtd, pdata->of_node); > > > > this = &c->onenand; > > - if (c->dma_channel >= 0) { > > + if (c->dma_chan) { > > this->wait = omap2_onenand_wait; > > this->read_bufferram = omap2_onenand_read_bufferram; > > this->write_bufferram = omap2_onenand_write_bufferram; > > @@ -573,8 +569,8 @@ static int omap2_onenand_probe(struct platform_device *pdev) > > err_release_onenand: > > onenand_release(&c->mtd); > > err_release_dma: > > - if (c->dma_channel != -1) > > - omap_free_dma(c->dma_channel); > > + if (c->dma_chan) > > + dma_release_channel(c->dma_chan); > > if (c->gpio_irq) > > free_irq(gpio_to_irq(c->gpio_irq), c); > > err_release_gpio: > > @@ -595,8 +591,8 @@ static int omap2_onenand_remove(struct platform_device *pdev) > > struct omap2_onenand *c = dev_get_drvdata(&pdev->dev); > > > > onenand_release(&c->mtd); > > - if (c->dma_channel != -1) > > - omap_free_dma(c->dma_channel); > > + if (c->dma_chan) > > + dma_release_channel(c->dma_chan); > > omap2_onenand_shutdown(pdev); > > if (c->gpio_irq) { > > free_irq(gpio_to_irq(c->gpio_irq), c); > > > > -- > cheers, > -roger > > Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
next prev parent reply other threads:[~2017-11-15 9:32 UTC|newest] Thread overview: 114+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-11-11 21:12 [PATCH v4 00/16] OMAP2+ OneNAND driver update Ladislav Michl 2017-11-11 21:12 ` Ladislav Michl 2017-11-11 21:17 ` [PATCH v4 02/16] ARM: dts: OMAP2+: Add compatible property to onenand node Ladislav Michl 2017-11-11 21:17 ` Ladislav Michl 2017-11-14 15:11 ` Roger Quadros 2017-11-14 15:11 ` Roger Quadros 2017-11-14 23:01 ` Ladislav Michl 2017-11-14 23:01 ` Ladislav Michl 2017-11-14 21:39 ` Tony Lindgren 2017-11-14 21:39 ` Tony Lindgren 2017-11-11 21:18 ` [PATCH v4 03/16] ARM: dts: omap3-igep: Update onenand node timings Ladislav Michl 2017-11-11 21:18 ` Ladislav Michl 2017-11-14 15:12 ` Roger Quadros 2017-11-14 15:12 ` Roger Quadros 2017-11-14 21:39 ` Tony Lindgren 2017-11-14 21:39 ` Tony Lindgren 2017-11-11 21:19 ` [PATCH v4 04/16] mtd: onenand: omap2: Remove regulator support Ladislav Michl 2017-11-11 21:19 ` Ladislav Michl 2017-11-14 15:13 ` Roger Quadros 2017-11-14 15:13 ` Roger Quadros 2017-11-15 14:15 ` Sebastian Reichel 2017-11-15 14:15 ` Sebastian Reichel 2017-11-11 21:19 ` [PATCH v4 05/16] mtd: onenand: omap2: Remove skip initial unlocking support Ladislav Michl 2017-11-11 21:19 ` Ladislav Michl 2017-11-14 15:14 ` Roger Quadros 2017-11-14 15:14 ` Roger Quadros 2017-11-15 14:16 ` Sebastian Reichel 2017-11-15 14:16 ` Sebastian Reichel 2017-11-11 21:20 ` [PATCH v4 06/16] mtd: onenand: omap2: Remove partitioning support from platform data Ladislav Michl 2017-11-11 21:20 ` Ladislav Michl 2017-11-14 15:14 ` Roger Quadros 2017-11-14 15:14 ` Roger Quadros 2017-11-15 14:57 ` Sebastian Reichel 2017-11-15 14:57 ` Sebastian Reichel 2017-11-11 21:20 ` [PATCH v4 07/16] mtd: onenand: omap2: Account waiting time as waiting on IO Ladislav Michl 2017-11-11 21:20 ` Ladislav Michl 2017-11-14 15:18 ` Roger Quadros 2017-11-14 15:18 ` Roger Quadros 2017-11-15 15:00 ` Sebastian Reichel 2017-11-15 15:00 ` Sebastian Reichel 2017-11-11 21:21 ` [PATCH v4 08/16] mtd: onenand: omap2: Simplify the DMA setup for various paths Ladislav Michl 2017-11-11 21:21 ` Ladislav Michl 2017-11-15 8:35 ` Roger Quadros 2017-11-15 8:35 ` Roger Quadros 2017-11-15 15:05 ` Sebastian Reichel 2017-11-15 15:05 ` Sebastian Reichel 2017-11-11 21:22 ` [PATCH v4 09/16] mtd: onenand: omap2: Unify OMAP2 and OMAP3 DMA implementation Ladislav Michl 2017-11-11 21:22 ` Ladislav Michl 2017-11-15 8:38 ` Roger Quadros 2017-11-15 8:38 ` Roger Quadros 2017-11-15 15:07 ` Sebastian Reichel 2017-11-15 15:07 ` Sebastian Reichel 2017-11-11 21:23 ` [PATCH v4 10/16] mtd: onenand: omap2: Convert to use dmaengine for memcpy Ladislav Michl 2017-11-11 21:23 ` Ladislav Michl 2017-11-15 8:57 ` Roger Quadros 2017-11-15 8:57 ` Roger Quadros 2017-11-15 9:32 ` Ladislav Michl [this message] 2017-11-15 9:32 ` Ladislav Michl 2017-11-15 15:19 ` Sebastian Reichel 2017-11-15 15:19 ` Sebastian Reichel 2017-11-11 21:24 ` [PATCH v4 11/16] mtd: onenand: omap2: Do not make delay for GPIO OMAP3 specific Ladislav Michl 2017-11-11 21:24 ` Ladislav Michl 2017-11-15 9:31 ` Roger Quadros 2017-11-15 9:31 ` Roger Quadros 2017-11-15 15:20 ` Sebastian Reichel 2017-11-15 15:20 ` Sebastian Reichel 2017-11-11 21:24 ` [PATCH v4 12/16] mtd: onenand: omap2: Enable DMA by default Ladislav Michl 2017-11-11 21:24 ` Ladislav Michl 2017-11-15 10:08 ` Roger Quadros 2017-11-15 10:08 ` Roger Quadros 2017-11-15 10:32 ` Ladislav Michl 2017-11-15 10:32 ` Ladislav Michl 2017-11-15 10:43 ` Roger Quadros 2017-11-15 10:43 ` Roger Quadros 2017-11-27 18:21 ` Ladislav Michl 2017-11-27 18:21 ` Ladislav Michl 2017-11-15 10:44 ` Roger Quadros 2017-11-15 10:44 ` Roger Quadros 2017-11-11 21:26 ` [PATCH v4 13/16] memory: omap-gpmc: Refactor OneNAND support Ladislav Michl 2017-11-11 21:26 ` Ladislav Michl 2017-11-15 10:13 ` Roger Quadros 2017-11-15 10:13 ` Roger Quadros 2017-11-15 10:37 ` Ladislav Michl 2017-11-15 10:37 ` Ladislav Michl 2017-11-11 21:27 ` [PATCH v4 14/16] mtd: onenand: omap2: Configure driver from DT Ladislav Michl 2017-11-11 21:27 ` Ladislav Michl 2017-11-15 10:40 ` Roger Quadros 2017-11-15 10:40 ` Roger Quadros 2017-11-15 10:53 ` Ladislav Michl 2017-11-15 10:53 ` Ladislav Michl 2017-11-15 11:04 ` Roger Quadros 2017-11-15 11:04 ` Roger Quadros 2017-11-15 11:20 ` Ladislav Michl 2017-11-15 11:20 ` Ladislav Michl 2017-11-15 14:41 ` Roger Quadros 2017-11-15 14:41 ` Roger Quadros 2017-11-11 21:29 ` [PATCH v4 15/16] ARM: OMAP2+: Remove gpmc-onenand Ladislav Michl 2017-11-11 21:29 ` Ladislav Michl 2017-11-14 21:41 ` Tony Lindgren 2017-11-14 21:41 ` Tony Lindgren 2017-11-15 10:46 ` Roger Quadros 2017-11-15 10:46 ` Roger Quadros 2017-11-11 21:29 ` [PATCH v4 16/16] ARM: dts: Nokia: Use R/B pin Ladislav Michl 2017-11-11 21:29 ` Ladislav Michl 2017-11-14 21:42 ` Tony Lindgren 2017-11-14 21:42 ` Tony Lindgren 2017-11-14 22:46 ` Ladislav Michl 2017-11-14 22:46 ` Ladislav Michl 2017-11-14 21:48 ` [PATCH v4 00/16] OMAP2+ OneNAND driver update Tony Lindgren 2017-11-14 21:48 ` Tony Lindgren 2017-11-14 22:53 ` Ladislav Michl 2017-11-14 22:53 ` Ladislav Michl 2017-11-15 8:10 ` Peter Ujfalusi 2017-11-15 8:10 ` Peter Ujfalusi
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20171115093230.p7pyskaqtg5fu74y@lenoch \ --to=ladis@linux-mips.org \ --cc=boris.brezillon@free-electrons.com \ --cc=kyungmin.park@samsung.com \ --cc=linux-mtd@lists.infradead.org \ --cc=linux-omap@vger.kernel.org \ --cc=peter.ujfalusi@ti.com \ --cc=rogerq@ti.com \ --cc=tony@atomide.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.