Re: [PATCH] net: smc911x: convert pxa dma to dmaengine

2016-03-15 Thread David Miller
From: Robert Jarzmik 
Date: Tue, 15 Mar 2016 23:56:58 +0100

> Robert Jarzmik  writes:
> 
>> Fabio Estevam  writes:
>>> Tested-by: Fabio Estevam 
>>
>> Thanks Fabio for the test.
>>
>> I also tried with a different different approach.
>>
>> I built the different platforms (imx v6, etc ...) :
>>  - one version (a) on a vanilla v4.5-rc2
>>  - one version (b) on a vaniall v4.5-rc2 + this patch
>>
>> For each of the builds, I took the preprocessed output of smc911x.c, and 
>> made a
>> diff between (a) and (b). The commands used were :
>>  - building in [1]
>>  - diffing in [2]
>>
>> The result is [3]. I conclude from [3] that the driver cannot break for non 
>> PXA
>> platforms.
>>
>> With Fabio's test and this demonstration, is enough to convince you to apply
>> this patch David ?
> Hi David,
> 
> Can you consider this patch now it is tested please ?

Please resubmit the patch fresh with the appropriate Tested-by: tags
added, thanks.


Re: [PATCH] net: smc911x: convert pxa dma to dmaengine

2016-03-15 Thread Robert Jarzmik
Robert Jarzmik  writes:

> Fabio Estevam  writes:
>> Tested-by: Fabio Estevam 
>
> Thanks Fabio for the test.
>
> I also tried with a different different approach.
>
> I built the different platforms (imx v6, etc ...) :
>  - one version (a) on a vanilla v4.5-rc2
>  - one version (b) on a vaniall v4.5-rc2 + this patch
>
> For each of the builds, I took the preprocessed output of smc911x.c, and made 
> a
> diff between (a) and (b). The commands used were :
>  - building in [1]
>  - diffing in [2]
>
> The result is [3]. I conclude from [3] that the driver cannot break for non 
> PXA
> platforms.
>
> With Fabio's test and this demonstration, is enough to convince you to apply
> this patch David ?
Hi David,

Can you consider this patch now it is tested please ?

--
Robert


Re: [PATCH] net: smc911x: convert pxa dma to dmaengine

2016-03-03 Thread Robert Jarzmik
Fabio Estevam  writes:

> On Sat, Feb 20, 2016 at 12:48 PM, Robert Jarzmik  
> wrote:
>
>> Hello,
>>
>> I'll reping once more, to see if any of you could give this patch a try.
>> So far Hitoshi doesn't have the hardware anymore, so it leaves only Guennadi 
>> and
>> Fabio.
>>
>> If you could give it a try it would be great.
>>
>> For reference, the patch is here : https://lkml.org/lkml/2015/11/30/768
>
> I finally got access to a mx53ard board, applied your patch and
> managed to NFS boot without issues:
>
> [1.739281] smsc911x f400.lan9220 eth0: SMSC911x/921x
> identified at 0xe0a8, IRQ: 207
>
> Tested-by: Fabio Estevam 

Thanks Fabio for the test.

I also tried with a different different approach.

I built the different platforms (imx v6, etc ...) :
 - one version (a) on a vanilla v4.5-rc2
 - one version (b) on a vaniall v4.5-rc2 + this patch

For each of the builds, I took the preprocessed output of smc911x.c, and made a
diff between (a) and (b). The commands used were :
 - building in [1]
 - diffing in [2]

The result is [3]. I conclude from [3] that the driver cannot break for non PXA
platforms.

With Fabio's test and this demonstration, is enough to convince you to apply
this patch David ?

Cheers.

--
Robert

[1] Building
arm-linux-gnueabi-gcc -Wp,-MD,drivers/net/ethernet/smsc/.smc911x.o.d  -nostdinc
-isystem /usr/lib/gcc/arm-linux-gnueabi/4.9/include -I./arch/arm/include
-Iarch/arm/include/generated/uapi -Iarch/arm/include/generated  -Iinclude
-I./arch/arm/include/uapi -Iarch/arm/include/generated/uapi -I./include/uapi
-Iinclude/generated/uapi -include ./include/linux/kconfig.h -D__KERNEL__
-mlittle-endian -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs
-fno-strict-aliasing -fno-common -Werror-implicit-function-declaration
-Wno-format-security -std=gnu89 -fno-dwarf2-cfi-asm -fno-omit-frame-pointer
-mapcs -mno-sched-prolog -fno-ipa-sra -mabi=aapcs-linux -mno-thumb-interwork
-mfpu=vfp -marm -D__LINUX_ARM_ARCH__=6 -march=armv6k -mtune=arm1136j-s
-msoft-float -Uarm -fno-delete-null-pointer-checks -O2
--param=allow-store-data-races=0 -Wframe-larger-than=1024 -fno-stack-protector
-Wno-unused-but-set-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls
-fno-var-tracking-assignments -Wdeclaration-after-statement -Wno-pointer-sign
-fno-strict-overflow -fconserve-stack -Werror=implicit-int
-Werror=strict-prototypes -Werror=date-time -DCC_HAVE_ASM_GOTO
-D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(smc911x)"
-D"KBUILD_MODNAME=KBUILD_STR(smc911x)" -E -o
drivers/net/ethernet/smsc/smc911x_with_rjk_patch.E
drivers/net/ethernet/smsc/smc911x.c

