@@ -303,19 +303,25 @@ uint32_t Altera::idCode()
303303#define MAX10_BYPASS {0xFF , 0x03 }
304304
305305typedef struct {
306+ uint32_t check_addr0; // something to check before sequence
306307 uint32_t dsm_addr;
307308 uint32_t dsm_len; // 32bits
308309 uint32_t ufm_addr; // UFM1 addr
309310 uint32_t ufm_len[2 ];
310311 uint32_t cfm_addr; // CFM2 addr
311312 uint32_t cfm_len[3 ];
313+ uint32_t done_bit_addr;
314+ uint32_t pgm_success_addr;
312315} max10_mem_t ;
313316
314317static const std::map<uint32_t , max10_mem_t > max10_memory_map = {
315318 {0x031820dd , {
319+ 0x80005 , // check_addr0
316320 0x0000 , 512 , // DSM
317321 0x0200 , {4096 , 4096 }, // UFM
318- 0x2200 , {35840 , 14848 , 20992 }} // CFM
322+ 0x2200 , {35840 , 14848 , 20992 }, // CFM
323+ 0x0009 , // done bit
324+ 0x000b } // program success addr
319325 },
320326};
321327
@@ -413,9 +419,9 @@ void Altera::max10_program()
413419 max10_dsm_program (dsm_data, dsm_len);
414420 max10_dsm_verify ();
415421
416- max10_flow_program_donebit ();
422+ max10_flow_program_donebit (mem. done_bit_addr );
417423 max10_dsm_verify ();
418- max10_dsm_program_success ();
424+ max10_dsm_program_success (mem. pgm_success_addr );
419425 max10_dsm_verify ();
420426
421427 /* disable ISC flow */
@@ -628,7 +634,7 @@ void Altera::max10_addr_shift(uint32_t addr)
628634 _jtag->shiftDR (addr_arr, NULL , 23 , Jtag::RUN_TEST_IDLE);
629635}
630636
631- void Altera::max10_dsm_program_success ()
637+ void Altera::max10_dsm_program_success (const uint32_t pgm_success_addr )
632638{
633639 const uint32_t prog_len = 5120 / _clk_period; // ??
634640 const uint32_t prog2_len = 320000 / _clk_period; // ??
@@ -638,7 +644,7 @@ void Altera::max10_dsm_program_success()
638644 uint8_t magic[4 ];
639645 word_to_array (0x6C48A50F , magic); // FIXME: uses define instead
640646
641- max10_addr_shift (0x00000b );
647+ max10_addr_shift (pgm_success_addr );
642648
643649 /* Send 'Magic' code */
644650 _jtag->shiftIR ((unsigned char *)cmd, NULL , IRLENGTH, Jtag::PAUSE_IR);
@@ -648,7 +654,7 @@ void Altera::max10_dsm_program_success()
648654 _jtag->toggleClk (prog2_len); // must wait 305.0e-6
649655}
650656
651- void Altera::max10_flow_program_donebit ()
657+ void Altera::max10_flow_program_donebit (const uint32_t done_bit_addr )
652658{
653659 const uint32_t addr_shift_delay = 5120 / _clk_period; // ??
654660 const uint32_t icb_program_delay = 320000 / _clk_period; // ??
@@ -659,7 +665,7 @@ void Altera::max10_flow_program_donebit()
659665 word_to_array (0x6C48A50F , magic); // FIXME: uses define instead
660666
661667 /* Send target address */
662- max10_addr_shift (0x000009 );
668+ max10_addr_shift (done_bit_addr );
663669
664670 /* Send 'Magic' code */
665671 _jtag->shiftIR (cmd, NULL , IRLENGTH, Jtag::PAUSE_IR);
0 commit comments