• M
    net: eth: xgene: fix booting with devicetree · b0ab0afa
    Mark Salter 提交于
    Commit de7b5b3d ("net: eth: xgene: change APM X-Gene SoC platform
    ethernet to support ACPI") breaks booting with devicetree with UEFI
    firmware. In that case, I get:
    
    Unhandled fault: synchronous external abort (0x96000010) at 0xfffffc0000620010
     Internal error: : 96000010 [#1] SMP
     Modules linked in: vfat fat xfs libcrc32c ahci_xgene libahci_platform libahci
     CPU: 7 PID: 634 Comm: NetworkManager Not tainted 4.0.0-rc1+ #4
     Hardware name: AppliedMicro Mustang/Mustang, BIOS 1.1.0-rh-0.14 Mar  1 2015
     task: fffffe03d4c7e100 ti: fffffe03d4e24000 task.ti: fffffe03d4e24000
     PC is at xgene_enet_rd_mcx_mac.isra.11+0x58/0xd4
     LR is at xgene_gmac_tx_enable+0x2c/0x50
     pc : [<fffffe000069d6fc>] lr : [<fffffe000069dcc4>] pstate: 80000145
     sp : fffffe03d4e27590
     x29: fffffe03d4e27590 x28: 0000000000000000
     x27: fffffe03d4e277c0 x26: fffffe03da8fda10
     x25: fffffe03d4e2760c x24: fffffe03d49e28c0
     x23: fffffc0000620004 x22: 0000000000000000
     x21: fffffc0000620000 x20: fffffc0000620010
     x19: 000000000000000b x18: 000003ffd4a96020
     x17: 000003ff7fc1f7a0 x16: fffffe000079b9cc
     x15: 0000000000000000 x14: 0000000000000000
     x13: 0000000000000000 x12: fffffe03d4e24000
     x11: fffffe03d4e27da0 x10: 0000000000000001
     x9 : 0000000000000000 x8 : fffffe03d4e27a20
     x7 : 0000000000000000 x6 : 00000000ffffffef
     x5 : fffffe000105f7d0 x4 : fffffe00007ca8c8
     x3 : fffffe03d4e2760c x2 : 0000000000000000
     x1 : fffffc0000620000 x0 : 0000000040000000
    
     Process NetworkManager (pid: 634, stack limit = 0xfffffe03d4e24028)
     Stack: (0xfffffe03d4e27590 to 0xfffffe03d4e28000)
     ...
     Call trace:
     [<fffffe000069d6fc>] xgene_enet_rd_mcx_mac.isra.11+0x58/0xd4
     [<fffffe000069dcc0>] xgene_gmac_tx_enable+0x28/0x50
     [<fffffe00006a112c>] xgene_enet_open+0x2c/0x130
     [<fffffe00007b9254>] __dev_open+0xc8/0x148
     [<fffffe00007b956c>] __dev_change_flags+0x90/0x158
     [<fffffe00007b9664>] dev_change_flags+0x30/0x70
     [<fffffe00007c8ab8>] do_setlink+0x278/0x870
     [<fffffe00007c95bc>] rtnl_newlink+0x404/0x6a8
     [<fffffe00007c8040>] rtnetlink_rcv_msg+0x98/0x218
     [<fffffe00007e78e4>] netlink_rcv_skb+0xe0/0xf8
     [<fffffe00007c7f94>] rtnetlink_rcv+0x30/0x44
     [<fffffe00007e6f2c>] netlink_unicast+0xfc/0x210
     [<fffffe00007e75b8>] netlink_sendmsg+0x498/0x5ac
     [<fffffe00007990b8>] do_sock_sendmsg+0xa4/0xcc
     [<fffffe000079a958>] ___sys_sendmsg+0x1fc/0x208
     [<fffffe000079b984>] __sys_sendmsg+0x4c/0x94
     [<fffffe000079b9f8>] SyS_sendmsg+0x2c/0x3c
    
    The problem here is that the enet hw clocks are not getting
    initialized because of a test to avoid the initialization if
    UEFI is used to boot. This is an incorrect test. When booting
    with UEFI and devicetree, the kernel must still initialize
    the enet hw clocks. If booting with ACPI, the clock hw is
    not exposed to the kernel and it is that case where we want
    to avoid initializing clocks.
    Signed-off-by: NMark Salter <msalter@redhat.com>
    Acked-by: NFeng Kan <fkan@apm.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    b0ab0afa
xgene_enet_hw.c 20.3 KB