ipq40xx: ipqess: pass up ethdev_addr probe defer#15831
Conversation
6cc64ec to
d2a47e8
Compare
| + | ||
| + err = of_get_ethdev_address(np, netdev); | ||
| + if (err) { | ||
| + dev_info(&pdev->dev, "of_get_ethdev_address: %d\n", err); |
There was a problem hiding this comment.
I would drop this print, or make ti something like "Using DT MAC address" and demote it to dev_dbg
There was a problem hiding this comment.
Yes, planned to make this dev_dbg, maybe reads better: "Failed to get MAC address from DT: %d\n", err
Don't think we need to see it for every device that does not (or has problem) retrieving address from DT, just wanted to see if I could get someone with an MR33 to run it first.
| + if (err == -EPROBE_DEFER) | ||
| + return err; | ||
| + eth_hw_addr_random(netdev); | ||
| + dev_info(&pdev->dev, "generated random MAC address %pM\n", |
There was a problem hiding this comment.
Maybe "using random MAC adress" ?
|
Other than the prints, this LGTM, I hit essentially the same issue on ath79 with the NVMEM layout driver. |
d2a47e8 to
b4a4860
Compare
b4a4860 to
2379242
Compare
|
Hi @robimarko, I wanted to be able to adjust dynamic_debug control, then do unbind/bind, to be able to see nvmem at24.c dev_dbg to maybe help investigate mr33 issue: I found a splat. |
|
Yeah, indeed if |
Notify via dev_info when a random MAC address is set. of_get_ethdev_address can return -EPROBE_DEFER for NVMEM devices, return this up, so that ipqess can defer as well. Also move this MAC assignment from _init into _probe, so that this defer can happen earlier. Before change, with MAC address allocated from a built-in NVMEM layout driver (mikrotik,routerboot-nvmem) with extra of_get_ethdev_address result and random MAC printfs: [ 1.197571] ipqess-edma c080000.ethernet: ipqess_init of_get_ethdev_address ret:-517, of_node: /soc/ethernet@c080000 [ 1.197690] ipqess-edma c080000.ethernet: generated random MAC address 22:e7:36:e0:e4:a3 [ 1.614444] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.055929] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode after change: [ 1.173776] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.614607] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.246105] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode [ 5.260754] ipqess-edma c080000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx with extra __func__ printf to show _probe and _init: [ 1.173685] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.173784] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.280347] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.304844] ipqess-edma c080000.ethernet: ipqess_init [ 1.614664] ipqess-edma c080000.ethernet eth0: entered promiscuous mode Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
If this function is marked as __init, kernel will splat when driver is (re)bind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/unbind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/bind Example with additional print messages, functions at boot: [ 2.039468] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 2.039530] ipqess-edma c080000.ethernet: *netdev: c27d2000 [ 2.045609] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 2.051122] ipqess_init [ 2.057338] netdev: c27d2000 [ 2.059492] ess = netdev_priv: c27d2500 [ 2.062615] ess->pdev: c2138c00 [ 2.066174] ess->pdev->dev: c2138c10 [ 2.069314] ess->pdev->dev.of_node: ef6f6368 [ 2.073120] ess->pdev->dev.of_node: /soc/ethernet@c080000 fails (bind) after unbind: [ 34.987948] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 34.988012] ipqess-edma c080000.ethernet: *netdev: c27d6000 [ 34.994088] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 34.999652] 8<--- cut here --- [ 35.005802] Unable to handle kernel paging request at virtual address c0d1e28c when execute [ 35.008676] [c0d1e28c] *pgd=80c1941e(bad) [ 35.016918] Internal error: Oops: 8000000d [#1] SMP ARM Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
2379242 to
515ad3c
Compare
|
Thanks! Rebased on top of main and merged! |
Notify via dev_info when a random MAC address is set. of_get_ethdev_address can return -EPROBE_DEFER for NVMEM devices, return this up, so that ipqess can defer as well. Also move this MAC assignment from _init into _probe, so that this defer can happen earlier. Before change, with MAC address allocated from a built-in NVMEM layout driver (mikrotik,routerboot-nvmem) with extra of_get_ethdev_address result and random MAC printfs: [ 1.197571] ipqess-edma c080000.ethernet: ipqess_init of_get_ethdev_address ret:-517, of_node: /soc/ethernet@c080000 [ 1.197690] ipqess-edma c080000.ethernet: generated random MAC address 22:e7:36:e0:e4:a3 [ 1.614444] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.055929] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode after change: [ 1.173776] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.614607] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.246105] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode [ 5.260754] ipqess-edma c080000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx with extra __func__ printf to show _probe and _init: [ 1.173685] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.173784] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.280347] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.304844] ipqess-edma c080000.ethernet: ipqess_init [ 1.614664] ipqess-edma c080000.ethernet eth0: entered promiscuous mode Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
If this function is marked as __init, kernel will splat when driver is (re)bind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/unbind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/bind Example with additional print messages, functions at boot: [ 2.039468] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 2.039530] ipqess-edma c080000.ethernet: *netdev: c27d2000 [ 2.045609] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 2.051122] ipqess_init [ 2.057338] netdev: c27d2000 [ 2.059492] ess = netdev_priv: c27d2500 [ 2.062615] ess->pdev: c2138c00 [ 2.066174] ess->pdev->dev: c2138c10 [ 2.069314] ess->pdev->dev.of_node: ef6f6368 [ 2.073120] ess->pdev->dev.of_node: /soc/ethernet@c080000 fails (bind) after unbind: [ 34.987948] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 34.988012] ipqess-edma c080000.ethernet: *netdev: c27d6000 [ 34.994088] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 34.999652] 8<--- cut here --- [ 35.005802] Unable to handle kernel paging request at virtual address c0d1e28c when execute [ 35.008676] [c0d1e28c] *pgd=80c1941e(bad) [ 35.016918] Internal error: Oops: 8000000d [#1] SMP ARM Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
Notify via dev_info when a random MAC address is set. of_get_ethdev_address can return -EPROBE_DEFER for NVMEM devices, return this up, so that ipqess can defer as well. Also move this MAC assignment from _init into _probe, so that this defer can happen earlier. Before change, with MAC address allocated from a built-in NVMEM layout driver (mikrotik,routerboot-nvmem) with extra of_get_ethdev_address result and random MAC printfs: [ 1.197571] ipqess-edma c080000.ethernet: ipqess_init of_get_ethdev_address ret:-517, of_node: /soc/ethernet@c080000 [ 1.197690] ipqess-edma c080000.ethernet: generated random MAC address 22:e7:36:e0:e4:a3 [ 1.614444] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.055929] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode after change: [ 1.173776] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.614607] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.246105] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode [ 5.260754] ipqess-edma c080000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx with extra __func__ printf to show _probe and _init: [ 1.173685] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.173784] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.280347] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.304844] ipqess-edma c080000.ethernet: ipqess_init [ 1.614664] ipqess-edma c080000.ethernet eth0: entered promiscuous mode Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
If this function is marked as __init, kernel will splat when driver is (re)bind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/unbind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/bind Example with additional print messages, functions at boot: [ 2.039468] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 2.039530] ipqess-edma c080000.ethernet: *netdev: c27d2000 [ 2.045609] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 2.051122] ipqess_init [ 2.057338] netdev: c27d2000 [ 2.059492] ess = netdev_priv: c27d2500 [ 2.062615] ess->pdev: c2138c00 [ 2.066174] ess->pdev->dev: c2138c10 [ 2.069314] ess->pdev->dev.of_node: ef6f6368 [ 2.073120] ess->pdev->dev.of_node: /soc/ethernet@c080000 fails (bind) after unbind: [ 34.987948] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 34.988012] ipqess-edma c080000.ethernet: *netdev: c27d6000 [ 34.994088] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 34.999652] 8<--- cut here --- [ 35.005802] Unable to handle kernel paging request at virtual address c0d1e28c when execute [ 35.008676] [c0d1e28c] *pgd=80c1941e(bad) [ 35.016918] Internal error: Oops: 8000000d [#1] SMP ARM Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
Notify via dev_info when a random MAC address is set. of_get_ethdev_address can return -EPROBE_DEFER for NVMEM devices, return this up, so that ipqess can defer as well. Also move this MAC assignment from _init into _probe, so that this defer can happen earlier. Before change, with MAC address allocated from a built-in NVMEM layout driver (mikrotik,routerboot-nvmem) with extra of_get_ethdev_address result and random MAC printfs: [ 1.197571] ipqess-edma c080000.ethernet: ipqess_init of_get_ethdev_address ret:-517, of_node: /soc/ethernet@c080000 [ 1.197690] ipqess-edma c080000.ethernet: generated random MAC address 22:e7:36:e0:e4:a3 [ 1.614444] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.055929] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode after change: [ 1.173776] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.614607] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.246105] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode [ 5.260754] ipqess-edma c080000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx with extra __func__ printf to show _probe and _init: [ 1.173685] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.173784] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.280347] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.304844] ipqess-edma c080000.ethernet: ipqess_init [ 1.614664] ipqess-edma c080000.ethernet eth0: entered promiscuous mode Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
If this function is marked as __init, kernel will splat when driver is (re)bind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/unbind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/bind Example with additional print messages, functions at boot: [ 2.039468] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 2.039530] ipqess-edma c080000.ethernet: *netdev: c27d2000 [ 2.045609] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 2.051122] ipqess_init [ 2.057338] netdev: c27d2000 [ 2.059492] ess = netdev_priv: c27d2500 [ 2.062615] ess->pdev: c2138c00 [ 2.066174] ess->pdev->dev: c2138c10 [ 2.069314] ess->pdev->dev.of_node: ef6f6368 [ 2.073120] ess->pdev->dev.of_node: /soc/ethernet@c080000 fails (bind) after unbind: [ 34.987948] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 34.988012] ipqess-edma c080000.ethernet: *netdev: c27d6000 [ 34.994088] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 34.999652] 8<--- cut here --- [ 35.005802] Unable to handle kernel paging request at virtual address c0d1e28c when execute [ 35.008676] [c0d1e28c] *pgd=80c1941e(bad) [ 35.016918] Internal error: Oops: 8000000d [#1] SMP ARM Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
Notify via dev_info when a random MAC address is set. of_get_ethdev_address can return -EPROBE_DEFER for NVMEM devices, return this up, so that ipqess can defer as well. Also move this MAC assignment from _init into _probe, so that this defer can happen earlier. Before change, with MAC address allocated from a built-in NVMEM layout driver (mikrotik,routerboot-nvmem) with extra of_get_ethdev_address result and random MAC printfs: [ 1.197571] ipqess-edma c080000.ethernet: ipqess_init of_get_ethdev_address ret:-517, of_node: /soc/ethernet@c080000 [ 1.197690] ipqess-edma c080000.ethernet: generated random MAC address 22:e7:36:e0:e4:a3 [ 1.614444] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.055929] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode after change: [ 1.173776] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.614607] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.246105] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode [ 5.260754] ipqess-edma c080000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx with extra __func__ printf to show _probe and _init: [ 1.173685] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.173784] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.280347] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.304844] ipqess-edma c080000.ethernet: ipqess_init [ 1.614664] ipqess-edma c080000.ethernet eth0: entered promiscuous mode Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
If this function is marked as __init, kernel will splat when driver is (re)bind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/unbind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/bind Example with additional print messages, functions at boot: [ 2.039468] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 2.039530] ipqess-edma c080000.ethernet: *netdev: c27d2000 [ 2.045609] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 2.051122] ipqess_init [ 2.057338] netdev: c27d2000 [ 2.059492] ess = netdev_priv: c27d2500 [ 2.062615] ess->pdev: c2138c00 [ 2.066174] ess->pdev->dev: c2138c10 [ 2.069314] ess->pdev->dev.of_node: ef6f6368 [ 2.073120] ess->pdev->dev.of_node: /soc/ethernet@c080000 fails (bind) after unbind: [ 34.987948] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 34.988012] ipqess-edma c080000.ethernet: *netdev: c27d6000 [ 34.994088] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 34.999652] 8<--- cut here --- [ 35.005802] Unable to handle kernel paging request at virtual address c0d1e28c when execute [ 35.008676] [c0d1e28c] *pgd=80c1941e(bad) [ 35.016918] Internal error: Oops: 8000000d [openwrt#1] SMP ARM Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
Notify via dev_info when a random MAC address is set. of_get_ethdev_address can return -EPROBE_DEFER for NVMEM devices, return this up, so that ipqess can defer as well. Also move this MAC assignment from _init into _probe, so that this defer can happen earlier. Before change, with MAC address allocated from a built-in NVMEM layout driver (mikrotik,routerboot-nvmem) with extra of_get_ethdev_address result and random MAC printfs: [ 1.197571] ipqess-edma c080000.ethernet: ipqess_init of_get_ethdev_address ret:-517, of_node: /soc/ethernet@c080000 [ 1.197690] ipqess-edma c080000.ethernet: generated random MAC address 22:e7:36:e0:e4:a3 [ 1.614444] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.055929] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode after change: [ 1.173776] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.614607] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.246105] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode [ 5.260754] ipqess-edma c080000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx with extra __func__ printf to show _probe and _init: [ 1.173685] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.173784] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.280347] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.304844] ipqess-edma c080000.ethernet: ipqess_init [ 1.614664] ipqess-edma c080000.ethernet eth0: entered promiscuous mode Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
If this function is marked as __init, kernel will splat when driver is (re)bind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/unbind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/bind Example with additional print messages, functions at boot: [ 2.039468] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 2.039530] ipqess-edma c080000.ethernet: *netdev: c27d2000 [ 2.045609] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 2.051122] ipqess_init [ 2.057338] netdev: c27d2000 [ 2.059492] ess = netdev_priv: c27d2500 [ 2.062615] ess->pdev: c2138c00 [ 2.066174] ess->pdev->dev: c2138c10 [ 2.069314] ess->pdev->dev.of_node: ef6f6368 [ 2.073120] ess->pdev->dev.of_node: /soc/ethernet@c080000 fails (bind) after unbind: [ 34.987948] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 34.988012] ipqess-edma c080000.ethernet: *netdev: c27d6000 [ 34.994088] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 34.999652] 8<--- cut here --- [ 35.005802] Unable to handle kernel paging request at virtual address c0d1e28c when execute [ 35.008676] [c0d1e28c] *pgd=80c1941e(bad) [ 35.016918] Internal error: Oops: 8000000d [#1] SMP ARM Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
Notify via dev_info when a random MAC address is set. of_get_ethdev_address can return -EPROBE_DEFER for NVMEM devices, return this up, so that ipqess can defer as well. Also move this MAC assignment from _init into _probe, so that this defer can happen earlier. Before change, with MAC address allocated from a built-in NVMEM layout driver (mikrotik,routerboot-nvmem) with extra of_get_ethdev_address result and random MAC printfs: [ 1.197571] ipqess-edma c080000.ethernet: ipqess_init of_get_ethdev_address ret:-517, of_node: /soc/ethernet@c080000 [ 1.197690] ipqess-edma c080000.ethernet: generated random MAC address 22:e7:36:e0:e4:a3 [ 1.614444] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.055929] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode after change: [ 1.173776] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.614607] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.246105] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode [ 5.260754] ipqess-edma c080000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx with extra __func__ printf to show _probe and _init: [ 1.173685] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.173784] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.280347] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.304844] ipqess-edma c080000.ethernet: ipqess_init [ 1.614664] ipqess-edma c080000.ethernet eth0: entered promiscuous mode Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
If this function is marked as __init, kernel will splat when driver is (re)bind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/unbind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/bind Example with additional print messages, functions at boot: [ 2.039468] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 2.039530] ipqess-edma c080000.ethernet: *netdev: c27d2000 [ 2.045609] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 2.051122] ipqess_init [ 2.057338] netdev: c27d2000 [ 2.059492] ess = netdev_priv: c27d2500 [ 2.062615] ess->pdev: c2138c00 [ 2.066174] ess->pdev->dev: c2138c10 [ 2.069314] ess->pdev->dev.of_node: ef6f6368 [ 2.073120] ess->pdev->dev.of_node: /soc/ethernet@c080000 fails (bind) after unbind: [ 34.987948] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 34.988012] ipqess-edma c080000.ethernet: *netdev: c27d6000 [ 34.994088] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 34.999652] 8<--- cut here --- [ 35.005802] Unable to handle kernel paging request at virtual address c0d1e28c when execute [ 35.008676] [c0d1e28c] *pgd=80c1941e(bad) [ 35.016918] Internal error: Oops: 8000000d [#1] SMP ARM Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
Notify via dev_info when a random MAC address is set. of_get_ethdev_address can return -EPROBE_DEFER for NVMEM devices, return this up, so that ipqess can defer as well. Also move this MAC assignment from _init into _probe, so that this defer can happen earlier. Before change, with MAC address allocated from a built-in NVMEM layout driver (mikrotik,routerboot-nvmem) with extra of_get_ethdev_address result and random MAC printfs: [ 1.197571] ipqess-edma c080000.ethernet: ipqess_init of_get_ethdev_address ret:-517, of_node: /soc/ethernet@c080000 [ 1.197690] ipqess-edma c080000.ethernet: generated random MAC address 22:e7:36:e0:e4:a3 [ 1.614444] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.055929] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode after change: [ 1.173776] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.614607] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.246105] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode [ 5.260754] ipqess-edma c080000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx with extra __func__ printf to show _probe and _init: [ 1.173685] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.173784] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.280347] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.304844] ipqess-edma c080000.ethernet: ipqess_init [ 1.614664] ipqess-edma c080000.ethernet eth0: entered promiscuous mode Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
If this function is marked as __init, kernel will splat when driver is (re)bind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/unbind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/bind Example with additional print messages, functions at boot: [ 2.039468] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 2.039530] ipqess-edma c080000.ethernet: *netdev: c27d2000 [ 2.045609] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 2.051122] ipqess_init [ 2.057338] netdev: c27d2000 [ 2.059492] ess = netdev_priv: c27d2500 [ 2.062615] ess->pdev: c2138c00 [ 2.066174] ess->pdev->dev: c2138c10 [ 2.069314] ess->pdev->dev.of_node: ef6f6368 [ 2.073120] ess->pdev->dev.of_node: /soc/ethernet@c080000 fails (bind) after unbind: [ 34.987948] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 34.988012] ipqess-edma c080000.ethernet: *netdev: c27d6000 [ 34.994088] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 34.999652] 8<--- cut here --- [ 35.005802] Unable to handle kernel paging request at virtual address c0d1e28c when execute [ 35.008676] [c0d1e28c] *pgd=80c1941e(bad) [ 35.016918] Internal error: Oops: 8000000d [#1] SMP ARM Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
Notify via dev_info when a random MAC address is set. of_get_ethdev_address can return -EPROBE_DEFER for NVMEM devices, return this up, so that ipqess can defer as well. Also move this MAC assignment from _init into _probe, so that this defer can happen earlier. Before change, with MAC address allocated from a built-in NVMEM layout driver (mikrotik,routerboot-nvmem) with extra of_get_ethdev_address result and random MAC printfs: [ 1.197571] ipqess-edma c080000.ethernet: ipqess_init of_get_ethdev_address ret:-517, of_node: /soc/ethernet@c080000 [ 1.197690] ipqess-edma c080000.ethernet: generated random MAC address 22:e7:36:e0:e4:a3 [ 1.614444] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.055929] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode after change: [ 1.173776] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.614607] ipqess-edma c080000.ethernet eth0: entered promiscuous mode [ 5.246105] ipqess-edma c080000.ethernet eth0: configuring for fixed/internal link mode [ 5.260754] ipqess-edma c080000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx with extra __func__ printf to show _probe and _init: [ 1.173685] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.173784] ipqess-edma c080000.ethernet: of_get_ethdev_address: -517 [ 1.280347] ipqess-edma c080000.ethernet: ipqess_axi_probe [ 1.304844] ipqess-edma c080000.ethernet: ipqess_init [ 1.614664] ipqess-edma c080000.ethernet eth0: entered promiscuous mode Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
If this function is marked as __init, kernel will splat when driver is (re)bind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/unbind echo "c080000.ethernet">/sys/bus/platform/drivers/ipqess-edma/bind Example with additional print messages, functions at boot: [ 2.039468] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 2.039530] ipqess-edma c080000.ethernet: *netdev: c27d2000 [ 2.045609] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 2.051122] ipqess_init [ 2.057338] netdev: c27d2000 [ 2.059492] ess = netdev_priv: c27d2500 [ 2.062615] ess->pdev: c2138c00 [ 2.066174] ess->pdev->dev: c2138c10 [ 2.069314] ess->pdev->dev.of_node: ef6f6368 [ 2.073120] ess->pdev->dev.of_node: /soc/ethernet@c080000 fails (bind) after unbind: [ 34.987948] ipqess-edma c080000.ethernet: ipqess_axi_probe pre register_netdev [ 34.988012] ipqess-edma c080000.ethernet: *netdev: c27d6000 [ 34.994088] ipqess-edma c080000.ethernet: &ipqess_init: c0d1e28c [ 34.999652] 8<--- cut here --- [ 35.005802] Unable to handle kernel paging request at virtual address c0d1e28c when execute [ 35.008676] [c0d1e28c] *pgd=80c1941e(bad) [ 35.016918] Internal error: Oops: 8000000d [#1] SMP ARM Signed-off-by: John Thomson <[email protected]> Link: openwrt#15831 Signed-off-by: Robert Marko <[email protected]>
Notify via dev_info when a random MAC address is set.
of_get_ethdev_address can return -EPROBE_DEFER for NVMEM devices, return this up, so that ipqess can defer as well.
Also move this MAC assignment from _init into _probe, so that this defer can happen earlier.
Before change, with MAC address allocated from a built-in NVMEM layout driver (mikrotik,routerboot-nvmem) with extra of_get_ethdev_address result and random MAC printfs:
after change:
with extra func printf to show _probe and _init: