@@ -201,15 +201,15 @@ static void ravb_ring_free(struct net_device *ndev, int q)
201
201
if (priv -> rx_ring [q ]) {
202
202
ring_size = sizeof (struct ravb_ex_rx_desc ) *
203
203
(priv -> num_rx_ring [q ] + 1 );
204
- dma_free_coherent (NULL , ring_size , priv -> rx_ring [q ],
204
+ dma_free_coherent (ndev -> dev . parent , ring_size , priv -> rx_ring [q ],
205
205
priv -> rx_desc_dma [q ]);
206
206
priv -> rx_ring [q ] = NULL ;
207
207
}
208
208
209
209
if (priv -> tx_ring [q ]) {
210
210
ring_size = sizeof (struct ravb_tx_desc ) *
211
211
(priv -> num_tx_ring [q ] * NUM_TX_DESC + 1 );
212
- dma_free_coherent (NULL , ring_size , priv -> tx_ring [q ],
212
+ dma_free_coherent (ndev -> dev . parent , ring_size , priv -> tx_ring [q ],
213
213
priv -> tx_desc_dma [q ]);
214
214
priv -> tx_ring [q ] = NULL ;
215
215
}
@@ -240,13 +240,13 @@ static void ravb_ring_format(struct net_device *ndev, int q)
240
240
rx_desc = & priv -> rx_ring [q ][i ];
241
241
/* The size of the buffer should be on 16-byte boundary. */
242
242
rx_desc -> ds_cc = cpu_to_le16 (ALIGN (PKT_BUF_SZ , 16 ));
243
- dma_addr = dma_map_single (& ndev -> dev , priv -> rx_skb [q ][i ]-> data ,
243
+ dma_addr = dma_map_single (ndev -> dev . parent , priv -> rx_skb [q ][i ]-> data ,
244
244
ALIGN (PKT_BUF_SZ , 16 ),
245
245
DMA_FROM_DEVICE );
246
246
/* We just set the data size to 0 for a failed mapping which
247
247
* should prevent DMA from happening...
248
248
*/
249
- if (dma_mapping_error (& ndev -> dev , dma_addr ))
249
+ if (dma_mapping_error (ndev -> dev . parent , dma_addr ))
250
250
rx_desc -> ds_cc = cpu_to_le16 (0 );
251
251
rx_desc -> dptr = cpu_to_le32 (dma_addr );
252
252
rx_desc -> die_dt = DT_FEMPTY ;
@@ -309,7 +309,7 @@ static int ravb_ring_init(struct net_device *ndev, int q)
309
309
310
310
/* Allocate all RX descriptors. */
311
311
ring_size = sizeof (struct ravb_ex_rx_desc ) * (priv -> num_rx_ring [q ] + 1 );
312
- priv -> rx_ring [q ] = dma_alloc_coherent (NULL , ring_size ,
312
+ priv -> rx_ring [q ] = dma_alloc_coherent (ndev -> dev . parent , ring_size ,
313
313
& priv -> rx_desc_dma [q ],
314
314
GFP_KERNEL );
315
315
if (!priv -> rx_ring [q ])
@@ -320,7 +320,7 @@ static int ravb_ring_init(struct net_device *ndev, int q)
320
320
/* Allocate all TX descriptors. */
321
321
ring_size = sizeof (struct ravb_tx_desc ) *
322
322
(priv -> num_tx_ring [q ] * NUM_TX_DESC + 1 );
323
- priv -> tx_ring [q ] = dma_alloc_coherent (NULL , ring_size ,
323
+ priv -> tx_ring [q ] = dma_alloc_coherent (ndev -> dev . parent , ring_size ,
324
324
& priv -> tx_desc_dma [q ],
325
325
GFP_KERNEL );
326
326
if (!priv -> tx_ring [q ])
@@ -443,7 +443,7 @@ static int ravb_tx_free(struct net_device *ndev, int q)
443
443
size = le16_to_cpu (desc -> ds_tagl ) & TX_DS ;
444
444
/* Free the original skb. */
445
445
if (priv -> tx_skb [q ][entry / NUM_TX_DESC ]) {
446
- dma_unmap_single (& ndev -> dev , le32_to_cpu (desc -> dptr ),
446
+ dma_unmap_single (ndev -> dev . parent , le32_to_cpu (desc -> dptr ),
447
447
size , DMA_TO_DEVICE );
448
448
/* Last packet descriptor? */
449
449
if (entry % NUM_TX_DESC == NUM_TX_DESC - 1 ) {
@@ -546,7 +546,7 @@ static bool ravb_rx(struct net_device *ndev, int *quota, int q)
546
546
547
547
skb = priv -> rx_skb [q ][entry ];
548
548
priv -> rx_skb [q ][entry ] = NULL ;
549
- dma_unmap_single (& ndev -> dev , le32_to_cpu (desc -> dptr ),
549
+ dma_unmap_single (ndev -> dev . parent , le32_to_cpu (desc -> dptr ),
550
550
ALIGN (PKT_BUF_SZ , 16 ),
551
551
DMA_FROM_DEVICE );
552
552
get_ts &= (q == RAVB_NC ) ?
@@ -586,14 +586,14 @@ static bool ravb_rx(struct net_device *ndev, int *quota, int q)
586
586
if (!skb )
587
587
break ; /* Better luck next round. */
588
588
ravb_set_buffer_align (skb );
589
- dma_addr = dma_map_single (& ndev -> dev , skb -> data ,
589
+ dma_addr = dma_map_single (ndev -> dev . parent , skb -> data ,
590
590
le16_to_cpu (desc -> ds_cc ),
591
591
DMA_FROM_DEVICE );
592
592
skb_checksum_none_assert (skb );
593
593
/* We just set the data size to 0 for a failed mapping
594
594
* which should prevent DMA from happening...
595
595
*/
596
- if (dma_mapping_error (& ndev -> dev , dma_addr ))
596
+ if (dma_mapping_error (ndev -> dev . parent , dma_addr ))
597
597
desc -> ds_cc = cpu_to_le16 (0 );
598
598
desc -> dptr = cpu_to_le32 (dma_addr );
599
599
priv -> rx_skb [q ][entry ] = skb ;
@@ -889,6 +889,22 @@ static int ravb_phy_init(struct net_device *ndev)
889
889
return - ENOENT ;
890
890
}
891
891
892
+ /* This driver only support 10/100Mbit speeds on Gen3
893
+ * at this time.
894
+ */
895
+ if (priv -> chip_id == RCAR_GEN3 ) {
896
+ int err ;
897
+
898
+ err = phy_set_max_speed (phydev , SPEED_100 );
899
+ if (err ) {
900
+ netdev_err (ndev , "failed to limit PHY to 100Mbit/s\n" );
901
+ phy_disconnect (phydev );
902
+ return err ;
903
+ }
904
+
905
+ netdev_info (ndev , "limited PHY to 100Mbit/s\n" );
906
+ }
907
+
892
908
netdev_info (ndev , "attached PHY %d (IRQ %d) to driver %s\n" ,
893
909
phydev -> addr , phydev -> irq , phydev -> drv -> name );
894
910
@@ -1197,6 +1213,15 @@ static int ravb_open(struct net_device *ndev)
1197
1213
goto out_napi_off ;
1198
1214
}
1199
1215
1216
+ if (priv -> chip_id == RCAR_GEN3 ) {
1217
+ error = request_irq (priv -> emac_irq , ravb_interrupt ,
1218
+ IRQF_SHARED , ndev -> name , ndev );
1219
+ if (error ) {
1220
+ netdev_err (ndev , "cannot request IRQ\n" );
1221
+ goto out_free_irq ;
1222
+ }
1223
+ }
1224
+
1200
1225
/* Device init */
1201
1226
error = ravb_dmac_init (ndev );
1202
1227
if (error )
@@ -1220,6 +1245,7 @@ static int ravb_open(struct net_device *ndev)
1220
1245
ravb_ptp_stop (ndev );
1221
1246
out_free_irq :
1222
1247
free_irq (ndev -> irq , ndev );
1248
+ free_irq (priv -> emac_irq , ndev );
1223
1249
out_napi_off :
1224
1250
napi_disable (& priv -> napi [RAVB_NC ]);
1225
1251
napi_disable (& priv -> napi [RAVB_BE ]);
@@ -1300,8 +1326,8 @@ static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)
1300
1326
entry / NUM_TX_DESC * DPTR_ALIGN ;
1301
1327
len = PTR_ALIGN (skb -> data , DPTR_ALIGN ) - skb -> data ;
1302
1328
memcpy (buffer , skb -> data , len );
1303
- dma_addr = dma_map_single (& ndev -> dev , buffer , len , DMA_TO_DEVICE );
1304
- if (dma_mapping_error (& ndev -> dev , dma_addr ))
1329
+ dma_addr = dma_map_single (ndev -> dev . parent , buffer , len , DMA_TO_DEVICE );
1330
+ if (dma_mapping_error (ndev -> dev . parent , dma_addr ))
1305
1331
goto drop ;
1306
1332
1307
1333
desc = & priv -> tx_ring [q ][entry ];
@@ -1310,8 +1336,8 @@ static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)
1310
1336
1311
1337
buffer = skb -> data + len ;
1312
1338
len = skb -> len - len ;
1313
- dma_addr = dma_map_single (& ndev -> dev , buffer , len , DMA_TO_DEVICE );
1314
- if (dma_mapping_error (& ndev -> dev , dma_addr ))
1339
+ dma_addr = dma_map_single (ndev -> dev . parent , buffer , len , DMA_TO_DEVICE );
1340
+ if (dma_mapping_error (ndev -> dev . parent , dma_addr ))
1315
1341
goto unmap ;
1316
1342
1317
1343
desc ++ ;
@@ -1323,7 +1349,7 @@ static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)
1323
1349
ts_skb = kmalloc (sizeof (* ts_skb ), GFP_ATOMIC );
1324
1350
if (!ts_skb ) {
1325
1351
desc -- ;
1326
- dma_unmap_single (& ndev -> dev , dma_addr , len ,
1352
+ dma_unmap_single (ndev -> dev . parent , dma_addr , len ,
1327
1353
DMA_TO_DEVICE );
1328
1354
goto unmap ;
1329
1355
}
@@ -1358,7 +1384,7 @@ static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)
1358
1384
return NETDEV_TX_OK ;
1359
1385
1360
1386
unmap :
1361
- dma_unmap_single (& ndev -> dev , le32_to_cpu (desc -> dptr ),
1387
+ dma_unmap_single (ndev -> dev . parent , le32_to_cpu (desc -> dptr ),
1362
1388
le16_to_cpu (desc -> ds_tagl ), DMA_TO_DEVICE );
1363
1389
drop :
1364
1390
dev_kfree_skb_any (skb );
@@ -1625,10 +1651,20 @@ static int ravb_mdio_release(struct ravb_private *priv)
1625
1651
return 0 ;
1626
1652
}
1627
1653
1654
+ static const struct of_device_id ravb_match_table [] = {
1655
+ { .compatible = "renesas,etheravb-r8a7790" , .data = (void * )RCAR_GEN2 },
1656
+ { .compatible = "renesas,etheravb-r8a7794" , .data = (void * )RCAR_GEN2 },
1657
+ { .compatible = "renesas,etheravb-r8a7795" , .data = (void * )RCAR_GEN3 },
1658
+ { }
1659
+ };
1660
+ MODULE_DEVICE_TABLE (of , ravb_match_table );
1661
+
1628
1662
static int ravb_probe (struct platform_device * pdev )
1629
1663
{
1630
1664
struct device_node * np = pdev -> dev .of_node ;
1665
+ const struct of_device_id * match ;
1631
1666
struct ravb_private * priv ;
1667
+ enum ravb_chip_id chip_id ;
1632
1668
struct net_device * ndev ;
1633
1669
int error , irq , q ;
1634
1670
struct resource * res ;
@@ -1657,7 +1693,14 @@ static int ravb_probe(struct platform_device *pdev)
1657
1693
/* The Ether-specific entries in the device structure. */
1658
1694
ndev -> base_addr = res -> start ;
1659
1695
ndev -> dma = -1 ;
1660
- irq = platform_get_irq (pdev , 0 );
1696
+
1697
+ match = of_match_device (of_match_ptr (ravb_match_table ), & pdev -> dev );
1698
+ chip_id = (enum ravb_chip_id )match -> data ;
1699
+
1700
+ if (chip_id == RCAR_GEN3 )
1701
+ irq = platform_get_irq_byname (pdev , "ch22" );
1702
+ else
1703
+ irq = platform_get_irq (pdev , 0 );
1661
1704
if (irq < 0 ) {
1662
1705
error = irq ;
1663
1706
goto out_release ;
@@ -1688,6 +1731,17 @@ static int ravb_probe(struct platform_device *pdev)
1688
1731
priv -> avb_link_active_low =
1689
1732
of_property_read_bool (np , "renesas,ether-link-active-low" );
1690
1733
1734
+ if (chip_id == RCAR_GEN3 ) {
1735
+ irq = platform_get_irq_byname (pdev , "ch24" );
1736
+ if (irq < 0 ) {
1737
+ error = irq ;
1738
+ goto out_release ;
1739
+ }
1740
+ priv -> emac_irq = irq ;
1741
+ }
1742
+
1743
+ priv -> chip_id = chip_id ;
1744
+
1691
1745
/* Set function */
1692
1746
ndev -> netdev_ops = & ravb_netdev_ops ;
1693
1747
ndev -> ethtool_ops = & ravb_ethtool_ops ;
@@ -1708,7 +1762,7 @@ static int ravb_probe(struct platform_device *pdev)
1708
1762
1709
1763
/* Allocate descriptor base address table */
1710
1764
priv -> desc_bat_size = sizeof (struct ravb_desc ) * DBAT_ENTRY_NUM ;
1711
- priv -> desc_bat = dma_alloc_coherent (NULL , priv -> desc_bat_size ,
1765
+ priv -> desc_bat = dma_alloc_coherent (ndev -> dev . parent , priv -> desc_bat_size ,
1712
1766
& priv -> desc_bat_dma , GFP_KERNEL );
1713
1767
if (!priv -> desc_bat ) {
1714
1768
dev_err (& ndev -> dev ,
@@ -1763,7 +1817,7 @@ static int ravb_probe(struct platform_device *pdev)
1763
1817
netif_napi_del (& priv -> napi [RAVB_BE ]);
1764
1818
ravb_mdio_release (priv );
1765
1819
out_dma_free :
1766
- dma_free_coherent (NULL , priv -> desc_bat_size , priv -> desc_bat ,
1820
+ dma_free_coherent (ndev -> dev . parent , priv -> desc_bat_size , priv -> desc_bat ,
1767
1821
priv -> desc_bat_dma );
1768
1822
out_release :
1769
1823
if (ndev )
@@ -1779,7 +1833,7 @@ static int ravb_remove(struct platform_device *pdev)
1779
1833
struct net_device * ndev = platform_get_drvdata (pdev );
1780
1834
struct ravb_private * priv = netdev_priv (ndev );
1781
1835
1782
- dma_free_coherent (NULL , priv -> desc_bat_size , priv -> desc_bat ,
1836
+ dma_free_coherent (ndev -> dev . parent , priv -> desc_bat_size , priv -> desc_bat ,
1783
1837
priv -> desc_bat_dma );
1784
1838
/* Set reset mode */
1785
1839
ravb_write (ndev , CCC_OPC_RESET , CCC );
@@ -1818,13 +1872,6 @@ static const struct dev_pm_ops ravb_dev_pm_ops = {
1818
1872
#define RAVB_PM_OPS NULL
1819
1873
#endif
1820
1874
1821
- static const struct of_device_id ravb_match_table [] = {
1822
- { .compatible = "renesas,etheravb-r8a7790" },
1823
- { .compatible = "renesas,etheravb-r8a7794" },
1824
- { }
1825
- };
1826
- MODULE_DEVICE_TABLE (of , ravb_match_table );
1827
-
1828
1875
static struct platform_driver ravb_driver = {
1829
1876
.probe = ravb_probe ,
1830
1877
.remove = ravb_remove ,
0 commit comments