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