2008-02-09 01:17:45 +08:00
|
|
|
--- linux-2.6.24/drivers/net/Kconfig 2008-01-25 02:20:37.000000000 +0100
|
|
|
|
+++ linux-2.6.24/drivers/net/Kconfig 2008-02-08 18:12:02.000000000 +0100
|
|
|
|
@@ -1709,8 +1709,6 @@
|
2008-02-08 02:40:24 +08:00
|
|
|
tristate "TI AR7 CPMAC Ethernet support (EXPERIMENTAL)"
|
2008-02-09 01:17:45 +08:00
|
|
|
depends on NET_ETHERNET && EXPERIMENTAL && AR7
|
2008-02-08 02:40:24 +08:00
|
|
|
select PHYLIB
|
|
|
|
- select FIXED_PHY
|
|
|
|
- select FIXED_MII_100_FDX
|
|
|
|
help
|
|
|
|
TI AR7 CPMAC Ethernet support
|
|
|
|
|
2008-02-09 01:17:45 +08:00
|
|
|
--- linux-2.6.24/drivers/net/cpmac.c 2008-01-25 02:20:37.000000000 +0100
|
|
|
|
+++ linux-2.6.24/drivers/net/cpmac.c 2008-02-08 18:05:35.000000000 +0100
|
2008-02-08 02:40:24 +08:00
|
|
|
@@ -661,9 +661,6 @@
|
|
|
|
int queue;
|
|
|
|
u32 status;
|
|
|
|
|
|
|
|
- if (!dev)
|
|
|
|
- return IRQ_NONE;
|
|
|
|
-
|
|
|
|
priv = netdev_priv(dev);
|
|
|
|
|
|
|
|
status = cpmac_read(priv->regs, CPMAC_MAC_INT_VECTOR);
|
|
|
|
@@ -848,15 +845,6 @@
|
|
|
|
spin_unlock(&priv->lock);
|
|
|
|
}
|
|
|
|
|
|
|
|
-static int cpmac_link_update(struct net_device *dev,
|
|
|
|
- struct fixed_phy_status *status)
|
|
|
|
-{
|
|
|
|
- status->link = 1;
|
|
|
|
- status->speed = 100;
|
|
|
|
- status->duplex = 1;
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static int cpmac_open(struct net_device *dev)
|
|
|
|
{
|
|
|
|
int i, size, res;
|
|
|
|
@@ -999,11 +987,11 @@
|
|
|
|
static int __devinit cpmac_probe(struct platform_device *pdev)
|
|
|
|
{
|
|
|
|
int rc, phy_id, i;
|
|
|
|
+ int mdio_bus_id = cpmac_mii.id;
|
|
|
|
struct resource *mem;
|
|
|
|
struct cpmac_priv *priv;
|
|
|
|
struct net_device *dev;
|
|
|
|
struct plat_cpmac_data *pdata;
|
|
|
|
- struct fixed_info *fixed_phy;
|
|
|
|
DECLARE_MAC_BUF(mac);
|
|
|
|
|
|
|
|
pdata = pdev->dev.platform_data;
|
|
|
|
@@ -1017,9 +1005,23 @@
|
|
|
|
}
|
|
|
|
|
|
|
|
if (phy_id == PHY_MAX_ADDR) {
|
|
|
|
- if (external_switch || dumb_switch)
|
|
|
|
+ if (external_switch || dumb_switch) {
|
|
|
|
+ struct fixed_phy_status status = {};
|
|
|
|
+
|
|
|
|
+ mdio_bus_id = 0;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * FIXME: this should be in the platform code!
|
|
|
|
+ * Since there is not platform code at all (that is,
|
|
|
|
+ * no mainline users of that driver), place it here
|
|
|
|
+ * for now.
|
|
|
|
+ */
|
|
|
|
phy_id = 0;
|
|
|
|
- else {
|
|
|
|
+ status.link = 1;
|
|
|
|
+ status.duplex = 1;
|
|
|
|
+ status.speed = 100;
|
|
|
|
+ fixed_phy_add(PHY_POLL, phy_id, &status);
|
|
|
|
+ } else {
|
|
|
|
printk(KERN_ERR "cpmac: no PHY present\n");
|
|
|
|
return -ENODEV;
|
|
|
|
}
|
|
|
|
@@ -1063,32 +1065,8 @@
|
|
|
|
priv->msg_enable = netif_msg_init(debug_level, 0xff);
|
|
|
|
memcpy(dev->dev_addr, pdata->dev_addr, sizeof(dev->dev_addr));
|
|
|
|
|
|
|
|
- if (phy_id == 31) {
|
|
|
|
- snprintf(priv->phy_name, BUS_ID_SIZE, PHY_ID_FMT, cpmac_mii.id,
|
|
|
|
- phy_id);
|
|
|
|
- } else {
|
|
|
|
- /* Let's try to get a free fixed phy... */
|
|
|
|
- for (i = 0; i < MAX_PHY_AMNT; i++) {
|
|
|
|
- fixed_phy = fixed_mdio_get_phydev(i);
|
|
|
|
- if (!fixed_phy)
|
|
|
|
- continue;
|
|
|
|
- if (!fixed_phy->phydev->attached_dev) {
|
|
|
|
- strncpy(priv->phy_name,
|
|
|
|
- fixed_phy->phydev->dev.bus_id,
|
|
|
|
- BUS_ID_SIZE);
|
|
|
|
- fixed_mdio_set_link_update(fixed_phy->phydev,
|
|
|
|
- &cpmac_link_update);
|
|
|
|
- goto phy_found;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if (netif_msg_drv(priv))
|
|
|
|
- printk(KERN_ERR "%s: Could not find fixed PHY\n",
|
|
|
|
- dev->name);
|
|
|
|
- rc = -ENODEV;
|
|
|
|
- goto fail;
|
|
|
|
- }
|
|
|
|
+ snprintf(priv->phy_name, BUS_ID_SIZE, PHY_ID_FMT, mdio_bus_id, phy_id);
|
|
|
|
|
|
|
|
-phy_found:
|
|
|
|
priv->phy = phy_connect(dev, priv->phy_name, &cpmac_adjust_link, 0,
|
|
|
|
PHY_INTERFACE_MODE_MII);
|
|
|
|
if (IS_ERR(priv->phy)) {
|