From: Florian Fainelli <florian@openwrt.org>
To: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Cc: Ralf Baechle <ralf@linux-mips.org>,
linux-mips@linux-mips.org,
Manuel Lauss <manuel.lauss@googlemail.com>,
David Miller <davem@davemloft.net>,
netdev@vger.kernel.org
Subject: Re: [PATCH 1/2] alchemy: add au1000-eth platform device
Date: Thu, 27 Aug 2009 16:55:09 +0200 [thread overview]
Message-ID: <200908271655.11086.florian@openwrt.org> (raw)
In-Reply-To: <4A969519.7010604@ru.mvista.com>
Hello,
Le Thursday 27 August 2009 16:15:53 Sergei Shtylyov, vous avez écrit :
> Hello.
>
> Florian Fainelli wrote:
> >>>>>This patch adds the board code to register a per-board au1000-eth
> >>>>>platform device to be used wit the au1000-eth platform driver in a
> >>>>>subsequent patch. Note that the au1000-eth driver knows about the
> >>>>>default driver settings such that we do not need to pass any
> >>>>>platform_data informations in most cases except db1x00.
> >>>>
> >>>> Sigh, NAK...
> >>>> Please don't register the SoC device per board, do it in
> >>>>alchemy/common/platfrom.c and find a way to pass the board specific
> >>>>platform data from the board file there instead -- something like
> >>>>arch/arm/mach-davinci/usb.c does.
> >>>
> >>>Ok, like I promised, this was the per-board device registration. Do you
> >>>prefer something like this:
> >>
> >> I certainly do, but still not in this incarnation... :-)
> >>
> >>>+static struct au1000_eth_platform_data au1xxx_eth0_platform_data = {
> >>>+ .phy1_search_mac0 = 1,
> >>>+};
> >>
> >> I'm not sure that the default platfrom data is really a great idea...
> >
> > Can you elaborate a bit more ? We actually need to make the Ethernet MAC
> > driver aware of some PHY settings.
>
> But why do you have the platform data in *this* file, no the board
> files?
The default setting is to search for a PHY on the corresponding MAC, which is
the case for all boards but bosporus, thus it is in this file. No platform
data at all would be fine too.
>
> >>>+#ifndef CONFIG_SOC_AU1100
> >>>+static struct platform_device au1xxx_eth1_device = {
> >>>+ .name = "au1000-eth",
> >>>+ .id = 1,
> >>>+ .num_resources = ARRAY_SIZE(au1xxx_eth1_resources),
> >>>+ .resource = au1xxx_eth1_resources,
> >>
> >> And where's the platfrom data for the second Ethernet?
> >
> > There is no need to, as the driver originally did not override any
> > specific settings on the second MAC (afair).
>
> Specific settings where, in the driver? Shouldn't all such settings be
> bound to the platform data instead?
Yes, platform data should handle that for us, what I was trying to explain is
that the driver did not configure anything specific for MAC1 already, thus
there is no platfo
>
> >>>+};
> >>>+#endif
> >>>+
> >>>+void __init au1xxx_override_eth0_cfg(struct au1000_eth_platform_data
> >>>*eth_data) +{
> >>>+ if (!eth_data)
> >>>+ return;
> >>>+
> >>>+ memcpy(&au1xxx_eth0_platform_data, eth_data,
> >>>+ sizeof(struct au1000_eth_platform_data));
> >>
> >> Why not just set the pointer in au1xxx_eth0_device. And really, why
> >> not make the function more generic, with a prototype like:
> >
> > For the same reasons as explained below, MAC1 did not need any specific
> > change.
>
> So, the driver can get away without platform data? What does it do in
> this case -- I haven't looked at that patch?
In that case it searchs for a PHY attached to the MAC, this is what the driver
did already. Please have a look at the patch, specifically the part which
handles a NULL platform_data.
>
> >>void __init au1xxx_override_eth_cfg(unsigned port, struct
> >> au1000_eth_platform_data *eth_data);
> >>
> >>>+}
> >>>+
> >>> static struct platform_device *au1xxx_platform_devices[] __initdata = {
> >>> &au1xx0_uart_device,
> >>> &au1xxx_usb_ohci_device,
> >>>@@ -351,17 +422,25 @@ static struct platform_device
> >>>*au1xxx_platform_devices[] __initdata = { #ifdef SMBUS_PSC_BASE
> >>> &pbdb_smbus_device,
> >>> #endif
> >>>+ &au1xxx_eth0_device,
> >>> };
> >>>
> >>> static int __init au1xxx_platform_init(void)
> >>> {
> >>> unsigned int uartclk = get_au1x00_uart_baud_base() * 16;
> >>>- int i;
> >>>+ int i, ni;
> >>>
> >>> /* Fill up uartclk. */
> >>> for (i = 0; au1x00_uart_data[i].flags; i++)
> >>> au1x00_uart_data[i].uartclk = uartclk;
> >>>
> >>>+ /* Register second MAC if enabled in pinfunc */
> >>>+#ifndef CONFIG_SOC_AU1100
> >>>+ ni = (int)((au_readl(SYS_PINFUNC) & (u32)(SYS_PF_NI2)) >> 4);
> >>>+ if (!(ni + 1))
> >>
> >> Why so complex, and how can (ni + 1) ever be 0?! :-/
> >
> > This is left-over debugging stub, I will rework it. About complexity,
> > this line is taken directly from the au1000_eth driver.
>
> I don't see !(ni + 1) there, only:
>
> num_ifs = NUM_ETH_INTERFACES - ni;
>
> which is correct, unlike what you've written.
--
Best regards, Florian Fainelli
Email: florian@openwrt.org
Web: http://openwrt.org
IRC: [florian] on irc.freenode.net
-------------------------------
next prev parent reply other threads:[~2009-08-27 14:55 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-16 23:05 [PATCH 1/2] alchemy: add au1000-eth platform device Florian Fainelli
2009-08-18 14:56 ` Sergei Shtylyov
2009-08-18 16:01 ` Florian Fainelli
2009-08-18 16:01 ` Florian Fainelli
2009-08-21 16:53 ` Florian Fainelli
2009-08-21 17:23 ` Manuel Lauss
2009-08-24 18:02 ` Sergei Shtylyov
2009-08-27 12:42 ` Florian Fainelli
2009-08-27 14:15 ` Sergei Shtylyov
2009-08-27 14:55 ` Florian Fainelli [this message]
2009-10-17 8:48 ` Florian Fainelli
2009-10-23 16:51 ` Sergei Shtylyov
2009-11-03 21:14 ` Florian Fainelli
-- strict thread matches above, loose matches on Subject: below --
2009-11-10 0:13 Florian Fainelli
2009-11-12 16:41 ` Ralf Baechle
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=200908271655.11086.florian@openwrt.org \
--to=florian@openwrt.org \
--cc=davem@davemloft.net \
--cc=linux-mips@linux-mips.org \
--cc=manuel.lauss@googlemail.com \
--cc=netdev@vger.kernel.org \
--cc=ralf@linux-mips.org \
--cc=sshtylyov@ru.mvista.com \
/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.