Merge branch 'master' of git://git.denx.de/u-boot-net

This commit is contained in:
Tom Rini 2015-09-30 18:51:51 -04:00
commit 02c2c51cf7
8 changed files with 43 additions and 5 deletions

View file

@ -474,7 +474,9 @@ ulong bootm_disable_interrupts(void)
#ifdef CONFIG_NETCONSOLE #ifdef CONFIG_NETCONSOLE
/* Stop the ethernet stack if NetConsole could have left it up */ /* Stop the ethernet stack if NetConsole could have left it up */
eth_halt(); eth_halt();
# ifndef CONFIG_DM_ETH
eth_unregister(eth_get_dev()); eth_unregister(eth_get_dev());
# endif
#endif #endif
#if defined(CONFIG_CMD_USB) #if defined(CONFIG_CMD_USB)

View file

@ -11,5 +11,6 @@ CONFIG_SYS_EXTRA_OPTIONS="AXP209_POWER,SUNXI_GMAC,RGMII,MACPWR=SUNXI_GPH(23),AHC
# CONFIG_CMD_IMLS is not set # CONFIG_CMD_IMLS is not set
# CONFIG_CMD_FLASH is not set # CONFIG_CMD_FLASH is not set
# CONFIG_CMD_FPGA is not set # CONFIG_CMD_FPGA is not set
CONFIG_NETCONSOLE=y
CONFIG_ETH_DESIGNWARE=y CONFIG_ETH_DESIGNWARE=y
CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_HCD=y

View file

@ -13,5 +13,6 @@ CONFIG_SYS_EXTRA_OPTIONS="AXP209_POWER,SUNXI_GMAC,RGMII,MACPWR=SUNXI_GPH(23),AHC
# CONFIG_CMD_IMLS is not set # CONFIG_CMD_IMLS is not set
# CONFIG_CMD_FLASH is not set # CONFIG_CMD_FLASH is not set
# CONFIG_CMD_FPGA is not set # CONFIG_CMD_FPGA is not set
CONFIG_NETCONSOLE=y
CONFIG_ETH_DESIGNWARE=y CONFIG_ETH_DESIGNWARE=y
CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_HCD=y

View file

