If I set TARGET_PAGE_BITS to 12 this *assert assert(v_l2_levels >= 0);* will fail (page_table_config_init function) because TARGET_PHYS_ADDR_SPACE_BITS is 24 bits, because AVR has 24 is the longest pointer AVR has. I can set TARGET_PHYS_ADDR_SPACE_BITS to 32 and TARGET_PAGE_BITS to 12 and everything will work fine. What do you think?
btw, wrote the original comment, you David referred to, when I did not know that QEMU could map several regions to the same page, which is not true. That's why I could change 8 to 10. On Tue, Mar 23, 2021 at 10:11 PM Michael Rolnik <mrol...@gmail.com> wrote: > how long? > > On Tue, Mar 23, 2021 at 2:46 PM Dr. David Alan Gilbert < > dgilb...@redhat.com> wrote: > >> * Michael Rolnik (mrol...@gmail.com) wrote: >> > Signed-off-by: Michael Rolnik <mrol...@gmail.com> >> > --- >> > target/avr/cpu-param.h | 8 +------- >> > target/avr/helper.c | 2 -- >> > 2 files changed, 1 insertion(+), 9 deletions(-) >> > >> > diff --git a/target/avr/cpu-param.h b/target/avr/cpu-param.h >> > index 7ef4e7c679..9765a9d0db 100644 >> > --- a/target/avr/cpu-param.h >> > +++ b/target/avr/cpu-param.h >> > @@ -22,13 +22,7 @@ >> > #define AVR_CPU_PARAM_H >> > >> > #define TARGET_LONG_BITS 32 >> > -/* >> > - * TARGET_PAGE_BITS cannot be more than 8 bits because >> > - * 1. all IO registers occupy [0x0000 .. 0x00ff] address range, and >> they >> > - * should be implemented as a device and not memory >> > - * 2. SRAM starts at the address 0x0100 >> >> I don't know AVR; but that seems to say why you can't make it any larger >> - how do you solve that? >> >> Dave >> >> > -#define TARGET_PAGE_BITS 8 >> > +#define TARGET_PAGE_BITS 10 >> > #define TARGET_PHYS_ADDR_SPACE_BITS 24 >> > #define TARGET_VIRT_ADDR_SPACE_BITS 24 >> > #define NB_MMU_MODES 2 >> > diff --git a/target/avr/helper.c b/target/avr/helper.c >> > index 35e1019594..da658afed3 100644 >> > --- a/target/avr/helper.c >> > +++ b/target/avr/helper.c >> > @@ -111,8 +111,6 @@ bool avr_cpu_tlb_fill(CPUState *cs, vaddr address, >> int size, >> > MemTxAttrs attrs = {}; >> > uint32_t paddr; >> > >> > - address &= TARGET_PAGE_MASK; >> > - >> > if (mmu_idx == MMU_CODE_IDX) { >> > /* access to code in flash */ >> > paddr = OFFSET_CODE + address; >> > -- >> > 2.25.1 >> > >> -- >> Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK >> >> > > -- > Best Regards, > Michael Rolnik > -- Best Regards, Michael Rolnik