[2] Diffing
rj@belgarion:~/mio_linux/kernel$ diff -I "#.*" -u
 drivers/net/ethernet/smsc/smc911x_without_rjk_patch.E
 drivers/net/ethernet/smsc/smc911x_with_rjk_patch.E >
 drivers/net/ethernet/smsc/smc911x_sdiff.diff

[3] Result of diffing
--- drivers/net/ethernet/smsc/smc911x_without_rjk_patch.E   2016-02-21 
16:19:27.882425010 +0100
+++ drivers/net/ethernet/smsc/smc911x_with_rjk_patch.E  2016-02-21 
16:19:59.250424159 +0100
@@ -49141,6 +49141,34 @@
 
 
 
+# 1 "include/linux/dma/pxa-dma.h" 1
+
+
+
+enum pxad_chan_prio {
+ PXAD_PRIO_HIGHEST = 0,
+ PXAD_PRIO_NORMAL,
+ PXAD_PRIO_LOW,
+ PXAD_PRIO_LOWEST,
+};
+
+struct pxad_param {
+ unsigned int drcmr;
+ enum pxad_chan_prio prio;
+};
+
+struct dma_chan;
+
+
+
+
+static inline __attribute__((always_inline)) 
__attribute__((no_instrument_function)) bool pxad_filter_fn(struct dma_chan 
*chan, void *param)
+{
+ return false;
+}
+# 78 "drivers/net/ethernet/smsc/smc911x.c" 2
+
+
 
 # 1 "drivers/net/ethernet/smsc/smc911x.h" 1
 # 31 "drivers/net/ethernet/smsc/smc911x.h"
@@ -50670,6 +50698,9 @@
  unsigned int val, chip_id, revision;
  const char *version_string;
  unsigned long irq_flags;
+ struct dma_slave_config config;
+ dma_cap_mask_t mask;
+ struct pxad_param param;
 
  do { } while (0);


Re: [PATCH] net: smc911x: convert pxa dma to dmaengine

2016-02-23 Thread Fabio Estevam
On Sat, Feb 20, 2016 at 12:48 PM, Robert Jarzmik  wrote:

> Hello,
>
> I'll reping once more, to see if any of you could give this patch a try.
> So far Hitoshi doesn't have the hardware anymore, so it leaves only Guennadi 
> and
> Fabio.
>
> If you could give it a try it would be great.
>
> For reference, the patch is here : https://lkml.org/lkml/2015/11/30/768

I finally got access to a mx53ard board, applied your patch and
managed to NFS boot without issues:

[1.739281] smsc911x f400.lan9220 eth0: SMSC911x/921x
identified at 0xe0a8, IRQ: 207

Tested-by: Fabio Estevam 


Re: [PATCH] net: smc911x: convert pxa dma to dmaengine

2016-02-20 Thread Guennadi Liakhovetski
Hi,

On Sat, 20 Feb 2016, Hitoshi Mitake wrote:

> 
> Hi Robert,
> 
> At Sat, 06 Feb 2016 10:05:51 +0100,
> Robert Jarzmik wrote:
> > 
> > David Miller <da...@davemloft.net> writes:
> > 
> > > From: Robert Jarzmik <robert.jarz...@free.fr>
> > > Date: Fri, 05 Feb 2016 22:44:56 +0100
> > >
> > >> Apart from Alberto who answered he cannot test it by lack of hardware, 
> > >> the
> > >> others didn't answer.
> > >> 
> > >> So how can I move forward ? Would you want me to amend the KConfig to 
> > >> add a "&&
> > >> !ARCH_PXA" on the "depend" line ?
> > >
> > > Please just keep pinging people to properly test this.
> > Okay, let's have another try.
> > 
> > Hi Guennadi, Hitoshi, Fabio,
> > 
> > Could any of you try this patch to ensure your board is not broken please ?
> > I've re-added the patch at the end of this mail for easier handling. 
> > Normally no
> > code path in non-PXA board is changed, so the test should be 
> > straightforward.
> > 
> > It's also available in : https://lkml.org/lkml/2015/11/30/768
> > 
> > You're the maintainers of the following boards using smc911x AFAIK:
> >  - sh2007: Guennadi and Hitoshi
> 
> (I noticed my previous mail was bounced, so sending it again)
> 
> Really sorry, currently I don't have the board :(
> Do you have a working board that can be used for testing, Guennadi?

Don't think I have anything, that I could use for testing with a 
reasonable effort.

Thanks
Guennadi

