MMU: Implement reading of the process table
authorPaul Mackerras <paulus@ozlabs.org>
Fri, 24 Apr 2020 00:58:56 +0000 (10:58 +1000)
committerPaul Mackerras <paulus@ozlabs.org>
Fri, 8 May 2020 02:12:02 +0000 (12:12 +1000)
commit2843c99a71ad4b88d8d722bb7bae7d4979b6083c
treec983531fc78c66b93f689ab6a859082aabbb4d0a
parentf3c6119cf63d21671bbad9bdfb983316b0336dd8
MMU: Implement reading of the process table

This adds the PID register and repurposes SPR 720 as the PRTBL
register, which points to the base of the process table.  There
doesn't seem to be any point to implementing the partition table given
that we don't have hypervisor mode.

The MMU caches entry 0 of the process table internally (in pgtbl3)
plus the entry indexed by the value in the PID register (pgtbl0).
Both caches are invalidated by a tlbie[l] with RIC=2 or by a move to
PRTBL.  The pgtbl0 cache is invalidated by a move to PID.  The dTLB
and iTLB are cleared by a move to either PRTBL or PID.

Which of the two page table root pointers is used (pgtbl0 or pgtbl3)
depends on the MSB of the address being translated.  Since the segment
checking ensures that address(63) = address(62), this is sufficient to
map quadrants 0 and 3.

Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
common.vhdl
decode1.vhdl
loadstore1.vhdl
mmu.vhdl
tests/mmu/mmu.c
tests/privileged/privileged.c
tests/test_mmu.bin
tests/test_privileged.bin