aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/ibm_newemac/core.c18
-rw-r--r--drivers/net/ibm_newemac/core.h8
2 files changed, 23 insertions, 3 deletions
diff --git a/drivers/net/ibm_newemac/core.c b/drivers/net/ibm_newemac/core.c
index 7c66727359d4..4176dd6a2e83 100644
--- a/drivers/net/ibm_newemac/core.c
+++ b/drivers/net/ibm_newemac/core.c
@@ -43,6 +43,8 @@
43#include <asm/io.h> 43#include <asm/io.h>
44#include <asm/dma.h> 44#include <asm/dma.h>
45#include <asm/uaccess.h> 45#include <asm/uaccess.h>
46#include <asm/dcr.h>
47#include <asm/dcr-regs.h>
46 48
47#include "core.h" 49#include "core.h"
48 50
@@ -2333,6 +2335,11 @@ static int __devinit emac_init_phy(struct emac_instance *dev)
2333 dev->phy.mdio_read = emac_mdio_read; 2335 dev->phy.mdio_read = emac_mdio_read;
2334 dev->phy.mdio_write = emac_mdio_write; 2336 dev->phy.mdio_write = emac_mdio_write;
2335 2337
2338 /* Enable internal clock source */
2339#ifdef CONFIG_PPC_DCR_NATIVE
2340 if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX))
2341 dcri_clrset(SDR0, SDR0_MFR, 0, SDR0_MFR_ECS);
2342#endif
2336 /* Configure EMAC with defaults so we can at least use MDIO 2343 /* Configure EMAC with defaults so we can at least use MDIO
2337 * This is needed mostly for 440GX 2344 * This is needed mostly for 440GX
2338 */ 2345 */
@@ -2365,6 +2372,12 @@ static int __devinit emac_init_phy(struct emac_instance *dev)
2365 if (!emac_mii_phy_probe(&dev->phy, i)) 2372 if (!emac_mii_phy_probe(&dev->phy, i))
2366 break; 2373 break;
2367 } 2374 }
2375
2376 /* Enable external clock source */
2377#ifdef CONFIG_PPC_DCR_NATIVE
2378 if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX))
2379 dcri_clrset(SDR0, SDR0_MFR, SDR0_MFR_ECS, 0);
2380#endif
2368 mutex_unlock(&emac_phy_map_lock); 2381 mutex_unlock(&emac_phy_map_lock);
2369 if (i == 0x20) { 2382 if (i == 0x20) {
2370 printk(KERN_WARNING "%s: can't find PHY!\n", np->full_name); 2383 printk(KERN_WARNING "%s: can't find PHY!\n", np->full_name);
@@ -2490,8 +2503,11 @@ static int __devinit emac_init_config(struct emac_instance *dev)
2490 } 2503 }
2491 2504
2492 /* Check EMAC version */ 2505 /* Check EMAC version */
2493 if (of_device_is_compatible(np, "ibm,emac4")) 2506 if (of_device_is_compatible(np, "ibm,emac4")) {
2494 dev->features |= EMAC_FTR_EMAC4; 2507 dev->features |= EMAC_FTR_EMAC4;
2508 if (of_device_is_compatible(np, "ibm,emac-440gx"))
2509 dev->features |= EMAC_FTR_440GX_PHY_CLK_FIX;
2510 }
2495 2511
2496 /* Fixup some feature bits based on the device tree */ 2512 /* Fixup some feature bits based on the device tree */
2497 if (of_get_property(np, "has-inverted-stacr-oc", NULL)) 2513 if (of_get_property(np, "has-inverted-stacr-oc", NULL))
diff --git a/drivers/net/ibm_newemac/core.h b/drivers/net/ibm_newemac/core.h
index 4e74d8287c65..96ec48266b4a 100644
--- a/drivers/net/ibm_newemac/core.h
+++ b/drivers/net/ibm_newemac/core.h
@@ -301,6 +301,10 @@ struct emac_instance {
301 * Set if we have new type STACR with STAOPC 301 * Set if we have new type STACR with STAOPC
302 */ 302 */
303#define EMAC_FTR_HAS_NEW_STACR 0x00000040 303#define EMAC_FTR_HAS_NEW_STACR 0x00000040
304/*
305 * Set if we need phy clock workaround for 440gx
306 */
307#define EMAC_FTR_440GX_PHY_CLK_FIX 0x00000080
304 308
305 309
306/* Right now, we don't quite handle the always/possible masks on the 310/* Right now, we don't quite handle the always/possible masks on the
@@ -312,8 +316,8 @@ enum {
312 316
313 EMAC_FTRS_POSSIBLE = 317 EMAC_FTRS_POSSIBLE =
314#ifdef CONFIG_IBM_NEW_EMAC_EMAC4 318#ifdef CONFIG_IBM_NEW_EMAC_EMAC4
315 EMAC_FTR_EMAC4 | EMAC_FTR_HAS_NEW_STACR | 319 EMAC_FTR_EMAC4 | EMAC_FTR_HAS_NEW_STACR |
316 EMAC_FTR_STACR_OC_INVERT | 320 EMAC_FTR_STACR_OC_INVERT | EMAC_FTR_440GX_PHY_CLK_FIX |
317#endif 321#endif
318#ifdef CONFIG_IBM_NEW_EMAC_TAH 322#ifdef CONFIG_IBM_NEW_EMAC_TAH
319 EMAC_FTR_HAS_TAH | 323 EMAC_FTR_HAS_TAH |