2828#include "intel_fpga_eth_main.h"
2929#include "intel_fpga_ftile_driver.h"
3030#include "intel_fpga_etile_driver.h"
31+ #include "intel_fpga_gts_driver.h"
3132#include "intel_fpga_eth_hssi_itf.h"
3233#include "intel_fpga_eth_tile_ops.h"
3334#include <linux/sched.h>
@@ -325,9 +326,11 @@ static int xtile_init_rx_buffer(struct intel_fpga_xtile_eth_private *priv,
325326 struct altera_dma_buffer * rxbuffer ,
326327 int len )
327328{
328- rxbuffer -> skb = netdev_alloc_skb_ip_align (priv -> dev , len );
329- if (!rxbuffer -> skb )
330- return - ENOMEM ;
329+ rxbuffer -> skb = netdev_alloc_skb (priv -> dev , len );
330+ skb_reserve (rxbuffer -> skb , SKB_DMA_REALIGN );
331+
332+ if (!rxbuffer -> skb )
333+ return - ENOMEM ;
331334
332335 rxbuffer -> dma_addr = dma_map_single (priv -> device ,
333336 rxbuffer -> skb -> data ,
@@ -342,8 +345,6 @@ static int xtile_init_rx_buffer(struct intel_fpga_xtile_eth_private *priv,
342345 return - EINVAL ;
343346 }
344347
345- /* align the address on 4 byte boundary */
346- rxbuffer -> dma_addr &= (dma_addr_t )~3 ;
347348 rxbuffer -> len = len ;
348349
349350 return 0 ;
@@ -360,7 +361,8 @@ static void xtile_free_rx_buffer(struct intel_fpga_xtile_eth_private *priv,
360361 dma_unmap_single (priv -> device , dma_addr ,
361362 rxbuffer -> len ,
362363 DMA_FROM_DEVICE );
363- dev_kfree_skb_any (skb );
364+
365+ dev_consume_skb_any (skb );
364366 rxbuffer -> skb = NULL ;
365367 rxbuffer -> dma_addr = 0 ;
366368 }
@@ -381,7 +383,7 @@ static void xtile_free_tx_buffer(struct intel_fpga_xtile_eth_private *priv,
381383 buffer -> dma_addr = 0 ;
382384 }
383385 if (buffer -> skb ) {
384- dev_kfree_skb_any (buffer -> skb );
386+ dev_consume_skb_any (buffer -> skb );
385387 buffer -> skb = NULL ;
386388 }
387389}
@@ -1101,6 +1103,9 @@ static int xtile_open(struct net_device *dev)
11011103
11021104 /* clear the MAC layer statistics to start afresh */
11031105 xtile_clear_mac_statistics (pdev , hssi_port );
1106+
1107+ /* we need to clear the dev stats so that the ifconfig on interface shouldn't show old data */
1108+ memset (& dev -> stats , 0 , sizeof (dev -> stats ));
11041109
11051110 for (queue = 0 ; queue < priv -> num_channels ; queue ++ ) {
11061111 priv -> spec_ops -> dma_ops -> quiese_pref (& priv -> dma_info [queue ].dma_priv );
@@ -1322,6 +1327,8 @@ static int xtile_start_xmit(struct sk_buff *skb, struct net_device *dev)
13221327 16 , 1 , skb -> data , skb -> len , true);
13231328 }
13241329
1330+ skb_reserve (skb , SKB_DMA_REALIGN );
1331+
13251332 /* Map the first skb fragment */
13261333 entry = priv -> dma_info [queue ].dma_priv .tx_prod % txsize ;
13271334 buffer = & priv -> dma_info [queue ].dma_priv .tx_ring [entry ];
@@ -1740,8 +1747,6 @@ static int intel_fpga_xtile_probe(struct platform_device *pdev)
17401747 int ret = - ENODEV ;
17411748 struct device_node * np , * dmanp ;
17421749 struct net_device * ndev ;
1743- //struct resource *rx_fifo;
1744- //struct resource *tx_fifo;
17451750 struct device_node * dev_hssi ;
17461751 u8 macaddr [ETH_ALEN ];
17471752 struct fwnode_handle * fixed_node ;
@@ -1752,7 +1757,9 @@ static int intel_fpga_xtile_probe(struct platform_device *pdev)
17521757 struct platform_device * pdev_tod ;
17531758 char dma_nodename [6 ];
17541759 int queue = 0 ;
1760+ const char * if_name = NULL ;
17551761 char irq_name [12 ];
1762+ struct set_mtu_data mtu ;
17561763
17571764 np = pdev -> dev .of_node ;
17581765
@@ -1983,7 +1990,11 @@ static int intel_fpga_xtile_probe(struct platform_device *pdev)
19831990 & priv -> dev -> max_mtu )) {
19841991 dev_warn (& pdev -> dev , "Not able to get max-frame-size. Defaulting max_mtu to %d\n" ,
19851992 priv -> dev -> max_mtu );
1986- }
1993+ } else {
1994+ mtu .port = priv -> hssi_port ;
1995+ mtu .max_tx_frame_size = mtu .max_rx_frame_size = priv -> dev -> max_mtu ;
1996+ hssiss_set_mtu (priv -> pdev_hssi , SAL_SET_MTU , & mtu );
1997+ }
19871998
19881999 /* The DMA buffer size already accounts for an alignment bias
19892000 * to avoid unaligned access exceptions for the NIOS processor,
@@ -2104,20 +2115,31 @@ static int intel_fpga_xtile_probe(struct platform_device *pdev)
21042115
21052116 priv -> autoneg = true;
21062117
2107- /* read the fixed link properties*/
2108- fixed_node = fwnode_get_named_child_node ( pdev -> dev . fwnode , "fixed-link" );
2109- if (fixed_node ) {
2110- fwnode_property_read_u32 ( fixed_node , "speed" , & priv -> link_speed );
2118+ fixed_node = fwnode_get_named_child_node ( pdev -> dev . fwnode , "fixed-link" );
2119+ if ( fixed_node ) {
2120+ fwnode_property_read_u32 (fixed_node , "speed" , & priv -> link_speed );
2121+ /* read the fixed link properties*/
21112122 priv -> duplex = DUPLEX_FULL ;
21122123 priv -> autoneg = false;
21132124
21142125 dev_info (& pdev -> dev , "\tfixed link speed:%d full duplex:%d\n" ,
21152126 priv -> link_speed , priv -> duplex );
2127+
2128+ fwnode_handle_put (fixed_node );
21162129 } else {
21172130 dev_err (& pdev -> dev , "fixed link property undefined\n" );
2131+ ret = - ENODEV ;
21182132 goto err_free_netdev ;
21192133 }
21202134
2135+ ret = of_property_read_string (pdev -> dev .of_node , "if_name" ,
2136+ & if_name );
2137+
2138+ if (if_name ) {
2139+ memset (& ndev -> name , 0 , 16 );
2140+ memcpy (ndev -> name , if_name , strlen (if_name ));
2141+ }
2142+
21212143 ret = register_netdev (ndev );
21222144 if (ret ) {
21232145 dev_err (& pdev -> dev , "failed to register ethernet device\n" );
@@ -2163,7 +2185,7 @@ static void intel_fpga_xtile_remove(struct platform_device *pdev)
21632185
21642186 /* perform the proper cleaning up */
21652187 xtile_shutdown (ndev );
2166-
2188+ kfree ( priv -> dma_info );
21672189 platform_set_drvdata (pdev , NULL );
21682190 unregister_netdev (ndev );
21692191 free_netdev (ndev );
@@ -2230,14 +2252,34 @@ static const struct xtile_spec_ops ftile_data = {
22302252 },
22312253};
22322254
2255+ static const struct xtile_spec_ops gts_data = {
2256+ .dma_ops = & altera_dtype_prefetcher ,
2257+ .tile = {
2258+ .reset = gts_ehip_reset ,
2259+ .deassert_reset = gts_ehip_deassert_reset ,
2260+ .init = gts_init ,
2261+ .uninit = gts_uninit ,
2262+ .start = gts_start ,
2263+ .stop = gts_stop ,
2264+ .run_check = gts_run_check ,
2265+ .update_mac_addr = gts_update_mac_addr ,
2266+ .link_fault_status = gts_get_link_fault_status ,
2267+ .reg_ethtool_ops =
2268+ intel_fpga_gts_set_ethtool_ops ,
2269+ .check_dts_param = gts_check_dts_param ,
2270+ },
2271+ };
2272+
22332273static const struct of_device_id intel_fpga_xtile_ll_ids [] = {
22342274 {.compatible = "altr,hssi-etile-1.0" ,
22352275 .data = & etile_data ,
22362276 },
22372277 {.compatible = "altr,hssi-ftile-1.0" ,
22382278 .data = & ftile_data ,
22392279 },
2240-
2280+ {.compatible = "altr,msgdma-gts-1.0" ,
2281+ .data = & gts_data ,
2282+ },
22412283};
22422284
22432285MODULE_DEVICE_TABLE (of , intel_fpga_xtile_ll_ids );
0 commit comments