From: Gary Thomas <gary@mlbassoc.com>
To: Lennert Buytenhek <buytenh@wantstofly.org>
Cc: netdev@vger.kernel.org
Subject: Re: Marvell 88E609x switch?
Date: Thu, 26 Feb 2009 18:12:32 -0700 [thread overview]
Message-ID: <49A73E00.7050406@mlbassoc.com> (raw)
In-Reply-To: <20090226155726.GO17040@xi.wantstofly.org>
[-- Attachment #1: Type: text/plain, Size: 5606 bytes --]
Lennert Buytenhek wrote:
> On Thu, Feb 26, 2009 at 08:47:29AM -0700, Gary Thomas wrote:
>
>>>>>> Is there support for this device anywhere? In particular,
>>>>>> the M88E6095 switch.
>>>>> Not at the moment, but it should be easy enough to add. If your
>>>>> board already runs on 2.6.28+, I can whip up some patches for you
>>>>> to try from the docs I have for that part.
>>>> That would be much appreciated, thanks.
>>> I noticed that the 6095/6095F are quite similar to the 6131 as far
>>> as the register set goes. So something along these lines (hacky
>>> patch, breaks 6131, not for mainline) might just work to detect
>>> single 6095s (cascading DSA chips is something that needs more work,
>>> let's get the single-chip case working first).
>>>
>>> The other thing you'll need to do is create dsa platform devices
>>> for your switch chips, a la how it's done in arch/arm/mach-orion5x/
>>> or arch/arm/mach-kirkwood/ for example -- you need to pass in a struct
>>> device * for your network device, a struct device * for your mii bus,
>>> the switch MII address on the MII bus, and names of the individual
>>> ports (where you'll specify "cpu" for the port on the switch chip that
>>> the CPU is connected to).
>>>
>>> Let me know if this works.
>> Thanks, I'll give it a try. It will take a little effort
>> to get setup as I have to work within the open firmware
>> structure (that's how all the various components are
>> specified).
>
> Right, we don't have OF bindings yet. I guess this would make sense
> to do generically at some point, since there are quite a few PPC
> platforms with DSA switch chips.
Here's what I tried - (patch attached) - a trulyhorrible hack,
but I've not figured out how to get the correct device pointers
from the OF world yet. The boot log shows that it's trying, but
I don't see the DSA layer (M88E690x driver) doing the MII indirection
that's needed for this device.
I'm probably not starting it up correctly, but I think I followed
the examples you cited. Any ideas?
Thanks
=============== boot log ===============================
Set gianfar_mdio = cf82fc08, mii_bus = cf9db400
gfar_mdio_read(cf9db400, 32, 2) = 0
gfar_mdio_read(cf9db400, 32, 3) = 0
gfar_mdio_read(cf9db400, 31, 2) = ffff
gfar_mdio_read(cf9db400, 31, 3) = ffff
gfar_mdio_read(cf9db400, 0, 2) = ffff
gfar_mdio_read(cf9db400, 0, 3) = ffff
gfar_mdio_read(cf9db400, 1, 2) = ffff
gfar_mdio_read(cf9db400, 1, 3) = ffff
gfar_mdio_read(cf9db400, 2, 2) = ffff
gfar_mdio_read(cf9db400, 2, 3) = ffff
gfar_mdio_read(cf9db400, 3, 2) = ffff
gfar_mdio_read(cf9db400, 3, 3) = ffff
gfar_mdio_read(cf9db400, 4, 2) = ffff
gfar_mdio_read(cf9db400, 4, 3) = ffff
gfar_mdio_read(cf9db400, 5, 2) = ffff
gfar_mdio_read(cf9db400, 5, 3) = ffff
gfar_mdio_read(cf9db400, 6, 2) = ffff
gfar_mdio_read(cf9db400, 6, 3) = ffff
gfar_mdio_read(cf9db400, 7, 2) = ffff
gfar_mdio_read(cf9db400, 7, 3) = ffff
gfar_mdio_read(cf9db400, 8, 2) = ffff
gfar_mdio_read(cf9db400, 8, 3) = ffff
gfar_mdio_read(cf9db400, 9, 2) = ffff
gfar_mdio_read(cf9db400, 9, 3) = ffff
gfar_mdio_read(cf9db400, 10, 2) = ffff
gfar_mdio_read(cf9db400, 10, 3) = ffff
gfar_mdio_read(cf9db400, 11, 2) = ffff
gfar_mdio_read(cf9db400, 11, 3) = ffff
gfar_mdio_read(cf9db400, 12, 2) = ffff
gfar_mdio_read(cf9db400, 12, 3) = ffff
gfar_mdio_read(cf9db400, 13, 2) = ffff
gfar_mdio_read(cf9db400, 13, 3) = ffff
gfar_mdio_read(cf9db400, 14, 2) = ffff
gfar_mdio_read(cf9db400, 14, 3) = ffff
gfar_mdio_read(cf9db400, 15, 2) = ffff
gfar_mdio_read(cf9db400, 15, 3) = ffff
gfar_mdio_read(cf9db400, 16, 2) = ffff
gfar_mdio_read(cf9db400, 16, 3) = ffff
gfar_mdio_read(cf9db400, 17, 2) = ffff
gfar_mdio_read(cf9db400, 17, 3) = ffff
gfar_mdio_read(cf9db400, 18, 2) = ffff
gfar_mdio_read(cf9db400, 18, 3) = ffff
gfar_mdio_read(cf9db400, 19, 2) = ffff
gfar_mdio_read(cf9db400, 19, 3) = ffff
gfar_mdio_read(cf9db400, 20, 2) = ffff
gfar_mdio_read(cf9db400, 20, 3) = ffff
gfar_mdio_read(cf9db400, 21, 2) = ffff
gfar_mdio_read(cf9db400, 21, 3) = ffff
gfar_mdio_read(cf9db400, 22, 2) = ffff
gfar_mdio_read(cf9db400, 22, 3) = ffff
gfar_mdio_read(cf9db400, 23, 2) = ffff
gfar_mdio_read(cf9db400, 23, 3) = ffff
gfar_mdio_read(cf9db400, 24, 2) = ffff
gfar_mdio_read(cf9db400, 24, 3) = ffff
gfar_mdio_read(cf9db400, 25, 2) = ffff
gfar_mdio_read(cf9db400, 25, 3) = ffff
gfar_mdio_read(cf9db400, 26, 2) = ffff
gfar_mdio_read(cf9db400, 26, 3) = ffff
gfar_mdio_read(cf9db400, 27, 2) = ffff
gfar_mdio_read(cf9db400, 27, 3) = ffff
gfar_mdio_read(cf9db400, 28, 2) = ffff
gfar_mdio_read(cf9db400, 28, 3) = ffff
gfar_mdio_read(cf9db400, 29, 2) = ffff
gfar_mdio_read(cf9db400, 29, 3) = ffff
gfar_mdio_read(cf9db400, 30, 2) = ffff
gfar_mdio_read(cf9db400, 30, 3) = ffff
gfar_mdio_read(cf9db400, 31, 2) = 0
gfar_mdio_read(cf9db400, 31, 3) = 0
Gianfar MII Bus: probed
Set gianfar_eth0 = cf82b008
eth0: Gianfar Ethernet Controller Version 1.2, 00:1d:11:81:00:00
eth0: Running with NAPI enabled
eth0: 256/256 RX/TX BD ring size
eth1: Gianfar Ethernet Controller Version 1.2, 00:1d:11:81:80:00
eth1: Running with NAPI enabled
eth1: 256/256 RX/TX BD ring size
... snipNET: Registered protocol family 17
Distributed Switch Architecture driver version 0.1
gfar_mdio_read(cf9db400, 16, 3) = ffff
mv88e6131_probe(cf9db400, 0) = 65535
eth0: could not detect attached switch
dsa: probe of dsa.0 failed with error -22
========================================================
--
------------------------------------------------------------
Gary Thomas | Consulting for the
MLB Associates | Embedded world
------------------------------------------------------------
[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 3815 bytes --]
Index: drivers/net/gianfar_mii.c
===================================================================
--- drivers/net/gianfar_mii.c (revision 4872)
+++ drivers/net/gianfar_mii.c (working copy)
@@ -101,25 +101,36 @@
/* Write value to the PHY at mii_id at register regnum,
* on the bus, waiting until the write is done before returning.
* All PHY configuration is done through the TSEC1 MIIM regs */
-int gfar_mdio_write(struct mii_bus *bus, int mii_id, int regnum, u16 value)
+int _gfar_mdio_write(struct mii_bus *bus, int mii_id, int regnum, u16 value)
{
struct gfar_mii __iomem *regs = (void __iomem *)bus->priv;
/* Write to the local MII regs */
return(gfar_local_mdio_write(regs, mii_id, regnum, value));
}
+int gfar_mdio_write(struct mii_bus *bus, int mii_id, int regnum, u16 value)
+{
+ int res = _gfar_mdio_write(bus, mii_id, regnum, value);
+ printk("%s(%p, %d, %d, %x) = %x\n", __FUNCTION__, bus, mii_id, regnum, value, res);
+ return res;
+}
/* Read the bus for PHY at addr mii_id, register regnum, and
* return the value. Clears miimcom first. All PHY
* configuration has to be done through the TSEC1 MIIM regs */
-int gfar_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
+int _gfar_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
{
struct gfar_mii __iomem *regs = (void __iomem *)bus->priv;
/* Read the local MII regs */
return(gfar_local_mdio_read(regs, mii_id, regnum));
}
-
+int gfar_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
+{
+ int res = _gfar_mdio_read(bus, mii_id, regnum);
+ printk("%s(%p, %d, %d) = %x\n", __FUNCTION__, bus, mii_id, regnum, res);
+ return res;
+}
/* Reset the MIIM registers, and wait for the bus to free */
static int gfar_mdio_reset(struct mii_bus *bus)
{
@@ -150,6 +161,9 @@
return 0;
}
+// HACK
+struct device *gianfar_mdio;
+// HACK
static int gfar_mdio_probe(struct device *dev)
{
@@ -174,6 +188,11 @@
new_bus->reset = &gfar_mdio_reset,
snprintf(new_bus->id, MII_BUS_ID_SIZE, "%x", pdev->id);
+ // HACK
+ gianfar_mdio = dev;
+ printk("Set gianfar_mdio = %p, mii_bus = %p\n", dev, new_bus);
+ // HACK
+
pdata = (struct gianfar_mdio_data *)pdev->dev.platform_data;
if (NULL == pdata) {
Index: drivers/net/gianfar.c
===================================================================
--- drivers/net/gianfar.c (revision 4872)
+++ drivers/net/gianfar.c (working copy)
@@ -152,6 +152,30 @@
return (priv->vlan_enable || priv->rx_csum_enable);
}
+// HACK
+#include <net/dsa.h>
+struct device *gianfar_eth0;
+extern struct device *gianfar_mdio;
+struct dsa_platform_data _switch_data = {
+ .port_names[0] = "lan1.1",
+ .port_names[1] = "lan1.2",
+ .port_names[2] = "lan1.3",
+ .port_names[3] = "lan1.4",
+ .port_names[4] = "lan1.5",
+ .port_names[5] = "lan1.6",
+ .port_names[6] = "lan1.7",
+ .port_names[7] = "lan1.8",
+ .port_names[10] = "cpu",
+};
+
+struct platform_device _switch_device = {
+ .name = "dsa",
+ .id = 0,
+ .num_resources = 0,
+};
+
+// HACK
+
/* Set up the ethernet device structure, private data,
* and anything else we need before we start */
static int gfar_probe(struct platform_device *pdev)
@@ -164,6 +188,17 @@
int err = 0, irq;
DECLARE_MAC_BUF(mac);
+ // HACK
+ if (!gianfar_eth0) {
+ gianfar_eth0 = &pdev->dev;
+ printk("Set gianfar_eth0 = %p\n", &pdev->dev);
+ _switch_data.netdev = gianfar_eth0;
+ _switch_data.mii_bus = gianfar_mdio;
+ _switch_device.dev.platform_data = &_switch_data;
+ platform_device_register(&_switch_device);
+ }
+ // HACK
+
einfo = (struct gianfar_platform_data *) pdev->dev.platform_data;
if (NULL == einfo) {
next prev parent reply other threads:[~2009-02-27 1:12 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-25 1:16 Marvell 88E609x switch? Gary Thomas
2009-02-25 6:31 ` Jesper Dangaard Brouer
2009-02-25 13:15 ` Lennert Buytenhek
2009-02-25 21:30 ` Gary Thomas
2009-02-26 15:11 ` Lennert Buytenhek
2009-02-26 15:47 ` Gary Thomas
2009-02-26 15:57 ` Lennert Buytenhek
2009-02-27 1:12 ` Gary Thomas [this message]
2009-02-27 1:19 ` Lennert Buytenhek
2009-02-27 12:25 ` Gary Thomas
2009-02-27 12:42 ` Gary Thomas
2009-02-27 12:53 ` Lennert Buytenhek
2009-02-27 13:19 ` Gary Thomas
2009-02-27 13:23 ` Lennert Buytenhek
2009-02-27 13:27 ` Gary Thomas
2009-02-27 14:27 ` Lennert Buytenhek
2009-02-27 14:36 ` Gary Thomas
2009-02-27 14:40 ` Lennert Buytenhek
2009-02-27 14:55 ` Gary Thomas
2009-02-27 14:57 ` Lennert Buytenhek
2009-02-27 15:08 ` Gary Thomas
2009-02-27 15:14 ` Lennert Buytenhek
2009-02-27 15:25 ` Gary Thomas
2009-02-27 15:27 ` Lennert Buytenhek
2009-02-27 15:29 ` Gary Thomas
2009-02-27 15:31 ` Lennert Buytenhek
2009-02-27 15:44 ` Gary Thomas
2009-02-27 15:52 ` Lennert Buytenhek
2009-02-27 21:12 ` Jesper Dangaard Brouer
2009-02-27 22:28 ` Lennert Buytenhek
2009-03-02 10:56 ` Jesper Dangaard Brouer
2009-03-02 11:05 ` Jesper Dangaard Brouer
2009-03-02 15:14 ` Gary Thomas
2009-03-02 15:22 ` Gary Thomas
2009-03-02 22:05 ` Jesper Dangaard Brouer
2009-03-02 22:32 ` Gary Thomas
2009-03-03 8:52 ` Jesper Dangaard Brouer
2009-03-03 9:04 ` Jesper Dangaard Brouer
2009-03-03 12:02 ` Gary Thomas
2009-03-03 12:03 ` Gary Thomas
2009-03-03 12:32 ` Jesper Dangaard Brouer
2009-03-03 13:25 ` Gary Thomas
2009-03-03 13:30 ` Gary Thomas
2009-03-03 21:52 ` Gary Thomas
2009-03-06 15:49 ` Gary Thomas
2009-03-07 15:53 ` Jesper Dangaard Brouer
[not found] ` <20090310102805.GO4738@xi.wantstofly.org>
2009-03-10 11:20 ` Gary Thomas
2009-03-10 13:36 ` Lennert Buytenhek
2009-03-10 15:11 ` Gary Thomas
2009-03-11 15:12 ` Lennert Buytenhek
2009-03-11 21:28 ` Lennert Buytenhek
2009-03-10 9:56 ` Lennert Buytenhek
2009-03-10 9:43 ` Lennert Buytenhek
[not found] ` <20090310093915.GK4738@xi.wantstofly.org>
2009-03-10 11:20 ` Gary Thomas
2009-02-28 17:37 ` Gary Thomas
2009-02-28 19:10 ` Jesper Dangaard Brouer
2009-02-28 19:31 ` Gary Thomas
2009-03-02 10:14 ` Jesper Dangaard Brouer
2009-03-10 9:34 ` Lennert Buytenhek
2009-02-27 12:52 ` Lennert Buytenhek
2009-02-27 13:22 ` Gary Thomas
2009-02-27 14:25 ` Lennert Buytenhek
2009-02-27 15:18 ` Anton Vorontsov
2009-02-27 15:26 ` Gary Thomas
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=49A73E00.7050406@mlbassoc.com \
--to=gary@mlbassoc.com \
--cc=buytenh@wantstofly.org \
--cc=netdev@vger.kernel.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.