Skip to content

Commit a3d954e

Browse files
Russell King (Oracle)opsiff
authored andcommitted
net: stmmac: remove support for lpi_intr_o
deepin inclusion from stable-v6.6.130 category: bugfix commit 14eb64d upstream. The dwmac databook for v3.74a states that lpi_intr_o is a sideband signal which should be used to ungate the application clock, and this signal is synchronous to the receive clock. The receive clock can run at 2.5, 25 or 125MHz depending on the media speed, and can stop under the control of the link partner. This means that the time it takes to clear is dependent on the negotiated media speed, and thus can be 8, 40, or 400ns after reading the LPI control and status register. It has been observed with some aggressive link partners, this clock can stop while lpi_intr_o is still asserted, meaning that the signal remains asserted for an indefinite period that the local system has no direct control over. The LPI interrupts will still be signalled through the main interrupt path in any case, and this path is not dependent on the receive clock. This, since we do not gate the application clock, and the chances of adding clock gating in the future are slim due to the clocks being ill-defined, lpi_intr_o serves no useful purpose. Remove the code which requests the interrupt, and all associated code. Reported-by: Ovidiu Panait <ovidiu.panait.rb@renesas.com> Tested-by: Ovidiu Panait <ovidiu.panait.rb@renesas.com> # Renesas RZ/V2H board Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Link: https://patch.msgid.link/E1vnJbt-00000007YYN-28nm@rmk-PC.armlinux.org.uk Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Ovidiu Panait <ovidiu.panait.rb@renesas.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> [net: stmmac: phytium: remove lpi_irq commit 8096f03 ("net: stmmac: remove support for lpi_intr_o") upstream, so remove it. Log: drivers/net/ethernet/stmicro/stmmac/dwmac-phytium.c: In function ‘phytium_dwmac_probe’: drivers/net/ethernet/stmicro/stmmac/dwmac-phytium.c:188:19: error: ‘struct stmmac_resources’ has no member named ‘lpi_irq’ 188 | stmmac_res.lpi_irq = -1;] (cherry picked from commit 268fd550228195eddadb93ac293d5458ee4c3615) Signed-off-by: Wentao Guan <guanwentao@uniontech.com> Conflicts: drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c
1 parent 7e66e0e commit a3d954e

8 files changed

Lines changed: 0 additions & 59 deletions

File tree

