* [PATCH net 1/2] net: ethtool: Add back transceiver type
2017-09-20 22:52 [PATCH net 0/2] Bring back transceiver type for PHYLIB Florian Fainelli
@ 2017-09-20 22:52 ` Florian Fainelli
2017-09-20 22:52 ` [PATCH net 2/2] net: phy: Keep reporting " Florian Fainelli
2017-09-21 22:20 ` [PATCH net 0/2] Bring back transceiver type for PHYLIB David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Florian Fainelli @ 2017-09-20 22:52 UTC (permalink / raw)
To: netdev; +Cc: davem, linville, decot, tremyfr, andrew, Florian Fainelli
Commit 3f1ac7a700d0 ("net: ethtool: add new ETHTOOL_xLINKSETTINGS API")
deprecated the ethtool_cmd::transceiver field, which was fine in
premise, except that the PHY library was actually using it to report the
type of transceiver: internal or external.
Use the first word of the reserved field to put this __u8 transceiver
field back in. It is made read-only, and we don't expect the
ETHTOOL_xLINKSETTINGS API to be doing anything with this anyway, so this
is mostly for the legacy path where we do:
ethtool_get_settings()
-> dev->ethtool_ops->get_link_ksettings()
-> convert_link_ksettings_to_legacy_settings()
to have no information loss compared to the legacy get_settings API.
Fixes: 3f1ac7a700d0 ("net: ethtool: add new ETHTOOL_xLINKSETTINGS API")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
include/uapi/linux/ethtool.h | 6 +++++-
net/core/ethtool.c | 2 ++
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h
index 9c041dae8e2c..5bd1b1de4ea0 100644
--- a/include/uapi/linux/ethtool.h
+++ b/include/uapi/linux/ethtool.h
@@ -1753,6 +1753,8 @@ enum ethtool_reset_flags {
* %ethtool_link_mode_bit_indices for the link modes, and other
* link features that the link partner advertised through
* autonegotiation; 0 if unknown or not applicable. Read-only.
+ * @transceiver: Used to distinguish different possible PHY types,
+ * reported consistently by PHYLIB. Read-only.
*
* If autonegotiation is disabled, the speed and @duplex represent the
* fixed link mode and are writable if the driver supports multiple
@@ -1804,7 +1806,9 @@ struct ethtool_link_settings {
__u8 eth_tp_mdix;
__u8 eth_tp_mdix_ctrl;
__s8 link_mode_masks_nwords;
- __u32 reserved[8];
+ __u8 transceiver;
+ __u8 reserved1[3];
+ __u32 reserved[7];
__u32 link_mode_masks[0];
/* layout of link_mode_masks fields:
* __u32 map_supported[link_mode_masks_nwords];
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
index 6a582ae4c5d9..3228411ada0f 100644
--- a/net/core/ethtool.c
+++ b/net/core/ethtool.c
@@ -525,6 +525,8 @@ convert_link_ksettings_to_legacy_settings(
= link_ksettings->base.eth_tp_mdix;
legacy_settings->eth_tp_mdix_ctrl
= link_ksettings->base.eth_tp_mdix_ctrl;
+ legacy_settings->transceiver
+ = link_ksettings->base.transceiver;
return retval;
}
--
2.9.3
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH net 2/2] net: phy: Keep reporting transceiver type
2017-09-20 22:52 [PATCH net 0/2] Bring back transceiver type for PHYLIB Florian Fainelli
2017-09-20 22:52 ` [PATCH net 1/2] net: ethtool: Add back transceiver type Florian Fainelli
@ 2017-09-20 22:52 ` Florian Fainelli
2017-09-21 22:20 ` [PATCH net 0/2] Bring back transceiver type for PHYLIB David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Florian Fainelli @ 2017-09-20 22:52 UTC (permalink / raw)
To: netdev; +Cc: davem, linville, decot, tremyfr, andrew, Florian Fainelli
With commit 2d55173e71b0 ("phy: add generic function to support
ksetting support"), we lost the ability to report the transceiver type
like we used to. Now that we have added back the transceiver type to
ethtool_link_settings, we can report it back like we used to and have no
loss of information.
Fixes: 3f1ac7a700d0 ("net: ethtool: add new ETHTOOL_xLINKSETTINGS API")
Fixes: 2d55173e71b0 ("phy: add generic function to support ksetting support")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/net/phy/phy.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index e842d2cd1ee7..2b1e67bc1e73 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -373,7 +373,8 @@ void phy_ethtool_ksettings_get(struct phy_device *phydev,
cmd->base.port = PORT_BNC;
else
cmd->base.port = PORT_MII;
-
+ cmd->base.transceiver = phy_is_internal(phydev) ?
+ XCVR_INTERNAL : XCVR_EXTERNAL;
cmd->base.phy_address = phydev->mdio.addr;
cmd->base.autoneg = phydev->autoneg;
cmd->base.eth_tp_mdix_ctrl = phydev->mdix_ctrl;
--
2.9.3
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH net 0/2] Bring back transceiver type for PHYLIB
2017-09-20 22:52 [PATCH net 0/2] Bring back transceiver type for PHYLIB Florian Fainelli
2017-09-20 22:52 ` [PATCH net 1/2] net: ethtool: Add back transceiver type Florian Fainelli
2017-09-20 22:52 ` [PATCH net 2/2] net: phy: Keep reporting " Florian Fainelli
@ 2017-09-21 22:20 ` David Miller
2 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2017-09-21 22:20 UTC (permalink / raw)
To: f.fainelli; +Cc: netdev, linville, decot, tremyfr, andrew
From: Florian Fainelli <f.fainelli@gmail.com>
Date: Wed, 20 Sep 2017 15:52:12 -0700
> With the introduction of the xLINKSETTINGS ethtool APIs, the transceiver type
> was deprecated, but in that process we lost some useful information that PHYLIB
> was consistently reporting about internal vs. external PHYs.
>
> This brings back transceiver as a read-only field that is only consumed in the
> legacy path where ETHTOOL_GET is called but the underlying drivers implement the
> new style klink_settings API.
Series applied, thanks Florian.
^ permalink raw reply [flat|nested] 4+ messages in thread