diff mbox

gianfar: Fix a filer bug

Message ID 1260366911-15178-1-git-send-email-Sandeep.Kumar@freescale.com
State Changes Requested, archived
Delegated to: David Miller
Headers show

Commit Message

Sandeep Gopalpet Dec. 9, 2009, 1:55 p.m. UTC
We need to enable filer whenever we need to use multiple RX
queues. Also, need to program RIR0 register with the required
distribution we require, if using RX filer hashing support for
packet distribution to multiple queues.

Signed-off-by: Sandeep Gopalpet <Sandeep.Kumar@freescale.com>
---
 drivers/net/gianfar.c |    8 +++++++-
 drivers/net/gianfar.h |    4 ++++
 2 files changed, 11 insertions(+), 1 deletions(-)

Comments

Anton Vorontsov Dec. 10, 2009, 3:07 p.m. UTC | #1
On Wed, Dec 09, 2009 at 07:25:11PM +0530, Sandeep Gopalpet wrote:
> We need to enable filer whenever we need to use multiple RX
> queues. Also, need to program RIR0 register with the required
> distribution we require, if using RX filer hashing support for
> packet distribution to multiple queues.
> 
> Signed-off-by: Sandeep Gopalpet <Sandeep.Kumar@freescale.com>
> ---
[...]
> -	if (priv->rx_filer_enable)
> +	if (priv->rx_filer_enable) {
>  		rctrl |= RCTRL_FILREN;
> +		/* Program the RIR0 reg with the required distribution */
> +		regs->rir0 = DEFAULT_RIR0;

You cannot access regs directly. You have to use gfar_write
since regs is ioremapped memory.

Thanks,
Kumar Gopalpet-B05799 Dec. 11, 2009, 4:44 a.m. UTC | #2
>[...]
>> -	if (priv->rx_filer_enable)
>> +	if (priv->rx_filer_enable) {
>>  		rctrl |= RCTRL_FILREN;
>> +		/* Program the RIR0 reg with the required 
>distribution */
>> +		regs->rir0 = DEFAULT_RIR0;
>
>You cannot access regs directly. You have to use gfar_write 
>since regs is ioremapped memory.
>

Yes. I will send out the patch with the required change.

--

Thanks
Sandeep
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c
index 6850dc0..73ccb07 100644
--- a/drivers/net/gianfar.c
+++ b/drivers/net/gianfar.c
@@ -357,8 +357,11 @@  static void gfar_init_mac(struct net_device *ndev)
 	/* Configure the coalescing support */
 	gfar_configure_coalescing(priv, 0xFF, 0xFF);
 
-	if (priv->rx_filer_enable)
+	if (priv->rx_filer_enable) {
 		rctrl |= RCTRL_FILREN;
+		/* Program the RIR0 reg with the required distribution */
+		regs->rir0 = DEFAULT_RIR0;
+	}
 
 	if (priv->rx_csum_enable)
 		rctrl |= RCTRL_CHECKSUMMING;
@@ -1022,6 +1025,9 @@  static int gfar_probe(struct of_device *ofdev,
 		priv->rx_queue[i]->rxic = DEFAULT_RXIC;
 	}
 
+	/* enable filer if using multiple RX queues*/
+	if(priv->num_rx_queues > 1)
+		priv->rx_filer_enable = 1;
 	/* Enable most messages by default */
 	priv->msg_enable = (NETIF_MSG_IFUP << 1 ) - 1;
 
diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h
index cbb4510..68d16dc 100644
--- a/drivers/net/gianfar.h
+++ b/drivers/net/gianfar.h
@@ -401,6 +401,10 @@  extern const char gfar_driver_version[];
 #define FPR_FILER_MASK	0xFFFFFFFF
 #define MAX_FILER_IDX	0xFF
 
+/* This default RIR value directly corresponds
+ * to the 3-bit hash value generated */
+#define DEFAULT_RIR0	0x05397700
+
 /* RQFCR register bits */
 #define RQFCR_GPI		0x80000000
 #define RQFCR_HASHTBL_Q		0x00000000