
Hi Eric,
On 6/10/2010 2:50 PM, Eric Bénard wrote:
- the following problems are met :
config was set to use the new driver as a default but
- RMII was not enabled for the new driver
- the new driver didn't compile with RMII enabled
- the new driver initialize a PHY at address O when the PHY of
this board is at 1 thus we get "AT91 EMAC RMII: No PHY present"
- to fix these problems, this patch :
- enable RMII for the new driver
- fix the wrong define used in the at91_emac.c
- allow the config file to set a default phy address (and use
0 as a default as in the actual at91_emac.c driver)
Signed-off-by: Eric Bénarderic@eukrea.com
drivers/net/at91_emac.c | 24 ++++++++++++++---------- include/configs/cpuat91.h | 9 +++------ 2 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/drivers/net/at91_emac.c b/drivers/net/at91_emac.c index 2399569..1ebcf05 100644 --- a/drivers/net/at91_emac.c +++ b/drivers/net/at91_emac.c @@ -53,6 +53,10 @@ Please decrease the CONFIG_SYS_RX_ETH_BUFFER value #endif
+#ifndef CONFIG_DRIVER_AT91EMAC_PHYADDR +#define CONFIG_DRIVER_AT91EMAC_PHYADDR 0 +#endif
- /* MDIO clock must not exceed 2.5 MHz, so enable MCK divider */ #if (AT91C_MASTER_CLOCK> 80000000) #define HCLK_DIV AT91_EMAC_CFG_MCLK_64
@@ -198,12 +202,12 @@ static int at91emac_phy_reset(struct eth_device *netdev) emac = (at91_emac_t *) netdev->iobase;
adv = ADVERTISE_CSMA | ADVERTISE_ALL;
- at91emac_write(emac, 0, MII_ADVERTISE, adv);
- at91emac_write(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR, MII_ADVERTISE, adv); VERBOSEP("%s: Starting autonegotiation...\n", netdev->name);
- at91emac_write(emac, 0, MII_BMCR, (BMCR_ANENABLE | BMCR_ANRESTART));
- at91emac_write(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR, MII_BMCR, (BMCR_ANENABLE | BMCR_ANRESTART));
This line's too long. Please check the other ones too. Try to keep less than 78 characters.
for (i = 0; i< 100000 / 100; i++) {
at91emac_read(emac, 0, MII_BMSR,&status);
if (status& BMSR_ANEGCOMPLETE) break; udelay(100);at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR, MII_BMSR,&status);
@@ -229,13 +233,13 @@ static int at91emac_phy_init(struct eth_device *netdev) emac = (at91_emac_t *) netdev->iobase;
/* Check if the PHY is up to snuff... */
- at91emac_read(emac, 0, MII_PHYSID1,&phy_id);
- at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR, MII_PHYSID1,&phy_id); if (phy_id == 0xffff) { printf("%s: No PHY present\n", netdev->name); return 1; }
- at91emac_read(emac, 0, MII_BMSR,&status);
at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR, MII_BMSR,&status);
if (!(status& BMSR_LSTATUS)) { /* Try to re-negotiate if we don't have link already. */
@@ -243,7 +247,7 @@ static int at91emac_phy_init(struct eth_device *netdev) return 2;
for (i = 0; i< 100000 / 100; i++) {
at91emac_read(emac, 0, MII_BMSR,&status);
at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR, MII_BMSR,&status); if (status& BMSR_LSTATUS) break; udelay(100);
@@ -253,8 +257,8 @@ static int at91emac_phy_init(struct eth_device *netdev) VERBOSEP("%s: link down\n", netdev->name); return 3; } else {
at91emac_read(emac, 0, MII_ADVERTISE,&adv);
at91emac_read(emac, 0, MII_LPA,&lpa);
at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR, MII_ADVERTISE,&adv);
media = mii_nway_result(lpa& adv); speed = (media& (ADVERTISE_100FULL | ADVERTISE_100HALF) ? 1 : 0);at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR, MII_LPA,&lpa);
@@ -271,7 +275,7 @@ int at91emac_UpdateLinkSpeed(at91_emac_t *emac) { unsigned short stat1;
- at91emac_read(emac, 0, MII_BMSR,&stat1);
at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR, MII_BMSR,&stat1);
if (!(stat1& BMSR_LSTATUS)) /* link status up? */ return 1;
@@ -372,7 +376,7 @@ static int at91emac_init(struct eth_device *netdev, bd_t *bd) value = AT91_EMAC_CFG_CAF | AT91_EMAC_CFG_NBC | HCLK_DIV; #ifdef CONFIG_RMII
- value |= AT91C_EMAC_RMII;
- value |= AT91_EMAC_CFG_RMII; #endif writel(value,&emac->cfg);
diff --git a/include/configs/cpuat91.h b/include/configs/cpuat91.h index b4fda76..049298c 100644 --- a/include/configs/cpuat91.h +++ b/include/configs/cpuat91.h @@ -131,15 +131,12 @@ (CONFIG_SYS_MEMTEST_START + PHYS_SDRAM_SIZE - 512 * 1024)
#define CONFIG_NET_MULTI 1 -#ifdef CONFIG_NET_MULTI #define CONFIG_DRIVER_AT91EMAC 1 #define CONFIG_SYS_RX_ETH_BUFFER 8 -#else -#define CONFIG_DRIVER_ETHER 1 -#endif +#define CONFIG_RMII 1 +#define CONFIG_MII 1 +#define CONFIG_DRIVER_AT91EMAC_PHYADDR 1 #define CONFIG_NET_RETRY_COUNT 20 -#define CONFIG_AT91C_USE_RMII 1 -#define CONFIG_PHY_ADDRESS (1<< 5) #define CONFIG_KS8721_PHY 1
#define CONFIG_SYS_FLASH_CFI 1
regards, Ben