diff options
author | Matteo Croce <rootkit85@yahoo.it> | 2008-02-07 18:40:24 +0000 |
---|---|---|
committer | Matteo Croce <rootkit85@yahoo.it> | 2008-02-07 18:40:24 +0000 |
commit | 55a6c2091fc83aced674f396f26b9e844532f53b (patch) | |
tree | 47ec3755978b8859caef7d2b25e6d22e4fc17969 /target/linux/ar7/patches-2.6.24/140-cpmac_fix.patch | |
parent | 56c3c68fa6e2719c37ccd4016f9de97272c8e27b (diff) | |
download | upstream-55a6c2091fc83aced674f396f26b9e844532f53b.tar.gz upstream-55a6c2091fc83aced674f396f26b9e844532f53b.tar.bz2 upstream-55a6c2091fc83aced674f396f26b9e844532f53b.zip |
more 2.6.24 patches
SVN-Revision: 10410
Diffstat (limited to 'target/linux/ar7/patches-2.6.24/140-cpmac_fix.patch')
-rw-r--r-- | target/linux/ar7/patches-2.6.24/140-cpmac_fix.patch | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/target/linux/ar7/patches-2.6.24/140-cpmac_fix.patch b/target/linux/ar7/patches-2.6.24/140-cpmac_fix.patch new file mode 100644 index 0000000000..4957d85a6d --- /dev/null +++ b/target/linux/ar7/patches-2.6.24/140-cpmac_fix.patch @@ -0,0 +1,115 @@ +--- linux-2.6.24/drivers/net/Kconfig 2008-02-07 02:29:04.000000000 +0100 ++++ linux-2.6.24/drivers/net/Kconfig 2008-02-07 02:29:35.000000000 +0100 +@@ -1830,10 +1830,8 @@ + + config CPMAC + tristate "TI AR7 CPMAC Ethernet support (EXPERIMENTAL)" +- depends on NET_ETHERNET && EXPERIMENTAL && AR7 ++ depends on NET_ETHERNET && EXPERIMENTAL && AR7 && BROKEN + select PHYLIB +- select FIXED_PHY +- select FIXED_MII_100_FDX + help + TI AR7 CPMAC Ethernet support + +--- linux-2.6.24/drivers/net/cpmac.c 2008-01-24 23:58:37.000000000 +0100 ++++ linux-2.6.24/drivers/net/cpmac.c 2008-02-07 02:32:57.000000000 +0100 +@@ -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)) { |