mediatek/ramips: unify ethernet driver fixes and add performance optimizations
[openwrt/openwrt.git] / target / linux / mediatek / patches-5.4 / 0999-hnat.patch
index 26e4a0a54deac61f92af84bf6c2154b1aff3b4c1..30294e02a1293848e3ddfd6d1849a438116b3754 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/ethernet/mediatek/Kconfig
 +++ b/drivers/net/ethernet/mediatek/Kconfig
-@@ -14,4 +14,8 @@ config NET_MEDIATEK_SOC
+@@ -15,4 +15,8 @@ config NET_MEDIATEK_SOC
          This driver supports the gigabit ethernet MACs in the
          MediaTek SoC family.
  
  
  #include "mtk_eth_soc.h"
  
-@@ -1307,8 +1309,16 @@ static int mtk_poll_rx(struct napi_struc
+@@ -1319,8 +1321,16 @@ static int mtk_poll_rx(struct napi_struc
                    (trxd.rxd2 & RX_DMA_VTAG))
                        __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
                                               RX_DMA_VID(trxd.rxd3));
 +              }
 +#endif
  
+ skip_rx:
                ring->data[idx] = new_data;
-               rxd->rxd1 = (unsigned int)dma_addr;
-@@ -2225,6 +2235,9 @@ static int mtk_open(struct net_device *d
+@@ -2250,6 +2260,9 @@ static int mtk_open(struct net_device *d
                mtk_tx_irq_enable(eth, MTK_TX_DONE_INT);
                mtk_rx_irq_enable(eth, MTK_RX_DONE_INT);
                refcount_set(&eth->dma_refcnt, 1);
        }
        else
                refcount_inc(&eth->dma_refcnt);
-@@ -2283,6 +2296,9 @@ static int mtk_stop(struct net_device *d
+@@ -2311,6 +2324,9 @@ static int mtk_stop(struct net_device *d
  
        mtk_dma_free(eth);
  
        return 0;
  }
  
-@@ -2742,6 +2758,27 @@ static int mtk_set_rxnfc(struct net_devi
+@@ -2824,6 +2840,27 @@ static int mtk_set_rxnfc(struct net_devi
        return ret;
  }
  
  static const struct ethtool_ops mtk_ethtool_ops = {
        .get_link_ksettings     = mtk_get_link_ksettings,
        .set_link_ksettings     = mtk_set_link_ksettings,
-@@ -2773,6 +2810,9 @@ static const struct net_device_ops mtk_n
+@@ -2855,6 +2892,9 @@ static const struct net_device_ops mtk_n
  #ifdef CONFIG_NET_POLL_CONTROLLER
        .ndo_poll_controller    = mtk_poll_controller,
  #endif
  };
  
  static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
-@@ -3108,6 +3148,7 @@ static const struct mtk_soc_data mt7622_
+@@ -3197,6 +3237,7 @@ static const struct mtk_soc_data mt7622_
        .hw_features = MTK_HW_FEATURES,
        .required_clks = MT7622_CLKS_BITMAP,
        .required_pctl = false,
  static const struct mtk_soc_data mt7623_data = {
 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-@@ -779,6 +779,13 @@ enum mkt_eth_capabilities {
+@@ -787,6 +787,13 @@ enum mkt_eth_capabilities {
                      MTK_MUX_U3_GMAC2_TO_QPHY | \
                      MTK_MUX_GMAC12_TO_GEPHY_SGMII | MTK_QDMA)
  
  /* struct mtk_eth_data -      This is the structure holding all differences
   *                            among various plaforms
   * @ana_rgc3:                   The offset for register ANA_RGC3 related to
-@@ -796,6 +803,7 @@ struct mtk_soc_data {
+@@ -804,6 +811,7 @@ struct mtk_soc_data {
        u32             required_clks;
        bool            required_pctl;
        netdev_features_t hw_features;
  };
  
  /* currently no SoC has more than 2 macs */
-@@ -821,6 +829,23 @@ struct mtk_sgmii {
+@@ -829,6 +837,23 @@ struct mtk_sgmii {
        u32             ana_rgc3;
  };
  
  /* struct mtk_eth -   This is the main datasructure for holding the state
   *                    of the driver
   * @dev:              The device pointer
-@@ -894,6 +919,16 @@ struct mtk_eth {
+@@ -914,6 +939,16 @@ struct mtk_eth {
        u32                             tx_int_status_reg;
        u32                             rx_dma_l4_valid;
        int                             ip_align;
  };
  
  /* struct mtk_mac -   the structure that holds the info about the MACs of the
-@@ -926,6 +961,7 @@ void mtk_stats_update_mac(struct mtk_mac
+@@ -946,6 +981,7 @@ void mtk_stats_update_mac(struct mtk_mac
  
  void mtk_w32(struct mtk_eth *eth, u32 val, unsigned reg);
  u32 mtk_r32(struct mtk_eth *eth, unsigned reg);
  
  int mtk_sgmii_init(struct mtk_sgmii *ss, struct device_node *np,
                   u32 ana_rgc3);
-@@ -938,4 +974,13 @@ int mtk_gmac_sgmii_path_setup(struct mtk
+@@ -958,4 +994,13 @@ int mtk_gmac_sgmii_path_setup(struct mtk
  int mtk_gmac_gephy_path_setup(struct mtk_eth *eth, int mac_id);
  int mtk_gmac_rgmii_path_setup(struct mtk_eth *eth, int mac_id);