> 
> Thanks,
> Hitoshi
> 
> >  - armadillo5x0: Alberto
> >  - imx v6 and imx v7: Fabio
> > 
> > Cheers.
> > 
> > -- 
> > Robert
> > 
> > 
> > ---8<---
> > From: Robert Jarzmik <robert.jarz...@free.fr>
> > Subject: [PATCH] net: smc911x: convert pxa dma to dmaengine
> > To: "David S. Miller" <da...@davemloft.net>
> > Cc: netdev@vger.kernel.org, linux-ker...@vger.kernel.org, Robert Jarzmik 
> > <robert.jarz...@free.fr>
> > Date: Mon, 30 Nov 2015 22:40:28 +0100 (9 weeks, 4 days, 11 hours ago)
> > Message-Id: <1448919628-13273-1-git-send-email-robert.jarz...@free.fr>
> > X-Mailer: git-send-email 2.1.4
> > 
> > Convert the dma transfers to be dmaengine based, now pxa has a dmaengine
> > slave driver. This makes this driver a bit more PXA agnostic.
> > 
> > The driver was only compile tested. The risk is quite small as no
> > current PXA platform I'm aware of is using smc911x driver.
> > 
> > Signed-off-by: Robert Jarzmik <robert.jarz...@free.fr>
> > ---
> >  drivers/net/ethernet/smsc/smc911x.c | 85 
> > -
> >  drivers/net/ethernet/smsc/smc911x.h | 63 ---
> >  2 files changed, 82 insertions(+), 66 deletions(-)
> > 
> > diff --git a/drivers/net/ethernet/smsc/smc911x.c 
> > b/drivers/net/ethernet/smsc/smc911x.c
> > index bd64eb982e52..3f5711061432 100644
> > --- a/drivers/net/ethernet/smsc/smc911x.c
> > +++ b/drivers/net/ethernet/smsc/smc911x.c
> > @@ -73,6 +73,9 @@ static const char version[] =
> >  #include 
> >  #include 
> >  
> > +#include 
> > +#include 
> > +
> >  #include 
> >  
> >  #include "smc911x.h"
> > @@ -1174,18 +1177,16 @@ static irqreturn_t smc911x_interrupt(int irq, void 
> > *dev_id)
> >  
> >  #ifdef SMC_USE_DMA
> >  static void
> > -smc911x_tx_dma_irq(int dma, void *data)
> > +smc911x_tx_dma_irq(void *data)
> >  {
> > -   struct net_device *dev = (struct net_device *)data;
> > -   struct smc911x_local *lp = netdev_priv(dev);
> > +   struct smc911x_local *lp = data;
> > +   struct net_device *dev = lp->netdev;
> > struct sk_buff *skb = lp->current_tx_skb;
> > unsigned long flags;
> >  
> > DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
> >  
> > DBG(SMC_DEBUG_TX | SMC_DEBUG_DMA, dev, "TX DMA irq handler\n");
> > -   /* Clear the DMA interrupt sources */
> > -   SMC_DMA_ACK_IRQ(dev, dma);
> > BUG_ON(skb == NULL);
> > dma_unmap_single(NULL, tx_dmabuf, tx_dmalen, DMA_TO_DEVICE);
> > dev->trans_start = jiffies;
> > @@ -1208,18 +1209,16 @@ smc911x_tx_dma_irq(int dma, void *data)
> > "TX DMA irq completed\n");
> >  }
> >  static void
> > -smc911x_rx_dma_irq(int dma, void *data)
> > +smc911x_rx_dma_irq(void *data)
> >  {
> > - 

Re: [PATCH] net: smc911x: convert pxa dma to dmaengine

2016-02-20 Thread Robert Jarzmik
Hitoshi Mitake  writes:

> Hi Robert,
>
> On Sat, Feb 6, 2016 at 6:05 PM, Robert Jarzmik  wrote:
> > Please just keep pinging people to properly test this.
> 
> Okay, let's have another try.
> 
> Hi Guennadi, Hitoshi, Fabio,
> 
> Could any of you try this patch to ensure your board is not broken please 
> ?
> I've re-added the patch at the end of this mail for easier handling.
> Normally no
> code path in non-PXA board is changed, so the test should be
> straightforward.
> 
> It's also available in : https://lkml.org/lkml/2015/11/30/768
> 
> You're the maintainers of the following boards using smc911x AFAIK:
> - sh2007: Guennadi and Hitoshi
>
> Really sorry, currently I don't have the board :(
> Do you have a working board that can be used for testing, Guennadi?
>
> Thanks,
> Hitoshi

Hello,

I'll reping once more, to see if any of you could give this patch a try.
So far Hitoshi doesn't have the hardware anymore, so it leaves only Guennadi and
Fabio.

If you could give it a try it would be great.

For reference, the patch is here : https://lkml.org/lkml/2015/11/30/768

Cheers.

--
Robert


Re: [PATCH] net: smc911x: convert pxa dma to dmaengine

2016-02-20 Thread Hitoshi Mitake

Hi Robert,

At Sat, 06 Feb 2016 10:05:51 +0100,
Robert Jarzmik wrote:
> 
> David Miller <da...@davemloft.net> writes:
> 
> > From: Robert Jarzmik <robert.jarz...@free.fr>
> > Date: Fri, 05 Feb 2016 22:44:56 +0100
> >
> >> Apart from Alberto who answered he cannot test it by lack of hardware, the
> >> others didn't answer.
> >> 
> >> So how can I move forward ? Would you want me to amend the KConfig to add 
> >> a "&&
> >> !ARCH_PXA" on the "depend" line ?
> >
> > Please just keep pinging people to properly test this.
> Okay, let's have another try.
> 
> Hi Guennadi, Hitoshi, Fabio,
> 
> Could any of you try this patch to ensure your board is not broken please ?
> I've re-added the patch at the end of this mail for easier handling. Normally 
> no
> code path in non-PXA board is changed, so the test should be straightforward.
> 
> It's also available in : https://lkml.org/lkml/2015/11/30/768
> 
> You're the maintainers of the following boards using smc911x AFAIK:
>  - sh2007: Guennadi and Hitoshi

(I noticed my previous mail was bounced, so sending it again)

Really sorry, currently I don't have the board :(
Do you have a working board that can be used for testing, Guennadi?

Thanks,
Hitoshi

>  - armadillo5x0: Alberto
>  - imx v6 and imx v7: Fabio
> 
> Cheers.
> 
> -- 
> Robert
> 
> 
> ---8<---
> From: Robert Jarzmik <robert.jarz...@free.fr>
> Subject: [PATCH] net: smc911x: convert pxa dma to dmaengine
> To: "David S. Miller" <da...@davemloft.net>
> Cc: netdev@vger.kernel.org, linux-ker...@vger.kernel.org, Robert Jarzmik 
> <robert.jarz...@free.fr>
> Date: Mon, 30 Nov 2015 22:40:28 +0100 (9 weeks, 4 days, 11 hours ago)
> Message-Id: <1448919628-13273-1-git-send-email-robert.jarz...@free.fr>
> X-Mailer: git-send-email 2.1.4
> 
> Convert the dma transfers to be dmaengine based, now pxa has a dmaengine
> slave driver. This makes this driver a bit more PXA agnostic.
> 
> The driver was only compile tested. The risk is quite small as no
> current PXA platform I'm aware of is using smc911x driver.
> 
> Signed-off-by: Robert Jarzmik <robert.jarz...@free.fr>
> ---
>  drivers/net/ethernet/smsc/smc911x.c | 85 
> -
>  drivers/net/ethernet/smsc/smc911x.h | 63 ---
>  2 files changed, 82 insertions(+), 66 deletions(-)
> 
> diff --git a/drivers/net/ethernet/smsc/smc911x.c 
> b/drivers/net/ethernet/smsc/smc911x.c
> index bd64eb982e52..3f5711061432 100644
> --- a/drivers/net/ethernet/smsc/smc911x.c
> +++ b/drivers/net/ethernet/smsc/smc911x.c
> @@ -73,6 +73,9 @@ static const char version[] =
>  #include 
>  #include 
>  
> +#include 
> +#include 
> +
>  #include 
>  
>  #include "smc911x.h"
> @@ -1174,18 +1177,16 @@ static irqreturn_t smc911x_interrupt(int irq, void 
> *dev_id)
>  
>  #ifdef SMC_USE_DMA
>  static void
> -smc911x_tx_dma_irq(int dma, void *data)
> +smc911x_tx_dma_irq(void *data)
>  {
> - struct net_device *dev = (struct net_device *)data;
> - struct smc911x_local *lp = netdev_priv(dev);
> + struct smc911x_local *lp = data;
> + struct net_device *dev = lp->netdev;
>   struct sk_buff *skb = lp->current_tx_skb;
>   unsigned long flags;
>  
>   DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
>  
>   DBG(SMC_DEBUG_TX | SMC_DEBUG_DMA, dev, "TX DMA irq handler\n");
> - /* Clear the DMA interrupt sources */
> - SMC_DMA_ACK_IRQ(dev, dma);
>   BUG_ON(skb == NULL);
>   dma_unmap_single(NULL, tx_dmabuf, tx_dmalen, DMA_TO_DEVICE);
>   dev->trans_start = jiffies;
> @@ -1208,18 +1209,16 @@ smc911x_tx_dma_irq(int dma, void *data)
>   "TX DMA irq completed\n");
>  }
>  static void
> -smc911x_rx_dma_irq(int dma, void *data)
> +smc911x_rx_dma_irq(void *data)
>  {
> - struct net_device *dev = (struct net_device *)data;
> - struct smc911x_local *lp = netdev_priv(dev);
> + struct smc911x_local *lp = data;
> + struct net_device *dev = lp->netdev;
>   struct sk_buff *skb = lp->current_rx_skb;
>   unsigned long flags;
>   unsigned int pkts;
>  
>   DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
>   DBG(SMC_DEBUG_RX | SMC_DEBUG_DMA, dev, "RX DMA irq handler\n");
> - /* Clear the DMA interrupt sources */
> - SMC_DMA_ACK_IRQ(dev, dma);
>   dma_unmap_single(NULL, rx_dmabuf, rx_dmalen, DMA_FROM_DEVICE);
>   BUG_ON(skb == NULL);
>   lp->current_rx_skb = NULL;
> @@ -1792,6 +1791,9 @@ sta

Re: [PATCH] net: smc911x: convert pxa dma to dmaengine

2016-02-06 Thread Robert Jarzmik
David Miller <da...@davemloft.net> writes:

> From: Robert Jarzmik <robert.jarz...@free.fr>
> Date: Fri, 05 Feb 2016 22:44:56 +0100
>
>> Apart from Alberto who answered he cannot test it by lack of hardware, the
>> others didn't answer.
>> 
>> So how can I move forward ? Would you want me to amend the KConfig to add a 
>> "&&
>> !ARCH_PXA" on the "depend" line ?
>
> Please just keep pinging people to properly test this.
Okay, let's have another try.

Hi Guennadi, Hitoshi, Fabio,

Could any of you try this patch to ensure your board is not broken please ?
I've re-added the patch at the end of this mail for easier handling. Normally no
code path in non-PXA board is changed, so the test should be straightforward.

It's also available in : https://lkml.org/lkml/2015/11/30/768

You're the maintainers of the following boards using smc911x AFAIK:
 - sh2007: Guennadi and Hitoshi
 - armadillo5x0: Alberto
 - imx v6 and imx v7: Fabio

Cheers.

-- 
Robert


---8<---
From: Robert Jarzmik <robert.jarz...@free.fr>
Subject: [PATCH] net: smc911x: convert pxa dma to dmaengine
To: "David S. Miller" <da...@davemloft.net>
Cc: netdev@vger.kernel.org, linux-ker...@vger.kernel.org, Robert Jarzmik 
<robert.jarz...@free.fr>
Date: Mon, 30 Nov 2015 22:40:28 +0100 (9 weeks, 4 days, 11 hours ago)
Message-Id: <1448919628-13273-1-git-send-email-robert.jarz...@free.fr>
X-Mailer: git-send-email 2.1.4

Convert the dma transfers to be dmaengine based, now pxa has a dmaengine
slave driver. This makes this driver a bit more PXA agnostic.

The driver was only compile tested. The risk is quite small as no
current PXA platform I'm aware of is using smc911x driver.

Signed-off-by: Robert Jarzmik <robert.jarz...@free.fr>
---
 drivers/net/ethernet/smsc/smc911x.c | 85 -
 drivers/net/ethernet/smsc/smc911x.h | 63 ---
 2 files changed, 82 insertions(+), 66 deletions(-)

diff --git a/drivers/net/ethernet/smsc/smc911x.c 
b/drivers/net/ethernet/smsc/smc911x.c
index bd64eb982e52..3f5711061432 100644
--- a/drivers/net/ethernet/smsc/smc911x.c
+++ b/drivers/net/ethernet/smsc/smc911x.c
@@ -73,6 +73,9 @@ static const char version[] =
 #include 
 #include 
 
+#include 
+#include 
+
 #include 
 
 #include "smc911x.h"
@@ -1174,18 +1177,16 @@ static irqreturn_t smc911x_interrupt(int irq, void 
*dev_id)
 
 #ifdef SMC_USE_DMA
 static void
-smc911x_tx_dma_irq(int dma, void *data)
+smc911x_tx_dma_irq(void *data)
 {
-   struct net_device *dev = (struct net_device *)data;
-   struct smc911x_local *lp = netdev_priv(dev);
+   struct smc911x_local *lp = data;
+   struct net_device *dev = lp->netdev;
struct sk_buff *skb = lp->current_tx_skb;
unsigned long flags;
 
DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
 
DBG(SMC_DEBUG_TX | SMC_DEBUG_DMA, dev, "TX DMA irq handler\n");
-   /* Clear the DMA interrupt sources */
-   SMC_DMA_ACK_IRQ(dev, dma);
BUG_ON(skb == NULL);
dma_unmap_single(NULL, tx_dmabuf, tx_dmalen, DMA_TO_DEVICE);
dev->trans_start = jiffies;
@@ -1208,18 +1209,16 @@ smc911x_tx_dma_irq(int dma, void *data)
"TX DMA irq completed\n");
 }
 static void
