target-mips: add CP0.PageGrain.ELPA support
commite117f52636d04502fab28bd3abe93347c29f39a5
authorLeon Alrae <leon.alrae@imgtec.com>
Tue, 14 Apr 2015 09:09:38 +0000 (14 10:09 +0100)
committerLeon Alrae <leon.alrae@imgtec.com>
Fri, 12 Jun 2015 08:05:20 +0000 (12 09:05 +0100)
treea65867066aff35a198c54440608cf52515587589
parentcd0d45c40133ef8b409aede5ad8a99aeaf6a70fe
target-mips: add CP0.PageGrain.ELPA support

CP0.PageGrain.ELPA enables support for large physical addresses. This field
is encoded as follows:
0: Large physical address support is disabled.
1: Large physical address support is enabled.

If this bit is a 1, the following changes occur to coprocessor 0 registers:
- The PFNX field of the EntryLo0 and EntryLo1 registers is writable and
  concatenated with the PFN field to form the full page frame number.
- Access to optional COP0 registers with PA extension, LLAddr, TagLo is
  defined.

P5600 can operate in 32-bit or 40-bit Physical Address Mode. Therefore if
XPA is disabled (CP0.PageGrain.ELPA = 0) then assume 32-bit Address Mode.
In MIPS64 assume 36 as default PABITS (when CP0.PageGrain.ELPA = 0).

env->PABITS value is constant and indicates maximum PABITS available on
a core, whereas env->PAMask is calculated from env->PABITS and is also
affected by CP0.PageGrain.ELPA.

Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
target-mips/cpu.h
target-mips/machine.c
target-mips/mips-defs.h
target-mips/op_helper.c
target-mips/translate.c