예제 #1
0
int jz_sfc_chip_erase()
{

	/* the paraterms is
	 * cmd , len, addr,addr_len
	 * dummy_byte, daten
	 * dir
	 *
	 * */

	unsigned char cmd[6];
	cmd[0] = CMD_WREN;
	cmd[1] = CMD_ERASE_CE;
	cmd[5] = CMD_RDSR;
	unsigned int  buf = 0;
	int err = 0;

	if(sfc_is_init == 0){
		err = sfc_init();
		if(err < 0){
			printf("the quad mode is not support\n");
			return -1;
		}
	}

	if(sfc_quad_mode == 1){
		if(quad_mode_is_set == 0){
			sfc_set_quad_mode();
		}
	}

	jz_sfc_writel(1 << 2,SFC_TRIG);
	sfc_send_cmd(&cmd[0],0,0,0,0,0,1);

	sfc_send_cmd(&cmd[1],0,0,0,0,0,1);

	sfc_send_cmd(&cmd[5], 1,0,0,0,1,0);
	sfc_read_data(&buf, 1);
	printf("sfc start chip erase\n");
	while(buf & CMD_SR_WIP) {
		sfc_send_cmd(&cmd[5], 1,0,0,0,1,0);
		sfc_read_data(&buf, 1);
	}
	printf("########## chip erase ok ######### \n");
	return 0;
}
예제 #2
0
static int do_sfcnor(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
	unsigned int src_addr,count,dst_addr,erase_en = 0;;
	if(argc < 4){
		return CMD_RET_USAGE;
	}
	sfc_init();
	if(!strcmp(argv[1],"read")){
		src_addr = simple_strtoul(argv[2],NULL,16);
		count = simple_strtoul(argv[3],NULL,16);
		dst_addr = simple_strtoul(argv[4],NULL,16);
		printf("sfcnor read Image from 0x%x to  0x%x size is 0x%x ...\n",src_addr,dst_addr,count);
		sfc_nor_read(src_addr,count,dst_addr);
		printf("sfcnor read ok!\n");
		return 0;
	}else if(!strcmp(argv[1],"write")){

		src_addr = simple_strtoul(argv[2],NULL,16);
		count = simple_strtoul(argv[3],NULL,16);
		dst_addr = simple_strtoul(argv[4],NULL,16);
		erase_en = simple_strtoul(argv[5],NULL,16);
		printf("sfcnor write Image from 0x%x to  0x%x size is 0x%x erase_en = %d...\n",dst_addr,src_addr,count,erase_en);
		sfc_nor_write(src_addr,count,dst_addr,erase_en);
		printf("sfcnor write ok!\n");
		return 0;

	}else if(!strcmp(argv[1],"erase")){

		src_addr = simple_strtoul(argv[2],NULL,16);
		count = simple_strtoul(argv[3],NULL,16);
		printf("sfcnor erase Image  0x%x  size is 0x%x ...\n",src_addr,count);
		sfc_nor_erase(src_addr,count);
		printf("sfcnor erase ok!\n");
		return 0;

	}else
		return CMD_RET_USAGE;
usage:
	return CMD_RET_USAGE;
}