/* TSO */
        unsigned long tx_tso_frames;
        unsigned long tx_tso_nfrags;
+       /* EST */
+       unsigned long mtl_est_cgce;
+       unsigned long mtl_est_hlbs;
+       unsigned long mtl_est_hlbf;
+       unsigned long mtl_est_btre;
+       unsigned long mtl_est_btrlm;
 };
 
 /* Safety Feature statistics exposed by ethtool */
 
 }
 
 void dwmac5_est_irq_status(void __iomem *ioaddr, struct net_device *dev,
-                         u32 txqcnt)
+                         struct stmmac_extra_stats *x, u32 txqcnt)
 {
        u32 status, value, feqn, hbfq, hbfs, btrl;
        u32 txqcnt_mask = (1 << txqcnt) - 1;
        if (status & CGCE) {
                /* Clear Interrupt */
                writel(CGCE, ioaddr + MTL_EST_STATUS);
+
+               x->mtl_est_cgce++;
        }
 
        if (status & HLBS) {
                value = readl(ioaddr + MTL_EST_SCH_ERR);
                value &= txqcnt_mask;
 
+               x->mtl_est_hlbs++;
+
                /* Clear Interrupt */
                writel(value, ioaddr + MTL_EST_SCH_ERR);
 
                hbfq = (value & SZ_CAP_HBFQ_MASK(txqcnt)) >> SZ_CAP_HBFQ_SHIFT;
                hbfs = value & SZ_CAP_HBFS_MASK;
 
+               x->mtl_est_hlbf++;
+
                /* Clear Interrupt */
                writel(feqn, ioaddr + MTL_EST_FRM_SZ_ERR);
 
        }
 
        if (status & BTRE) {
+               if ((status & BTRL) == BTRL_MAX)
+                       x->mtl_est_btrlm++;
+               else
+                       x->mtl_est_btre++;
+
                btrl = (status & BTRL) >> BTRL_SHIFT;
 
                if (net_ratelimit())
 
 int dwmac5_est_configure(void __iomem *ioaddr, struct stmmac_est *cfg,
                         unsigned int ptp_rate);
 void dwmac5_est_irq_status(void __iomem *ioaddr, struct net_device *dev,
-                          u32 txqcnt);
+                          struct stmmac_extra_stats *x, u32 txqcnt);
 void dwmac5_fpe_configure(void __iomem *ioaddr, u32 num_txq, u32 num_rxq,
                          bool enable);
 
 
        int (*est_configure)(void __iomem *ioaddr, struct stmmac_est *cfg,
                             unsigned int ptp_rate);
        void (*est_irq_status)(void __iomem *ioaddr, struct net_device *dev,
-                              u32 txqcnt);
+                              struct stmmac_extra_stats *x, u32 txqcnt);
        void (*fpe_configure)(void __iomem *ioaddr, u32 num_txq, u32 num_rxq,
                              bool enable);
 };
 
        /* TSO */
        STMMAC_STAT(tx_tso_frames),
        STMMAC_STAT(tx_tso_nfrags),
+       /* EST */
+       STMMAC_STAT(mtl_est_cgce),
+       STMMAC_STAT(mtl_est_hlbs),
+       STMMAC_STAT(mtl_est_hlbf),
+       STMMAC_STAT(mtl_est_btre),
+       STMMAC_STAT(mtl_est_btrlm),
 };
 #define STMMAC_STATS_LEN ARRAY_SIZE(stmmac_gstrings_stats)
 
 
                return IRQ_HANDLED;
 
        if (priv->dma_cap.estsel)
-               stmmac_est_irq_status(priv, priv->ioaddr, priv->dev, tx_cnt);
+               stmmac_est_irq_status(priv, priv->ioaddr, priv->dev,
+                                     &priv->xstats, tx_cnt);
 
        /* To handle GMAC own interrupts */
        if ((priv->plat->has_gmac) || xmac) {