From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Lunn Subject: Re: Xilinx axienet + DP83620 in fiber mode won't set netif_carrier_on Date: Wed, 16 May 2018 15:11:34 +0200 Message-ID: <20180516131134.GF22000@lunn.ch> References: <20180516091630.GA17469@salem.gmr.ssr.upm.es> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: netdev@vger.kernel.org To: "Alvaro G. M." Return-path: Received: from vps0.lunn.ch ([185.16.172.187]:33087 "EHLO vps0.lunn.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752358AbeEPNLg (ORCPT ); Wed, 16 May 2018 09:11:36 -0400 Content-Disposition: inline In-Reply-To: <20180516091630.GA17469@salem.gmr.ssr.upm.es> Sender: netdev-owner@vger.kernel.org List-ID: On Wed, May 16, 2018 at 11:16:31AM +0200, Alvaro G. M. wrote: > Hi, > > I have a custom board with a Xilinx FPGA running Microblaze and fitting a > Xilinx Axi Ethernet IP core. This core communicates through MII mode with a > DP83620 PHY from Texas that supports both cabled and fiber interfaces, of > which I'm using the latter. > > Under these circumstances, I've noticed that the interface is pretty much > dead except for receiving broadcast packages, so I tried to dig on the > driver to find the cause. Please, beware that I'm not very familiar with the > netdev subsystem, so I may be mistaken on lots of things. > > It seems that of_phy_connect ends up calling netif_carrier_off: > > phy_device.c:1036 > /* Initial carrier state is off as the phy is about to be > * (re)initialized. > */ > netif_carrier_off(phydev->attached_dev); > > /* Do initial configuration here, now that > * we have certain key parameters > * (dev_flags and interface) > */ > err = phy_init_hw(phydev); > if (err) > goto error; > > phy_resume(phydev); > > However, neither xilinx_axienet_main.c nor dp83848.c ever runs > netif_carrier_on. Hi Alvaro What should happen in general terms is that at some point the link to the peer is established. phylib, the generic PHY code, polls the PHY ever second, asking what the link state is. When the link changes from down to up, phylib will call the link_adjust callback in the MAC, and netif_carrier_on(). When the PHY reports the link has gone down, it does similar, calls the adjust_link callback, and netif_carrier_off(). So what you need to do is find out why the PHY driver never reports link up. Does the PHY even know when the link is up? Often SFF/SFP modules have a Signal Detect pin, which is connected to a gpio. Do you have something like that? If so, you should look at the PHYLINK code and the SFP device which was added recently. Andrew