diff --git a/README b/README
index 6f3748d6dc4c2a8d4ce491d92420acffa9e42d36..ed73981b94817bfb434d1de245a8b014823ab223 100644
--- a/README
+++ b/README
@@ -709,6 +709,7 @@ The following options need to be configured:
 					  (requires CONFIG_CMD_MEMORY)
 		CONFIG_CMD_SOURCE	  "source" command Support
 		CONFIG_CMD_SPI		* SPI serial bus support
+		CONFIG_CMD_TFTPSRV	* TFTP transfer in server mode
 		CONFIG_CMD_USB		* USB support
 		CONFIG_CMD_VFD		* VFD support (TRAB)
 		CONFIG_CMD_CDP		* Cisco Discover Protocol support
diff --git a/common/cmd_net.c b/common/cmd_net.c
index 8c6f5c8c3dd29d57c65bb896581708c44746d415..b2c9355a21abe2db2622b03be5a0b9a8b87370fd 100644
--- a/common/cmd_net.c
+++ b/common/cmd_net.c
@@ -52,6 +52,23 @@ U_BOOT_CMD(
 	"[loadAddress] [[hostIPaddr:]bootfilename]"
 );
 
+#ifdef CONFIG_CMD_TFTPSRV
+static int do_tftpsrv(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+{
+	return netboot_common(TFTPSRV, cmdtp, argc, argv);
+}
+
+U_BOOT_CMD(
+	tftpsrv,	2,	1,	do_tftpsrv,
+	"act as a TFTP server and boot the first received file",
+	"[loadAddress]\n"
+	"Listen for an incoming TFTP transfer, receive a file and boot it.\n"
+	"The transfer is aborted if a transfer has not been started after\n"
+	"about 50 seconds or if Ctrl-C is pressed."
+);
+#endif
+
+
 #ifdef CONFIG_CMD_RARP
 int do_rarpb (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
diff --git a/include/net.h b/include/net.h
index 01f7159a0781aae480d55d1fc3373e6197c12b9e..018a74402c8357f55e3c63777cb49be4514ccd78 100644
--- a/include/net.h
+++ b/include/net.h
@@ -364,7 +364,8 @@ extern int		NetState;		/* Network loop state		*/
 extern int		NetRestartWrap;		/* Tried all network devices	*/
 #endif
 
-typedef enum { BOOTP, RARP, ARP, TFTP, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP } proto_t;
+typedef enum { BOOTP, RARP, ARP, TFTP, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP,
+	       TFTPSRV } proto_t;
 
 /* from net/net.c */
 extern char	BootFile[128];			/* Boot File name		*/
diff --git a/net/net.c b/net/net.c
index 2abf87929b935d62ebabde49093af9c0ee6c5fc2..7a93542122cb14be38c276e3d4a23d8cc1d8b91a 100644
--- a/net/net.c
+++ b/net/net.c
@@ -423,7 +423,11 @@ restart:
 			/* always use ARP to get server ethernet address */
 			TftpStart();
 			break;
-
+#ifdef CONFIG_CMD_TFTPSRV
+		case TFTPSRV:
+			TftpStartServer();
+			break;
+#endif
 #if defined(CONFIG_CMD_DHCP)
 		case DHCP:
 			BootpTry = 0;
@@ -1791,6 +1795,7 @@ common:
 		/* Fall through */
 
 	case NETCONS:
+	case TFTPSRV:
 		if (NetOurIP == 0) {
 			puts("*** ERROR: `ipaddr' not set\n");
 			return 1;