Skip to content

Commit a17cea2

Browse files
committed
altera: updated max10_mem_t with check_addr0, done_bit_addr & pgm_success_addr (differs between MAX10 models). Updated both max10_dsm_program_success and max10_flow_program_donebit to uses these addresses
1 parent 1388f7b commit a17cea2

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

src/altera.cpp

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -303,19 +303,25 @@ uint32_t Altera::idCode()
303303
#define MAX10_BYPASS {0xFF, 0x03}
304304

305305
typedef 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

314317
static 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);

src/altera.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,8 @@ class Altera: public Device, SPIInterface {
9898
void writeXFM(const uint8_t *cfg_data, uint32_t base_addr, uint32_t offset, uint32_t len);
9999
uint32_t verifyxFM(const uint8_t *cfg_data, uint32_t base_addr, uint32_t offset,
100100
uint32_t len);
101-
void max10_dsm_program_success();
102-
void max10_flow_program_donebit();
101+
void max10_dsm_program_success(const uint32_t pgm_success_addr);
102+
void max10_flow_program_donebit(const uint32_t done_bit_addr);
103103
void max10_addr_shift(uint32_t addr);
104104
void max_10_flow_enable();
105105
void max_10_flow_disable();

0 commit comments

Comments
 (0)