View difference between Paste ID: bZukwe4E and Td6A0Xmp
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