sparc32: introduce run-time patching of srmmu access functions
LEON uses a different ASI than SUN for MMUREGS Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Cc: Daniel Hellstrom <daniel@gaisler.com> Cc: Konrad Eisele <konrad@gaisler.com>
This commit is contained in:

committed by
David S. Miller

parent
1ec8cf6233
commit
6729cf7967
@@ -149,67 +149,13 @@ extern void *srmmu_nocache_pool;
|
||||
#define __nocache_fix(VADDR) __va(__nocache_pa(VADDR))
|
||||
|
||||
/* Accessing the MMU control register. */
|
||||
static inline unsigned int srmmu_get_mmureg(void)
|
||||
{
|
||||
unsigned int retval;
|
||||
__asm__ __volatile__("lda [%%g0] %1, %0\n\t" :
|
||||
"=r" (retval) :
|
||||
"i" (ASI_M_MMUREGS));
|
||||
return retval;
|
||||
}
|
||||
|
||||
static inline void srmmu_set_mmureg(unsigned long regval)
|
||||
{
|
||||
__asm__ __volatile__("sta %0, [%%g0] %1\n\t" : :
|
||||
"r" (regval), "i" (ASI_M_MMUREGS) : "memory");
|
||||
|
||||
}
|
||||
|
||||
static inline void srmmu_set_ctable_ptr(unsigned long paddr)
|
||||
{
|
||||
paddr = ((paddr >> 4) & SRMMU_CTX_PMASK);
|
||||
__asm__ __volatile__("sta %0, [%1] %2\n\t" : :
|
||||
"r" (paddr), "r" (SRMMU_CTXTBL_PTR),
|
||||
"i" (ASI_M_MMUREGS) :
|
||||
"memory");
|
||||
}
|
||||
|
||||
static inline void srmmu_set_context(int context)
|
||||
{
|
||||
__asm__ __volatile__("sta %0, [%1] %2\n\t" : :
|
||||
"r" (context), "r" (SRMMU_CTX_REG),
|
||||
"i" (ASI_M_MMUREGS) : "memory");
|
||||
}
|
||||
|
||||
static inline int srmmu_get_context(void)
|
||||
{
|
||||
register int retval;
|
||||
__asm__ __volatile__("lda [%1] %2, %0\n\t" :
|
||||
"=r" (retval) :
|
||||
"r" (SRMMU_CTX_REG),
|
||||
"i" (ASI_M_MMUREGS));
|
||||
return retval;
|
||||
}
|
||||
|
||||
static inline unsigned int srmmu_get_fstatus(void)
|
||||
{
|
||||
unsigned int retval;
|
||||
|
||||
__asm__ __volatile__("lda [%1] %2, %0\n\t" :
|
||||
"=r" (retval) :
|
||||
"r" (SRMMU_FAULT_STATUS), "i" (ASI_M_MMUREGS));
|
||||
return retval;
|
||||
}
|
||||
|
||||
static inline unsigned int srmmu_get_faddr(void)
|
||||
{
|
||||
unsigned int retval;
|
||||
|
||||
__asm__ __volatile__("lda [%1] %2, %0\n\t" :
|
||||
"=r" (retval) :
|
||||
"r" (SRMMU_FAULT_ADDR), "i" (ASI_M_MMUREGS));
|
||||
return retval;
|
||||
}
|
||||
unsigned int srmmu_get_mmureg(void);
|
||||
void srmmu_set_mmureg(unsigned long regval);
|
||||
void srmmu_set_ctable_ptr(unsigned long paddr);
|
||||
void srmmu_set_context(int context);
|
||||
int srmmu_get_context(void);
|
||||
unsigned int srmmu_get_fstatus(void);
|
||||
unsigned int srmmu_get_faddr(void);
|
||||
|
||||
/* This is guaranteed on all SRMMU's. */
|
||||
static inline void srmmu_flush_whole_tlb(void)
|
||||
|
Reference in New Issue
Block a user