-smc911x_rx_dma_irq(int dma, void *data)
+smc911x_rx_dma_irq(void *data)
 {
-   struct net_device *dev = (struct net_device *)data;
-   struct smc911x_local *lp = netdev_priv(dev);
+   struct smc911x_local *lp = data;
+   struct net_device *dev = lp->netdev;
struct sk_buff *skb = lp->current_rx_skb;
unsigned long flags;
unsigned int pkts;
 
DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
DBG(SMC_DEBUG_RX | SMC_DEBUG_DMA, dev, "RX DMA irq handler\n");
-   /* Clear the DMA interrupt sources */
-   SMC_DMA_ACK_IRQ(dev, dma);
dma_unmap_single(NULL, rx_dmabuf, rx_dmalen, DMA_FROM_DEVICE);
BUG_ON(skb == NULL);
lp->current_rx_skb = NULL;
@@ -1792,6 +1791,9 @@ static int smc911x_probe(struct net_device *dev)
unsigned int val, chip_id, revision;
const char *version_string;
unsigned long irq_flags;
+   struct dma_slave_config config;
+   dma_cap_mask_t mask;
+   struct pxad_param param;
 
DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
 
@@ -1963,11 +1965,40 @@ static int smc911x_probe(struct net_device *dev)
goto err_out;
 
 #ifdef SMC_USE_DMA
-   lp->rxdma = SMC_DMA_REQUEST(dev, smc911x_rx_dma_irq);
-   lp->txdma = SMC_DMA_REQUEST(dev, smc911x_tx_dma_irq);
+
+   dma_cap_zero(mask);
+   dma_cap_set(DMA_SLAVE, mask);
+   param.prio = PXAD_PRIO_LOWEST;
+   param.drcmr = -1UL;
+
+   lp->rxdma =
+   dma_request_slave_channel_compat(mask, pxad_filter_fn,
+  

Re: [PATCH] net: smc911x: convert pxa dma to dmaengine

2016-02-05 Thread David Miller
From: Robert Jarzmik 
Date: Fri, 05 Feb 2016 22:44:56 +0100

> Apart from Alberto who answered he cannot test it by lack of hardware, the
> others didn't answer.
> 
> So how can I move forward ? Would you want me to amend the KConfig to add a 
> "&&
> !ARCH_PXA" on the "depend" line ?

Please just keep pinging people to properly test this.


Re: [PATCH] net: smc911x: convert pxa dma to dmaengine

2016-02-05 Thread Robert Jarzmik
Robert Jarzmik  writes:

> David Miller  writes:
>
>> From: Robert Jarzmik 
>> Date: Mon, 30 Nov 2015 22:40:28 +0100
>>
>>> Convert the dma transfers to be dmaengine based, now pxa has a dmaengine
>>> slave driver. This makes this driver a bit more PXA agnostic.
>>> 
>>> The driver was only compile tested. The risk is quite small as no
>>> current PXA platform I'm aware of is using smc911x driver.
>>> 
>>> Signed-off-by: Robert Jarzmik 
>>
>> I've marked this 'deferred' in patchwork until someone tests
>> these changes and says they should be good on all platforms
>> this chip is used.
>
> Okay, so would any maintainer of non pxa boards give a feedback for this 
> patch ?
> The ones I have found are :
>  - sh2007: Guennadi and Hitoshi
>  - armadillo5x0: Alberto
>  - imx v6 and imx v7: Fabio
> I've added the patch at the end of this mail for easier handling.
>
> Now, if no maintainer gives it a test, what do we do, David ? I'm intending to
> remove "arch/arm/mach-pxa/include/mach/dma.h" in the near future, which will
> break this driver somehow (at least for PXA boards, even if none is identified
> so far).
> So could we agree on a deadline, and what you wish to do : either drop the 
> patch
> or apply, or something else.

Hi David,

Apart from Alberto who answered he cannot test it by lack of hardware, the
others didn't answer.

So how can I move forward ? Would you want me to amend the KConfig to add a "&&
!ARCH_PXA" on the "depend" line ?

Cheers.

-- 
Robert


Re: [PATCH] net: smc911x: convert pxa dma to dmaengine

2015-12-03 Thread Robert Jarzmik
David Miller <da...@davemloft.net> writes:

> From: Robert Jarzmik <robert.jarz...@free.fr>
> Date: Mon, 30 Nov 2015 22:40:28 +0100
>
>> Convert the dma transfers to be dmaengine based, now pxa has a dmaengine
>> slave driver. This makes this driver a bit more PXA agnostic.
>> 
>> The driver was only compile tested. The risk is quite small as no
>> current PXA platform I'm aware of is using smc911x driver.
>> 
>> Signed-off-by: Robert Jarzmik <robert.jarz...@free.fr>
>
> I've marked this 'deferred' in patchwork until someone tests
> these changes and says they should be good on all platforms
> this chip is used.

Okay, so would any maintainer of non pxa boards give a feedback for this patch ?
The ones I have found are :
 - sh2007: Guennadi and Hitoshi
 - armadillo5x0: Alberto
 - imx v6 and imx v7: Fabio
I've added the patch at the end of this mail for easier handling.

Now, if no maintainer gives it a test, what do we do, David ? I'm intending to
remove "arch/arm/mach-pxa/include/mach/dma.h" in the near future, which will
break this driver somehow (at least for PXA boards, even if none is identified
so far).
So could we agree on a deadline, and what you wish to do : either drop the patch
or apply, or something else.

Cheers.

-- 
Robert

--8>--
>From 9b7e996fe92d81d417f59a4eed92b3472594a2e8 Mon Sep 17 00:00:00 2001
From: Robert Jarzmik <robert.jarz...@free.fr>
Date: Thu, 10 Sep 2015 14:48:09 +0200
Subject: [PATCH] net: smc911x: convert pxa dma to dmaengine

Convert the dma transfers to be dmaengine based, now pxa has a dmaengine
slave driver. This makes this driver a bit more PXA agnostic.

The driver was only compile tested. The risk is quite small as no
current PXA platform I'm aware of is using smc911x driver.

Signed-off-by: Robert Jarzmik <robert.jarz...@free.fr>
---
 drivers/net/ethernet/smsc/smc911x.c | 85 -
 drivers/net/ethernet/smsc/smc911x.h | 63 ---
 2 files changed, 82 insertions(+), 66 deletions(-)

diff --git a/drivers/net/ethernet/smsc/smc911x.c 
b/drivers/net/ethernet/smsc/smc911x.c
index bd64eb982e52..3f5711061432 100644
--- a/drivers/net/ethernet/smsc/smc911x.c
+++ b/drivers/net/ethernet/smsc/smc911x.c
@@ -73,6 +73,9 @@ static const char version[] =
 #include 
 #include 
 
+#include 
+#include 
+
 #include 
 
 #include "smc911x.h"
@@ -1174,18 +1177,16 @@ static irqreturn_t smc911x_interrupt(int irq, void 
*dev_id)
 
 #ifdef SMC_USE_DMA
 static void
-smc911x_tx_dma_irq(int dma, void *data)
+smc911x_tx_dma_irq(void *data)
 {
-   struct net_device *dev = (struct net_device *)data;
-   struct smc911x_local *lp = netdev_priv(dev);
+   struct smc911x_local *lp = data;
+   struct net_device *dev = lp->netdev;
struct sk_buff *skb = lp->current_tx_skb;
unsigned long flags;
 
DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
 
DBG(SMC_DEBUG_TX | SMC_DEBUG_DMA, dev, "TX DMA irq handler\n");
-   /* Clear the DMA interrupt sources */
-   SMC_DMA_ACK_IRQ(dev, dma);
BUG_ON(skb == NULL);
dma_unmap_single(NULL, tx_dmabuf, tx_dmalen, DMA_TO_DEVICE);
dev->trans_start = jiffies;
@@ -1208,18 +1209,16 @@ smc911x_tx_dma_irq(int dma, void *data)
"TX DMA irq completed\n");
 }
 static void
-smc911x_rx_dma_irq(int dma, void *data)
+smc911x_rx_dma_irq(void *data)
 {
-   struct net_device *dev = (struct net_device *)data;
-   struct smc911x_local *lp = netdev_priv(dev);
+   struct smc911x_local *lp = data;
+   struct net_device *dev = lp->netdev;
struct sk_buff *skb = lp->current_rx_skb;
unsigned long flags;
unsigned int pkts;
 
DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
DBG(SMC_DEBUG_RX | SMC_DEBUG_DMA, dev, "RX DMA irq handler\n");
-   /* Clear the DMA interrupt sources */
-   SMC_DMA_ACK_IRQ(dev, dma);
dma_unmap_single(NULL, rx_dmabuf, rx_dmalen, DMA_FROM_DEVICE);
BUG_ON(skb == NULL);
lp->current_rx_skb = NULL;
@@ -1792,6 +1791,9 @@ static int smc911x_probe(struct net_device *dev)
unsigned int val, chip_id, revision;
const char *version_string;
unsigned long irq_flags;
+   struct dma_slave_config config;
+   dma_cap_mask_t mask;
+   struct pxad_param param;
 
DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
 
@@ -1963,11 +1965,40 @@ static int smc911x_probe(struct net_device *dev)
goto err_out;
 
 #ifdef SMC_USE_DMA
-   lp->rxdma = SMC_DMA_REQUEST(dev, smc911x_rx_dma_irq);
-   lp->txdma = SMC_DMA_REQUEST(dev, smc911x_tx_dma_irq);
+
+   dma_cap_zero(mask);
+   dma_cap_set(DMA_SLAVE, mask);
+   param.prio = PXAD_PRIO_LOWEST;
+   param.drcmr = -1UL;
+
+   lp->rxdma =
+

Re: [PATCH] net: smc911x: convert pxa dma to dmaengine

2015-12-02 Thread David Miller
From: Robert Jarzmik 
Date: Mon, 30 Nov 2015 22:40:28 +0100

> Convert the dma transfers to be dmaengine based, now pxa has a dmaengine
> slave driver. This makes this driver a bit more PXA agnostic.
> 
> The driver was only compile tested. The risk is quite small as no
> current PXA platform I'm aware of is using smc911x driver.
> 
> Signed-off-by: Robert Jarzmik 

I've marked this 'deferred' in patchwork until someone tests
these changes and says they should be good on all platforms
this chip is used.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] net: smc911x: convert pxa dma to dmaengine

2015-11-30 Thread Robert Jarzmik
Convert the dma transfers to be dmaengine based, now pxa has a dmaengine
slave driver. This makes this driver a bit more PXA agnostic.

The driver was only compile tested. The risk is quite small as no
current PXA platform I'm aware of is using smc911x driver.

Signed-off-by: Robert Jarzmik 
---
 drivers/net/ethernet/smsc/smc911x.c | 85 -
 drivers/net/ethernet/smsc/smc911x.h | 63 ---
 2 files changed, 82 insertions(+), 66 deletions(-)

diff --git a/drivers/net/ethernet/smsc/smc911x.c 
b/drivers/net/ethernet/smsc/smc911x.c
index bd64eb982e52..3f5711061432 100644
--- a/drivers/net/ethernet/smsc/smc911x.c
+++ b/drivers/net/ethernet/smsc/smc911x.c
@@ -73,6 +73,9 @@ static const char version[] =
 #include 
 #include 
 
+#include 
+#include 
+
 #include 
 
 #include "smc911x.h"
@@ -1174,18 +1177,16 @@ static irqreturn_t smc911x_interrupt(int irq, void 
*dev_id)
 
 #ifdef SMC_USE_DMA
 static void
-smc911x_tx_dma_irq(int dma, void *data)
+smc911x_tx_dma_irq(void *data)
 {
-   struct net_device *dev = (struct net_device *)data;
-   struct smc911x_local *lp = netdev_priv(dev);
+   struct smc911x_local *lp = data;
+   struct net_device *dev = lp->netdev;
struct sk_buff *skb = lp->current_tx_skb;
unsigned long flags;
 
DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
 
DBG(SMC_DEBUG_TX | SMC_DEBUG_DMA, dev, "TX DMA irq handler\n");
-   /* Clear the DMA interrupt sources */
-   SMC_DMA_ACK_IRQ(dev, dma);
BUG_ON(skb == NULL);
dma_unmap_single(NULL, tx_dmabuf, tx_dmalen, DMA_TO_DEVICE);
dev->trans_start = jiffies;
@@ -1208,18 +1209,16 @@ smc911x_tx_dma_irq(int dma, void *data)
"TX DMA irq completed\n");
 }
 static void
