From: Florian Fainelli <f.fainelli@gmail.com>
To: Timur Tabi <timur@codeaurora.org>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org,
sdharia@codeaurora.org,
Shanker Donthineni <shankerd@codeaurora.org>,
Greg Kroah-Hartman <greg@kroah.com>,
vikrams@codeaurora.org, cov@codeaurora.org,
gavidov@codeaurora.org, Rob Herring <robh+dt@kernel.org>,
andrew@lunn.ch, bjorn.andersson@linaro.org,
Mark Langsdorf <mlangsdo@redhat.com>,
Jon Masters <jcm@redhat.com>, Andy Gross <agross@codeaurora.org>,
"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH 1/2] [v4] net: emac: emac gigabit ethernet controller driver
Date: Tue, 10 May 2016 16:26:00 -0700 [thread overview]
Message-ID: <57326E08.40803@gmail.com> (raw)
In-Reply-To: <57326C44.8020906@codeaurora.org>
On 05/10/2016 04:18 PM, Timur Tabi wrote:
> Florian Fainelli wrote:
>> Are you utilizing the PHYLIB APIs properly? You need at least a
>> phy_start() to start the PHY state machine, and an adjust_link callback
>> to be provided to phy_connect() (or of_phy_connect()) to manage link
>> state changes. And that's the very basic minimum here, there could be
>> additional APIs that you may end up using.
>>
>> There are tons of example in tree of drivers doing this, bcmgenet,
>> bcmsysport, tg3 etc.
>
> Thank you. I think I finally got phylib working, more or less.
>
> Unfortunately, it seems I have some kind of race condition. The driver
> has a lot that's wrong with it, and I'm trying to fix it all. One crazy
> the driver does is it create a workqueue to handle a lot of the tasks
> that would normally be handled in the interrupt handler itself.
That sounds like a typicall top half/bottom half split, fair enough.
>
> With phylib support, I know my driver can call phy_mac_interrupt() when
> it gets a link status change interrupt. I then have an .adjust_link
> callback which starts or stops the mac accordingly.
The Ethernet MAC should be started in ndo_open() and stopped in
ndo_close(), in between, there are link state changes, but you are not
supposed to stop or start your Ethernet MAC and its DMA for instance
during link change, if that is a HW requirement, your HW is pretty funky.
>
> My problem is that I'm not really sure what adjust_link is supposed to
> be doing.
Well, it's pretty simple, it is about re-configuring your Ethernet MAC
based on what the PHY link state mandates: duplex, pause, speed changes,
EEE etc is what this callback is supposed to take care of, at the
Ethernet MAC level.
> In addition, it seems that I need to keep the workqueue
> running, otherwise the interface will not function. I bring the
> interface up, and the driver reports success, but pings do not work.
>
> I'm getting really frustrated. The sample code isn't really helping a
> whole lot, because I lack a fundamental understanding of what needs to
> be done. None of the documentation I've read is helpful, and I don't
> know how to debug it.
Seriously, no documentation is helpful? The PHY library seems pretty
well documented to me, but I suppose I have a bias, oh, and patches are
welcome of course.
>
> Can you give me some advice on how to debug this?
Take a look at drivers/net/ethernet/broadcom/genet/bcmgenet.c and see
how it deals with managing link state changes for instance. The code is
pretty straight forward: link interrupt (and other causes) trigger a
workqueue schedule, which then processes link state changes and calls
phy_mac_interrupt(), which in turn makes the PHY library adjust the
interface carrier state.
--
Florian
next prev parent reply other threads:[~2016-05-10 23:26 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-13 17:59 [PATCH 1/2] [v4] net: emac: emac gigabit ethernet controller driver Timur Tabi
2016-04-13 17:59 ` [PATCH 2/2] MAINTAINERS: add Qualcomm EMAC network driver maintainer Timur Tabi
2016-04-13 19:22 ` [PATCH 1/2] [v4] net: emac: emac gigabit ethernet controller driver kbuild test robot
2016-04-13 19:31 ` Timur Tabi
2016-04-13 19:40 ` Shanker Donthineni
2016-04-13 19:55 ` Timur Tabi
2016-04-13 20:07 ` Bjørn Mork
2016-04-14 16:24 ` Rob Herring
2016-04-13 22:16 ` Florian Fainelli
2016-04-14 20:19 ` Timur Tabi
2016-04-14 21:19 ` Florian Fainelli
2016-04-14 22:00 ` Vikram Sethi
2016-04-14 23:34 ` Timur Tabi
2016-04-15 12:35 ` Rob Herring
2016-04-15 15:44 ` Timur Tabi
2016-04-15 15:59 ` Rob Herring
2016-04-15 17:23 ` Timur Tabi
[not found] ` <57102920.7000104-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2016-04-15 16:44 ` Bjorn Andersson
2016-04-15 17:00 ` Timur Tabi
2016-04-15 17:35 ` Bjorn Andersson
2016-04-15 18:22 ` Timur Tabi
2016-04-21 18:03 ` Timur Tabi
2016-04-22 19:45 ` Timur Tabi
2016-04-22 19:56 ` Florian Fainelli
2016-05-10 23:18 ` Timur Tabi
2016-05-10 23:26 ` Florian Fainelli [this message]
2016-05-11 2:24 ` Timur Tabi
2016-05-11 20:27 ` Timur Tabi
2016-04-25 13:16 ` Andrew Lunn
2016-06-01 22:27 ` Timur Tabi
[not found] ` <1460570393-19838-1-git-send-email-timur-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2016-04-14 3:27 ` kbuild test robot
2016-04-14 16:32 ` Rob Herring
2016-04-14 16:47 ` Timur Tabi
2016-04-14 17:18 ` Rob Herring
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=57326E08.40803@gmail.com \
--to=f.fainelli@gmail.com \
--cc=agross@codeaurora.org \
--cc=andrew@lunn.ch \
--cc=bjorn.andersson@linaro.org \
--cc=cov@codeaurora.org \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=gavidov@codeaurora.org \
--cc=greg@kroah.com \
--cc=jcm@redhat.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mlangsdo@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=robh+dt@kernel.org \
--cc=sdharia@codeaurora.org \
--cc=shankerd@codeaurora.org \
--cc=timur@codeaurora.org \
--cc=vikrams@codeaurora.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).