Re: [PATCH v3 net-next 2/2] wan: dscc4: convert to plain DMA API

2017-08-11 Thread Francois Romieu
David Miller  :
[...]
> Oops, this will need to be sent as a relative fixup as I've applied these
> two patches to net-next, sorry Francois.

No problem. It works perfectly this way.

-- 
Ueimor


Re: [PATCH v3 net-next 2/2] wan: dscc4: convert to plain DMA API

2017-08-11 Thread David Miller
From: Francois Romieu 
Date: Fri, 11 Aug 2017 23:45:49 +0200

> Alexey Khoroshilov  :
> [...]
>> diff --git a/drivers/net/wan/dscc4.c b/drivers/net/wan/dscc4.c
>> index 8480dbf..a043fb1 100644
>> --- a/drivers/net/wan/dscc4.c
>> +++ b/drivers/net/wan/dscc4.c
> [...]
>> @@ -506,8 +506,9 @@ static void dscc4_release_ring(struct dscc4_dev_priv 
>> *dpriv)
>>  skbuff = dpriv->rx_skbuff;
>>  for (i = 0; i < RX_RING_SIZE; i++) {
>>  if (*skbuff) {
>> -pci_unmap_single(pdev, le32_to_cpu(rx_fd->data),
>> -RX_MAX(HDLC_MAX_MRU), PCI_DMA_FROMDEVICE);
>> +dma_unmap_single(d, le32_to_cpu(rx_fd->data),
>> + RX_MAX(HDLC_MAX_MRU),
>> + DMA_FROM_DEVICE);
> 
>RX_MAX(HDLC_MAX_MRU), DMA_FROM_DEVICE);
...
>> @@ -782,8 +783,8 @@ static int dscc4_init_one(struct pci_dev *pdev, const 
>> struct pci_device_id *ent)
>>  
>>  rc = -ENOMEM;
>>  
>> -priv->iqcfg = (__le32 *) pci_alloc_consistent(pdev,
>> -IRQ_RING_SIZE*sizeof(__le32), >iqcfg_dma);
>> +priv->iqcfg = (__le32 *)dma_alloc_coherent(>dev,
>> +IRQ_RING_SIZE*sizeof(__le32), >iqcfg_dma, GFP_KERNEL);
> 
> - the cast can go away
> - please replace >dev with a local variable
> 
>   priv->iqcfg = dma_alloc_coherent(d, IRQ_RING_SIZE*sizeof(__le32),
>>iqcfg_dma, GFP_KERNEL);
> 
> Same thing for iqtx and iqrx (beware of copy + tx/rx mismatch).

Oops, this will need to be sent as a relative fixup as I've applied these
two patches to net-next, sorry Francois.


Re: [PATCH v3 net-next 2/2] wan: dscc4: convert to plain DMA API

2017-08-11 Thread Francois Romieu
Alexey Khoroshilov  :
[...]
> diff --git a/drivers/net/wan/dscc4.c b/drivers/net/wan/dscc4.c
> index 8480dbf..a043fb1 100644
> --- a/drivers/net/wan/dscc4.c
> +++ b/drivers/net/wan/dscc4.c
[...]
> @@ -506,8 +506,9 @@ static void dscc4_release_ring(struct dscc4_dev_priv 
> *dpriv)
>   skbuff = dpriv->rx_skbuff;
>   for (i = 0; i < RX_RING_SIZE; i++) {
>   if (*skbuff) {
> - pci_unmap_single(pdev, le32_to_cpu(rx_fd->data),
> - RX_MAX(HDLC_MAX_MRU), PCI_DMA_FROMDEVICE);
> + dma_unmap_single(d, le32_to_cpu(rx_fd->data),
> +  RX_MAX(HDLC_MAX_MRU),
> +  DMA_FROM_DEVICE);

 RX_MAX(HDLC_MAX_MRU), DMA_FROM_DEVICE);

[...]
> @@ -664,8 +665,8 @@ static inline void dscc4_rx_skb(struct dscc4_dev_priv 
> *dpriv,
>   goto refill;
>   }
>   pkt_len = TO_SIZE(le32_to_cpu(rx_fd->state2));
> - pci_unmap_single(pdev, le32_to_cpu(rx_fd->data),
> -  RX_MAX(HDLC_MAX_MRU), PCI_DMA_FROMDEVICE);
> + dma_unmap_single(d, le32_to_cpu(rx_fd->data),
> +  RX_MAX(HDLC_MAX_MRU), DMA_FROM_DEVICE);

dma_unmap_single(d, le32_to_cpu(rx_fd->data), RX_MAX(HDLC_MAX_MRU),
 DMA_FROM_DEVICE);

[...]
> @@ -782,8 +783,8 @@ static int dscc4_init_one(struct pci_dev *pdev, const 
> struct pci_device_id *ent)
>  
>   rc = -ENOMEM;
>  
> - priv->iqcfg = (__le32 *) pci_alloc_consistent(pdev,
> - IRQ_RING_SIZE*sizeof(__le32), >iqcfg_dma);
> + priv->iqcfg = (__le32 *)dma_alloc_coherent(>dev,
> + IRQ_RING_SIZE*sizeof(__le32), >iqcfg_dma, GFP_KERNEL);

- the cast can go away
- please replace >dev with a local variable

priv->iqcfg = dma_alloc_coherent(d, IRQ_RING_SIZE*sizeof(__le32),
 >iqcfg_dma, GFP_KERNEL);

Same thing for iqtx and iqrx (beware of copy + tx/rx mismatch).

Thanks.

-- 
Ueimor


Re: [PATCH v3 net-next 2/2] wan: dscc4: convert to plain DMA API

2017-08-11 Thread David Miller
From: Alexey Khoroshilov 
Date: Fri, 11 Aug 2017 01:55:21 +0300

> Make use the dma_*() interfaces rather than the pci_*() interfaces.
> 
> Signed-off-by: Alexey Khoroshilov 

Applied.


[PATCH v3 net-next 2/2] wan: dscc4: convert to plain DMA API

2017-08-10 Thread Alexey Khoroshilov
Make use the dma_*() interfaces rather than the pci_*() interfaces.

Signed-off-by: Alexey Khoroshilov 
---
 drivers/net/wan/dscc4.c | 96 ++---
 1 file changed, 51 insertions(+), 45 deletions(-)

diff --git a/drivers/net/wan/dscc4.c b/drivers/net/wan/dscc4.c
index 8480dbf..a043fb1 100644
--- a/drivers/net/wan/dscc4.c
+++ b/drivers/net/wan/dscc4.c
@@ -483,20 +483,20 @@ static void dscc4_tx_print(struct net_device *dev,
 
 static void dscc4_release_ring(struct dscc4_dev_priv *dpriv)
 {
-   struct pci_dev *pdev = dpriv->pci_priv->pdev;
+   struct device *d = >pci_priv->pdev->dev;
struct TxFD *tx_fd = dpriv->tx_fd;
struct RxFD *rx_fd = dpriv->rx_fd;
struct sk_buff **skbuff;
int i;
 
-   pci_free_consistent(pdev, TX_TOTAL_SIZE, tx_fd, dpriv->tx_fd_dma);
-   pci_free_consistent(pdev, RX_TOTAL_SIZE, rx_fd, dpriv->rx_fd_dma);
+   dma_free_coherent(d, TX_TOTAL_SIZE, tx_fd, dpriv->tx_fd_dma);
+   dma_free_coherent(d, RX_TOTAL_SIZE, rx_fd, dpriv->rx_fd_dma);
 
skbuff = dpriv->tx_skbuff;
for (i = 0; i < TX_RING_SIZE; i++) {
if (*skbuff) {
-   pci_unmap_single(pdev, le32_to_cpu(tx_fd->data),
-   (*skbuff)->len, PCI_DMA_TODEVICE);
+   dma_unmap_single(d, le32_to_cpu(tx_fd->data),
+(*skbuff)->len, DMA_TO_DEVICE);
dev_kfree_skb(*skbuff);
}
skbuff++;
@@ -506,8 +506,9 @@ static void dscc4_release_ring(struct dscc4_dev_priv *dpriv)
skbuff = dpriv->rx_skbuff;
for (i = 0; i < RX_RING_SIZE; i++) {
if (*skbuff) {
-   pci_unmap_single(pdev, le32_to_cpu(rx_fd->data),
-   RX_MAX(HDLC_MAX_MRU), PCI_DMA_FROMDEVICE);
+   dma_unmap_single(d, le32_to_cpu(rx_fd->data),
+RX_MAX(HDLC_MAX_MRU),
+DMA_FROM_DEVICE);
dev_kfree_skb(*skbuff);
}
skbuff++;
@@ -519,7 +520,7 @@ static inline int try_get_rx_skb(struct dscc4_dev_priv 
*dpriv,
 struct net_device *dev)
 {
unsigned int dirty = dpriv->rx_dirty%RX_RING_SIZE;
-   struct pci_dev *pdev = dpriv->pci_priv->pdev;
+   struct device *d = >pci_priv->pdev->dev;
struct RxFD *rx_fd = dpriv->rx_fd + dirty;
const int len = RX_MAX(HDLC_MAX_MRU);
struct sk_buff *skb;
@@ -530,8 +531,8 @@ static inline int try_get_rx_skb(struct dscc4_dev_priv 
*dpriv,
goto err_out;
 
skb->protocol = hdlc_type_trans(skb, dev);
-   addr = pci_map_single(pdev, skb->data, len, PCI_DMA_FROMDEVICE);
-   if (pci_dma_mapping_error(pdev, addr))
+   addr = dma_map_single(d, skb->data, len, DMA_FROM_DEVICE);
+   if (dma_mapping_error(d, addr))
goto err_free_skb;
 
dpriv->rx_skbuff[dirty] = skb;
@@ -654,7 +655,7 @@ static inline void dscc4_rx_skb(struct dscc4_dev_priv 
*dpriv,
struct net_device *dev)
 {
struct RxFD *rx_fd = dpriv->rx_fd + dpriv->rx_current%RX_RING_SIZE;
-   struct pci_dev *pdev = dpriv->pci_priv->pdev;
+   struct device *d = >pci_priv->pdev->dev;
struct sk_buff *skb;
int pkt_len;
 
@@ -664,8 +665,8 @@ static inline void dscc4_rx_skb(struct dscc4_dev_priv 
*dpriv,
goto refill;
}
pkt_len = TO_SIZE(le32_to_cpu(rx_fd->state2));
-   pci_unmap_single(pdev, le32_to_cpu(rx_fd->data),
-RX_MAX(HDLC_MAX_MRU), PCI_DMA_FROMDEVICE);
+   dma_unmap_single(d, le32_to_cpu(rx_fd->data),
+RX_MAX(HDLC_MAX_MRU), DMA_FROM_DEVICE);
if ((skb->data[--pkt_len] & FrameOk) == FrameOk) {
dev->stats.rx_packets++;
dev->stats.rx_bytes += pkt_len;
@@ -782,8 +783,8 @@ static int dscc4_init_one(struct pci_dev *pdev, const 
struct pci_device_id *ent)
 
rc = -ENOMEM;
 
-   priv->iqcfg = (__le32 *) pci_alloc_consistent(pdev,
-   IRQ_RING_SIZE*sizeof(__le32), >iqcfg_dma);
+   priv->iqcfg = (__le32 *)dma_alloc_coherent(>dev,
+   IRQ_RING_SIZE*sizeof(__le32), >iqcfg_dma, GFP_KERNEL);
if (!priv->iqcfg)
goto err_free_irq_5;
writel(priv->iqcfg_dma, ioaddr + IQCFG);
@@ -794,16 +795,18 @@ static int dscc4_init_one(struct pci_dev *pdev, const 
struct pci_device_id *ent)
 */
for (i = 0; i < dev_per_card; i++) {
dpriv = priv->root + i;
-   dpriv->iqtx = (__le32 *) pci_alloc_consistent(pdev,
-   IRQ_RING_SIZE*sizeof(u32), >iqtx_dma);
+   dpriv->iqtx = (__le32 *)dma_alloc_coherent(>dev,
+   IRQ_RING_SIZE*sizeof(u32), >iqtx_dma,
+