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

Reply via email to