drivers/net/ethernet/stmicro/stmmac/common.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,6 @@ enum request_irq_err {
372372
REQ_IRQ_ERR_RX,
373373
REQ_IRQ_ERR_SFTY_UE,
374374
REQ_IRQ_ERR_SFTY_CE,
375-
REQ_IRQ_ERR_LPI,
376375
REQ_IRQ_ERR_WOL,
377376
REQ_IRQ_ERR_MAC,
378377
REQ_IRQ_ERR_NO,

drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,6 @@ static int intel_mgbe_common_data(struct pci_dev *pdev,
612612

613613
/* Setup MSI vector offset specific to Intel mGbE controller */
614614
plat->msi_mac_vec = 29;
615-
plat->msi_lpi_vec = 28;
616615
plat->msi_sfty_ce_vec = 27;
617616
plat->msi_sfty_ue_vec = 26;
618617
plat->msi_rx_base_vec = 0;
@@ -998,8 +997,6 @@ static int stmmac_config_multi_msi(struct pci_dev *pdev,
998997
res->irq = pci_irq_vector(pdev, plat->msi_mac_vec);
999998
if (plat->msi_wol_vec < STMMAC_MSI_VEC_MAX)
1000999
res->wol_irq = pci_irq_vector(pdev, plat->msi_wol_vec);
1001-
if (plat->msi_lpi_vec < STMMAC_MSI_VEC_MAX)
1002-
res->lpi_irq = pci_irq_vector(pdev, plat->msi_lpi_vec);
10031000
if (plat->msi_sfty_ce_vec < STMMAC_MSI_VEC_MAX)
10041001
res->sfty_ce_irq = pci_irq_vector(pdev, plat->msi_sfty_ce_vec);
10051002
if (plat->msi_sfty_ue_vec < STMMAC_MSI_VEC_MAX)
@@ -1081,7 +1078,6 @@ static int intel_eth_pci_probe(struct pci_dev *pdev,
10811078
*/
10821079
plat->msi_mac_vec = STMMAC_MSI_VEC_MAX;
10831080
plat->msi_wol_vec = STMMAC_MSI_VEC_MAX;
1084-
plat->msi_lpi_vec = STMMAC_MSI_VEC_MAX;
10851081
plat->msi_sfty_ce_vec = STMMAC_MSI_VEC_MAX;
10861082
plat->msi_sfty_ue_vec = STMMAC_MSI_VEC_MAX;
10871083
plat->msi_rx_base_vec = STMMAC_MSI_VEC_MAX;

drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -486,12 +486,6 @@ static int loongson_dwmac_dt_config(struct pci_dev *pdev,
486486
res->wol_irq = res->irq;
487487
}
488488

489-
res->lpi_irq = of_irq_get_byname(np, "eth_lpi");
490-
if (res->lpi_irq < 0) {
491-
dev_err(&pdev->dev, "IRQ eth_lpi not found\n");
492-
return -ENODEV;
493-
}
494-
495489
ret = device_get_phy_mode(&pdev->dev);
496490
if (ret < 0) {
497491
dev_err(&pdev->dev, "phy_mode not found\n");

drivers/net/ethernet/stmicro/stmmac/dwmac-phytium-common.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,6 @@ int phytium_dwmac_probe(struct platform_device *pdev, bool quirk)
187187
return -ENXIO;
188188
}
189189
stmmac_res.wol_irq = stmmac_res.irq;
190-
stmmac_res.lpi_irq = -1;
191190

192191
return stmmac_dvr_probe(&pdev->dev, plat, &stmmac_res);
193192
}

drivers/net/ethernet/stmicro/stmmac/stmmac.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ struct stmmac_resources {
2929
void __iomem *addr;
3030
u8 mac[ETH_ALEN];
3131
int wol_irq;
32-
int lpi_irq;
3332
int irq;
3433
int sfty_ce_irq;
3534
int sfty_ue_irq;
@@ -260,7 +259,6 @@ struct stmmac_priv {
260259
bool wol_irq_disabled;
261260
int clk_csr;
262261
struct timer_list eee_ctrl_timer;
263-
int lpi_irq;
264262
int eee_enabled;
265263
int eee_active;
266264
int tx_lpi_timer;

drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3515,10 +3515,6 @@ static void stmmac_free_irq(struct net_device *dev,
35153515
free_irq(priv->sfty_ce_irq, dev);
35163516
fallthrough;
35173517
case REQ_IRQ_ERR_SFTY_CE:
3518-
if (priv->lpi_irq > 0 && priv->lpi_irq != dev->irq)
3519-
free_irq(priv->lpi_irq, dev);
3520-
fallthrough;
3521-
case REQ_IRQ_ERR_LPI:
35223518
if (priv->wol_irq > 0 && priv->wol_irq != dev->irq)
35233519
free_irq(priv->wol_irq, dev);
35243520
fallthrough;
@@ -3573,24 +3569,6 @@ static int stmmac_request_irq_multi_msi(struct net_device *dev)
35733569
}
35743570
}
35753571

3576-
/* Request the LPI IRQ in case of another line
3577-
* is used for LPI
3578-
*/
3579-
if (priv->lpi_irq > 0 && priv->lpi_irq != dev->irq) {
3580-
int_name = priv->int_name_lpi;
3581-
sprintf(int_name, "%s:%s", dev->name, "lpi");
3582-
ret = request_irq(priv->lpi_irq,
3583-
stmmac_mac_interrupt,
3584-
0, int_name, dev);
3585-
if (unlikely(ret < 0)) {
3586-
netdev_err(priv->dev,
3587-
"%s: alloc lpi MSI %d (error: %d)\n",
3588-
__func__, priv->lpi_irq, ret);
3589-
irq_err = REQ_IRQ_ERR_LPI;
3590-
goto irq_error;
3591-
}
3592-
}
3593-
35943572
/* Request the Safety Feature Correctible Error line in
35953573
* case of another line is used
35963574
*/
@@ -3714,19 +3692,6 @@ static int stmmac_request_irq_single(struct net_device *dev)
37143692
}
37153693
}
37163694

3717-
/* Request the IRQ lines */
3718-
if (priv->lpi_irq > 0 && priv->lpi_irq != dev->irq) {
3719-
ret = request_irq(priv->lpi_irq, stmmac_interrupt,
3720-
IRQF_SHARED, dev->name, dev);
3721-
if (unlikely(ret < 0)) {
3722-
netdev_err(priv->dev,
3723-
"%s: ERROR: allocating the LPI IRQ %d (%d)\n",
3724-
__func__, priv->lpi_irq, ret);
3725-
irq_err = REQ_IRQ_ERR_LPI;
3726-
goto irq_error;
3727-
}
3728-
}
3729-
37303695
return 0;
37313696

37323697
irq_error:
@@ -7444,7 +7409,6 @@ int stmmac_dvr_probe(struct device *device,
74447409

74457410
priv->dev->irq = res->irq;
74467411
priv->wol_irq = res->wol_irq;
7447-
priv->lpi_irq = res->lpi_irq;
74487412
priv->sfty_ce_irq = res->sfty_ce_irq;
74497413
priv->sfty_ue_irq = res->sfty_ue_irq;
74507414
for (i = 0; i < MTL_MAX_RX_QUEUES; i++)

drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -762,14 +762,6 @@ int stmmac_get_platform_resources(struct platform_device *pdev,
762762
stmmac_res->wol_irq = stmmac_res->irq;
763763
}
764764

765-
stmmac_res->lpi_irq =
766-
platform_get_irq_byname_optional(pdev, "eth_lpi");
767-
if (stmmac_res->lpi_irq < 0) {
768-
if (stmmac_res->lpi_irq == -EPROBE_DEFER)
769-
return -EPROBE_DEFER;
770-
dev_info(&pdev->dev, "IRQ eth_lpi not found\n");
771-
}
772-
773765
stmmac_res->addr = devm_platform_ioremap_resource(pdev, 0);
774766

775767
return PTR_ERR_OR_ZERO(stmmac_res->addr);

include/linux/stmmac.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,6 @@ struct plat_stmmacenet_data {
308308
int ext_snapshot_num;
309309
int msi_mac_vec;
310310
int msi_wol_vec;
311-
int msi_lpi_vec;
312311
int msi_sfty_ce_vec;
313312
int msi_sfty_ue_vec;
314313
int msi_rx_base_vec;

0 commit comments

Comments
 (0)