-smc911x_rx_dma_irq(int dma, void *data)
+smc911x_rx_dma_irq(void *data)
 {
-   struct net_device *dev = (struct net_device *)data;
-   struct smc911x_local *lp = netdev_priv(dev);
+   struct smc911x_local *lp = data;
+   struct net_device *dev = lp->netdev;
struct sk_buff *skb = lp->current_rx_skb;
unsigned long flags;
unsigned int pkts;
 
DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
DBG(SMC_DEBUG_RX | SMC_DEBUG_DMA, dev, "RX DMA irq handler\n");
-   /* Clear the DMA interrupt sources */
-   SMC_DMA_ACK_IRQ(dev, dma);
dma_unmap_single(NULL, rx_dmabuf, rx_dmalen, DMA_FROM_DEVICE);
BUG_ON(skb == NULL);
lp->current_rx_skb = NULL;
@@ -1792,6 +1791,9 @@ static int smc911x_probe(struct net_device *dev)
unsigned int val, chip_id, revision;
const char *version_string;
unsigned long irq_flags;
+   struct dma_slave_config config;
+   dma_cap_mask_t mask;
+   struct pxad_param param;
 
DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
 
@@ -1963,11 +1965,40 @@ static int smc911x_probe(struct net_device *dev)
goto err_out;
 
 #ifdef SMC_USE_DMA
-   lp->rxdma = SMC_DMA_REQUEST(dev, smc911x_rx_dma_irq);
-   lp->txdma = SMC_DMA_REQUEST(dev, smc911x_tx_dma_irq);
+
+   dma_cap_zero(mask);
+   dma_cap_set(DMA_SLAVE, mask);
+   param.prio = PXAD_PRIO_LOWEST;
+   param.drcmr = -1UL;
+
+   lp->rxdma =
+   dma_request_slave_channel_compat(mask, pxad_filter_fn,
+, >dev, "rx");
+   lp->txdma =
+   dma_request_slave_channel_compat(mask, pxad_filter_fn,
+, >dev, "tx");
lp->rxdma_active = 0;
lp->txdma_active = 0;
-   dev->dma = lp->rxdma;
+
+   memset(, 0, sizeof(config));
+   config.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
+   config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
+   config.src_addr = lp->physaddr + RX_DATA_FIFO;
+   config.dst_addr = lp->physaddr + TX_DATA_FIFO;
+   config.src_maxburst = 32;
+   config.dst_maxburst = 32;
+   retval = dmaengine_slave_config(lp->rxdma, );
+   if (retval) {
+   dev_err(lp->dev, "dma rx channel configuration failed: %d\n",
+   retval);
+   goto err_out;
+   }
+   retval = dmaengine_slave_config(lp->txdma, );
+   if (retval) {
+   dev_err(lp->dev, "dma tx channel configuration failed: %d\n",
+   retval);
+   goto err_out;
+   }
 #endif
 
retval = register_netdev(dev);
@@ -1978,11 +2009,11 @@ static int smc911x_probe(struct net_device *dev)
dev->base_addr, dev->irq);
 
 #ifdef SMC_USE_DMA
-   if (lp->rxdma != -1)
-   pr_cont(" RXDMA %d", lp->rxdma);
+   if (lp->rxdma)
+   pr_cont(" RXDMA %p", lp->rxdma);
 
-   if (lp->txdma != -1)
-   pr_cont(" TXDMA %d", lp->txdma);
+   if (lp->txdma)
+