linux-mtd.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] mtd: OneNAND: OMAP3: unmap correct DMA buffer
@ 2010-03-23 13:33 Mika Westerberg
  2010-03-23 13:41 ` Adrian Hunter
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Mika Westerberg @ 2010-03-23 13:33 UTC (permalink / raw)
  To: linux-mtd; +Cc: kyungmin.park, dwmw2, Adrian Hunter

Function omap3_onenand_write_bufferram() maps the write buffer and stores the
returned handle in dma_src. However, when it does the DMA unmap, it uses wrong
DMA handle (dma_dst).

This patch fixes it to use the correct DMA handle.

Signed-off-by: Mika Westerberg <ext-mika.1.westerberg@nokia.com>
---
 drivers/mtd/onenand/omap2.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c
index 75f38b9..2d81a3a 100644
--- a/drivers/mtd/onenand/omap2.c
+++ b/drivers/mtd/onenand/omap2.c
@@ -402,7 +402,7 @@ static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
 
 	dma_src = dma_map_single(&c->pdev->dev, buf, count, DMA_TO_DEVICE);
 	dma_dst = c->phys_base + bram_offset;
-	if (dma_mapping_error(&c->pdev->dev, dma_dst)) {
+	if (dma_mapping_error(&c->pdev->dev, dma_src)) {
 		dev_err(&c->pdev->dev,
 			"Couldn't DMA map a %d byte buffer\n",
 			count);
@@ -425,7 +425,7 @@ static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
 		if (*done)
 			break;
 
-	dma_unmap_single(&c->pdev->dev, dma_dst, count, DMA_TO_DEVICE);
+	dma_unmap_single(&c->pdev->dev, dma_src, count, DMA_TO_DEVICE);
 
 	if (!*done) {
 		dev_err(&c->pdev->dev, "timeout waiting for DMA\n");
-- 
1.5.6.5

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] mtd: OneNAND: OMAP3: unmap correct DMA buffer
  2010-03-23 13:33 [PATCH] mtd: OneNAND: OMAP3: unmap correct DMA buffer Mika Westerberg
@ 2010-03-23 13:41 ` Adrian Hunter
  2010-03-24 10:10   ` [PATCH v2] mtd: OneNAND: OMAP2/3: " Mika Westerberg
  2010-04-06  7:58 ` [PATCH] mtd: OneNAND: OMAP3: " Arnaud Ebalard
  2010-04-08  8:25 ` Artem Bityutskiy
  2 siblings, 1 reply; 6+ messages in thread
From: Adrian Hunter @ 2010-03-23 13:41 UTC (permalink / raw)
  To: Westerberg Mika.1 (EXT-Nixu/Helsinki)
  Cc: dwmw2@infradead.org, kyungmin.park@samsung.com,
	linux-mtd@lists.infradead.org

Westerberg Mika.1 (EXT-Nixu/Helsinki) wrote:
> Function omap3_onenand_write_bufferram() maps the write buffer and stores the
> returned handle in dma_src. However, when it does the DMA unmap, it uses wrong
> DMA handle (dma_dst).
> 
> This patch fixes it to use the correct DMA handle.
> 
> Signed-off-by: Mika Westerberg <ext-mika.1.westerberg@nokia.com>
> ---
>  drivers/mtd/onenand/omap2.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c
> index 75f38b9..2d81a3a 100644
> --- a/drivers/mtd/onenand/omap2.c
> +++ b/drivers/mtd/onenand/omap2.c
> @@ -402,7 +402,7 @@ static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
>  
>  	dma_src = dma_map_single(&c->pdev->dev, buf, count, DMA_TO_DEVICE);
>  	dma_dst = c->phys_base + bram_offset;
> -	if (dma_mapping_error(&c->pdev->dev, dma_dst)) {
> +	if (dma_mapping_error(&c->pdev->dev, dma_src)) {
>  		dev_err(&c->pdev->dev,
>  			"Couldn't DMA map a %d byte buffer\n",
>  			count);
> @@ -425,7 +425,7 @@ static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
>  		if (*done)
>  			break;
>  
> -	dma_unmap_single(&c->pdev->dev, dma_dst, count, DMA_TO_DEVICE);
> +	dma_unmap_single(&c->pdev->dev, dma_src, count, DMA_TO_DEVICE);
>  
>  	if (!*done) {
>  		dev_err(&c->pdev->dev, "timeout waiting for DMA\n");

What about omap2_onenand_write_bufferram()

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2] mtd: OneNAND: OMAP2/3: unmap correct DMA buffer
  2010-03-23 13:41 ` Adrian Hunter