@ -170,7 +170,11 @@ int nc_input_packet(uchar *pkt, struct in_addr src_ip, unsigned dest_port,
static void nc_send_packet(const char *buf, int len) static void nc_send_packet(const char *buf, int len)
{ {
#ifdef CONFIG_DM_ETH
struct udevice *eth;
#else
struct eth_device *eth; struct eth_device *eth;
#endif
int inited = 0; int inited = 0;
uchar *pkt; uchar *pkt;
uchar *ether; uchar *ether;
@ -183,7 +187,7 @@ static void nc_send_packet(const char *buf, int len)
return; return;
if (!memcmp(nc_ether, net_null_ethaddr, 6)) { if (!memcmp(nc_ether, net_null_ethaddr, 6)) {
if (eth->state == ETH_STATE_ACTIVE) if (eth_is_active(eth))
return; /* inside net loop */ return; /* inside net loop */
output_packet = buf; output_packet = buf;
output_packet_len = len; output_packet_len = len;
@ -194,7 +198,7 @@ static void nc_send_packet(const char *buf, int len)
return; return;
} }
if (eth->state != ETH_STATE_ACTIVE) { if (!eth_is_active(eth)) {
if (eth_is_on_demand_init()) { if (eth_is_on_demand_init()) {
if (eth_init() < 0) if (eth_init() < 0)
return; return;
@ -292,7 +296,11 @@ static int nc_stdio_getc(struct stdio_dev *dev)
static int nc_stdio_tstc(struct stdio_dev *dev) static int nc_stdio_tstc(struct stdio_dev *dev)
{ {
#ifdef CONFIG_DM_ETH
struct udevice *eth;
#else
struct eth_device *eth; struct eth_device *eth;
#endif
if (input_recursion) if (input_recursion)
return 0; return 0;
@ -301,7 +309,7 @@ static int nc_stdio_tstc(struct stdio_dev *dev)
return 1; return 1;
eth = eth_get_dev(); eth = eth_get_dev();
if (eth && eth->state == ETH_STATE_ACTIVE) if (eth_is_active(eth))
return 0; /* inside net loop */ return 0; /* inside net loop */
input_recursion = 1; input_recursion = 1;

View file

@ -571,7 +571,7 @@ static struct phy_device *phy_device_create(struct mii_dev *bus, int addr,
memset(dev, 0, sizeof(*dev)); memset(dev, 0, sizeof(*dev));
dev->duplex = -1; dev->duplex = -1;
dev->link = 1; dev->link = 0;
dev->interface = interface; dev->interface = interface;
dev->autoneg = AUTONEG_ENABLE; dev->autoneg = AUTONEG_ENABLE;

View file

@ -149,7 +149,9 @@ struct udevice *eth_get_dev(void); /* get the current device */
*/ */
struct udevice *eth_get_dev_by_name(const char *devname); struct udevice *eth_get_dev_by_name(const char *devname);
unsigned char *eth_get_ethaddr(void); /* get the current device MAC */ unsigned char *eth_get_ethaddr(void); /* get the current device MAC */
/* Used only when NetConsole is enabled */ /* Used only when NetConsole is enabled */
int eth_is_active(struct udevice *dev); /* Test device for active state */
int eth_init_state_only(void); /* Set active state */ int eth_init_state_only(void); /* Set active state */
void eth_halt_state_only(void); /* Set passive state */ void eth_halt_state_only(void); /* Set passive state */
#endif #endif
@ -195,6 +197,8 @@ static inline unsigned char *eth_get_ethaddr(void)
return NULL; return NULL;
} }
/* Used only when NetConsole is enabled */
int eth_is_active(struct eth_device *dev); /* Test device for active state */
/* Set active state */ /* Set active state */
static inline __attribute__((always_inline)) int eth_init_state_only(void) static inline __attribute__((always_inline)) int eth_init_state_only(void)
{ {

View file

@ -16,4 +16,10 @@ config NET_RANDOM_ETHADDR
A new MAC address will be generated on every boot and it will A new MAC address will be generated on every boot and it will
not be added to the environment. not be added to the environment.
config NETCONSOLE
bool "NetConsole support"
help
Support the 'nc' input/output device for networked console.
See README.NetConsole for details.
endif # if NET endif # if NET

View file

@ -389,6 +389,17 @@ void eth_halt(void)
priv->state = ETH_STATE_PASSIVE; priv->state = ETH_STATE_PASSIVE;
} }
int eth_is_active(struct udevice *dev)
{
struct eth_device_priv *priv;
if (!dev || !device_active(dev))
return 0;
priv = dev_get_uclass_priv(dev);
return priv->state == ETH_STATE_ACTIVE;
}
int eth_send(void *packet, int length) int eth_send(void *packet, int length)
{ {
struct udevice *current; struct udevice *current;
@ -580,7 +591,7 @@ UCLASS_DRIVER(eth) = {
.per_device_auto_alloc_size = sizeof(struct eth_device_priv), .per_device_auto_alloc_size = sizeof(struct eth_device_priv),
.flags = DM_UC_FLAG_SEQ_ALIAS, .flags = DM_UC_FLAG_SEQ_ALIAS,
}; };
#endif #endif /* #ifdef CONFIG_DM_ETH */
#ifndef CONFIG_DM_ETH #ifndef CONFIG_DM_ETH
@ -918,6 +929,11 @@ void eth_halt(void)
eth_current->state = ETH_STATE_PASSIVE; eth_current->state = ETH_STATE_PASSIVE;
} }
int eth_is_active(struct eth_device *dev)
{
return dev && dev->state == ETH_STATE_ACTIVE;
}
int eth_send(void *packet, int length) int eth_send(void *packet, int length)
{ {
if (!eth_current) if (!eth_current)