From patchwork Sat Aug 8 02:36:52 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yong Zhang X-Patchwork-Id: 30995 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@bilbo.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from ozlabs.org (ozlabs.org [203.10.76.45]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mx.ozlabs.org", Issuer "CA Cert Signing Authority" (verified OK)) by bilbo.ozlabs.org (Postfix) with ESMTPS id 7319AB70BA for ; Sat, 8 Aug 2009 12:37:58 +1000 (EST) Received: by ozlabs.org (Postfix) id 565C5DDD0B; Sat, 8 Aug 2009 12:37:58 +1000 (EST) Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id AFABBDDD01 for ; Sat, 8 Aug 2009 12:37:57 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932275AbZHHChE (ORCPT ); Fri, 7 Aug 2009 22:37:04 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1756203AbZHHChE (ORCPT ); Fri, 7 Aug 2009 22:37:04 -0400 Received: from rv-out-0506.google.com ([209.85.198.230]:29464 "EHLO rv-out-0506.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755286AbZHHChB (ORCPT ); Fri, 7 Aug 2009 22:37:01 -0400 Received: by rv-out-0506.google.com with SMTP id f6so555452rvb.1 for ; Fri, 07 Aug 2009 19:37:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:from:to:cc:subject:date :message-id:x-mailer; bh=a6R5NLH51ecf3chjbI67GiblDrrkt7dTtKskK/hg2MU=; b=AaVVhYOW+mC+pfHJMbnYCNlUPIuWOneaqp0LopxkDABF1eL6Z/TP4bNpAAuGb+UGvA TEdaEJCmzX5oHrCJSKyHNHxgBJEEuQanqsQ8QCuqXdAMI8SB/6xCFRKQCU4LkLNv6unt 8yYBxDPm1dHYfrOHN9jOlKep6BhSG3TojX/G8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer; b=ob1wNYC1+Zl66xFfN8D/zn4XsZjm+K8T/yxZpmMGSsIOHDo3m0tONv7fiP4WOhfoRx CXN3J+351lkyAHSK510SrSNaFGYu27h6TpYYED7GcrCuyTXzUnWgmQiRysh8wn9J3jLE m3kjCsvtgIttQSiOa9JGCLilalDn6R93723Y0= Received: by 10.141.42.21 with SMTP id u21mr701447rvj.174.1249699022146; Fri, 07 Aug 2009 19:37:02 -0700 (PDT) Received: from localhost ([221.223.133.197]) by mx.google.com with ESMTPS id k2sm7443620rvb.47.2009.08.07.19.36.59 (version=TLSv1/SSLv3 cipher=RC4-MD5); Fri, 07 Aug 2009 19:37:01 -0700 (PDT) From: Yong Zhang To: davem@davemloft.net, afleming@freescale.com, dai.haruki@freescale.com Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RESEND PATCH] gianfar: keep vlan related state when restart Date: Sat, 8 Aug 2009 10:36:52 +0800 Message-Id: <1249699012-26379-1-git-send-email-yong.zhang0@gmail.com> X-Mailer: git-send-email 1.6.0.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org If vlan has been enabled. ifdown followed by ifup will lost hardware related state. Also remove duplicated operation in gfar_vlan_rx_register(). Signed-off-by: Yong Zhang Acked-by: Dai Haruki --- drivers/net/gianfar.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index f8ffcbf..e212f2c 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c @@ -936,6 +936,7 @@ int startup_gfar(struct net_device *dev) struct gfar __iomem *regs = priv->regs; int err = 0; u32 rctrl = 0; + u32 tctrl = 0; u32 attrs = 0; gfar_write(®s->imask, IMASK_INIT_CLEAR); @@ -1111,11 +1112,19 @@ int startup_gfar(struct net_device *dev) rctrl |= RCTRL_PADDING(priv->padding); } + /* keep vlan related bits if it's enabled */ + if (priv->vlgrp) { + rctrl |= RCTRL_VLEX | RCTRL_PRSDEP_INIT; + tctrl |= TCTRL_VLINS; + } + /* Init rctrl based on our settings */ gfar_write(&priv->regs->rctrl, rctrl); if (dev->features & NETIF_F_IP_CSUM) - gfar_write(&priv->regs->tctrl, TCTRL_INIT_CSUM); + tctrl |= TCTRL_INIT_CSUM; + + gfar_write(&priv->regs->tctrl, tctrl); /* Set the extraction length and index */ attrs = ATTRELI_EL(priv->rx_stash_size) | @@ -1450,7 +1459,6 @@ static void gfar_vlan_rx_register(struct net_device *dev, /* Enable VLAN tag extraction */ tempval = gfar_read(&priv->regs->rctrl); - tempval |= RCTRL_VLEX; tempval |= (RCTRL_VLEX | RCTRL_PRSDEP_INIT); gfar_write(&priv->regs->rctrl, tempval); } else {