From patchwork Wed Jul 10 10:55:14 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiko Schocher X-Patchwork-Id: 258011 X-Patchwork-Delegate: wd@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 7856F2C02CC for ; Wed, 10 Jul 2013 20:55:45 +1000 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 112464A131; Wed, 10 Jul 2013 12:55:41 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ttX8svfgxKrH; Wed, 10 Jul 2013 12:55:40 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 64E804A119; Wed, 10 Jul 2013 12:55:36 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id BA2354A119 for ; Wed, 10 Jul 2013 12:55:29 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ab8ZKG1xqDTk for ; Wed, 10 Jul 2013 12:55:23 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from relay-m2-k.invitel.net (mailout-m0-k.invitel.net [91.82.116.154]) by theia.denx.de (Postfix) with ESMTP id 7F8094A0A5 for ; Wed, 10 Jul 2013 12:55:16 +0200 (CEST) Received: from mail.invitel.hu (kozma-invitel-mail1.isp [192.168.18.246]) by relay-m2-k.invitel.net (Invitel MailHub Service) with ESMTP id CB1DF80C02; Wed, 10 Jul 2013 12:55:15 +0200 (CEST) Received: from mail.invitel.hu (localhost [127.0.0.1]) by localhost (Invitel Mail Submit Server proxy-1) with SMTP id AAF1D9FF34; Wed, 10 Jul 2013 12:55:15 +0200 (CEST) X-Invitel-SMTP-Policy: accepting mail on this level X-Invitel-SMTP-Policy: accepting mail on this level X-Invitel-SMTP-Policy: accepting mail on this level X-Invitel-SMTP-Policy: accepting mail on this level X-Invitel-SMTP-Policy: accepting mail on this level X-Invitel-SMTP-Policy: accepting mail on this level Received: from [192.168.0.110] (91.82.182.125.pool.invitel.hu [91.82.182.125]) (Authenticated sender: heiko.schocher@invitel.hu) by mail.invitel.hu (Invitel Mail Submit Server proxy-1) with ESMTPA id 106A49FB98; Wed, 10 Jul 2013 12:55:14 +0200 (CEST) Message-ID: <51DD3D92.8050701@denx.de> Date: Wed, 10 Jul 2013 12:55:14 +0200 From: Heiko Schocher Organization: DENX Software Engineering User-Agent: Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20120421 Thunderbird/12.0 MIME-Version: 1.0 To: hs@denx.de References: <51DD32DA.8000809@denx.de> In-Reply-To: <51DD32DA.8000809@denx.de> X-PMX-Spam: Gauge=XXIIIIIIII, Probability=28%, Report=' SXL_IP_DYNAMIC 3, MULTIPLE_RCPTS 0.1, FROM_SAME_AS_TO 0.05, HTML_00_01 0.05, HTML_00_10 0.05, BODY_SIZE_3000_3999 0, BODY_SIZE_5000_LESS 0, BODY_SIZE_7000_LESS 0, RDNS_GENERIC_POOLED 0, RDNS_SUSP 0, RDNS_SUSP_GENERIC 0, __ANY_URI 0, __BOUNCE_CHALLENGE_SUBJ 0, __BOUNCE_NDR_SUBJ_EXEMPT 0, __CT 0, __CTE 0, __CT_TEXT_PLAIN 0, __FORWARDED_MSG 0, __FROM_SAME_AS_TO2 0, __HAS_FROM 0, __HAS_MSGID 0, __HAS_REPLYTO 0, __IN_REP_TO 0, __MIME_TEXT_ONLY 0, __MIME_VERSION 0, __MOZILLA_MSGID 0, __MOZILLA_USER_AGENT 0, __MULTIPLE_RCPTS_CC_X2 0, __REPLYTO_SAMEAS_FROM_ACC 0, __REPLYTO_SAMEAS_FROM_ADDY 0, __REPLYTO_SAMEAS_FROM_DOMAIN 0, __SANE_MSGID 0, __SUBJ_ALPHA_END 0, __SUBJ_ALPHA_NEGATE 0, __TO_MALFORMED_2 0, __TO_NO_NAME 0, __URI_NO_MAILTO 0, __URI_NO_PATH 0, __URI_NO_WWW 0, __USER_AGENT 0' Cc: "Bach, Pascal" , U-Boot user list , "Egli, Samuel" Subject: Re: [U-Boot] net, phy: wrong 1000BASE detection with a lan9303 switch X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list Reply-To: hs@denx.de List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de Hello, Am 10.07.2013 12:09, schrieb Heiko Schocher: > Hello, > > I have problems with a lan9303 switch on an am335x based board, > which does not support 1000FD/HD modes, but as it set BMSR_ERCAP > bit in BMSR and returns 0xffff for reads on the MII_STAT1000 and > MII_CTRL1000 registers, u-boot code detects SPEED_1000 in > drivers/net/phy/phy.c genphy_parse_link() ... which is wrong, > as this switch does not support 1000 modes ... > > I found in ./common/miiphyutil.c miiphy_speed() the define > CONFIG_PHY_GIGE which it seems lacks in drivers/net/phy/phy.c > genphy_parse_link() ? Or is there another option? Just an update ... the switch does not support reads for the registers 0x09 and 0x0a, but sets the BMSR_ERCAP bit in BMSR. A phy_read on register 0x09 or 0x0a fails ... In my case the drivers/net/cpsw.c returns -1 ... and code in drivers/net/phy/phy.c: int genphy_parse_link(struct phy_device *phydev) { int mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR); /* We're using autonegotiation */ if (mii_reg & BMSR_ANEGCAPABLE) { u32 lpa = 0; u32 gblpa = 0; u32 estatus = 0; /* Check for gigabit capability */ if (mii_reg & BMSR_ERCAP) { /* We want a list of states supported by * both PHYs in the link */ gblpa = phy_read(phydev, MDIO_DEVAD_NONE, MII_STAT1000); gblpa &= phy_read(phydev, MDIO_DEVAD_NONE, MII_CTRL1000) << 2; } [...] does not check, if phy_read returns with an error ... Would this be an acceptable patch for it: bye, Heiko diff --git a/drivers/net/cpsw.c b/drivers/net/cpsw.c index 379b679..52c08ed 100644 --- a/drivers/net/cpsw.c +++ b/drivers/net/cpsw.c @@ -489,7 +489,7 @@ static inline void wait_for_idle(void) static int cpsw_mdio_read(struct mii_dev *bus, int phy_id, int dev_addr, int phy_reg) { - unsigned short data; + int data; u32 reg; if (phy_reg & ~PHY_REG_MASK || phy_id & ~PHY_ID_MASK) diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 7c0eaec..4522382 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -291,7 +291,7 @@ int genphy_parse_link(struct phy_device *phydev) /* We're using autonegotiation */ if (mii_reg & BMSR_ANEGCAPABLE) { u32 lpa = 0; - u32 gblpa = 0; + int gblpa = 0; u32 estatus = 0; /* Check for gigabit capability */ @@ -300,6 +300,10 @@ int genphy_parse_link(struct phy_device *phydev) * both PHYs in the link */ gblpa = phy_read(phydev, MDIO_DEVAD_NONE, MII_STAT1000); + if (gblpa < 0) { + printf ("Could not read MII_STAT1000. Ignoring gigabit capability\n"); + gblpa = 0; + } gblpa &= phy_read(phydev, MDIO_DEVAD_NONE, MII_CTRL1000) << 2; }