@ 2010-03-24 10:10   ` Mika Westerberg
  0 siblings, 0 replies; 6+ messages in thread
From: Mika Westerberg @ 2010-03-24 10:10 UTC (permalink / raw)
  To: linux-mtd; +Cc: kyungmin.park, dwmw2, Adrian Hunter

Functions omap2_onenand_write_bufferram() and omap3_onenand_write_bufferram()
map the write buffer and store the returned handle in variable dma_src. However,
when DMA unmap is done, variable dma_dst is used instead of the correct dma_src.

This patch fixes them to use the correct DMA buffer.

Signed-off-by: Mika Westerberg <ext-mika.1.westerberg@nokia.com>
---
 drivers/mtd/onenand/omap2.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c
index 75f38b9..f79a47b 100644
--- a/drivers/mtd/onenand/omap2.c
+++ b/drivers/mtd/onenand/omap2.c
@@ -402,7 +402,7 @@ static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
 
 	dma_src = dma_map_single(&c->pdev->dev, buf, count, DMA_TO_DEVICE);
 	dma_dst = c->phys_base + bram_offset;
-	if (dma_mapping_error(&c->pdev->dev, dma_dst)) {
+	if (dma_mapping_error(&c->pdev->dev, dma_src)) {
 		dev_err(&c->pdev->dev,
 			"Couldn't DMA map a %d byte buffer\n",
 			count);
@@ -425,7 +425,7 @@ static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
 		if (*done)
 			break;
 
-	dma_unmap_single(&c->pdev->dev, dma_dst, count, DMA_TO_DEVICE);
+	dma_unmap_single(&c->pdev->dev, dma_src, count, DMA_TO_DEVICE);
 
 	if (!*done) {
 		dev_err(&c->pdev->dev, "timeout waiting for DMA\n");
@@ -520,7 +520,7 @@ static int omap2_onenand_write_bufferram(struct mtd_info *mtd, int area,
 	dma_src = dma_map_single(&c->pdev->dev, (void *) buffer, count,
 				 DMA_TO_DEVICE);
 	dma_dst = c->phys_base + bram_offset;
-	if (dma_mapping_error(&c->pdev->dev, dma_dst)) {
+	if (dma_mapping_error(&c->pdev->dev, dma_src)) {
 		dev_err(&c->pdev->dev,
 			"Couldn't DMA map a %d byte buffer\n",
 			count);
@@ -538,7 +538,7 @@ static int omap2_onenand_write_bufferram(struct mtd_info *mtd, int area,
 	omap_start_dma(c->dma_channel);
 	wait_for_completion(&c->dma_done);
 
-	dma_unmap_single(&c->pdev->dev, dma_dst, count, DMA_TO_DEVICE);
+	dma_unmap_single(&c->pdev->dev, dma_src, count, DMA_TO_DEVICE);
 
 	return 0;
 }
-- 
1.5.6.5

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] mtd: OneNAND: OMAP3: unmap correct DMA buffer
  2010-03-23 13:33 [PATCH] mtd: OneNAND: OMAP3: unmap correct DMA buffer Mika Westerberg
  2010-03-23 13:41 ` Adrian Hunter
@ 2010-04-06  7:58 ` Arnaud Ebalard
  2010-04-06  8:55   ` Adrian Hunter
  2010-04-08  8:25 ` Artem Bityutskiy
  2 siblings, 1 reply; 6+ messages in thread
From: Arnaud Ebalard @ 2010-04-06  7:58 UTC (permalink / raw)
  To: Mika Westerberg; +Cc: dwmw2, kyungmin.park, linux-mtd, Adrian Hunter

Hi,

Mika Westerberg <ext-mika.1.westerberg@nokia.com> writes:

> Function omap3_onenand_write_bufferram() maps the write buffer and stores the
> returned handle in dma_src. However, when it does the DMA unmap, it uses wrong
> DMA handle (dma_dst).
>
> This patch fixes it to use the correct DMA handle.
>
> Signed-off-by: Mika Westerberg <ext-mika.1.westerberg@nokia.com>
> ---
>  drivers/mtd/onenand/omap2.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c
> index 75f38b9..2d81a3a 100644
> --- a/drivers/mtd/onenand/omap2.c
> +++ b/drivers/mtd/onenand/omap2.c
> @@ -402,7 +402,7 @@ static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
>  
>  	dma_src = dma_map_single(&c->pdev->dev, buf, count, DMA_TO_DEVICE);
>  	dma_dst = c->phys_base + bram_offset;
> -	if (dma_mapping_error(&c->pdev->dev, dma_dst)) {
> +	if (dma_mapping_error(&c->pdev->dev, dma_src)) {
>  		dev_err(&c->pdev->dev,
>  			"Couldn't DMA map a %d byte buffer\n",
>  			count);
> @@ -425,7 +425,7 @@ static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
>  		if (*done)
>  			break;
>  
> -	dma_unmap_single(&c->pdev->dev, dma_dst, count, DMA_TO_DEVICE);
> +	dma_unmap_single(&c->pdev->dev, dma_src, count, DMA_TO_DEVICE);
>  
>  	if (!*done) {
>  		dev_err(&c->pdev->dev, "timeout waiting for DMA\n");

That patch removes the kernel panic I get when booting current l-o
kernel on my N900.

Tested-by: Arnaud Ebalard <arno@natisbad.org>

Cheers,

a+

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] mtd: OneNAND: OMAP3: unmap correct DMA buffer
  2010-04-06  7:58 ` [PATCH] mtd: OneNAND: OMAP3: " Arnaud Ebalard
