zte's code,first commit

Change-Id: I9a04da59e459a9bc0d67f101f700d9d7dc8d681b
diff --git a/boot/common/src/uboot/downloader/cmd_ram_start.c b/boot/common/src/uboot/downloader/cmd_ram_start.c
new file mode 100644
index 0000000..598182b
--- /dev/null
+++ b/boot/common/src/uboot/downloader/cmd_ram_start.c
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (C) 2016, ZIXC Corporation.
+ *
+ * File Name:cmd_ram_start.c
+ * File Mark:
+ * Description:
+ * Others:
+ * Version:       1.0
+ * Author:        zangxiaofeng
+ * Date:          2013-4-22
+ * History 1:
+ *     Date:
+ *     Version:
+ *     Author:
+ *     Modification:
+ * History 2:
+  ********************************************************************************/
+
+
+/****************************************************************************
+* 	                                     Include files
+****************************************************************************/
+#include <common.h>
+#include <command.h>
+#include <net.h>
+#include <jffs2/load_kernel.h>
+#include "downloader_nand.h"
+#include "downloader_config.h"
+#include "downloader_serial.h"
+#include <asm/arch/cpu.h>
+#include <asm/io.h>
+
+
+static is_flush = 0;
+extern char *tsp_console_buffer;
+extern uint32_t arm_ps_ep;
+/****************************************************************************
+*							Global Function Prototypes
+****************************************************************************/
+int start_core(uchar *core_name, unsigned int addr);
+
+ 
+/*******************************************************************************
+ * Function:do_ram_start
+ * Description:
+ * Parameters:
+ *	 Input:
+ *
+ *	 Output:
+ *
+ * Returns:
+ *
+ *
+ * Others:
+ ********************************************************************************/
+int do_ram_start(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+	char *ack = tsp_console_buffer;
+	unsigned int i = 0;
+	unsigned int addr = 0;
+
+	if(argc < 1)
+	{
+		return cmd_usage(cmdtp);
+	}
+ 
+	sprintf(ack,"OKAY ram_start");
+	downloader_serial_write(ack, strlen(ack)+1); 
+	for(i=1; i<argc; i=i+2)
+	{
+		addr = (unsigned int)simple_strtoul (argv[i+1], NULL, 16);
+		printf("core is %s, addr is %x\n",(uchar *)argv[i],addr);
+		start_core((uchar *)argv[i], addr);
+	}
+	hang();
+	return 0;
+}
+
+U_BOOT_CMD(
+	ram_start, CONFIG_SYS_MAXARGS, 0, do_ram_start,
+	"ram_start: ram_start",
+	""
+);
+
+ int start_core(uchar *core_name, unsigned int addr)
+{
+	char *ack = tsp_console_buffer;
+
+	if(strcmp((const char *)core_name,"ps") == 0)
+	{
+		if(addr != 0xffffffff)
+		{
+			/* д PS Ìø×ªÆô¶¯´úÂë */ 
+
+			/* flush d-cache */
+			if( is_flush != 1 )
+			{
+				is_flush = 1;
+				cleanup_before_linux();
+			}
+			arm_ps_ep = addr;            
+			/* ÊÍ·ÅÆô¶¯ ARM_PS  */
+			printf("Starting the arm_ps ...\n");
+			start_arm_ps();
+		}
+		else
+		{
+			printf("No Starting the arm_ps ...\n");
+		}
+	}
+	else if (strcmp((const char *)core_name,"phy") == 0)
+	{
+		if(addr != 0xffffffff)
+		{
+			/* д PHY Ìø×ªÆô¶¯´úÂë */ 
+
+			/* flush d-cache */
+			/*if( is_flush != 1 )
+			{
+				is_flush = 1;
+				cleanup_before_linux();
+			}*/
+			//load_zsp_image(addr);
+			/* ÊÍ·ÅÆô¶¯ ARM_PHY  */
+
+			printf("Starting the arm_phy ...\n");
+		}
+		else
+		{
+			printf("No Starting the arm_phy ...\n");
+		}
+	}
+	else
+	{
+		sprintf(ack,"FAIL INVILID CORE NAME");
+		downloader_serial_write(ack, strlen(ack)+1);
+		return -1;
+	}
+	return 0;
+}
+