generic: sync MediaTek Ethernet driver with upstream
[openwrt/openwrt.git] / target / linux / generic / pending-5.15 / 737-02-net-ethernet-mtk_eth_soc-move-MAX_DEVS-in-mtk_soc_da.patch
diff --git a/target/linux/generic/pending-5.15/737-02-net-ethernet-mtk_eth_soc-move-MAX_DEVS-in-mtk_soc_da.patch b/target/linux/generic/pending-5.15/737-02-net-ethernet-mtk_eth_soc-move-MAX_DEVS-in-mtk_soc_da.patch
deleted file mode 100644 (file)
index 837a8bf..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-From 5af2b2dc4d6ba0ff7696e79f18e5b2bf862194eb Mon Sep 17 00:00:00 2001
-From: Lorenzo Bianconi <lorenzo@kernel.org>
-Date: Tue, 7 Mar 2023 15:55:24 +0000
-Subject: [PATCH 2/7] net: ethernet: mtk_eth_soc: move MAX_DEVS in mtk_soc_data
-
-This is a preliminary patch to add MT7988 SoC support since it runs 3
-macs instead of 2.
-
-Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
-Signed-off-by: Daniel Golle <daniel@makrotopia.org>
----
- drivers/net/ethernet/mediatek/mtk_eth_soc.c | 34 +++++++++++++++++++--
- drivers/net/ethernet/mediatek/mtk_eth_soc.h | 11 +++----
- 2 files changed, 36 insertions(+), 9 deletions(-)
-
---- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
-@@ -3972,7 +3972,10 @@ static void mtk_sgmii_destroy(struct mtk
- {
-       int i;
--      for (i = 0; i < MTK_MAX_DEVS; i++)
-+      if (!eth->sgmii_pcs)
-+              return;
-+
-+      for (i = 0; i < eth->soc->num_devs; i++)
-               mtk_pcs_lynxi_destroy(eth->sgmii_pcs[i]);
- }
-@@ -4425,7 +4428,12 @@ static int mtk_sgmii_init(struct mtk_eth
-       u32 flags;
-       int i;
--      for (i = 0; i < MTK_MAX_DEVS; i++) {
-+      eth->sgmii_pcs = devm_kzalloc(eth->dev,
-+                                    sizeof(*eth->sgmii_pcs) *
-+                                    eth->soc->num_devs,
-+                                    GFP_KERNEL);
-+
-+      for (i = 0; i < eth->soc->num_devs; i++) {
-               np = of_parse_phandle(eth->dev->of_node, "mediatek,sgmiisys", i);
-               if (!np)
-                       break;
-@@ -4470,6 +4478,18 @@ static int mtk_probe(struct platform_dev
-       if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628))
-               eth->ip_align = NET_IP_ALIGN;
-+      eth->netdev = devm_kzalloc(eth->dev,
-+                                 sizeof(*eth->netdev) * eth->soc->num_devs,
-+                                 GFP_KERNEL);
-+      if (!eth->netdev)
-+              return -ENOMEM;
-+
-+      eth->mac = devm_kzalloc(eth->dev,
-+                              sizeof(*eth->mac) * eth->soc->num_devs,
-+                              GFP_KERNEL);
-+      if (!eth->mac)
-+              return -ENOMEM;
-+
-       spin_lock_init(&eth->page_lock);
-       spin_lock_init(&eth->tx_irq_lock);
-       spin_lock_init(&eth->rx_irq_lock);
-@@ -4655,7 +4675,7 @@ static int mtk_probe(struct platform_dev
-                       goto err_free_dev;
-       }
--      for (i = 0; i < MTK_MAX_DEVS; i++) {
-+      for (i = 0; i < eth->soc->num_devs; i++) {
-               if (!eth->netdev[i])
-                       continue;
-@@ -4732,6 +4752,7 @@ static const struct mtk_soc_data mt2701_
-       .hw_features = MTK_HW_FEATURES,
-       .required_clks = MT7623_CLKS_BITMAP,
-       .required_pctl = true,
-+      .num_devs = 2,
-       .txrx = {
-               .txd_size = sizeof(struct mtk_tx_dma),
-               .rxd_size = sizeof(struct mtk_rx_dma),
-@@ -4750,6 +4771,7 @@ static const struct mtk_soc_data mt7621_
-       .required_pctl = false,
-       .offload_version = 1,
-       .hash_offset = 2,
-+      .num_devs = 2,
-       .foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
-       .txrx = {
-               .txd_size = sizeof(struct mtk_tx_dma),
-@@ -4771,6 +4793,7 @@ static const struct mtk_soc_data mt7622_
-       .offload_version = 2,
-       .hash_offset = 2,
-       .has_accounting = true,
-+      .num_devs = 2,
-       .foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
-       .txrx = {
-               .txd_size = sizeof(struct mtk_tx_dma),
-@@ -4790,6 +4813,7 @@ static const struct mtk_soc_data mt7623_
-       .required_pctl = true,
-       .offload_version = 1,
-       .hash_offset = 2,
-+      .num_devs = 2,
-       .foe_entry_size = sizeof(struct mtk_foe_entry) - 16,
-       .txrx = {
-               .txd_size = sizeof(struct mtk_tx_dma),
-@@ -4809,6 +4833,7 @@ static const struct mtk_soc_data mt7629_
-       .required_clks = MT7629_CLKS_BITMAP,
-       .required_pctl = false,
-       .has_accounting = true,
-+      .num_devs = 2,
-       .txrx = {
-               .txd_size = sizeof(struct mtk_tx_dma),
-               .rxd_size = sizeof(struct mtk_rx_dma),
-@@ -4830,6 +4855,7 @@ static const struct mtk_soc_data mt7981_
-       .hash_offset = 4,
-       .foe_entry_size = sizeof(struct mtk_foe_entry),
-       .has_accounting = true,
-+      .num_devs = 2,
-       .txrx = {
-               .txd_size = sizeof(struct mtk_tx_dma_v2),
-               .rxd_size = sizeof(struct mtk_rx_dma_v2),
-@@ -4849,6 +4875,7 @@ static const struct mtk_soc_data mt7986_
-       .required_pctl = false,
-       .offload_version = 2,
-       .hash_offset = 4,
-+      .num_devs = 2,
-       .foe_entry_size = sizeof(struct mtk_foe_entry),
-       .has_accounting = true,
-       .txrx = {
-@@ -4867,6 +4894,7 @@ static const struct mtk_soc_data rt5350_
-       .hw_features = MTK_HW_FEATURES_MT7628,
-       .required_clks = MT7628_CLKS_BITMAP,
-       .required_pctl = false,
-+      .num_devs = 2,
-       .txrx = {
-               .txd_size = sizeof(struct mtk_tx_dma),
-               .rxd_size = sizeof(struct mtk_rx_dma),
---- a/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.h
-@@ -1018,6 +1018,7 @@ struct mtk_reg_map {
-  * @required_pctl             A bool value to show whether the SoC requires
-  *                            the extra setup for those pins used by GMAC.
-  * @hash_offset                       Flow table hash offset.
-+ * @num_devs                  SoC number of macs.
-  * @foe_entry_size            Foe table entry size.
-  * @has_accounting            Bool indicating support for accounting of
-  *                            offloaded flows.
-@@ -1036,6 +1037,7 @@ struct mtk_soc_data {
-       bool            required_pctl;
-       u8              offload_version;
-       u8              hash_offset;
-+      u8              num_devs;
-       u16             foe_entry_size;
-       netdev_features_t hw_features;
-       bool            has_accounting;
-@@ -1051,9 +1053,6 @@ struct mtk_soc_data {
- #define MTK_DMA_MONITOR_TIMEOUT               msecs_to_jiffies(1000)
--/* currently no SoC has more than 2 macs */
--#define MTK_MAX_DEVS                  2
--
- /* struct mtk_eth -   This is the main datasructure for holding the state
-  *                    of the driver
-  * @dev:              The device pointer
-@@ -1108,14 +1107,14 @@ struct mtk_eth {
-       spinlock_t                      tx_irq_lock;
-       spinlock_t                      rx_irq_lock;
-       struct net_device               dummy_dev;
--      struct net_device               *netdev[MTK_MAX_DEVS];
--      struct mtk_mac                  *mac[MTK_MAX_DEVS];
-+      struct net_device               **netdev;
-+      struct mtk_mac                  **mac;
-       int                             irq[3];
-       u32                             msg_enable;
-       unsigned long                   sysclk;
-       struct regmap                   *ethsys;
-       struct regmap                   *infra;
--      struct phylink_pcs              *sgmii_pcs[MTK_MAX_DEVS];
-+      struct phylink_pcs              **sgmii_pcs;
-       struct regmap                   *pctl;
-       bool                            hwlro;
-       refcount_t                      dma_refcnt;