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: 36+ 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 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 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.