mirror of
https://github.com/torvalds/linux.git
synced 2024-12-06 19:11:31 +00:00
Merge branch 'net-stmmac-fix-mac-capabilities-procedure'
Serge Semin says: ==================== net: stmmac: Fix MAC-capabilities procedure The series got born as a result of the discussions around the recent Yanteng' series adding the Loongson LS7A1000, LS2K1000, LS7A2000, LS2K2000 MACs support: Link: https://lore.kernel.org/netdev/fu3f6uoakylnb6eijllakeu5i4okcyqq7sfafhp5efaocbsrwe@w74xe7gb6x7p In particular the Yanteng' patchset needed to implement the Loongson MAC-specific constraints applied to the link speed and link duplex mode. As a result of the discussion with Russel the next preliminary patch was born: Link: https://lore.kernel.org/netdev/df31e8bcf74b3b4ddb7ddf5a1c371390f16a2ad5.1712917541.git.siyanteng@loongson.cn The patch above was a temporal solution utilized by Yanteng for further developments and to move on with the on-going review. This patchset is a refactored version of that single patch with formatting required for the fixes patches. The main part of the series has already been merged in on v1 stage. The leftover is the cleanup patches which rename stmmac_ops::phylink_get_caps() callback to stmmac_ops::update_caps() and move the MAC-capabilities init/re-init to the phylink MAC-capabilities getter. Link: https://lore.kernel.org/netdev/20240412180340.7965-1-fancer.lancer@gmail.com/ Changelog v2: - Add a new patch (Romain): [PATCH net-next v2 1/2] net: stmmac: Rename phylink_get_caps() callback to update_caps() - Resubmit the leftover patches to net-next tree (Paolo). Link: https://lore.kernel.org/netdev/20240417140013.12575-1-fancer.lancer@gmail.com/ Changelog v3: - Just resubmit (Jakub). Signed-off-by: Serge Semin <fancer.lancer@gmail.com> ==================== Link: https://lore.kernel.org/r/20240419090357.5547-1-fancer.lancer@gmail.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
commit
57f1591248
@ -68,7 +68,7 @@ static void dwmac4_core_init(struct mac_device_info *hw,
|
||||
init_waitqueue_head(&priv->tstamp_busy_wait);
|
||||
}
|
||||
|
||||
static void dwmac4_phylink_get_caps(struct stmmac_priv *priv)
|
||||
static void dwmac4_update_caps(struct stmmac_priv *priv)
|
||||
{
|
||||
if (priv->plat->tx_queues_to_use > 1)
|
||||
priv->hw->link.caps &= ~(MAC_10HD | MAC_100HD | MAC_1000HD);
|
||||
@ -1190,7 +1190,7 @@ static void dwmac4_set_hw_vlan_mode(struct mac_device_info *hw)
|
||||
|
||||
const struct stmmac_ops dwmac4_ops = {
|
||||
.core_init = dwmac4_core_init,
|
||||
.phylink_get_caps = dwmac4_phylink_get_caps,
|
||||
.update_caps = dwmac4_update_caps,
|
||||
.set_mac = stmmac_set_mac,
|
||||
.rx_ipc = dwmac4_rx_ipc_enable,
|
||||
.rx_queue_enable = dwmac4_rx_queue_enable,
|
||||
@ -1235,7 +1235,7 @@ const struct stmmac_ops dwmac4_ops = {
|
||||
|
||||
const struct stmmac_ops dwmac410_ops = {
|
||||
.core_init = dwmac4_core_init,
|
||||
.phylink_get_caps = dwmac4_phylink_get_caps,
|
||||
.update_caps = dwmac4_update_caps,
|
||||
.set_mac = stmmac_dwmac4_set_mac,
|
||||
.rx_ipc = dwmac4_rx_ipc_enable,
|
||||
.rx_queue_enable = dwmac4_rx_queue_enable,
|
||||
@ -1284,7 +1284,7 @@ const struct stmmac_ops dwmac410_ops = {
|
||||
|
||||
const struct stmmac_ops dwmac510_ops = {
|
||||
.core_init = dwmac4_core_init,
|
||||
.phylink_get_caps = dwmac4_phylink_get_caps,
|
||||
.update_caps = dwmac4_update_caps,
|
||||
.set_mac = stmmac_dwmac4_set_mac,
|
||||
.rx_ipc = dwmac4_rx_ipc_enable,
|
||||
.rx_queue_enable = dwmac4_rx_queue_enable,
|
||||
|
@ -308,8 +308,8 @@ struct stmmac_est;
|
||||
struct stmmac_ops {
|
||||
/* MAC core initialization */
|
||||
void (*core_init)(struct mac_device_info *hw, struct net_device *dev);
|
||||
/* Get phylink capabilities */
|
||||
void (*phylink_get_caps)(struct stmmac_priv *priv);
|
||||
/* Update MAC capabilities */
|
||||
void (*update_caps)(struct stmmac_priv *priv);
|
||||
/* Enable the MAC RX/TX */
|
||||
void (*set_mac)(void __iomem *ioaddr, bool enable);
|
||||
/* Enable and verify that the IPC module is supported */
|
||||
@ -430,8 +430,8 @@ struct stmmac_ops {
|
||||
|
||||
#define stmmac_core_init(__priv, __args...) \
|
||||
stmmac_do_void_callback(__priv, mac, core_init, __args)
|
||||
#define stmmac_mac_phylink_get_caps(__priv) \
|
||||
stmmac_do_void_callback(__priv, mac, phylink_get_caps, __priv)
|
||||
#define stmmac_mac_update_caps(__priv) \
|
||||
stmmac_do_void_callback(__priv, mac, update_caps, __priv)
|
||||
#define stmmac_mac_set(__priv, __args...) \
|
||||
stmmac_do_void_callback(__priv, mac, set_mac, __args)
|
||||
#define stmmac_rx_ipc(__priv, __args...) \
|
||||
|
@ -936,6 +936,22 @@ static void stmmac_mac_flow_ctrl(struct stmmac_priv *priv, u32 duplex)
|
||||
priv->pause, tx_cnt);
|
||||
}
|
||||
|
||||
static unsigned long stmmac_mac_get_caps(struct phylink_config *config,
|
||||
phy_interface_t interface)
|
||||
{
|
||||
struct stmmac_priv *priv = netdev_priv(to_net_dev(config->dev));
|
||||
|
||||
/* Refresh the MAC-specific capabilities */
|
||||
stmmac_mac_update_caps(priv);
|
||||
|
||||
config->mac_capabilities = priv->hw->link.caps;
|
||||
|
||||
if (priv->plat->max_speed)
|
||||
phylink_limit_mac_speed(config, priv->plat->max_speed);
|
||||
|
||||
return config->mac_capabilities;
|
||||
}
|
||||
|
||||
static struct phylink_pcs *stmmac_mac_select_pcs(struct phylink_config *config,
|
||||
phy_interface_t interface)
|
||||
{
|
||||
@ -1102,6 +1118,7 @@ static void stmmac_mac_link_up(struct phylink_config *config,
|
||||
}
|
||||
|
||||
static const struct phylink_mac_ops stmmac_phylink_mac_ops = {
|
||||
.mac_get_caps = stmmac_mac_get_caps,
|
||||
.mac_select_pcs = stmmac_mac_select_pcs,
|
||||
.mac_config = stmmac_mac_config,
|
||||
.mac_link_down = stmmac_mac_link_down,
|
||||
@ -1201,7 +1218,6 @@ static int stmmac_phy_setup(struct stmmac_priv *priv)
|
||||
int mode = priv->plat->phy_interface;
|
||||
struct fwnode_handle *fwnode;
|
||||
struct phylink *phylink;
|
||||
int max_speed;
|
||||
|
||||
priv->phylink_config.dev = &priv->dev->dev;
|
||||
priv->phylink_config.type = PHYLINK_NETDEV;
|
||||
@ -1225,15 +1241,6 @@ static int stmmac_phy_setup(struct stmmac_priv *priv)
|
||||
xpcs_get_interfaces(priv->hw->xpcs,
|
||||
priv->phylink_config.supported_interfaces);
|
||||
|
||||
/* Get the MAC specific capabilities */
|
||||
stmmac_mac_phylink_get_caps(priv);
|
||||
|
||||
priv->phylink_config.mac_capabilities = priv->hw->link.caps;
|
||||
|
||||
max_speed = priv->plat->max_speed;
|
||||
if (max_speed)
|
||||
phylink_limit_mac_speed(&priv->phylink_config, max_speed);
|
||||
|
||||
fwnode = priv->plat->port_node;
|
||||
if (!fwnode)
|
||||
fwnode = dev_fwnode(priv->device);
|
||||
@ -7329,7 +7336,6 @@ int stmmac_reinit_queues(struct net_device *dev, u32 rx_cnt, u32 tx_cnt)
|
||||
{
|
||||
struct stmmac_priv *priv = netdev_priv(dev);
|
||||
int ret = 0, i;
|
||||
int max_speed;
|
||||
|
||||
if (netif_running(dev))
|
||||
stmmac_release(dev);
|
||||
@ -7343,14 +7349,6 @@ int stmmac_reinit_queues(struct net_device *dev, u32 rx_cnt, u32 tx_cnt)
|
||||
priv->rss.table[i] = ethtool_rxfh_indir_default(i,
|
||||
rx_cnt);
|
||||
|
||||
stmmac_mac_phylink_get_caps(priv);
|
||||
|
||||
priv->phylink_config.mac_capabilities = priv->hw->link.caps;
|
||||
|
||||
max_speed = priv->plat->max_speed;
|
||||
if (max_speed)
|
||||
phylink_limit_mac_speed(&priv->phylink_config, max_speed);
|
||||
|
||||
stmmac_napi_add(dev);
|
||||
|
||||
if (netif_running(dev))
|
||||
|
Loading…
Reference in New Issue
Block a user