[PATCH v4 2/2] usb: musb: Fix DMA desired mode for Mentor DMA engine

2016-02-19 Thread Joshua Henderson
From: Cristian Birsan <cristian.bir...@microchip.com>

Commit 754fe4a92c07 ("usb: musb: Remove ifdefs for TX DMA for musb_host.c")
introduces a problem setting the desired channel mode for the Mentor DMA
engine.

There is a case where an address is incorrectly assigned to the DMA
channel desired mode when it should instead be assigned the actual mode
value. This results in the value of channel->desired_mode not being
correct.

Signed-off-by: Cristian Birsan <cristian.bir...@microchip.com>
Signed-off-by: Joshua Henderson <joshua.hender...@microchip.com>
Tested-by: Ladislav Michl <la...@linux-mips.org>
Acked-by: Sergei Shtylyov <sergei.shtyl...@cogentembedded.com>
---
Changes since v3: None
Changes since v2:
- Fix wording in commit message.
Changes since v1:
- Fix commit comment citing the cause of the regression.
---
 drivers/usb/musb/musb_host.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index 75c89b4..58487a4 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -662,7 +662,7 @@ static int musb_tx_dma_set_mode_mentor(struct 
dma_controller *dma,
csr &= ~(MUSB_TXCSR_AUTOSET | MUSB_TXCSR_DMAMODE);
csr |= MUSB_TXCSR_DMAENAB; /* against programmer's guide */
}
-   channel->desired_mode = mode;
+   channel->desired_mode = *mode;
musb_writew(epio, MUSB_TXCSR, csr);
 
return 0;
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[PATCH v4 1/2] usb: musb: Fix DMA for host mode

2016-02-19 Thread Joshua Henderson
From: Cristian Birsan <cristian.bir...@microchip.com>

Commit ac33cdb16681 ("usb: musb: Remove ifdefs for musb_host_rx in
musb_host.c part5") introduces a problem setting DMA host mode.

This commit fixes the done condition that advances the musb schedule.
Without this patch the the msub_advance_schedule() is called immediately
after receiving an endpoint RX interrupt without waiting for the DMA
transfer to complete. As a consequence when the dma complete interrupt
arrives the in_qh member of hw_ep is already null an the musb_host_rx()
exits on !urb error case.

Signed-off-by: Cristian Birsan <cristian.bir...@microchip.com>
Signed-off-by: Joshua Henderson <joshua.hender...@microchip.com>
Tested-by: Ladislav Michl <la...@linux-mips.org>
---
Changes since v3:
- Fix formatting to 2 lines.
Changes since v2:
- Put function call in if condition.
Changes since v1:
- Don't add unecessary new variable. Just correct done.
---
 drivers/usb/musb/musb_host.c |6 ++
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index 795a45b..75c89b4 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -2003,10 +2003,8 @@ void musb_host_rx(struct musb *musb, u8 epnum)
qh->offset,
urb->transfer_buffer_length);
 
-   done = musb_rx_dma_in_inventra_cppi41(c, hw_ep, qh,
- urb, xfer_len,
- iso_err);
-   if (done)
+   if (musb_rx_dma_in_inventra_cppi41(c, hw_ep, qh, urb,
+  xfer_len, iso_err))
goto finish;
else
dev_err(musb->controller, "error: rx_dma 
failed\n");
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v3 1/2] usb: musb: Fix DMA for host mode

2016-02-11 Thread Joshua Henderson
From: Cristian Birsan <cristian.bir...@microchip.com>

Commit ac33cdb16681 ("usb: musb: Remove ifdefs for musb_host_rx in
musb_host.c part5") introduces a problem setting DMA host mode.

This commit fixes the done condition that advances the musb schedule.
Without this patch the the msub_advance_schedule() is called immediately
after receiving an endpoint RX interrupt without waiting for the DMA
transfer to complete. As a consequence when the dma complete interrupt
arrives the in_qh member of hw_ep is already null an the musb_host_rx()
exits on !urb error case.

Signed-off-by: Cristian Birsan <cristian.bir...@microchip.com>
Signed-off-by: Joshua Henderson <joshua.hender...@microchip.com>
---
Changes since v2:
- Put function call in if condition.
Changes since v1:
- Don't add unecessary new variable. Just correct done.
---
 drivers/usb/musb/musb_host.c |7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index 795a45b..6a81066 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -2003,10 +2003,9 @@ void musb_host_rx(struct musb *musb, u8 epnum)
qh->offset,
urb->transfer_buffer_length);
 
-   done = musb_rx_dma_in_inventra_cppi41(c, hw_ep, qh,
- urb, xfer_len,
- iso_err);
-   if (done)
+   if (musb_rx_dma_in_inventra_cppi41(c, hw_ep, qh,
+  urb, xfer_len,
+  iso_err))
goto finish;
else
dev_err(musb->controller, "error: rx_dma 
failed\n");
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v3 2/2] usb: musb: Fix DMA desired mode for Mentor DMA engine

