From patchwork Sat Jan 5 13:10:06 1980 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joseph CHAMG X-Patchwork-Id: 231595 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id A18002C009D for ; Wed, 27 Mar 2013 17:42:55 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754920Ab3C0Gmj (ORCPT ); Wed, 27 Mar 2013 02:42:39 -0400 Received: from mail-da0-f47.google.com ([209.85.210.47]:62499 "EHLO mail-da0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751007Ab3C0Gmi (ORCPT ); Wed, 27 Mar 2013 02:42:38 -0400 Received: by mail-da0-f47.google.com with SMTP id s35so3986339dak.34 for ; Tue, 26 Mar 2013 23:42:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer; bh=B6zTEGOOMbru6GQWIAhIbxqkJ1VIKAssOXbNFM2yoyA=; b=c9C3irsoFZVyGiIYYky3dxb94h8M2UOk3g7uPeol4AZzeNHrPT0oulEnRo0pNTExJh oyjJeVnfpbvDaWEK/dDz/aKHyJGF80072hya277oQhp/fEyXa1kvQ+sT3Sg43/SLIGYY 3z7OAv3MrJxZDvwouQNgZoZbHlDpemLwj7u04ctL9ycKyUHSY75Veh3PRDDwPZ89LPyz gQFQQ5UcWFQ/PmkLLKLesA35svB5ltLKx0i+cCFtLVDiv7ptzn7oSlO+R6By6W/292L4 rIrestgAgPCWjGxtVMdT4JHuPb57VC0GOHsYIqk5702YrR71UUmkZRYoOWkACRpmWTV8 /D7Q== X-Received: by 10.66.196.68 with SMTP id ik4mr28234669pac.105.1364366557541; Tue, 26 Mar 2013 23:42:37 -0700 (PDT) Received: from localhost.localdomain (111-251-199-253.dynamic.hinet.net. [111.251.199.253]) by mx.google.com with ESMTPS id gf1sm20360860pbc.24.2013.03.26.23.42.33 (version=TLSv1 cipher=RC4-SHA bits=128/128); Tue, 26 Mar 2013 23:42:36 -0700 (PDT) From: Joseph CHANG To: "David S. Miller" , Bill Pemberton , Matthew Leach , Greg Kroah-Hartman , Joseph CHANG , Jiri Pirko , netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Joseph CHANG Subject: [PATCH 1/1] ethernet: dm9000 driver: davicom: upgrade driver Date: Sat, 5 Jan 1980 21:10:06 +0800 Message-Id: <315925806-1352-1-git-send-email-josright123@gmail.com> X-Mailer: git-send-email 1.7.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Fixing bug for DM9000B which is a DSP revision! Had tested to Davicom DM9000 series include DM9000E(analog), DM9000A(analog), DM9000B(dsp) and DM9000C(dsp) in X86 and ARM Embedded Linux these years. Signed-off-by: Joseph CHANG --- drivers/net/ethernet/davicom/dm9000.c | 12 ++++++++++-- drivers/net/ethernet/davicom/dm9000.h | 11 ++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/davicom/dm9000.c b/drivers/net/ethernet/davicom/dm9000.c index 8cdf025..252f1da 100644 --- a/drivers/net/ethernet/davicom/dm9000.c +++ b/drivers/net/ethernet/davicom/dm9000.c @@ -47,7 +47,7 @@ #define DM9000_PHY 0x40 /* PHY address 0x01 */ #define CARDNAME "dm9000" -#define DRV_VERSION "1.31" +#define DRV_VERSION "1.39" /* * Transmit timeout, default 5 seconds. @@ -795,6 +795,8 @@ dm9000_init_dm9000(struct net_device *dev) iow(db, DM9000_GPCR, GPCR_GEP_CNTL); /* Let GPIO0 output */ + dm9000_phy_write(dev, 0, MII_BMCR, BMCR_RESET); /* PHY RESET */ + ncr = (db->flags & DM9000_PLATF_EXT_PHY) ? NCR_EXT_PHY : 0; /* if wol is needed, then always set NCR_WAKEEN otherwise we end @@ -830,6 +832,8 @@ dm9000_init_dm9000(struct net_device *dev) db->tx_pkt_cnt = 0; db->queue_pkt_len = 0; dev->trans_start = jiffies; + + dm9000_phy_write(dev, 0, MII_DM_DSPCR, DSPCR_INIT_PARAM); /* Init */ } /* Our watchdog timed out. Called by the networking layer */ @@ -1502,7 +1506,11 @@ dm9000_probe(struct platform_device *pdev) db->flags |= DM9000_PLATF_SIMPLE_PHY; #endif - dm9000_reset(db); + /* Fixing bug on dm9000_probe, takeover dm9000_reset(db), + * Need 'NCR_MAC_LBK' bit to indeed stable our DM9000 fifo + * while probe stage */ + + iow(db, DM9000_NCR, NCR_MAC_LBK | NCR_RST); /* try multiple times, DM9000 sometimes gets the read wrong */ for (i = 0; i < 8; i++) { diff --git a/drivers/net/ethernet/davicom/dm9000.h b/drivers/net/ethernet/davicom/dm9000.h index 55688bd..9ce058a 100644 --- a/drivers/net/ethernet/davicom/dm9000.h +++ b/drivers/net/ethernet/davicom/dm9000.h @@ -69,7 +69,9 @@ #define NCR_WAKEEN (1<<6) #define NCR_FCOL (1<<4) #define NCR_FDX (1<<3) -#define NCR_LBK (3<<1) + +#define NCR_RESERVED (3<<1) +#define NCR_MAC_LBK (1<<1) #define NCR_RST (1<<0) #define NSR_SPEED (1<<7) @@ -167,5 +169,12 @@ #define ISR_LNKCHNG (1<<5) #define ISR_UNDERRUN (1<<4) +/* Davicom MII registers. + */ + +#define MII_DM_DSPCR 0x1b /* DSP Control Register */ + +#define DSPCR_INIT_PARAM 0xE100 /* DSP init parameter */ + #endif /* _DM9000X_H_ */