Subject: Atheros 8035 PHY only works when at803x_config_init() is commented out

From: Mason <[email-masked]>
Date: Wed, 08 Apr 2015 18:28:13 +0200

Hello everyone,

I have a weird problem, that I've only started investigating, and I'd be
grateful if anyone can help me along.

I have an ARM-based SoC that provides (AFAIU) an Atheros 8035 PHY.

If I enable the driver in my kernel (CONFIG_AT803X_PHY) then something
goes wrong, and the system cannot load the nfsroot. Bizarrely, DHCP
seems to work (so there is limited connectivity) but then the NFS
server just times out.

However, if I just comment this line:
	//.config_init = at803x_config_init,
in at803x_driver[0]
then everything seems to work. (At least, the system sets the PHY
to Gbit, and manages to download the nfsroot.)

If I'm reading the code right (big "if"), when config_init is NULL,
then phy_init_hw() turns into a NOP?

So either at803x_config_init() or something called from phy_init_hw()
seems to be hosing this system's networking?

Sprinkling printk over phy_init_hw shows no errors (no premature exit)
and phydev->drv->config_init(phydev) returns 0.

Maybe I didn't set something up correctly, and phy_write() is scribbling
over the wrong register?

Does anyone see something I missed?

Regards.