static void fec_enet_itr_coal_set(struct net_device *ndev)
 {
        struct fec_enet_private *fep = netdev_priv(ndev);
-       int rx_itr, tx_itr;
+       u32 rx_itr = 0, tx_itr = 0;
+       int rx_ictt, tx_ictt;
 
-       /* Must be greater than zero to avoid unpredictable behavior */
-       if (!fep->rx_time_itr || !fep->rx_pkts_itr ||
-           !fep->tx_time_itr || !fep->tx_pkts_itr)
-               return;
-
-       /* Select enet system clock as Interrupt Coalescing
-        * timer Clock Source
-        */
-       rx_itr = FEC_ITR_CLK_SEL;
-       tx_itr = FEC_ITR_CLK_SEL;
+       rx_ictt = fec_enet_us_to_itr_clock(ndev, fep->rx_time_itr);
+       tx_ictt = fec_enet_us_to_itr_clock(ndev, fep->tx_time_itr);
 
-       /* set ICFT and ICTT */
-       rx_itr |= FEC_ITR_ICFT(fep->rx_pkts_itr);
-       rx_itr |= FEC_ITR_ICTT(fec_enet_us_to_itr_clock(ndev, fep->rx_time_itr));
-       tx_itr |= FEC_ITR_ICFT(fep->tx_pkts_itr);
-       tx_itr |= FEC_ITR_ICTT(fec_enet_us_to_itr_clock(ndev, fep->tx_time_itr));
+       if (rx_ictt > 0 && fep->rx_pkts_itr > 1) {
+               /* Enable with enet system clock as Interrupt Coalescing timer Clock Source */
+               rx_itr = FEC_ITR_EN | FEC_ITR_CLK_SEL;
+               rx_itr |= FEC_ITR_ICFT(fep->rx_pkts_itr);
+               rx_itr |= FEC_ITR_ICTT(rx_ictt);
+       }
 
-       rx_itr |= FEC_ITR_EN;
-       tx_itr |= FEC_ITR_EN;
+       if (tx_ictt > 0 && fep->tx_pkts_itr > 1) {
+               /* Enable with enet system clock as Interrupt Coalescing timer Clock Source */
+               tx_itr = FEC_ITR_EN | FEC_ITR_CLK_SEL;
+               tx_itr |= FEC_ITR_ICFT(fep->tx_pkts_itr);
+               tx_itr |= FEC_ITR_ICTT(tx_ictt);
+       }
 
        writel(tx_itr, fep->hwp + FEC_TXIC0);
        writel(rx_itr, fep->hwp + FEC_RXIC0);