2016-02-11 Thread Joshua Henderson
From: Cristian Birsan <cristian.bir...@microchip.com>

Commit 754fe4a92c07 ("usb: musb: Remove ifdefs for TX DMA for musb_host.c")
introduces a problem setting the desired channel mode for the Mentor DMA
engine.

There is a case where an address is incorrectly assigned to the DMA
channel desired mode when it should instead be assigned the actual mode
value. This results in the value of channel->desired_mode not being
correct.

Signed-off-by: Cristian Birsan <cristian.bir...@microchip.com>
Signed-off-by: Joshua Henderson <joshua.hender...@microchip.com>
---
Changes since v2:
- Fix wording in commit message.
Changes since v1:
- Fix commit comment citing the cause of the regression.
---
 drivers/usb/musb/musb_host.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index 6a81066..0803061 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -662,7 +662,7 @@ static int musb_tx_dma_set_mode_mentor(struct 
dma_controller *dma,
csr &= ~(MUSB_TXCSR_AUTOSET | MUSB_TXCSR_DMAMODE);
csr |= MUSB_TXCSR_DMAENAB; /* against programmer's guide */
}
-   channel->desired_mode = mode;
+   channel->desired_mode = *mode;
musb_writew(epio, MUSB_TXCSR, csr);
 
return 0;
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 2/2] usb: musb: Fix DMA desired mode for Mentor DMA engine

2016-02-08 Thread Joshua Henderson
From: Cristian Birsan <cristian.bir...@microchip.com>

Commit 754fe4a92c07 ("usb: musb: Remove ifdefs for TX DMA for musb_host.c")
introduces a problem setting the desired channel mode for the Mentor DMA
engine.

There is a case where the pointer of the channel DMA mode is incorrectly
assigned to an address, when it should be assigned the actual mode
value. This results in the value of channel->desired_mode not being
correct.

Signed-off-by: Cristian Birsan <cristian.bir...@microchip.com>
Signed-off-by: Joshua Henderson <joshua.hender...@microchip.com>
---
Changes since v1:
- Fix commit comment citing the cause of the regression.
---
 drivers/usb/musb/musb_host.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index 6bef86f..b9e24862 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -662,7 +662,7 @@ static int musb_tx_dma_set_mode_mentor(struct 
dma_controller *dma,
csr &= ~(MUSB_TXCSR_AUTOSET | MUSB_TXCSR_DMAMODE);
csr |= MUSB_TXCSR_DMAENAB; /* against programmer's guide */
}
-   channel->desired_mode = mode;
+   channel->desired_mode = *mode;
musb_writew(epio, MUSB_TXCSR, csr);
 
return 0;
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 1/2] usb: musb: Fix DMA for host mode

2016-02-08 Thread Joshua Henderson
From: Cristian Birsan <cristian.bir...@microchip.com>

Commit ac33cdb16681 ("usb: musb: Remove ifdefs for musb_host_rx in
musb_host.c part5") introduces a problem setting DMA host mode.

This commit fixes the done condition that advances the musb schedule.
Without this patch the the msub_advance_schedule() is called immediately
after receiving an endpoint rx interrupt without waiting for the dma
transfer to complete. As a consequence when the dma complete interrupt
arrives the in_qh member of hw_ep is already null an the musb_host_rx()
exits on !urb error case.

Signed-off-by: Cristian Birsan <cristian.bir...@microchip.com>
Signed-off-by: Joshua Henderson <joshua.hender...@microchip.com>
---
Changes since v1:
- Don't add unecessary new variable. Just correct done.
---
 drivers/usb/musb/musb_host.c |   10 --
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index 795a45b..6bef86f 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -2006,9 +2006,15 @@ void musb_host_rx(struct musb *musb, u8 epnum)
done = musb_rx_dma_in_inventra_cppi41(c, hw_ep, qh,
  urb, xfer_len,
  iso_err);
-   if (done)
+   if (done) {
+   /* Don't call msub_advance_schedule()
+* immediately after receiving an endpoint RX
+* interrupt without waiting for the DMA
+* transfer to complete.
+*/
+   done = false;
goto finish;
-   else
+   } else
dev_err(musb->controller, "error: rx_dma 
failed\n");
}
 
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/2] usb: musb: Fix DMA desired mode for Mentor DMA engine

2016-02-02 Thread Joshua Henderson
Sergei,

On 02/02/2016 06:32 AM, Sergei Shtylyov wrote:
> On 2/2/2016 3:37 AM, Joshua Henderson wrote:
> 
>> From: Cristian Birsan <cristian.bir...@microchip.com>
>>
>> Commit 6b6e97107f12f3a9f7 (USB: musb: fix isochronous TXDMA (take 2)) 
>> introduces
> 
>Again, wrong commit style. And I really doubt that blaming my commit was 
> correct. :-)

