mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 15:03:52 +08:00
Merge branch 'net-stmmac-further-cleanups'
Russell King says: ==================== net: stmmac: further cleanups This small series does further cleanups to the stmmac driver: 1. Name priv->pause to indicate that it's a timeout and clarify the units of the "pause" module parameter 2. Remove useless priv->flow_ctrl member and deprecate the useless "flow_ctrl" module parameter 3. Fix long-standing signed-ness issue with "speed" passed around the driver from the mac_link_up method. ==================== Link: https://patch.msgid.link/Z7Rf2daOaf778TOg@shell.armlinux.org.uk Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -141,7 +141,7 @@ static int dwc_qos_probe(struct platform_device *pdev,
|
||||
#define AUTO_CAL_STATUS 0x880c
|
||||
#define AUTO_CAL_STATUS_ACTIVE BIT(31)
|
||||
|
||||
static void tegra_eqos_fix_speed(void *priv, unsigned int speed, unsigned int mode)
|
||||
static void tegra_eqos_fix_speed(void *priv, int speed, unsigned int mode)
|
||||
{
|
||||
struct tegra_eqos *eqos = priv;
|
||||
bool needs_calibration = false;
|
||||
@@ -160,7 +160,7 @@ static void tegra_eqos_fix_speed(void *priv, unsigned int speed, unsigned int mo
|
||||
break;
|
||||
|
||||
default:
|
||||
dev_err(eqos->dev, "invalid speed %u\n", speed);
|
||||
dev_err(eqos->dev, "invalid speed %d\n", speed);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ struct imx_dwmac_ops {
|
||||
|
||||
int (*fix_soc_reset)(void *priv, void __iomem *ioaddr);
|
||||
int (*set_intf_mode)(struct plat_stmmacenet_data *plat_dat);
|
||||
void (*fix_mac_speed)(void *priv, unsigned int speed, unsigned int mode);
|
||||
void (*fix_mac_speed)(void *priv, int speed, unsigned int mode);
|
||||
};
|
||||
|
||||
struct imx_priv_data {
|
||||
@@ -192,7 +192,7 @@ static void imx_dwmac_exit(struct platform_device *pdev, void *priv)
|
||||
/* nothing to do now */
|
||||
}
|
||||
|
||||
static void imx_dwmac_fix_speed(void *priv, unsigned int speed, unsigned int mode)
|
||||
static void imx_dwmac_fix_speed(void *priv, int speed, unsigned int mode)
|
||||
{
|
||||
struct plat_stmmacenet_data *plat_dat;
|
||||
struct imx_priv_data *dwmac = priv;
|
||||
@@ -208,7 +208,7 @@ static void imx_dwmac_fix_speed(void *priv, unsigned int speed, unsigned int mod
|
||||
|
||||
rate = rgmii_clock(speed);
|
||||
if (rate < 0) {
|
||||
dev_err(dwmac->dev, "invalid speed %u\n", speed);
|
||||
dev_err(dwmac->dev, "invalid speed %d\n", speed);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -217,7 +217,7 @@ static void imx_dwmac_fix_speed(void *priv, unsigned int speed, unsigned int mod
|
||||
dev_err(dwmac->dev, "failed to set tx rate %lu\n", rate);
|
||||
}
|
||||
|
||||
static void imx93_dwmac_fix_speed(void *priv, unsigned int speed, unsigned int mode)
|
||||
static void imx93_dwmac_fix_speed(void *priv, int speed, unsigned int mode)
|
||||
{
|
||||
struct imx_priv_data *dwmac = priv;
|
||||
unsigned int iface;
|
||||
|
||||
@@ -22,13 +22,13 @@ struct intel_dwmac {
|
||||
};
|
||||
|
||||
struct intel_dwmac_data {
|
||||
void (*fix_mac_speed)(void *priv, unsigned int speed, unsigned int mode);
|
||||
void (*fix_mac_speed)(void *priv, int speed, unsigned int mode);
|
||||
unsigned long ptp_ref_clk_rate;
|
||||
unsigned long tx_clk_rate;
|
||||
bool tx_clk_en;
|
||||
};
|
||||
|
||||
static void kmb_eth_fix_mac_speed(void *priv, unsigned int speed, unsigned int mode)
|
||||
static void kmb_eth_fix_mac_speed(void *priv, int speed, unsigned int mode)
|
||||
{
|
||||
struct intel_dwmac *dwmac = priv;
|
||||
long rate;
|
||||
|
||||
@@ -112,7 +112,7 @@ struct ipq806x_gmac {
|
||||
phy_interface_t phy_mode;
|
||||
};
|
||||
|
||||
static int get_clk_div_sgmii(struct ipq806x_gmac *gmac, unsigned int speed)
|
||||
static int get_clk_div_sgmii(struct ipq806x_gmac *gmac, int speed)
|
||||
{
|
||||
struct device *dev = &gmac->pdev->dev;
|
||||
int div;
|
||||
@@ -138,7 +138,7 @@ static int get_clk_div_sgmii(struct ipq806x_gmac *gmac, unsigned int speed)
|
||||
return div;
|
||||
}
|
||||
|
||||
static int get_clk_div_rgmii(struct ipq806x_gmac *gmac, unsigned int speed)
|
||||
static int get_clk_div_rgmii(struct ipq806x_gmac *gmac, int speed)
|
||||
{
|
||||
struct device *dev = &gmac->pdev->dev;
|
||||
int div;
|
||||
@@ -164,7 +164,7 @@ static int get_clk_div_rgmii(struct ipq806x_gmac *gmac, unsigned int speed)
|
||||
return div;
|
||||
}
|
||||
|
||||
static int ipq806x_gmac_set_speed(struct ipq806x_gmac *gmac, unsigned int speed)
|
||||
static int ipq806x_gmac_set_speed(struct ipq806x_gmac *gmac, int speed)
|
||||
{
|
||||
uint32_t clk_bits, val;
|
||||
int div;
|
||||
@@ -260,7 +260,7 @@ static int ipq806x_gmac_of_parse(struct ipq806x_gmac *gmac)
|
||||
return PTR_ERR_OR_ZERO(gmac->qsgmii_csr);
|
||||
}
|
||||
|
||||
static void ipq806x_gmac_fix_mac_speed(void *priv, unsigned int speed, unsigned int mode)
|
||||
static void ipq806x_gmac_fix_mac_speed(void *priv, int speed, unsigned int mode)
|
||||
{
|
||||
struct ipq806x_gmac *gmac = priv;
|
||||
|
||||
|
||||
@@ -149,8 +149,7 @@ static struct stmmac_pci_info loongson_gmac_pci_info = {
|
||||
.setup = loongson_gmac_data,
|
||||
};
|
||||
|
||||
static void loongson_gnet_fix_speed(void *priv, unsigned int speed,
|
||||
unsigned int mode)
|
||||
static void loongson_gnet_fix_speed(void *priv, int speed, unsigned int mode)
|
||||
{
|
||||
struct loongson_data *ld = (struct loongson_data *)priv;
|
||||
struct net_device *ndev = dev_get_drvdata(ld->dev);
|
||||
|
||||
@@ -22,7 +22,7 @@ struct meson_dwmac {
|
||||
void __iomem *reg;
|
||||
};
|
||||
|
||||
static void meson6_dwmac_fix_mac_speed(void *priv, unsigned int speed, unsigned int mode)
|
||||
static void meson6_dwmac_fix_mac_speed(void *priv, int speed, unsigned int mode)
|
||||
{
|
||||
struct meson_dwmac *dwmac = priv;
|
||||
unsigned int val;
|
||||
|
||||
@@ -111,7 +111,7 @@ struct qcom_ethqos {
|
||||
unsigned int link_clk_rate;
|
||||
struct clk *link_clk;
|
||||
struct phy *serdes_phy;
|
||||
unsigned int speed;
|
||||
int speed;
|
||||
int serdes_speed;
|
||||
phy_interface_t phy_mode;
|
||||
|
||||
@@ -175,7 +175,7 @@ static void rgmii_dump(void *priv)
|
||||
#define RGMII_ID_MODE_10_LOW_SVS_CLK_FREQ (5 * 1000 * 1000UL)
|
||||
|
||||
static void
|
||||
ethqos_update_link_clk(struct qcom_ethqos *ethqos, unsigned int speed)
|
||||
ethqos_update_link_clk(struct qcom_ethqos *ethqos, int speed)
|
||||
{
|
||||
if (!phy_interface_mode_is_rgmii(ethqos->phy_mode))
|
||||
return;
|
||||
@@ -699,7 +699,7 @@ static int ethqos_configure(struct qcom_ethqos *ethqos)
|
||||
return ethqos->configure_func(ethqos);
|
||||
}
|
||||
|
||||
static void ethqos_fix_mac_speed(void *priv, unsigned int speed, unsigned int mode)
|
||||
static void ethqos_fix_mac_speed(void *priv, int speed, unsigned int mode)
|
||||
{
|
||||
struct qcom_ethqos *ethqos = priv;
|
||||
|
||||
|
||||
@@ -1920,7 +1920,7 @@ static void rk_gmac_powerdown(struct rk_priv_data *gmac)
|
||||
gmac_clk_enable(gmac, false);
|
||||
}
|
||||
|
||||
static void rk_fix_speed(void *priv, unsigned int speed, unsigned int mode)
|
||||
static void rk_fix_speed(void *priv, int speed, unsigned int mode)
|
||||
{
|
||||
struct rk_priv_data *bsp_priv = priv;
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
|
||||
@@ -100,7 +100,7 @@ static void s32_gmac_exit(struct platform_device *pdev, void *priv)
|
||||
clk_disable_unprepare(gmac->rx_clk);
|
||||
}
|
||||
|
||||
static void s32_fix_mac_speed(void *priv, unsigned int speed, unsigned int mode)
|
||||
static void s32_fix_mac_speed(void *priv, int speed, unsigned int mode)
|
||||
{
|
||||
struct s32_priv_data *gmac = priv;
|
||||
long tx_clk_rate;
|
||||
|
||||
@@ -61,7 +61,7 @@ struct socfpga_dwmac {
|
||||
struct mdio_device *pcs_mdiodev;
|
||||
};
|
||||
|
||||
static void socfpga_dwmac_fix_mac_speed(void *priv, unsigned int speed, unsigned int mode)
|
||||
static void socfpga_dwmac_fix_mac_speed(void *priv, int speed, unsigned int mode)
|
||||
{
|
||||
struct socfpga_dwmac *dwmac = (struct socfpga_dwmac *)priv;
|
||||
void __iomem *splitter_base = dwmac->splitter_base;
|
||||
|
||||
@@ -31,7 +31,7 @@ struct starfive_dwmac {
|
||||
const struct starfive_dwmac_data *data;
|
||||
};
|
||||
|
||||
static void starfive_dwmac_fix_mac_speed(void *priv, unsigned int speed, unsigned int mode)
|
||||
static void starfive_dwmac_fix_mac_speed(void *priv, int speed, unsigned int mode)
|
||||
{
|
||||
struct starfive_dwmac *dwmac = priv;
|
||||
long rate;
|
||||
@@ -39,7 +39,7 @@ static void starfive_dwmac_fix_mac_speed(void *priv, unsigned int speed, unsigne
|
||||
|
||||
rate = rgmii_clock(speed);
|
||||
if (rate < 0) {
|
||||
dev_err(dwmac->dev, "invalid speed %u\n", speed);
|
||||
dev_err(dwmac->dev, "invalid speed %d\n", speed);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -99,12 +99,12 @@ struct sti_dwmac {
|
||||
int clk_sel_reg; /* GMAC ext clk selection register */
|
||||
struct regmap *regmap;
|
||||
bool gmac_en;
|
||||
u32 speed;
|
||||
void (*fix_retime_src)(void *priv, unsigned int speed, unsigned int mode);
|
||||
int speed;
|
||||
void (*fix_retime_src)(void *priv, int speed, unsigned int mode);
|
||||
};
|
||||
|
||||
struct sti_dwmac_of_data {
|
||||
void (*fix_retime_src)(void *priv, unsigned int speed, unsigned int mode);
|
||||
void (*fix_retime_src)(void *priv, int speed, unsigned int mode);
|
||||
};
|
||||
|
||||
static u32 phy_intf_sels[] = {
|
||||
@@ -132,7 +132,7 @@ static u32 stih4xx_tx_retime_val[] = {
|
||||
| STIH4XX_ETH_SEL_INTERNAL_NOTEXT_PHYCLK,
|
||||
};
|
||||
|
||||
static void stih4xx_fix_retime_src(void *priv, u32 spd, unsigned int mode)
|
||||
static void stih4xx_fix_retime_src(void *priv, int spd, unsigned int mode)
|
||||
{
|
||||
struct sti_dwmac *dwmac = priv;
|
||||
u32 src = dwmac->tx_retime_src;
|
||||
|
||||
@@ -72,7 +72,7 @@ static void sun7i_gmac_exit(struct platform_device *pdev, void *priv)
|
||||
regulator_disable(gmac->regulator);
|
||||
}
|
||||
|
||||
static void sun7i_fix_speed(void *priv, unsigned int speed, unsigned int mode)
|
||||
static void sun7i_fix_speed(void *priv, int speed, unsigned int mode)
|
||||
{
|
||||
struct sunxi_priv_data *gmac = priv;
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@ static int thead_dwmac_set_txclk_dir(struct plat_stmmacenet_data *plat)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void thead_dwmac_fix_speed(void *priv, unsigned int speed, unsigned int mode)
|
||||
static void thead_dwmac_fix_speed(void *priv, int speed, unsigned int mode)
|
||||
{
|
||||
struct plat_stmmacenet_data *plat;
|
||||
struct thead_dwmac *dwmac = priv;
|
||||
@@ -142,7 +142,7 @@ static void thead_dwmac_fix_speed(void *priv, unsigned int speed, unsigned int m
|
||||
div = rate * 10 / GMAC_MII_RATE;
|
||||
break;
|
||||
default:
|
||||
dev_err(dwmac->dev, "invalid speed %u\n", speed);
|
||||
dev_err(dwmac->dev, "invalid speed %d\n", speed);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ struct visconti_eth {
|
||||
spinlock_t lock; /* lock to protect register update */
|
||||
};
|
||||
|
||||
static void visconti_eth_fix_mac_speed(void *priv, unsigned int speed, unsigned int mode)
|
||||
static void visconti_eth_fix_mac_speed(void *priv, int speed, unsigned int mode)
|
||||
{
|
||||
struct visconti_eth *dwmac = priv;
|
||||
struct net_device *netdev = dev_get_drvdata(dwmac->dev);
|
||||
|
||||
@@ -282,8 +282,7 @@ struct stmmac_priv {
|
||||
struct stmmac_channel channel[STMMAC_CH_MAX];
|
||||
|
||||
int speed;
|
||||
unsigned int flow_ctrl;
|
||||
unsigned int pause;
|
||||
unsigned int pause_time;
|
||||
struct mii_bus *mii;
|
||||
|
||||
struct phylink_config phylink_config;
|
||||
|
||||
@@ -88,13 +88,13 @@ MODULE_PARM_DESC(phyaddr, "Physical device address");
|
||||
#define STMMAC_XDP_TX BIT(1)
|
||||
#define STMMAC_XDP_REDIRECT BIT(2)
|
||||
|
||||
static int flow_ctrl = FLOW_AUTO;
|
||||
static int flow_ctrl = 0xdead;
|
||||
module_param(flow_ctrl, int, 0644);
|
||||
MODULE_PARM_DESC(flow_ctrl, "Flow control ability [on/off]");
|
||||
MODULE_PARM_DESC(flow_ctrl, "Flow control ability [on/off] (obsolete)");
|
||||
|
||||
static int pause = PAUSE_TIME;
|
||||
module_param(pause, int, 0644);
|
||||
MODULE_PARM_DESC(pause, "Flow Control Pause Time");
|
||||
MODULE_PARM_DESC(pause, "Flow Control Pause Time (units of 512 bit times)");
|
||||
|
||||
#define TC_DEFAULT 64
|
||||
static int tc = TC_DEFAULT;
|
||||
@@ -188,12 +188,11 @@ static void stmmac_verify_args(void)
|
||||
watchdog = TX_TIMEO;
|
||||
if (unlikely((buf_sz < DEFAULT_BUFSIZE) || (buf_sz > BUF_SIZE_16KiB)))
|
||||
buf_sz = DEFAULT_BUFSIZE;
|
||||
if (unlikely(flow_ctrl > 1))
|
||||
flow_ctrl = FLOW_AUTO;
|
||||
else if (likely(flow_ctrl < 0))
|
||||
flow_ctrl = FLOW_OFF;
|
||||
if (unlikely((pause < 0) || (pause > 0xffff)))
|
||||
pause = PAUSE_TIME;
|
||||
|
||||
if (flow_ctrl != 0xdead)
|
||||
pr_warn("stmmac: module parameter 'flow_ctrl' is obsolete - please remove from your module configuration\n");
|
||||
}
|
||||
|
||||
static void __stmmac_disable_all_queues(struct stmmac_priv *priv)
|
||||
@@ -858,14 +857,16 @@ static void stmmac_release_ptp(struct stmmac_priv *priv)
|
||||
* stmmac_mac_flow_ctrl - Configure flow control in all queues
|
||||
* @priv: driver private structure
|
||||
* @duplex: duplex passed to the next function
|
||||
* @flow_ctrl: desired flow control modes
|
||||
* Description: It is used for configuring the flow control in all queues
|
||||
*/
|
||||
static void stmmac_mac_flow_ctrl(struct stmmac_priv *priv, u32 duplex)
|
||||
static void stmmac_mac_flow_ctrl(struct stmmac_priv *priv, u32 duplex,
|
||||
unsigned int flow_ctrl)
|
||||
{
|
||||
u32 tx_cnt = priv->plat->tx_queues_to_use;
|
||||
|
||||
stmmac_flow_ctrl(priv, priv->hw, duplex, priv->flow_ctrl,
|
||||
priv->pause, tx_cnt);
|
||||
stmmac_flow_ctrl(priv, priv->hw, duplex, flow_ctrl, priv->pause_time,
|
||||
tx_cnt);
|
||||
}
|
||||
|
||||
static unsigned long stmmac_mac_get_caps(struct phylink_config *config,
|
||||
@@ -925,6 +926,7 @@ static void stmmac_mac_link_up(struct phylink_config *config,
|
||||
bool tx_pause, bool rx_pause)
|
||||
{
|
||||
struct stmmac_priv *priv = netdev_priv(to_net_dev(config->dev));
|
||||
unsigned int flow_ctrl;
|
||||
u32 old_ctrl, ctrl;
|
||||
|
||||
if ((priv->plat->flags & STMMAC_FLAG_SERDES_UP_AFTER_PHY_LINKUP) &&
|
||||
@@ -1005,15 +1007,15 @@ static void stmmac_mac_link_up(struct phylink_config *config,
|
||||
|
||||
/* Flow Control operation */
|
||||
if (rx_pause && tx_pause)
|
||||
priv->flow_ctrl = FLOW_AUTO;
|
||||
flow_ctrl = FLOW_AUTO;
|
||||
else if (rx_pause && !tx_pause)
|
||||
priv->flow_ctrl = FLOW_RX;
|
||||
flow_ctrl = FLOW_RX;
|
||||
else if (!rx_pause && tx_pause)
|
||||
priv->flow_ctrl = FLOW_TX;
|
||||
flow_ctrl = FLOW_TX;
|
||||
else
|
||||
priv->flow_ctrl = FLOW_OFF;
|
||||
flow_ctrl = FLOW_OFF;
|
||||
|
||||
stmmac_mac_flow_ctrl(priv, duplex);
|
||||
stmmac_mac_flow_ctrl(priv, duplex, flow_ctrl);
|
||||
|
||||
if (ctrl != old_ctrl)
|
||||
writel(ctrl, priv->ioaddr + MAC_CTRL_REG);
|
||||
@@ -7404,7 +7406,7 @@ int stmmac_dvr_probe(struct device *device,
|
||||
return -ENOMEM;
|
||||
|
||||
stmmac_set_ethtool_ops(ndev);
|
||||
priv->pause = pause;
|
||||
priv->pause_time = pause;
|
||||
priv->plat = plat_dat;
|
||||
priv->ioaddr = res->addr;
|
||||
priv->dev->base_addr = (unsigned long)res->addr;
|
||||
@@ -7600,9 +7602,6 @@ int stmmac_dvr_probe(struct device *device,
|
||||
"%s: warning: maxmtu having invalid value (%d)\n",
|
||||
__func__, priv->plat->maxmtu);
|
||||
|
||||
if (flow_ctrl)
|
||||
priv->flow_ctrl = FLOW_AUTO; /* RX/TX pause on */
|
||||
|
||||
ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
|
||||
|
||||
/* Setup channels NAPI */
|
||||
|
||||
@@ -231,7 +231,7 @@ struct plat_stmmacenet_data {
|
||||
u8 tx_sched_algorithm;
|
||||
struct stmmac_rxq_cfg rx_queues_cfg[MTL_MAX_RX_QUEUES];
|
||||
struct stmmac_txq_cfg tx_queues_cfg[MTL_MAX_TX_QUEUES];
|
||||
void (*fix_mac_speed)(void *priv, unsigned int speed, unsigned int mode);
|
||||
void (*fix_mac_speed)(void *priv, int speed, unsigned int mode);
|
||||
int (*fix_soc_reset)(void *priv, void __iomem *ioaddr);
|
||||
int (*serdes_powerup)(struct net_device *ndev, void *priv);
|
||||
void (*serdes_powerdown)(struct net_device *ndev, void *priv);
|
||||
|
||||
Reference in New Issue
Block a user