Patch "net: bgmac: postpone turning IRQs off to avoid SoC hangs" has been added to the 6.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net: bgmac: postpone turning IRQs off to avoid SoC hangs

to the 6.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-bgmac-postpone-turning-irqs-off-to-avoid-soc-han.patch
and it can be found in the queue-6.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit da4d7c5cc9088c82294ef515fadc245827befeda
Author: Rafał Miłecki <rafal@xxxxxxxxxx>
Date:   Fri Jul 7 08:53:25 2023 +0200

    net: bgmac: postpone turning IRQs off to avoid SoC hangs
    
    [ Upstream commit e7731194fdf085f46d58b1adccfddbd0dfee4873 ]
    
    Turning IRQs off is done by accessing Ethernet controller registers.
    That can't be done until device's clock is enabled. It results in a SoC
    hang otherwise.
    
    This bug remained unnoticed for years as most bootloaders keep all
    Ethernet interfaces turned on. It seems to only affect a niche SoC
    family BCM47189. It has two Ethernet controllers but CFE bootloader uses
    only the first one.
    
    Fixes: 34322615cbaa ("net: bgmac: Mask interrupts during probe")
    Signed-off-by: Rafał Miłecki <rafal@xxxxxxxxxx>
    Reviewed-by: Michal Kubiak <michal.kubiak@xxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c
index 1761df8fb7f96..10c7c232cc4ec 100644
--- a/drivers/net/ethernet/broadcom/bgmac.c
+++ b/drivers/net/ethernet/broadcom/bgmac.c
@@ -1492,8 +1492,6 @@ int bgmac_enet_probe(struct bgmac *bgmac)
 
 	bgmac->in_init = true;
 
-	bgmac_chip_intrs_off(bgmac);
-
 	net_dev->irq = bgmac->irq;
 	SET_NETDEV_DEV(net_dev, bgmac->dev);
 	dev_set_drvdata(bgmac->dev, bgmac);
@@ -1511,6 +1509,8 @@ int bgmac_enet_probe(struct bgmac *bgmac)
 	 */
 	bgmac_clk_enable(bgmac, 0);
 
+	bgmac_chip_intrs_off(bgmac);
+
 	/* This seems to be fixing IRQ by assigning OOB #6 to the core */
 	if (!(bgmac->feature_flags & BGMAC_FEAT_IDM_MASK)) {
 		if (bgmac->feature_flags & BGMAC_FEAT_IRQ_ID_OOB_6)



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux