drivers: net: cpsw: disable coalesce when rx_coalesce_usecs is zero
authorMugunthan V N <mugunthanvnm@ti.com>
Tue, 15 Jul 2014 14:56:53 +0000 (20:26 +0530)
committerDavid S. Miller <davem@davemloft.net>
Wed, 16 Jul 2014 06:13:57 +0000 (23:13 -0700)
instead of return error on zero rx_coalesce_usecs, disable coalesce

Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/ti/cpsw.c

index b988d16..ae6379a 100644 (file)
@@ -884,14 +884,16 @@ static int cpsw_set_coalesce(struct net_device *ndev,
        u32 addnl_dvdr = 1;
        u32 coal_intvl = 0;
 
-       if (!coal->rx_coalesce_usecs)
-               return -EINVAL;
-
        coal_intvl = coal->rx_coalesce_usecs;
 
        int_ctrl =  readl(&priv->wr_regs->int_control);
        prescale = priv->bus_freq_mhz * 4;
 
+       if (!coal->rx_coalesce_usecs) {
+               int_ctrl &= ~(CPSW_INTPRESCALE_MASK | CPSW_INTPACEEN);
+               goto update_return;
+       }
+
        if (coal_intvl < CPSW_CMINTMIN_INTVL)
                coal_intvl = CPSW_CMINTMIN_INTVL;
 
@@ -919,6 +921,8 @@ static int cpsw_set_coalesce(struct net_device *ndev,
        int_ctrl |= CPSW_INTPACEEN;
        int_ctrl &= (~CPSW_INTPRESCALE_MASK);
        int_ctrl |= (prescale & CPSW_INTPRESCALE_MASK);
+
+update_return:
        writel(int_ctrl, &priv->wr_regs->int_control);
 
        cpsw_notice(priv, timer, "Set coalesce to %d usecs.\n", coal_intvl);