| /******************************************************************************* | 
 |  * Copyright (C) 2016, ZIXC Corporation. | 
 |  * | 
 |  * File Name:cmd_erase.c | 
 |  * File Mark: | 
 |  * Description: | 
 |  * Others: | 
 |  * Version:       1.0 | 
 |  * Author:        zangxiaofeng | 
 |  * Date:          2013-3-15 | 
 |  * 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_config.h" | 
 | #include "downloader_nand.h" | 
 | #include "downloader_serial.h" | 
 | #include "errno.h" | 
 | #include "mmc.h" | 
 |  | 
 | /**************************************************************************** | 
 | * 	                                     Function Definitions | 
 | ****************************************************************************/ | 
 |  | 
 | extern partition_table_t * g_partition_table; | 
 | extern char *tsp_console_buffer; | 
 |  | 
 |  | 
 | /******************************************************************************* | 
 |  * Function:do_erase | 
 |  * Description: | 
 |  * Parameters: | 
 |  *	 Input: | 
 |  * | 
 |  *	 Output: | 
 |  * | 
 |  * Returns: | 
 |  * | 
 |  * | 
 |  * Others: | 
 |  ********************************************************************************/ | 
 | int do_erase(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) | 
 | { | 
 |     partition_entry_t *part = NULL; | 
 |     char *par=NULL; | 
 |     char *ack=tsp_console_buffer; | 
 |     int ret = 0; | 
 | 	int type = 0; | 
 |  | 
 |     if(argc<2) | 
 |     { | 
 |         return cmd_usage(cmdtp); | 
 |     } | 
 | 	type = read_boot_flashtype(); | 
 |     par = argv[1]; /*erase cmd*/ | 
 |     if((strcmp(par,"all") == 0) || (strcmp(par,"raw") == 0)) | 
 |     { | 
 | 		if((type == IF_TYPE_NAND)||(type == IF_TYPE_SPI_NAND)) | 
 | 		{ | 
 | 		    ret = downloader_nand_eraseall(); | 
 | 		} | 
 | 		else if(type == IF_TYPE_NOR)  | 
 | 		{ | 
 |         	ret = downloader_nor_eraseall(); | 
 | 		} | 
 | 		 | 
 |         if(ret == 0) | 
 |         { | 
 |             sprintf(ack,"OKAY"); | 
 |             downloader_serial_write(ack, strlen(ack)+1); | 
 |             return 0; | 
 |         } | 
 |         else | 
 |         { | 
 |             sprintf(ack,"FAIL NAND ERASE"); | 
 |             downloader_serial_write(ack, strlen(ack)+1); | 
 |             return ENOSYS;  /* Function not implemented */ | 
 |         } | 
 |     } | 
 | 	 | 
 |     if(strcmp(par,"auto") == 0) | 
 |     { | 
 | 	    if((type == IF_TYPE_NAND)||(type == IF_TYPE_SPI_NAND)) | 
 | 		{ | 
 | 		    ret = downloader_nand_erase_auto(); | 
 | 		} | 
 | 		else if(type == IF_TYPE_NOR)  | 
 | 		{ | 
 |         	ret = downloader_nor_erase_auto(); | 
 | 		} | 
 | 			 | 
 |         if(ret == 0) | 
 |         { | 
 |             sprintf(ack,"OKAY"); | 
 |             downloader_serial_write(ack, strlen(ack)+1); | 
 |             return 0; | 
 |         } | 
 |         else | 
 |         { | 
 |             sprintf(ack,"FAIL NAND ERASE"); | 
 |             downloader_serial_write(ack, strlen(ack)+1); | 
 |             return ENOSYS;  /* Function not implemented */ | 
 |         } | 
 |     } | 
 | 	 | 
 |     part = downloader_get_part(par); | 
 |     if(part == NULL) | 
 |     { | 
 |         sprintf(ack,"FAIL INVALID PARTITION"); | 
 |         downloader_serial_write(ack, strlen(ack)+1); | 
 |         return EINVAL;	/* Invalid argument */ | 
 |     } | 
 |  | 
 | 	if((type == IF_TYPE_NAND)||(type == IF_TYPE_SPI_NAND)) | 
 | 	{ | 
 | 		ret = downloader_nand_erase(part,part->part_size); | 
 | 	} | 
 | 	else if(type == IF_TYPE_NOR)  | 
 | 	{ | 
 |         ret = downloader_nor_erase(part, part->part_size); | 
 | 	} | 
 |  | 
 | 	 | 
 |     if(ret == 0) | 
 |     { | 
 |         sprintf(ack,"OKAY"); | 
 |         downloader_serial_write(ack, strlen(ack)+1); | 
 |         return 0; | 
 |     } | 
 |     else | 
 |     { | 
 |         sprintf(ack,"FAIL NAND ERASE"); | 
 |         downloader_serial_write(ack, strlen(ack)+1); | 
 |         return ENOSYS;  /* Function not implemented */ | 
 |     } | 
 | } | 
 |  | 
 | U_BOOT_CMD( | 
 | 	erase, CONFIG_SYS_MAXARGS, 0, do_erase, | 
 | 	"Erase nand: erase [partition]", | 
 | 	"" | 
 | ); | 
 |  | 
 |      |