SHOW:
|
|
- or go back to the newest paste.
| 1 | while (blocknum * erase_sz < fw->size){
| |
| 2 | block_start = blocknum * erase_sz; | |
| 3 | HM2_PRINT("block_start %i blocknum %i erase_sz %i\n", block_start, blocknum, erase_sz);
| |
| 4 | - | . . . |
| 4 | + | for (i = 0; i < erase_sz && fw->data[block_start + i] == 0 ; i++){ }
|
| 5 | if (i < erase_sz){ // found a non-zero byte
| |
| 6 | flash_start(); | |
| 7 | sslbp_write_long(LBPFLASHOFFSETLOC, block_start); | |
| 8 | //sslbp_write_byte(LBPFLASHCOMMITLOC, FLASHERASE_CMD); | |
| 9 | sslbp_write_byte(LBPFLASHCOMMITLOC, 0); | |
| 10 | if (sslbp_read_cookie() != LBPCOOKIE){
| |
| 11 | HM2_ERR("Synch failed during block erase: aborting\n");
| |
| 12 | goto fail0; | |
| 13 | } | |
| 14 | flash_stop(); | |
| 15 | HM2_PRINT("Erased block %i\n", blocknum);
| |
| 16 | flash_start(); | |
| 17 | for (i = 0; i < erase_sz ; i += write_sz){
| |
| 18 | sslbp_write_long(LBPFLASHOFFSETLOC, block_start + i); | |
| 19 | for (j = 0 ; j < write_sz ; j += 8){
| |
| 20 | u32 data0, data1; | |
| 21 | memcpy(&data0, &(fw->data[block_start + i + j]), 4); | |
| 22 | memcpy(&data1, &(fw->data[block_start + i + j + 4]), 4); | |
| 23 | sslbp_write_double(j, data0, data1); | |
| 24 | } | |
| 25 | //sslbp_write_byte(LBPFLASHCOMMITLOC, FLASHWRITE_CMD); | |
| 26 | sslbp_write_byte(LBPFLASHCOMMITLOC, 0); | |
| 27 | if (sslbp_read_cookie() != LBPCOOKIE){
| |
| 28 | HM2_ERR("Synch failed during block write: aborting\n");
| |
| 29 | goto fail0; | |
| 30 | } | |
| 31 | } | |
| 32 | flash_stop(); | |
| 33 | HM2_PRINT("Wrote block %i\n", blocknum);
| |
| 34 | } | |
| 35 | else // Looks like an all-zeros block | |
| 36 | {
| |
| 37 | HM2_PRINT("Skipped Block %i\n", blocknum);
| |
| 38 | } | |
| 39 | blocknum++; | |
| 40 | } | |
| 41 | ||
| 42 | ||
| 43 | ||
| 44 | Jan 25 20:12:54 DN2800 kernel: [ 433.452924] hm2/hm2_5i25.0: block_start 2048 blocknum 1 erase_sz 2048 | |
| 45 | Jan 25 20:12:54 DN2800 kernel: [ 433.452941] hm2/hm2_5i25.0: Skipped Block 1 | |
| 46 | Jan 25 20:12:54 DN2800 kernel: [ 433.452947] hm2/hm2_5i25.0: block_start 4096 blocknum 2 erase_sz 2048 | |
| 47 | Jan 25 20:12:54 DN2800 kernel: [ 433.452963] hm2/hm2_5i25.0: Skipped Block 2 | |
| 48 | Jan 25 20:12:54 DN2800 kernel: [ 433.452969] hm2/hm2_5i25.0: block_start 6144 blocknum 3 erase_sz 2048 | |
| 49 | Jan 25 20:12:54 DN2800 kernel: [ 433.452985] hm2/hm2_5i25.0: Skipped Block 3 | |
| 50 | Jan 25 20:12:54 DN2800 kernel: [ 433.452991] hm2/hm2_5i25.0: block_start 8192 blocknum 4 erase_sz 2048 | |
| 51 | Jan 25 20:12:54 DN2800 kernel: [ 433.455453] hm2/hm2_5i25.0: Erased block 4 | |
| 52 | Jan 25 20:12:54 DN2800 kernel: [ 433.765867] hm2/hm2_5i25.0: Wrote block 4 | |
| 53 | Jan 25 20:12:54 DN2800 kernel: [ 433.765874] hm2/hm2_5i25.0: block_start 2048 blocknum 5 erase_sz 2048 | |
| 54 | Jan 25 20:12:54 DN2800 kernel: [ 433.765890] hm2/hm2_5i25.0: Skipped Block 5 | |
| 55 | Jan 25 20:12:54 DN2800 kernel: [ 433.765896] hm2/hm2_5i25.0: block_start 4096 blocknum 6 erase_sz 2048 |