net: sdk_dpaa: use phylink_interface_max_speed() instead of local phy2speed[]

We can piggyback on phylink's phylink_interface_max_speed() which is
better maintained than our local array - for example we will need this
also for PHY_INTERFACE_MODE_XGMII.

We don't really care about making the MAC integration on the SDK driver
any better than it currently is. We just don't want to bring in the
phylink build-time dependency for now, so we move phylink_interface_max_speed()
as a static inline function in phylink's header, rather than an exported
symbol.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
This commit is contained in:
Vladimir Oltean 2024-04-29 16:26:18 +03:00
parent c5b4b5407b
commit 2f07953055
3 changed files with 75 additions and 91 deletions

View File

@ -47,6 +47,7 @@
#include <linux/phy_fixed.h>
#include <linux/device.h>
#include <linux/phy.h>
#include <linux/phylink.h>
#include <linux/io.h>
#include "lnxwrp_fm_ext.h"
@ -67,23 +68,6 @@
| SUPPORTED_MII \
| SUPPORTED_Backplane)
static const uint16_t phy2speed[] = {
[PHY_INTERFACE_MODE_MII] = SPEED_100,
[PHY_INTERFACE_MODE_GMII] = SPEED_1000,
[PHY_INTERFACE_MODE_SGMII] = SPEED_1000,
[PHY_INTERFACE_MODE_QSGMII] = SPEED_1000,
[PHY_INTERFACE_MODE_TBI] = SPEED_1000,
[PHY_INTERFACE_MODE_RMII] = SPEED_100,
[PHY_INTERFACE_MODE_RGMII] = SPEED_1000,
[PHY_INTERFACE_MODE_RGMII_ID] = SPEED_1000,
[PHY_INTERFACE_MODE_RGMII_RXID] = SPEED_1000,
[PHY_INTERFACE_MODE_RGMII_TXID] = SPEED_1000,
[PHY_INTERFACE_MODE_RTBI] = SPEED_1000,
[PHY_INTERFACE_MODE_XGMII] = SPEED_10000,
[PHY_INTERFACE_MODE_2500BASEX] = SPEED_2500,
[PHY_INTERFACE_MODE_10GKR] = SPEED_10000,
};
static struct mac_device * __cold
alloc_macdev(struct device *dev, size_t sizeof_priv,
void (*setup)(struct mac_device *mac_dev))

View File