@ 2010-04-06  8:55   ` Adrian Hunter
  0 siblings, 0 replies; 6+ messages in thread
From: Adrian Hunter @ 2010-04-06  8:55 UTC (permalink / raw)
  To: dwmw2@infradead.org
  Cc: kyungmin.park@samsung.com, Arnaud Ebalard,
	linux-mtd@lists.infradead.org,
	Westerberg Mika.1 (EXT-Nixu/Helsinki)

ext Arnaud Ebalard wrote:
> Hi,
> 
> Mika Westerberg <ext-mika.1.westerberg@nokia.com> writes:
> 
>> Function omap3_onenand_write_bufferram() maps the write buffer and stores the
>> returned handle in dma_src. However, when it does the DMA unmap, it uses wrong
>> DMA handle (dma_dst).
>>
>> This patch fixes it to use the correct DMA handle.
>>
>> Signed-off-by: Mika Westerberg <ext-mika.1.westerberg@nokia.com>
>> ---
>>  drivers/mtd/onenand/omap2.c |    4 ++--
>>  1 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/mtd/onenand/omap2.c b/drivers/mtd/onenand/omap2.c
>> index 75f38b9..2d81a3a 100644
>> --- a/drivers/mtd/onenand/omap2.c
>> +++ b/drivers/mtd/onenand/omap2.c
>> @@ -402,7 +402,7 @@ static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
>>  
>>  	dma_src = dma_map_single(&c->pdev->dev, buf, count, DMA_TO_DEVICE);
>>  	dma_dst = c->phys_base + bram_offset;
>> -	if (dma_mapping_error(&c->pdev->dev, dma_dst)) {
>> +	if (dma_mapping_error(&c->pdev->dev, dma_src)) {
>>  		dev_err(&c->pdev->dev,
>>  			"Couldn't DMA map a %d byte buffer\n",
>>  			count);
>> @@ -425,7 +425,7 @@ static int omap3_onenand_write_bufferram(struct mtd_info *mtd, int area,
>>  		if (*done)
>>  			break;
>>  
>> -	dma_unmap_single(&c->pdev->dev, dma_dst, count, DMA_TO_DEVICE);
>> +	dma_unmap_single(&c->pdev->dev, dma_src, count, DMA_TO_DEVICE);
>>  
>>  	if (!*done) {
>>  		dev_err(&c->pdev->dev, "timeout waiting for DMA\n");
> 
> That patch removes the kernel panic I get when booting current l-o
> kernel on my N900.
> 
> Tested-by: Arnaud Ebalard <arno@natisbad.org>
> 
> Cheers,
> 
> a+
> 

Acked-by: Adrian Hunter <adrian.hunter@nokia.com>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] mtd: OneNAND: OMAP3: unmap correct DMA buffer
  2010-03-23 13:33 [PATCH] mtd: OneNAND: OMAP3: unmap correct DMA buffer Mika Westerberg
  2010-03-23 13:41 ` Adrian Hunter
  2010-04-06  7:58 ` [PATCH] mtd: OneNAND: OMAP3: " Arnaud Ebalard
@ 2010-04-08  8:25 ` Artem Bityutskiy
  2 siblings, 0 replies; 6+ messages in thread
From: Artem Bityutskiy @ 2010-04-08  8:25 UTC (permalink / raw)
  To: Mika Westerberg; +Cc: dwmw2, kyungmin.park, linux-mtd, Adrian Hunter

On Tue, 2010-03-23 at 15:33 +0200, Mika Westerberg wrote:
> Function omap3_onenand_write_bufferram() maps the write buffer and stores the
> returned handle in dma_src. However, when it does the DMA unmap, it uses wrong
> DMA handle (dma_dst).
> 
> This patch fixes it to use the correct DMA handle.
> 
> Signed-off-by: Mika Westerberg <ext-mika.1.westerberg@nokia.com>

Pushed to l2-mtd-2.6.git / master, thanks.

-- 
Best Regards,
Artem Bityutskiy (Артём Битюцкий)

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2010-04-08  8:25 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-23 13:33 [PATCH] mtd: OneNAND: OMAP3: unmap correct DMA buffer Mika Westerberg
2010-03-23 13:41 ` Adrian Hunter
2010-03-24 10:10   ` [PATCH v2] mtd: OneNAND: OMAP2/3: " Mika Westerberg
2010-04-06  7:58 ` [PATCH] mtd: OneNAND: OMAP3: " Arnaud Ebalard
2010-04-06  8:55   ` Adrian Hunter
2010-04-08  8:25 ` Artem Bityutskiy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).