Commit e80fe71b authored by Michael Sit Wei Hong's avatar Michael Sit Wei Hong Committed by David S. Miller

net: stmmac: Add callbacks for DWC xpcs Energy Efficient Ethernet

Link xpcs callback functions for MAC to configure the xpcs EEE feature.

The clk_eee frequency is used to calculate the MULT_FACT_100NS. This is
to adjust the clock tic closer to 100ns.
Signed-off-by: default avatarMichael Sit Wei Hong <michael.wei.hong.sit@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7617af3d
...@@ -429,6 +429,17 @@ static int intel_mgbe_common_data(struct pci_dev *pdev, ...@@ -429,6 +429,17 @@ static int intel_mgbe_common_data(struct pci_dev *pdev,
plat->force_sf_dma_mode = 0; plat->force_sf_dma_mode = 0;
plat->tso_en = 1; plat->tso_en = 1;
/* Multiplying factor to the clk_eee_i clock time
* period to make it closer to 100 ns. This value
* should be programmed such that the clk_eee_time_period *
* (MULT_FACT_100NS + 1) should be within 80 ns to 120 ns
* clk_eee frequency is 19.2Mhz
* clk_eee_time_period is 52ns
* 52ns * (1 + 1) = 104ns
* MULT_FACT_100NS = 1
*/
plat->mult_fact_100ns = 1;
plat->rx_sched_algorithm = MTL_RX_ALGORITHM_SP; plat->rx_sched_algorithm = MTL_RX_ALGORITHM_SP;
for (i = 0; i < plat->rx_queues_to_use; i++) { for (i = 0; i < plat->rx_queues_to_use; i++) {
......
...@@ -623,6 +623,8 @@ struct stmmac_mmc_ops { ...@@ -623,6 +623,8 @@ struct stmmac_mmc_ops {
stmmac_do_callback(__priv, xpcs, link_up, __args) stmmac_do_callback(__priv, xpcs, link_up, __args)
#define stmmac_xpcs_probe(__priv, __args...) \ #define stmmac_xpcs_probe(__priv, __args...) \
stmmac_do_callback(__priv, xpcs, probe, __args) stmmac_do_callback(__priv, xpcs, probe, __args)
#define stmmac_xpcs_config_eee(__priv, __args...) \
stmmac_do_callback(__priv, xpcs, config_eee, __args)
struct stmmac_regs_off { struct stmmac_regs_off {
u32 ptp_off; u32 ptp_off;
......
...@@ -720,6 +720,12 @@ static int stmmac_ethtool_op_set_eee(struct net_device *dev, ...@@ -720,6 +720,12 @@ static int stmmac_ethtool_op_set_eee(struct net_device *dev,
netdev_warn(priv->dev, netdev_warn(priv->dev,
"Setting EEE tx-lpi is not supported\n"); "Setting EEE tx-lpi is not supported\n");
ret = stmmac_xpcs_config_eee(priv, &priv->hw->xpcs_args,
priv->plat->mult_fact_100ns,
edata->eee_enabled);
if (ret)
return ret;
if (!edata->eee_enabled) if (!edata->eee_enabled)
stmmac_disable_eee_mode(priv); stmmac_disable_eee_mode(priv);
......
...@@ -223,6 +223,7 @@ struct plat_stmmacenet_data { ...@@ -223,6 +223,7 @@ struct plat_stmmacenet_data {
struct clk *clk_ptp_ref; struct clk *clk_ptp_ref;
unsigned int clk_ptp_rate; unsigned int clk_ptp_rate;
unsigned int clk_ref_rate; unsigned int clk_ref_rate;
unsigned int mult_fact_100ns;
s32 ptp_max_adj; s32 ptp_max_adj;
struct reset_control *stmmac_rst; struct reset_control *stmmac_rst;
struct stmmac_axi *axi; struct stmmac_axi *axi;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment