mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
MIPS: mm: Fix MIPS32 36b physical addressing (alchemy, netlogic)
There are 2 distinct cases in which a kernel for a MIPS32 CPU (CONFIG_CPU_MIPS32=y) may use 64 bit physical addresses (CONFIG_PHYS_ADDR_T_64BIT=y): - 36 bit physical addressing as used by RMI Alchemy & Netlogic XLP/XLR CPUs. - MIPS32r5 eXtended Physical Addressing (XPA). These 2 cases are distinct in that they require different behaviour from the kernel - the EntryLo registers have different formats. Until Linux v4.1 we only supported the first case, with code conditional upon the 2 aforementioned Kconfig variables being set. Commitc5b367835c
("MIPS: Add support for XPA.") added support for the second case, but did so by modifying the code that existed for the first case rather than treating the 2 cases as distinct. Since the EntryLo registers have different formats this breaks the 36 bit Alchemy/XLP/XLR case. Fix this by splitting the 2 cases, with XPA cases now being conditional upon CONFIG_XPA and the non-XPA case matching the code as it existed prior to commitc5b367835c
("MIPS: Add support for XPA."). Signed-off-by: Paul Burton <paul.burton@imgtec.com> Reported-by: Manuel Lauss <manuel.lauss@gmail.com> Tested-by: Manuel Lauss <manuel.lauss@gmail.com> Fixes:c5b367835c
("MIPS: Add support for XPA.") Cc: James Hogan <james.hogan@imgtec.com> Cc: David Daney <david.daney@cavium.com> Cc: Huacai Chen <chenhc@lemote.com> Cc: Maciej W. Rozycki <macro@linux-mips.org> Cc: Paul Gortmaker <paul.gortmaker@windriver.com> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Cc: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: David Hildenbrand <dahi@linux.vnet.ibm.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Ingo Molnar <mingo@kernel.org> Cc: Alex Smith <alex.smith@imgtec.com> Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: stable@vger.kernel.org # v4.1+ Cc: linux-mips@linux-mips.org Cc: linux-kernel@vger.kernel.org Patchwork: https://patchwork.linux-mips.org/patch/13119/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
745f355878
commit
7b2cb64f91
5 changed files with 125 additions and 27 deletions
|
@ -32,11 +32,11 @@
|
|||
* unpredictable things. The code (when it is written) to deal with
|
||||
* this problem will be in the update_mmu_cache() code for the r4k.
|
||||
*/
|
||||
#if defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32)
|
||||
#if defined(CONFIG_XPA)
|
||||
|
||||
/*
|
||||
* Page table bit offsets used for 64 bit physical addressing on MIPS32,
|
||||
* for example with Alchemy, Netlogic XLP/XLR or XPA.
|
||||
* Page table bit offsets used for 64 bit physical addressing on
|
||||
* MIPS32r5 with XPA.
|
||||
*/
|
||||
enum pgtable_bits {
|
||||
/* Used by TLB hardware (placed in EntryLo*) */
|
||||
|
@ -59,6 +59,27 @@ enum pgtable_bits {
|
|||
*/
|
||||
#define _PFNX_MASK 0xffffff
|
||||
|
||||
#elif defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32)
|
||||
|
||||
/*
|
||||
* Page table bit offsets used for 36 bit physical addressing on MIPS32,
|
||||
* for example with Alchemy or Netlogic XLP/XLR.
|
||||
*/
|
||||
enum pgtable_bits {
|
||||
/* Used by TLB hardware (placed in EntryLo*) */
|
||||
_PAGE_GLOBAL_SHIFT,
|
||||
_PAGE_VALID_SHIFT,
|
||||
_PAGE_DIRTY_SHIFT,
|
||||
_CACHE_SHIFT,
|
||||
|
||||
/* Used only by software (masked out before writing EntryLo*) */
|
||||
_PAGE_PRESENT_SHIFT = _CACHE_SHIFT + 3,
|
||||
_PAGE_NO_READ_SHIFT,
|
||||
_PAGE_WRITE_SHIFT,
|
||||
_PAGE_ACCESSED_SHIFT,
|
||||
_PAGE_MODIFIED_SHIFT,
|
||||
};
|
||||
|
||||
#elif defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX)
|
||||
|
||||
/* Page table bits used for r3k systems */
|
||||
|
@ -116,7 +137,7 @@ enum pgtable_bits {
|
|||
#endif
|
||||
|
||||
/* Used by TLB hardware (placed in EntryLo*) */
|
||||
#if (defined(CONFIG_PHYS_ADDR_T_64BIT) && defined(CONFIG_CPU_MIPS32))
|
||||
#if defined(CONFIG_XPA)
|
||||
# define _PAGE_NO_EXEC (1 << _PAGE_NO_EXEC_SHIFT)
|
||||
#elif defined(CONFIG_CPU_MIPSR2) || defined(CONFIG_CPU_MIPSR6)
|
||||
# define _PAGE_NO_EXEC (cpu_has_rixi ? (1 << _PAGE_NO_EXEC_SHIFT) : 0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue