Skip to content

Commit

Permalink
net: gmii2rgmii: Add check before calling phy read status
Browse files Browse the repository at this point in the history
Phy read status hook will not be assigned if generic phy is attached.
Add a check for the hook and then call genphy's implementation in
case hook isn't present. This is a fix for the following kernel oops:

[    6.806251] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
[    6.815033] Mem abort info:
[    6.817809]   ESR = 0x86000005
[    6.820854]   Exception class = IABT (current EL), IL = 32 bits
[    6.826766]   SET = 0, FnV = 0
[    6.829805]   EA = 0, S1PTW = 0
[    6.832938] user pgtable: 4k pages, 39-bit VAs, pgdp = (____ptrval____)
[    6.839540] [0000000000000000] pgd=0000000000000000, pud=0000000000000000
[    6.846322] Internal error: Oops: 86000005 [#1] SMP
[    6.851184] Modules linked in: uio_pdrv_genirq
[    6.855623] CPU: 2 PID: 42 Comm: kworker/2:1 Not tainted 4.19.0-xilinx-v2018.3 #1
[    6.863093] Hardware name: ZynqMP ZC1275 RevB (DT)
[    6.867876] Workqueue: events_power_efficient phy_state_machine
[    6.873780] pstate: 60000005 (nZCv daif -PAN -UAO)
[    6.878552] pc :           (null)
[    6.881853] lr : xgmiitorgmii_read_status+0x30/0x98
[    6.886720] sp : ffffff800a79bd40
[    6.890018] x29: ffffff800a79bd40 x28: 0000000000000000
[    6.895321] x27: ffffffc06da5fb38 x26: ffffff8008d088a0
[    6.900616] x25: 0000000000000000 x24: ffffffc06bed6be8
[    6.905911] x23: ffffffc06bed6800 x22: ffffffc06bed6c38
[    6.911206] x21: 0000000000000008 x20: ffffffc06bed5000
[    6.916501] x19: ffffffc06bed6800 x18: 0000000000000400
[    6.921795] x17: 0000000000000000 x16: 0000000000000000
[    6.927090] x15: 0000000000000400 x14: 00000000000003b8
[    6.932385] x13: 0000000000000000 x12: 0000000000000001
[    6.937680] x11: 0000000000000000 x10: 00000000000007f0
[    6.942975] x9 : ffffffc06d9f5d60 x8 : fefefefefefefeff
[    6.948269] x7 : 0000000000000018 x6 : 0000000000000018
[    6.953564] x5 : 0000746e65696369 x4 : 000000000000002f
[    6.958859] x3 : ffffffc06bed6c38 x2 : 0000000000000000
[    6.964154] x1 : ffffffc06bc1b000 x0 : ffffffc06bed6800
[    6.969450] Process kworker/2:1 (pid: 42, stack limit = 0x(____ptrval____))
[    6.976392] Call trace:
[    6.978823]            (null)
[    6.981777]  phy_state_machine+0x244/0x528
[    6.985857]  process_one_work+0x1e4/0x340
[    6.989857]  worker_thread+0x3c/0x488
[    6.993504]  kthread+0x124/0x128
[    6.996715]  ret_from_fork+0x10/0x18
[    7.000274] Code: bad PC value
[    7.003312] ---[ end trace 058be319ffdbcfb0 ]---

Signed-off-by: Harini Katakam <harini.katakam@xilinx.com>
Reviewed-by: Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
  • Loading branch information
harini-katakam authored and Michal Simek committed Mar 27, 2019
1 parent fe1e880 commit 2b34542
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion drivers/net/phy/xilinx_gmii2rgmii.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,11 @@ static int xgmiitorgmii_read_status(struct phy_device *phydev)
u16 val = 0;
int err;

err = priv->phy_drv->read_status(phydev);
if (priv->phy_drv->read_status)
err = priv->phy_drv->read_status(phydev);
else
err = genphy_read_status(phydev);

if (err < 0)
return err;

Expand Down

0 comments on commit 2b34542

Please sign in to comment.