net: eth: xgene: fix booting with devicetree
Commit
de7b5b3d790a ("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: Mark Salter <msalter@redhat.com>
Acked-by: Feng Kan <fkan@apm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>