aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/pending-5.15/737-02-net-ethernet-mtk_eth_soc-move-MAX_DEVS-in-mtk_soc_da.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic/pending-5.15/737-02-net-ethernet-mtk_eth_soc-move-MAX_DEVS-in-mtk_soc_da.patch')
-rw-r--r--target/linux/generic/pending-5.15/737-02-net-ethernet-mtk_eth_soc-move-MAX_DEVS-in-mtk_soc_da.patch181
1 files changed, 181 insertions, 0 deletions
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
new file mode 100644
index 0000000000..a8debc41bf
--- /dev/null
+++ b/target/linux/generic/pending-5.15/737-02-net-ethernet-mtk_eth_soc-move-MAX_DEVS-in-mtk_soc_da.patch
@@ -0,0 +1,181 @@
+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
+@@ -3989,7 +3989,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]);
+ }
+
+@@ -4432,7 +4435,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;
+@@ -4477,6 +4485,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);
+@@ -4662,7 +4682,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;
+
+@@ -4739,6 +4759,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),
+@@ -4757,6 +4778,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),
+@@ -4778,6 +4800,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),
+@@ -4797,6 +4820,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),
+@@ -4816,6 +4840,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),
+@@ -4837,6 +4862,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),
+@@ -4856,6 +4882,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 = {
+@@ -4874,6 +4901,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;