mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
Merge branch 'master' of git://www.denx.de/git/u-boot-net
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
#include <common.h>
|
||||
#include <at91rm9200_net.h>
|
||||
#include <net.h>
|
||||
#include <miiphy.h>
|
||||
#include <lxt971a.h>
|
||||
|
||||
#ifdef CONFIG_DRIVER_ETHER
|
||||
@@ -51,8 +52,8 @@ unsigned int lxt972_IsPhyConnected (AT91PS_EMAC p_mac)
|
||||
unsigned short Id1, Id2;
|
||||
|
||||
at91rm9200_EmacEnableMDIO (p_mac);
|
||||
at91rm9200_EmacReadPhy (p_mac, PHY_COMMON_ID1, &Id1);
|
||||
at91rm9200_EmacReadPhy (p_mac, PHY_COMMON_ID2, &Id2);
|
||||
at91rm9200_EmacReadPhy(p_mac, PHY_PHYIDR1, &Id1);
|
||||
at91rm9200_EmacReadPhy(p_mac, PHY_PHYIDR2, &Id2);
|
||||
at91rm9200_EmacDisableMDIO (p_mac);
|
||||
|
||||
if ((Id1 == (0x0013)) && ((Id2 & 0xFFF0) == 0x78E0))
|
||||
@@ -169,18 +170,18 @@ UCHAR lxt972_AutoNegotiate (AT91PS_EMAC p_mac, int *status)
|
||||
unsigned short value;
|
||||
|
||||
/* Set lxt972 control register */
|
||||
if (!at91rm9200_EmacReadPhy (p_mac, PHY_COMMON_CTRL, &value))
|
||||
if (!at91rm9200_EmacReadPhy (p_mac, PHY_BMCR, &value))
|
||||
return FALSE;
|
||||
|
||||
/* Restart Auto_negotiation */
|
||||
value |= PHY_COMMON_CTRL_RES_AUTO;
|
||||
if (!at91rm9200_EmacWritePhy (p_mac, PHY_COMMON_CTRL, &value))
|
||||
value |= PHY_BMCR_RST_NEG;
|
||||
if (!at91rm9200_EmacWritePhy (p_mac, PHY_BMCR, &value))
|
||||
return FALSE;
|
||||
|
||||
/*check AutoNegotiate complete */
|
||||
udelay (10000);
|
||||
at91rm9200_EmacReadPhy (p_mac, PHY_COMMON_STAT, &value);
|
||||
if (!(value & PHY_COMMON_STAT_AN_COMP))
|
||||
at91rm9200_EmacReadPhy(p_mac, PHY_BMSR, &value);
|
||||
if (!(value & PHY_BMSR_AUTN_COMP))
|
||||
return FALSE;
|
||||
|
||||
return (lxt972_GetLinkSpeed (p_mac));
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
#include <common.h>
|
||||
#include <net.h>
|
||||
#include <miiphy.h>
|
||||
#include <lxt971a.h>
|
||||
#include <asm/arch/emac_defs.h>
|
||||
|
||||
@@ -36,11 +37,11 @@
|
||||
|
||||
int lxt972_is_phy_connected(int phy_addr)
|
||||
{
|
||||
u_int16_t id1, id2;
|
||||
u_int16_t id1, id2;
|
||||
|
||||
if (!dm644x_eth_phy_read(phy_addr, PHY_COMMON_ID1, &id1))
|
||||
if (!dm644x_eth_phy_read(phy_addr, PHY_PHYIDR1, &id1))
|
||||
return(0);
|
||||
if (!dm644x_eth_phy_read(phy_addr, PHY_COMMON_ID2, &id2))
|
||||
if (!dm644x_eth_phy_read(phy_addr, PHY_PHYIDR2, &id2))
|
||||
return(0);
|
||||
|
||||
if ((id1 == (0x0013)) && ((id2 & 0xfff0) == 0x78e0))
|
||||
@@ -51,8 +52,8 @@ int lxt972_is_phy_connected(int phy_addr)
|
||||
|
||||
int lxt972_get_link_speed(int phy_addr)
|
||||
{
|
||||
u_int16_t stat1, tmp;
|
||||
volatile emac_regs* emac = (emac_regs *)EMAC_BASE_ADDR;
|
||||
u_int16_t stat1, tmp;
|
||||
volatile emac_regs *emac = (emac_regs *)EMAC_BASE_ADDR;
|
||||
|
||||
if (!dm644x_eth_phy_read(phy_addr, PHY_LXT971_STAT2, &stat1))
|
||||
return(0);
|
||||
@@ -70,37 +71,23 @@ int lxt972_get_link_speed(int phy_addr)
|
||||
if (!dm644x_eth_phy_read(phy_addr, PHY_LXT971_DIG_CFG, &tmp))
|
||||
return(0);
|
||||
|
||||
|
||||
/* Speed doesn't matter, there is no setting for it in EMAC... */
|
||||
if (stat1 & PHY_LXT971_STAT2_100BTX) {
|
||||
if (stat1 & PHY_LXT971_STAT2_DUPLEX_MODE) {
|
||||
/* set DM644x EMAC for Full Duplex */
|
||||
emac->MACCONTROL = EMAC_MACCONTROL_MIIEN_ENABLE | EMAC_MACCONTROL_FULLDUPLEX_ENABLE;
|
||||
} else {
|
||||
/*set DM644x EMAC for Half Duplex */
|
||||
emac->MACCONTROL = EMAC_MACCONTROL_MIIEN_ENABLE;
|
||||
}
|
||||
|
||||
return(1);
|
||||
if (stat1 & PHY_LXT971_STAT2_DUPLEX_MODE) {
|
||||
/* set DM644x EMAC for Full Duplex */
|
||||
emac->MACCONTROL = EMAC_MACCONTROL_MIIEN_ENABLE |
|
||||
EMAC_MACCONTROL_FULLDUPLEX_ENABLE;
|
||||
} else {
|
||||
if (stat1 & PHY_LXT971_STAT2_DUPLEX_MODE) {
|
||||
/* set DM644x EMAC for Full Duplex */
|
||||
emac->MACCONTROL = EMAC_MACCONTROL_MIIEN_ENABLE | EMAC_MACCONTROL_FULLDUPLEX_ENABLE;
|
||||
} else {
|
||||
/*set DM644x EMAC for Half Duplex */
|
||||
emac->MACCONTROL = EMAC_MACCONTROL_MIIEN_ENABLE;
|
||||
}
|
||||
|
||||
return(1);
|
||||
/*set DM644x EMAC for Half Duplex */
|
||||
emac->MACCONTROL = EMAC_MACCONTROL_MIIEN_ENABLE;
|
||||
}
|
||||
|
||||
return(0);
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
int lxt972_init_phy(int phy_addr)
|
||||
{
|
||||
int ret = 1;
|
||||
int ret = 1;
|
||||
|
||||
if (!lxt972_get_link_speed(phy_addr)) {
|
||||
/* Try another time */
|
||||
@@ -116,22 +103,21 @@ int lxt972_init_phy(int phy_addr)
|
||||
|
||||
int lxt972_auto_negotiate(int phy_addr)
|
||||
{
|
||||
u_int16_t tmp;
|
||||
u_int16_t tmp;
|
||||
|
||||
|
||||
if (!dm644x_eth_phy_read(phy_addr, PHY_COMMON_CTRL, &tmp))
|
||||
if (!dm644x_eth_phy_read(phy_addr, PHY_BMCR, &tmp))
|
||||
return(0);
|
||||
|
||||
/* Restart Auto_negotiation */
|
||||
tmp |= PHY_COMMON_CTRL_RES_AUTO;
|
||||
dm644x_eth_phy_write(phy_addr, PHY_COMMON_CTRL, tmp);
|
||||
tmp |= PHY_BMCR_RST_NEG;
|
||||
dm644x_eth_phy_write(phy_addr, PHY_BMCR, tmp);
|
||||
|
||||
/*check AutoNegotiate complete */
|
||||
udelay (10000);
|
||||
if (!dm644x_eth_phy_read(phy_addr, PHY_COMMON_STAT, &tmp))
|
||||
if (!dm644x_eth_phy_read(phy_addr, PHY_BMSR, &tmp))
|
||||
return(0);
|
||||
|
||||
if (!(tmp & PHY_COMMON_STAT_AN_COMP))
|
||||
if (!(tmp & PHY_BMSR_AUTN_COMP))
|
||||
return(0);
|
||||
|
||||
return (lxt972_get_link_speed(phy_addr));
|
||||
|
||||
@@ -357,3 +357,23 @@ int dma_xfer(void *dest, u32 count, void *src)
|
||||
return ((int)dma_check());
|
||||
}
|
||||
#endif /*CONFIG_DDR_ECC*/
|
||||
|
||||
#ifdef CONFIG_TSEC_ENET
|
||||
/* Default initializations for TSEC controllers. To override,
|
||||
* create a board-specific function called:
|
||||
* int board_eth_init(bd_t *bis)
|
||||
*/
|
||||
|
||||
extern int tsec_initialize(bd_t * bis, int index, char *devname);
|
||||
|
||||
int cpu_eth_init(bd_t *bis)
|
||||
{
|
||||
#if defined(CONFIG_TSEC1)
|
||||
tsec_initialize(bis, 0, CONFIG_TSEC1_NAME);
|
||||
#endif
|
||||
#if defined(CONFIG_TSEC2)
|
||||
tsec_initialize(bis, 1, CONFIG_TSEC2_NAME);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -353,3 +353,33 @@ void upmconfig (uint upm, uint * table, uint size)
|
||||
}
|
||||
out_be32(mxmr, loopval); /* OP_NORMAL */
|
||||
}
|
||||
|
||||
#if defined(CONFIG_TSEC_ENET) || defined(CONFIGMPC85XX_FEC)
|
||||
/* Default initializations for TSEC controllers. To override,
|
||||
* create a board-specific function called:
|
||||
* int board_eth_init(bd_t *bis)
|
||||
*/
|
||||
|
||||
extern int tsec_initialize(bd_t * bis, int index, char *devname);
|
||||
|
||||
int cpu_eth_init(bd_t *bis)
|
||||
{
|
||||
#if defined(CONFIG_TSEC1)
|
||||
tsec_initialize(bis, 0, CONFIG_TSEC1_NAME);
|
||||
#endif
|
||||
#if defined(CONFIG_TSEC2)
|
||||
tsec_initialize(bis, 1, CONFIG_TSEC2_NAME);
|
||||
#endif
|
||||
#if defined(CONFIG_MPC85XX_FEC)
|
||||
tsec_initialize(bis, 2, CONFIG_MPC85XX_FEC_NAME);
|
||||
#else
|
||||
#if defined(CONFIG_TSEC3)
|
||||
tsec_initialize(bis, 2, CONFIG_TSEC3_NAME);
|
||||
#endif
|
||||
#if defined(CONFIG_TSEC4)
|
||||
tsec_initialize(bis, 3, CONFIG_TSEC4_NAME);
|
||||
#endif
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -290,3 +290,30 @@ void mpc86xx_reginfo(void)
|
||||
printf("\tBR7\t0x%08X\tOR7\t0x%08X \n", in_be32(&lbc->br7), in_be32(&lbc->or7));
|
||||
|
||||
}
|
||||
|
||||
#ifdef CONFIG_TSEC_ENET
|
||||
/* Default initializations for TSEC controllers. To override,
|
||||
* create a board-specific function called:
|
||||
* int board_eth_init(bd_t *bis)
|
||||
*/
|
||||
|
||||
extern int tsec_initialize(bd_t * bis, int index, char *devname);
|
||||
|
||||
int cpu_eth_init(bd_t *bis)
|
||||
{
|
||||
#if defined(CONFIG_TSEC1)
|
||||
tsec_initialize(bis, 0, CONFIG_TSEC1_NAME);
|
||||
#endif
|
||||
#if defined(CONFIG_TSEC2)
|
||||
tsec_initialize(bis, 1, CONFIG_TSEC2_NAME);
|
||||
#endif
|
||||
#if defined(CONFIG_TSEC3)
|
||||
tsec_initialize(bis, 2, CONFIG_TSEC3_NAME);
|
||||
#endif
|
||||
#if defined(CONFIG_TSEC4)
|
||||
tsec_initialize(bis, 3, CONFIG_TSEC4_NAME);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user