• Yoshihiro Shimoda's avatar
    net: sh_eth: fix mdio access in sh_eth_close() for R-Car Gen2 and RZ/A1 SoCs · a6c6ea45
    Yoshihiro Shimoda authored
    [ Upstream commit 315ca92d ]
    
    The sh_eth_close() resets the MAC and then calls phy_stop()
    so that mdio read access result is incorrect without any error
    according to kernel trace like below:
    
    ifconfig-216   [003] .n..   109.133124: mdio_access: ee700000.ethernet-ffffffff read  phy:0x01 reg:0x00 val:0xffff
    
    According to the hardware manual, the RMII mode should be set to 1
    before operation the Ethernet MAC. However, the previous code was not
    set to 1 after the driver issued the soft_reset in sh_eth_dev_exit()
    so that the mdio read access result seemed incorrect. To fix the issue,
    this patch adds a condition and set the RMII mode register in
    sh_eth_dev_exit() for R-Car Gen2 and RZ/A1 SoCs.
    
    Note that when I have tried to move the sh_eth_dev_exit() calling
    after phy_stop() on sh_eth_close(), but it gets worse (kernel panic
    happened and it seems that a register is accessed while the clock is
    off).
    Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    a6c6ea45
sh_eth.c 86.2 KB