u16 globr_count;        /* Global reset count */
        u16 empr_count;         /* EMP reset count */
        u16 pfr_count;          /* PF reset count */
+       u32 link_down_events;
 
        u8 wol_ena : 1;         /* software state of WoL */
        u32 wakeup_reason;      /* last wakeup reason */
 
 #endif /* !CONFIG_DYNAMIC_DEBUG */
 }
 
+static void ice_get_link_ext_stats(struct net_device *netdev,
+                                  struct ethtool_link_ext_stats *stats)
+{
+       struct ice_netdev_priv *np = netdev_priv(netdev);
+       struct ice_pf *pf = np->vsi->back;
+
+       stats->link_down_events = pf->link_down_events;
+}
+
 static int ice_get_eeprom_len(struct net_device *netdev)
 {
        struct ice_netdev_priv *np = netdev_priv(netdev);
        .set_msglevel           = ice_set_msglevel,
        .self_test              = ice_self_test,
        .get_link               = ethtool_op_get_link,
+       .get_link_ext_stats     = ice_get_link_ext_stats,
        .get_eeprom_len         = ice_get_eeprom_len,
        .get_eeprom             = ice_get_eeprom,
        .get_coalesce           = ice_get_coalesce,
 
        if (link_up == old_link && link_speed == old_link_speed)
                return 0;
 
+       if (!link_up && old_link)
+               pf->link_down_events++;
+
        ice_ptp_link_change(pf, link_up);
 
        if (ice_is_dcb_active(pf)) {