@ -254,80 +254,6 @@ static unsigned int phylink_interface_signal_rate(phy_interface_t interface)
}
}
/**
* phylink_interface_max_speed() - get the maximum speed of a phy interface
* @interface: phy interface mode defined by &typedef phy_interface_t
*
* Determine the maximum speed of a phy interface. This is intended to help
* determine the correct speed to pass to the MAC when the phy is performing
* rate matching.
*
* Return: The maximum speed of @interface
*/
static int phylink_interface_max_speed(phy_interface_t interface)
{
switch (interface) {
case PHY_INTERFACE_MODE_100BASEX:
case PHY_INTERFACE_MODE_REVRMII:
case PHY_INTERFACE_MODE_RMII:
case PHY_INTERFACE_MODE_SMII:
case PHY_INTERFACE_MODE_REVMII:
case PHY_INTERFACE_MODE_MII:
return SPEED_100;
case PHY_INTERFACE_MODE_TBI:
case PHY_INTERFACE_MODE_MOCA:
case PHY_INTERFACE_MODE_RTBI:
case PHY_INTERFACE_MODE_1000BASEX:
case PHY_INTERFACE_MODE_1000BASEKX:
case PHY_INTERFACE_MODE_TRGMII:
case PHY_INTERFACE_MODE_RGMII_TXID:
case PHY_INTERFACE_MODE_RGMII_RXID:
case PHY_INTERFACE_MODE_RGMII_ID:
case PHY_INTERFACE_MODE_RGMII:
case PHY_INTERFACE_MODE_PSGMII:
case PHY_INTERFACE_MODE_QSGMII:
case PHY_INTERFACE_MODE_QUSGMII:
case PHY_INTERFACE_MODE_SGMII:
case PHY_INTERFACE_MODE_GMII:
return SPEED_1000;
case PHY_INTERFACE_MODE_2500BASEX:
case PHY_INTERFACE_MODE_2500SGMII:
case PHY_INTERFACE_MODE_10G_QXGMII:
return SPEED_2500;
case PHY_INTERFACE_MODE_5GBASER:
return SPEED_5000;
case PHY_INTERFACE_MODE_XGMII:
case PHY_INTERFACE_MODE_RXAUI:
case PHY_INTERFACE_MODE_XAUI:
case PHY_INTERFACE_MODE_10GBASER:
case PHY_INTERFACE_MODE_10GKR:
case PHY_INTERFACE_MODE_USXGMII:
return SPEED_10000;
case PHY_INTERFACE_MODE_25GBASER:
case PHY_INTERFACE_MODE_25GKR:
return SPEED_25000;
case PHY_INTERFACE_MODE_XLGMII:
case PHY_INTERFACE_MODE_40GKR4:
return SPEED_40000;
case PHY_INTERFACE_MODE_INTERNAL:
case PHY_INTERFACE_MODE_NA:
case PHY_INTERFACE_MODE_MAX:
/* No idea! Garbage in, unknown out */
return SPEED_UNKNOWN;
}
/* If we get here, someone forgot to add an interface mode above */
WARN_ON_ONCE(1);
return SPEED_UNKNOWN;
}
/**
* phylink_caps_to_linkmodes() - Convert capabilities to ethtool link modes
* @linkmodes: ethtool linkmode mask (must be already initialised)

View File

@ -605,6 +605,80 @@ void pcs_link_up(struct phylink_pcs *pcs, unsigned int neg_mode,
phy_interface_t interface, int speed, int duplex);
#endif
/**
* phylink_interface_max_speed() - get the maximum speed of a phy interface
* @interface: phy interface mode defined by &typedef phy_interface_t
*
* Determine the maximum speed of a phy interface. This is intended to help
* determine the correct speed to pass to the MAC when the phy is performing
* rate matching.
*
* Return: The maximum speed of @interface
*/
static inline int phylink_interface_max_speed(phy_interface_t interface)
{
switch (interface) {
case PHY_INTERFACE_MODE_100BASEX:
case PHY_INTERFACE_MODE_REVRMII:
case PHY_INTERFACE_MODE_RMII:
case PHY_INTERFACE_MODE_SMII:
case PHY_INTERFACE_MODE_REVMII:
case PHY_INTERFACE_MODE_MII:
return SPEED_100;
case PHY_INTERFACE_MODE_TBI:
case PHY_INTERFACE_MODE_MOCA:
case PHY_INTERFACE_MODE_RTBI:
case PHY_INTERFACE_MODE_1000BASEX:
case PHY_INTERFACE_MODE_1000BASEKX:
case PHY_INTERFACE_MODE_TRGMII:
case PHY_INTERFACE_MODE_RGMII_TXID:
case PHY_INTERFACE_MODE_RGMII_RXID:
case PHY_INTERFACE_MODE_RGMII_ID:
case PHY_INTERFACE_MODE_RGMII:
case PHY_INTERFACE_MODE_PSGMII:
case PHY_INTERFACE_MODE_QSGMII:
case PHY_INTERFACE_MODE_QUSGMII:
case PHY_INTERFACE_MODE_SGMII:
case PHY_INTERFACE_MODE_GMII:
return SPEED_1000;
case PHY_INTERFACE_MODE_2500BASEX:
case PHY_INTERFACE_MODE_2500SGMII:
case PHY_INTERFACE_MODE_10G_QXGMII:
return SPEED_2500;
case PHY_INTERFACE_MODE_5GBASER:
return SPEED_5000;
case PHY_INTERFACE_MODE_XGMII:
case PHY_INTERFACE_MODE_RXAUI:
case PHY_INTERFACE_MODE_XAUI:
case PHY_INTERFACE_MODE_10GBASER:
case PHY_INTERFACE_MODE_10GKR:
case PHY_INTERFACE_MODE_USXGMII:
return SPEED_10000;
case PHY_INTERFACE_MODE_25GBASER:
case PHY_INTERFACE_MODE_25GKR:
return SPEED_25000;
case PHY_INTERFACE_MODE_XLGMII:
case PHY_INTERFACE_MODE_40GKR4:
return SPEED_40000;
case PHY_INTERFACE_MODE_INTERNAL:
case PHY_INTERFACE_MODE_NA:
case PHY_INTERFACE_MODE_MAX:
/* No idea! Garbage in, unknown out */
return SPEED_UNKNOWN;
}
/* If we get here, someone forgot to add an interface mode above */
WARN_ON_ONCE(1);
return SPEED_UNKNOWN;
}
void phylink_caps_to_linkmodes(unsigned long *linkmodes, unsigned long caps);
unsigned long phylink_get_capabilities(phy_interface_t interface,
unsigned long mac_capabilities,