net: phy: genphy: Allow overwriting features

of_set_phy_supported allows overwiting hardware capabilities of
a phy with values from the devicetree. This does not work with
the genphy driver though because the genphys config_init function
will overwrite all values adjusted by of_set_phy_supported. Fix
this by initialising the genphy features in the phy_driver struct
and in config_init just limit the features to the ones the hardware
can actually support. The resulting features are a subset of the
devicetree specified features and the hardware features.

This is a copy of the patch from Linux kernel, see
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=c242a47238fa2a6a54af8a16e62b54e6e031d4bc

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Cc: Joe Hershberger <joe.hershberger@ni.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
Sascha Hauer 2016-01-13 16:59:32 +03:00 committed by Joe Hershberger
parent bbdcaff12a
commit 44bc317487

View file

@ -382,8 +382,6 @@ int genphy_config(struct phy_device *phydev)
int val; int val;
u32 features; u32 features;
/* For now, I'll claim that the generic driver supports
* all possible port types */
features = (SUPPORTED_TP | SUPPORTED_MII features = (SUPPORTED_TP | SUPPORTED_MII
| SUPPORTED_AUI | SUPPORTED_FIBRE | | SUPPORTED_AUI | SUPPORTED_FIBRE |
SUPPORTED_BNC); SUPPORTED_BNC);
@ -422,8 +420,8 @@ int genphy_config(struct phy_device *phydev)
features |= SUPPORTED_1000baseX_Half; features |= SUPPORTED_1000baseX_Half;
} }
phydev->supported = features; phydev->supported &= features;
phydev->advertising = features; phydev->advertising &= features;
genphy_config_aneg(phydev); genphy_config_aneg(phydev);
@ -447,7 +445,9 @@ static struct phy_driver genphy_driver = {
.uid = 0xffffffff, .uid = 0xffffffff,
.mask = 0xffffffff, .mask = 0xffffffff,
.name = "Generic PHY", .name = "Generic PHY",
.features = 0, .features = PHY_GBIT_FEATURES | SUPPORTED_MII |
SUPPORTED_AUI | SUPPORTED_FIBRE |
SUPPORTED_BNC,
.config = genphy_config, .config = genphy_config,
.startup = genphy_startup, .startup = genphy_startup,
.shutdown = genphy_shutdown, .shutdown = genphy_shutdown,