Browse Source

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

Tom Rini 9 years ago
parent
commit
02c2c51cf7
8 changed files with 43 additions and 5 deletions
  1. 2 0
      common/bootm.c
  2. 1 0
      configs/Bananapi_defconfig
  3. 1 0
      configs/Bananapro_defconfig
  4. 11 3
      drivers/net/netconsole.c
  5. 1 1
      drivers/net/phy/phy.c
  6. 4 0
      include/net.h
  7. 6 0
      net/Kconfig
  8. 17 1
      net/eth.c

+ 2 - 0
common/bootm.c

@@ -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)

+ 1 - 0
configs/Bananapi_defconfig

@@ -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

+ 1 - 0
configs/Bananapro_defconfig

@@ -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

+ 11 - 3
drivers/net/netconsole.c

@@ -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;

+ 1 - 1
drivers/net/phy/phy.c

@@ -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;

+ 4 - 0
include/net.h

@@ -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)
 {
 {

+ 6 - 0
net/Kconfig

@@ -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

+ 17 - 1
net/eth.c

@@ -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)