diff --git a/src/jtag3.c b/src/jtag3.c index 3d5dc9ad..6e82a68f 100644 --- a/src/jtag3.c +++ b/src/jtag3.c @@ -2689,29 +2689,21 @@ static unsigned char jtag3_memtype(const PROGRAMMER *pgm, const AVRPART *p, unsi static unsigned int jtag3_memaddr(const PROGRAMMER *pgm, const AVRPART *p, const AVRMEM *m, unsigned long addr) { if (p->prog_modes & PM_PDI) { - if (addr >= PDATA(pgm)->boot_start) - /* - * all memories but "flash" are smaller than boot_start anyway, so - * no need for an extra check we are operating on "flash" - */ - return addr - PDATA(pgm)->boot_start; - else - /* normal flash, or anything else */ - return addr; + /* + * All memories but "flash" are smaller than boot_start anyway, so + * no need for an extra check we are operating on "flash" + */ + if(addr >= PDATA(pgm)->boot_start) + addr -= PDATA(pgm)->boot_start; + } else if(p->prog_modes & PM_UPDI) { // Modern AVR8X part + if(!str_eq(m->desc, "flash")) + if(m->size >= 1) + addr += m->offset; + } else { // Classic part + if(str_eq(m->desc, "usersig")) + addr += m->offset; } - // Non-Xmega device - if (p->prog_modes & PM_UPDI) { - if (strcmp(m->desc, "flash") == 0) { - return addr; - } - else if (m->size == 1) { - addr = m->offset; - } - else if (m->size > 1) { - addr += m->offset; - } - } return addr; }