[openwrt/openwrt] realtek: ignore disabled switch ports

LEDE Commits lede-commits at lists.infradead.org
Sun Aug 28 23:33:03 PDT 2022


svanheule pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/9a7f17e11f5d2c808b465bd439c7aa11c2c8dfbf

commit 9a7f17e11f5d2c808b465bd439c7aa11c2c8dfbf
Author: Sander Vanheule <sander at svanheule.net>
AuthorDate: Mon Aug 29 08:23:49 2022 +0200

    realtek: ignore disabled switch ports
    
    When marking a switch port as disabled in the device tree, by using
    'status = "disabled";', the switch driver fails on boot, causing a
    restart:
    
        CPU 0 Unable to handle kernel paging request at virtual address
        00000000, epc == 802c3064, ra == 8022b4b4
            [ ... ]
        Call Trace:
        [<802c3064>] strlen+0x0/0x2c
        [<8022b4b4>] start_creating.part.0+0x78/0x194
        [<8022bd3c>] debugfs_create_dir+0x44/0x1c0
        [<80396dfc>] rtl838x_dbgfs_port_init+0x54/0x258
        [<80397508>] rtl838x_dbgfs_init+0xe0/0x56c
    
    This is caused by the DSA subsystem (mostly) ignoring the port, while
    rtl83xx_mdio_probe() still extracts some details on this disabled port
    from the device tree, resulting in the usage of a NULL pointer where a
    port name is expected.
    
    By not probing ignoring disabled ports, no attempt is made to create a
    debugfs directory later. The device then boots as expected without the
    disabled port.
    
    Signed-off-by: Sander Vanheule <sander at svanheule.net>
---
 target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/common.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/common.c b/target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/common.c
index fd6019ec62..2a60f61c95 100644
--- a/target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/common.c
+++ b/target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/common.c
@@ -317,6 +317,9 @@ static int __init rtl83xx_mdio_probe(struct rtl838x_switch_priv *priv)
 		phy_interface_t interface;
 		u32 led_set;
 
+		if (!of_device_is_available(dn))
+			continue;
+
 		if (of_property_read_u32(dn, "reg", &pn))
 			continue;
 




More information about the lede-commits mailing list