diff options
| author | Wade Farnsworth <wfarnsworth@mvista.com> | 2005-10-03 22:21:33 -0400 | 
|---|---|---|
| committer | Jeff Garzik <jgarzik@pobox.com> | 2005-10-03 22:21:33 -0400 | 
| commit | 49a9db07abd4ac89693dbd4dcd92fcd1f30ece00 (patch) | |
| tree | 9fd0618ed25f7123671f066d2983c92fe4116e39 | |
| parent | 32b5bfab9a09b19ea9a7d902b249ebf311fd2999 (diff) | |
[PATCH] emac: add support for platform-specific unsupported PHY features
This patch adds support to the ibm_emac driver for platform-specific
unsupported PHY features.
The patch attempts to determine the highest speed and duplex when
autonegotiation is unsupported.
Signed-off-by: Wade Farnsworth <wfarnsworth@mvista.com>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
| -rw-r--r-- | drivers/net/ibm_emac/ibm_emac_core.c | 31 | 
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/net/ibm_emac/ibm_emac_core.c b/drivers/net/ibm_emac/ibm_emac_core.c index 0de3bb906174..14e9b6315f20 100644 --- a/drivers/net/ibm_emac/ibm_emac_core.c +++ b/drivers/net/ibm_emac/ibm_emac_core.c  | |||
| @@ -1875,6 +1875,9 @@ static int emac_init_device(struct ocp_device *ocpdev, struct ibm_ocp_mal *mal) | |||
| 1875 | rc = -ENODEV; | 1875 | rc = -ENODEV; | 
| 1876 | goto bail; | 1876 | goto bail; | 
| 1877 | } | 1877 | } | 
| 1878 | |||
| 1879 | /* Disable any PHY features not supported by the platform */ | ||
| 1880 | ep->phy_mii.def->features &= ~emacdata->phy_feat_exc; | ||
| 1878 | 1881 | ||
| 1879 | /* Setup initial PHY config & startup aneg */ | 1882 | /* Setup initial PHY config & startup aneg */ | 
| 1880 | if (ep->phy_mii.def->ops->init) | 1883 | if (ep->phy_mii.def->ops->init) | 
| @@ -1882,6 +1885,34 @@ static int emac_init_device(struct ocp_device *ocpdev, struct ibm_ocp_mal *mal) | |||
| 1882 | netif_carrier_off(ndev); | 1885 | netif_carrier_off(ndev); | 
| 1883 | if (ep->phy_mii.def->features & SUPPORTED_Autoneg) | 1886 | if (ep->phy_mii.def->features & SUPPORTED_Autoneg) | 
| 1884 | ep->want_autoneg = 1; | 1887 | ep->want_autoneg = 1; | 
| 1888 | else { | ||
| 1889 | ep->want_autoneg = 0; | ||
| 1890 | |||
| 1891 | /* Select highest supported speed/duplex */ | ||
| 1892 | if (ep->phy_mii.def->features & SUPPORTED_1000baseT_Full) { | ||
| 1893 | ep->phy_mii.speed = SPEED_1000; | ||
| 1894 | ep->phy_mii.duplex = DUPLEX_FULL; | ||
| 1895 | } else if (ep->phy_mii.def->features & | ||
| 1896 | SUPPORTED_1000baseT_Half) { | ||
| 1897 | ep->phy_mii.speed = SPEED_1000; | ||
| 1898 | ep->phy_mii.duplex = DUPLEX_HALF; | ||
| 1899 | } else if (ep->phy_mii.def->features & | ||
| 1900 | SUPPORTED_100baseT_Full) { | ||
| 1901 | ep->phy_mii.speed = SPEED_100; | ||
| 1902 | ep->phy_mii.duplex = DUPLEX_FULL; | ||
| 1903 | } else if (ep->phy_mii.def->features & | ||
| 1904 | SUPPORTED_100baseT_Half) { | ||
| 1905 | ep->phy_mii.speed = SPEED_100; | ||
| 1906 | ep->phy_mii.duplex = DUPLEX_HALF; | ||
| 1907 | } else if (ep->phy_mii.def->features & | ||
| 1908 | SUPPORTED_10baseT_Full) { | ||
| 1909 | ep->phy_mii.speed = SPEED_10; | ||
| 1910 | ep->phy_mii.duplex = DUPLEX_FULL; | ||
| 1911 | } else { | ||
| 1912 | ep->phy_mii.speed = SPEED_10; | ||
| 1913 | ep->phy_mii.duplex = DUPLEX_HALF; | ||
| 1914 | } | ||
| 1915 | } | ||
| 1885 | emac_start_link(ep, NULL); | 1916 | emac_start_link(ep, NULL); | 
| 1886 | 1917 | ||
| 1887 | /* read the MAC Address */ | 1918 | /* read the MAC Address */ | 
