target/ppc: Correct SDR1 masking
commite78308fd3959c2694c8c366efdccacdd11997ac8
authorDavid Gibson <david@gibson.dropbear.id.au>
Fri, 24 Feb 2017 06:35:50 +0000 (24 17:35 +1100)
committerDavid Gibson <david@gibson.dropbear.id.au>
Wed, 1 Mar 2017 00:23:39 +0000 (1 11:23 +1100)
treeb8af29ed61d05872ac7244b9bf6011f41b985f87
parent8d63351f9f99412fd2b99e2f5a8be2bc87d5670e
target/ppc: Correct SDR1 masking

SDR_64_HTABORG, which indicates the bits of the SDR1 register to use for
the base of a 64-bit machine's hashed page table (HPT) isn't correct.  It
includes the top 46 bits of the register, but in fact the top 4 bits must
be zero (according to the ISA v2.07).  No actual implementation has
supported close to 2^60 bytes of physical address space, so it's kind of
irrelevant, but we might as well correct this.

In addition, although we checked for bad size values in SDR1, we never
reported an error if entirely invalid bits were set there.  Add this check
to ppc_store_sdr1().

Reported-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
target/ppc/mmu-hash64.h
target/ppc/mmu_helper.c