diff --git a/src/avrdude.conf.in b/src/avrdude.conf.in index 8063e30b..cfe9f663 100644 --- a/src/avrdude.conf.in +++ b/src/avrdude.conf.in @@ -163,6 +163,7 @@ # size = ; # bytes # page_size = ; # bytes # num_pages = ; # numeric +# initval = ; # factory setting of fuses and lockbits # n_word_writes = ; # TPI only: if set, number of words to write # min_write_delay = ; # micro-seconds # max_write_delay = ; # micro-seconds diff --git a/src/avrpart.c b/src/avrpart.c index 2a4d9a02..fe08e04f 100644 --- a/src/avrpart.c +++ b/src/avrpart.c @@ -329,7 +329,8 @@ static char * bittype(int type) AVRMEM *avr_new_memtype(void) { AVRMEM *m = (AVRMEM *) cfg_malloc("avr_new_memtype()", sizeof(*m)); m->desc = cache_string(""); - m->page_size = 1; // ensure not 0 + m->page_size = 1; // Ensure not 0 + m->initval = -1; // Unknown value represented as -1 return m; } diff --git a/src/config.c b/src/config.c index 7bf83095..32bbd9f9 100644 --- a/src/config.c +++ b/src/config.c @@ -135,6 +135,7 @@ Component_t avr_comp[] = { mem_comp_desc(paged, COMP_BOOL), mem_comp_desc(size, COMP_INT), mem_comp_desc(num_pages, COMP_INT), + mem_comp_desc(initval, COMP_INT), mem_comp_desc(n_word_writes, COMP_INT), mem_comp_desc(offset, COMP_INT), mem_comp_desc(min_write_delay, COMP_INT), diff --git a/src/developer_opts.c b/src/developer_opts.c index bd1baef0..13ef7970 100644 --- a/src/developer_opts.c +++ b/src/developer_opts.c @@ -803,6 +803,7 @@ static void dev_part_strct(const AVRPART *p, bool tsv, const AVRPART *base, bool _if_memout(intcmp, m->size > 8192? "0x%x": "%d", size); _if_memout(intcmp, "%d", page_size); _if_memout(intcmp, "%d", num_pages); + _if_memout(intcmp, m->initval == -1? "%d": "0x%02x", initval); _if_memout(intcmp, "%d", n_word_writes); _if_memout(intcmp, "0x%x", offset); _if_memout(intcmp, "%d", min_write_delay); diff --git a/src/doc/avrdude.texi b/src/doc/avrdude.texi index 25818986..89fa23a9 100644 --- a/src/doc/avrdude.texi +++ b/src/doc/avrdude.texi @@ -2200,6 +2200,7 @@ part size = ; # bytes page_size = ; # bytes num_pages = ; # numeric + initval = ; # factory setting of fuses and lockbits n_word_writes = ; # TPI only: if set, number of words to write min_write_delay = ; # micro-seconds max_write_delay = ; # micro-seconds diff --git a/src/lexer.l b/src/lexer.l index 205a0b97..69360995 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -129,7 +129,7 @@ SIGN [+-] chiperasetime | (chiperase|program(fuse|lock))(polltimeout|pulsewidth) | synchcycles | hvspcmdexedelay | mcu_base | nvm_base | ocd_base | ocdrev | autobaud_sync | idr | rampz | spmcr | eecr | eind | - paged | size | num_pages | n_word_writes | offset | min_write_delay | max_write_delay | pwroff_after_write | + paged | size | num_pages | initval | n_word_writes | offset | min_write_delay | max_write_delay | pwroff_after_write | readback_p1 | readback_p2 | mode | delay | blocksize | readsize ) { /* struct components for PROGRAMMER, AVRPART and AVRMEM */ Component_t *cp = cfg_comp_search(yytext, current_strct); diff --git a/src/libavrdude.h b/src/libavrdude.h index 20d27bdb..b72764a7 100644 --- a/src/libavrdude.h +++ b/src/libavrdude.h @@ -325,6 +325,7 @@ typedef struct avrmem { int size; /* total memory size in bytes */ int page_size; /* size of memory page (if page addressed) */ int num_pages; /* number of pages (if page addressed) */ + int initval; /* factory setting of fuses and lock bits */ int n_word_writes; /* TPI only: number words to write at a time */ unsigned int offset; /* offset in IO memory (ATxmega) */ int min_write_delay; /* microseconds */