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: Michael Sit Wei Hong <michael.wei.hong.sit@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Michael Sit Wei Hong 2021-05-17 17:43:32 +08:00 committed by David S. Miller
parent 7617af3d1a
commit e80fe71b3f
4 changed files with 20 additions and 0 deletions

View file

@ -429,6 +429,17 @@ static int intel_mgbe_common_data(struct pci_dev *pdev,
plat->force_sf_dma_mode = 0;
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;
for (i = 0; i < plat->rx_queues_to_use; i++) {

View file

@ -623,6 +623,8 @@ struct stmmac_mmc_ops {
stmmac_do_callback(__priv, xpcs, link_up, __args)
#define stmmac_xpcs_probe(__priv, __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 {
u32 ptp_off;

View file

@ -720,6 +720,12 @@ static int stmmac_ethtool_op_set_eee(struct net_device *dev,
netdev_warn(priv->dev,
"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)
stmmac_disable_eee_mode(priv);

View file

@ -223,6 +223,7 @@ struct plat_stmmacenet_data {
struct clk *clk_ptp_ref;
unsigned int clk_ptp_rate;
unsigned int clk_ref_rate;
unsigned int mult_fact_100ns;
s32 ptp_max_adj;
struct reset_control *stmmac_rst;
struct stmmac_axi *axi;