summaryrefslogtreecommitdiff
path: root/cleopatre/linux-2.6.25.10-spc300/drivers/net/macsonic.c
diff options
context:
space:
mode:
authorYacine Belkadi2012-10-24 16:49:22 +0200
committerYacine Belkadi2012-11-06 09:49:31 +0100
commitf0dc7f59b094d6fc795cd8d20a55987f2095c8e6 (patch)
tree0fe4bad4ebcb476d710219584d645b4952a6e2fc /cleopatre/linux-2.6.25.10-spc300/drivers/net/macsonic.c
parent3de7bdb827bd2a310f20f66836fe32418efee3d7 (diff)
cleo/linux/drv/eth: don't txdesc_reset() on link up, refs #3195, (ind.) closes #3439
In the Synop3504 Ethernet driver, the Tx descriptors were reset on link up. That's not necessary because the MAC TxDMA will process (fetch and close) the Tx descriptors even if the link is down. So letting the normal process happen will take care of the pending descriptors. This Tx descriptor reset already caused problems when it was performed on link_down. It was then moved to link up. In link up, this reset is one of the causes of #3439*. So removing the reset of the Tx descriptors on link up also indirectly closes the ticket #3439. *#3439 is a kernel oops that happens when booting in "single mode" on a board with an IP75D PHY: The IP175D driver declares its readiness to the Linux PHY Layer in a particular way, probably to skip the Auto-Negotiation step. As a consequence, the PHY layer may call the Ethernet driver's adjust_link() before it's ready (before phy_start() is called). In other words, adjust_link() may be called before the driver has initialized the descriptors. If that happens, the Ethernet driver touches the uninitialized Tx descriptors, and a kernel oops occurs. The problem is visible in single mode because the eth interface is not brought up. So synop3504_open() is not run. So the Tx descriptors are not already initialized when the PHY layer calls synop3504_handle_link_change() which calls txdesc_reset(), which causes a kernel oops.
Diffstat (limited to 'cleopatre/linux-2.6.25.10-spc300/drivers/net/macsonic.c')
0 files changed, 0 insertions, 0 deletions