From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Warren Date: Sun, 20 Jun 2010 23:02:26 -0700 Subject: [U-Boot] [PATCH 1/2] cpuat91: unbreak ethernet In-Reply-To: <1276206653-24458-1-git-send-email-eric@eukrea.com> References: <1276206653-24458-1-git-send-email-eric@eukrea.com> Message-ID: <4C1F0072.70807@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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?nard > --- > 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); > + at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR, MII_BMSR,&status); > if (status& BMSR_ANEGCOMPLETE) > break; > udelay(100); > @@ -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); > + at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR, MII_LPA,&lpa); > media = mii_nway_result(lpa& adv); > speed = (media& (ADVERTISE_100FULL | ADVERTISE_100HALF) > ? 1 : 0); > @@ -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