static int test_erase_block(const char *val, struct kernel_param *kp) { int normal_block_seq = 0; int i; int err; /* Erase eraseblock */ printk(KERN_INFO"%s: erasing block\n", __func__); for (i = 0; i < ebcnt; ++i) { if (bbt[i]) continue; if (i == target_block) break; normal_block_seq++; } err = lge_erase_block(normal_block_seq); if (err) { printk(KERN_INFO"%s: erased %u block fail\n", __func__, i); return err; } printk(KERN_INFO"%s: erased %u block\n", __func__, i); return 0; }
static int test_erase_block(void) { int i; int err; /* Erase eraseblock */ printk(KERN_INFO"%s: erasing block\n", __func__); for (i = 0; i < ebcnt; i++) { if (bbt[i]) continue; else break; } #ifdef LGE_RETRY_MTD_DIRECT_ACCESS err = lge_retry_erase_block(i); #else err = lge_erase_block(i); #endif if (err) { printk(KERN_INFO"%s: erased %u block fail\n", __func__, i); return err; } printk(KERN_INFO"%s: erased %u block\n", __func__, i); return 0; }
boolean userDataBackUpPartitionErase(void ) { int mtd_op_result ; int retry_count=3; do{ msleep(100); retry_count--; mtd_op_result = lge_erase_block(srd_bytes_pos_in_emmc, (size_t)(SRD_1MBYTE_AREA*SRD_FIRST_AREA_INPARTITION)); if (retry_count==0){ break; } }while(mtd_op_result != (SRD_1MBYTE_AREA*SRD_FIRST_AREA_INPARTITION)); // srd_bytes_pos_in_emmc+0x400000 for MDM mtd_op_result = lge_erase_block(srd_bytes_pos_in_emmc+0x400000, (size_t)(SRD_1MBYTE_AREA)); if(mtd_op_result != (SRD_1MBYTE_AREA*SRD_FIRST_AREA_INPARTITION)) { printk(KERN_ERR "[Testmode]lge_write_block, error num = %d \n", mtd_op_result); // rsp_pkt->header.err_code = TEST_FAIL_S; return FALSE; } //현재 1mbyte 만 지움. .. #if 0 int i; int start_blk; int end_blk; if(userDataBackupFlashInit()==FALSE) return FALSE; start_blk = flash_nand_partition_start_block(MIBIB_DIDBACKUP_PARTI_NAME); end_blk = flash_nand_partition_end_block(MIBIB_DIDBACKUP_PARTI_NAME); for (i=start_blk; i<= end_blk; i++) { if(nand_device->bad_block_check(nand_device, i) == FS_DEVICE_OK) { if(nand_device->erase_block(nand_device,i) != FS_DEVICE_DONE) return FALSE; } } #endif return TRUE; }
int lge_retry_erase_block(int ebnum) { int retry_cnt = 0; int err = 0; for(retry_cnt = 0; retry_cnt < 5; retry_cnt++) { err = lge_erase_block(ebnum); if(err != 0) { printk(KERN_INFO"%s: error %d while erasing EB %d, retry count %d\n", __func__, err, ebnum, retry_cnt); msleep(100); continue; } else { printk(KERN_INFO"%s: success while erasing EB %d, retry count %d\n", __func__, ebnum, retry_cnt); break; } } return err; }