I apologize.  I noticed you added the line in question, but did not notice the 
variable type of "mode" changed *afterward*.  Completely my fault.  I shall 
also fix the commit message style.

> 
>> a problem setting the desired channel mode for the Mentor DMA engine.
>>
>> There is a case where the pointer of the channel DMA mode is incorrectly
>> assigned to a pointer value, when it should be assigned the actual mode 
>> value.
>> This results in the value of channel->desired_mode not being correct.
>>
>> Signed-off-by: Cristian Birsan <cristian.bir...@microchip.com>
>> Signed-off-by: Joshua Henderson <joshua.hender...@microchip.com>
>> ---
>>   drivers/usb/musb/musb_host.c |2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
>> index 3fdc99b..748379e 100644
>> --- a/drivers/usb/musb/musb_host.c
>> +++ b/drivers/usb/musb/musb_host.c
>> @@ -662,7 +662,7 @@ static int musb_tx_dma_set_mode_mentor(struct 
>> dma_controller *dma,
> 
>Hm, there was no such function at the time of my commit...
> 
>>   csr &= ~(MUSB_TXCSR_AUTOSET | MUSB_TXCSR_DMAMODE);
>>   csr |= MUSB_TXCSR_DMAENAB; /* against programmer's guide */
>>   }
>> -channel->desired_mode = mode;
>> +channel->desired_mode = *mode;
> 
>   'mode' was 'u8' at the time of my commit, see:
> 
> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6b6e97107f12f3a9f7b5b43a6c3b94409240bcff
> 
>I think that the recent commit below should be blamed instead:
> 
> https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=754fe4a92c072a6e36d89fa328ed789c9ebc1af5

I'll take a look at this and make sure.

Thanks,
Josh

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/2] usb: musb: Fix DMA desired mode for Mentor DMA engine

2016-02-01 Thread Joshua Henderson
From: Cristian Birsan <cristian.bir...@microchip.com>

Commit 6b6e97107f12f3a9f7 (USB: musb: fix isochronous TXDMA (take 2)) introduces
a problem setting the desired channel mode for the Mentor DMA engine.

There is a case where the pointer of the channel DMA mode is incorrectly
assigned to a pointer value, when it should be assigned the actual mode value.
This results in the value of channel->desired_mode not being correct.

Signed-off-by: Cristian Birsan <cristian.bir...@microchip.com>
Signed-off-by: Joshua Henderson <joshua.hender...@microchip.com>
---
 drivers/usb/musb/musb_host.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index 3fdc99b..748379e 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -662,7 +662,7 @@ static int musb_tx_dma_set_mode_mentor(struct 
dma_controller *dma,
csr &= ~(MUSB_TXCSR_AUTOSET | MUSB_TXCSR_DMAMODE);
csr |= MUSB_TXCSR_DMAENAB; /* against programmer's guide */
}
-   channel->desired_mode = mode;
+   channel->desired_mode = *mode;
musb_writew(epio, MUSB_TXCSR, csr);
 
return 0;
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/2] usb: musb: Fix DMA for host mode

2016-02-01 Thread Joshua Henderson
From: Cristian Birsan <cristian.bir...@microchip.com>

Commit ac33cdb166811223cc (usb: musb: Remove ifdefs for musb_host_rx in
musb_host.c part5) introduces a problem setting DMA host mode.

This fixes the done condition that advances the musb schedule. Without this
patch the the msub_advance_schedule() is called immediately after receiving an
endpoint rx interrupt without waiting for the dma transfer to complete. As a
consequence when the dma complete interrupt arrives the in_qh member of hw_ep
is already null an the musb_host_rx() exits on !urb error case.

Signed-off-by: Cristian Birsan <cristian.bir...@microchip.com>
Signed-off-by: Joshua Henderson <joshua.hender...@microchip.com>
---
 drivers/usb/musb/musb_host.c |5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index 795a45b..3fdc99b 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -1825,6 +1825,7 @@ void musb_host_rx(struct musb *musb, u8 epnum)
u16 rx_csr, val;
booliso_err = false;
booldone = false;
+   int ret;
u32 status;
struct dma_channel  *dma;
unsigned int sg_flags = SG_MITER_ATOMIC | SG_MITER_TO_SG;
@@ -2003,10 +2004,10 @@ void musb_host_rx(struct musb *musb, u8 epnum)
qh->offset,
urb->transfer_buffer_length);
 
-   done = musb_rx_dma_in_inventra_cppi41(c, hw_ep, qh,
+   ret = musb_rx_dma_in_inventra_cppi41(c, hw_ep, qh,
  urb, xfer_len,
  iso_err);
-   if (done)
+   if (ret)
goto finish;
else
dev_err(musb->controller, "error: rx_dma 
failed\n");
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html