123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- From 5af2b2dc4d6ba0ff7696e79f18e5b2bf862194eb Mon Sep 17 00:00:00 2001
- From: Lorenzo Bianconi <[email protected]>
- 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 <[email protected]>
- Signed-off-by: Daniel Golle <[email protected]>
- ---
- 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
- @@ -4026,7 +4026,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]);
- }
-
- @@ -4479,7 +4482,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;
- @@ -4524,6 +4532,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(ð->page_lock);
- spin_lock_init(ð->tx_irq_lock);
- spin_lock_init(ð->rx_irq_lock);
- @@ -4709,7 +4729,7 @@ static int mtk_probe(struct platform_dev
- goto err_deinit_ppe;
- }
-
- - for (i = 0; i < MTK_MAX_DEVS; i++) {
- + for (i = 0; i < eth->soc->num_devs; i++) {
- if (!eth->netdev[i])
- continue;
-
- @@ -4785,6 +4805,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),
- @@ -4803,6 +4824,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),
- @@ -4824,6 +4846,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),
- @@ -4843,6 +4866,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),
- @@ -4862,6 +4886,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),
- @@ -4883,6 +4908,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),
- @@ -4902,6 +4928,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 = {
- @@ -4920,6 +4947,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
- @@ -1021,6 +1021,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.
- @@ -1039,6 +1040,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;
- @@ -1054,9 +1056,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
- @@ -1111,14 +1110,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;
|