net: ethernet: ixp4xx: Standard module init
authorLinus Walleij <linus.walleij@linaro.org>
Sun, 12 Jan 2020 12:04:46 +0000 (13:04 +0100)
committerJakub Kicinski <kuba@kernel.org>
Sun, 12 Jan 2020 20:59:53 +0000 (12:59 -0800)
commitc83db9ef5640548631707e8b4a7bcddc115fdbae
tree6ed65b9270481588852920504d67affd8ec084e4
parenta41a5b26d29fb0123cd3290dca453857cd8c0c66
net: ethernet: ixp4xx: Standard module init

The IXP4xx driver was initializing the MDIO bus before even
probing, in the callbacks supposed to be used for setting up
the module itself, and with the side effect of trying to
register the MDIO bus as soon as this module was loaded or
compiled into the kernel whether the device was discovered
or not.

This does not work with multiplatform environments.

To get rid of this: set up the MDIO bus from the probe()
callback and remove it in the remove() callback. Rename
the probe() and remove() calls to reflect the most common
conventions.

Since there is a bit of checking for the ethernet feature
to be present in the MDIO registering function, making the
whole module not even be registered if we can't find an
MDIO bus, we need something similar: register the MDIO
bus when the corresponding ethernet is probed, and
return -EPROBE_DEFER on the other interfaces until this
happens. If no MDIO bus is present on any of the
registered interfaces we will eventually bail out.

None of the platforms I've seen has e.g. MDIO on EthB
and only uses EthC, there is always a Ethernet hardware
on the NPE (B, C) that has the MDIO bus, we just might
have to wait for it.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/xscale/ixp4xx_eth.c