net: stmmac: Add callbacks for DWC xpcs Energy Efficient Ethernet
authorMichael Sit Wei Hong <michael.wei.hong.sit@intel.com>
Mon, 17 May 2021 09:43:32 +0000 (17:43 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 17 May 2021 22:53:58 +0000 (15:53 -0700)
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>
drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c
drivers/net/ethernet/stmicro/stmmac/hwif.h
drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c
include/linux/stmmac.h

index 80728a4c0e3f0072782b3abcf7d5d6e056546a3b..e36a8cc59ad0a232203b4de79d82c4e1bcb4e326 100644 (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++) {
index 6d5e0f2b03ce36cde300afe0f391be8c6c6dd815..75a8b90c202a18a519766b9ceca5d33ff370e905 100644 (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;
index 61b11639ee0cc4fc5450b181f95e8ed923b4cc80..1f6d749fd9a3d232c969003353f23ba8284ded21 100644 (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);
 
index 0db36360ef21676fc70a30c92588f0445a5c62d3..e14a12df381bc11be0c964e12f407200b7b3a3b2 100644 (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;