Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2f448911 authored by Andy Fleming's avatar Andy Fleming Committed by Jeff Garzik
Browse files

gianfar: Fix Rx/Tx HW interrupt coalescing counter reset procedure.



- Fix Rx/Tx HW interrupt coalescing counter reset logic. Disabling
is required before resetting the counter.

- Update the Default both Rx and Tx coalescing timer
threshold. Formerly 4 is set which is equal to 1.5 frame at the line
rate of 1GbE interface, and it doesn't match to the coalescing frame
count which is set to 16. Threashold 21 is matched to frame count 16.

Signed-off-by: default avatarDai Haruki <dai.haruki@freescale.com>
Signed-off-by: default avatarAndy Fleming <afleming@freescale.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 99da5003
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -1299,11 +1299,11 @@ static irqreturn_t gfar_transmit(int irq, void *dev_id)

	/* If we are coalescing the interrupts, reset the timer */
	/* Otherwise, clear it */
	if (priv->txcoalescing)
	if (likely(priv->txcoalescing)) {
		gfar_write(&priv->regs->txic, 0);
		gfar_write(&priv->regs->txic,
			   mk_ic_value(priv->txcount, priv->txtime));
	else
		gfar_write(&priv->regs->txic, 0);
	}

	spin_unlock(&priv->txlock);

@@ -1417,11 +1417,11 @@ irqreturn_t gfar_receive(int irq, void *dev_id)

	/* If we are coalescing interrupts, update the timer */
	/* Otherwise, clear it */
	if (priv->rxcoalescing)
	if (likely(priv->rxcoalescing)) {
		gfar_write(&priv->regs->rxic, 0);
		gfar_write(&priv->regs->rxic,
			   mk_ic_value(priv->rxcount, priv->rxtime));
	else
		gfar_write(&priv->regs->rxic, 0);
	}

	spin_unlock_irqrestore(&priv->rxlock, flags);
#endif
@@ -1593,11 +1593,11 @@ static int gfar_poll(struct napi_struct *napi, int budget)

		/* If we are coalescing interrupts, update the timer */
		/* Otherwise, clear it */
		if (priv->rxcoalescing)
		if (likely(priv->rxcoalescing)) {
			gfar_write(&priv->regs->rxic, 0);
			gfar_write(&priv->regs->rxic,
				   mk_ic_value(priv->rxcount, priv->rxtime));
		else
			gfar_write(&priv->regs->rxic, 0);
		}
	}

	return howmany;
+2 −2
Original line number Diff line number Diff line
@@ -124,11 +124,11 @@ extern const char gfar_driver_version[];

#define DEFAULT_TX_COALESCE 1
#define DEFAULT_TXCOUNT	16
#define DEFAULT_TXTIME	4
#define DEFAULT_TXTIME	21

#define DEFAULT_RX_COALESCE 1
#define DEFAULT_RXCOUNT	16
#define DEFAULT_RXTIME	4
#define DEFAULT_RXTIME	21

#define TBIPA_VALUE		0x1f
#define MIIMCFG_INIT_VALUE	0x00000007