18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef __ASM_SH_MMU_CONTEXT_32_H 38c2ecf20Sopenharmony_ci#define __ASM_SH_MMU_CONTEXT_32_H 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci/* 68c2ecf20Sopenharmony_ci * Destroy context related info for an mm_struct that is about 78c2ecf20Sopenharmony_ci * to be put to rest. 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_cistatic inline void destroy_context(struct mm_struct *mm) 108c2ecf20Sopenharmony_ci{ 118c2ecf20Sopenharmony_ci /* Do nothing */ 128c2ecf20Sopenharmony_ci} 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#ifdef CONFIG_CPU_HAS_PTEAEX 158c2ecf20Sopenharmony_cistatic inline void set_asid(unsigned long asid) 168c2ecf20Sopenharmony_ci{ 178c2ecf20Sopenharmony_ci __raw_writel(asid, MMU_PTEAEX); 188c2ecf20Sopenharmony_ci} 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_cistatic inline unsigned long get_asid(void) 218c2ecf20Sopenharmony_ci{ 228c2ecf20Sopenharmony_ci return __raw_readl(MMU_PTEAEX) & MMU_CONTEXT_ASID_MASK; 238c2ecf20Sopenharmony_ci} 248c2ecf20Sopenharmony_ci#else 258c2ecf20Sopenharmony_cistatic inline void set_asid(unsigned long asid) 268c2ecf20Sopenharmony_ci{ 278c2ecf20Sopenharmony_ci unsigned long __dummy; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci __asm__ __volatile__ ("mov.l %2, %0\n\t" 308c2ecf20Sopenharmony_ci "and %3, %0\n\t" 318c2ecf20Sopenharmony_ci "or %1, %0\n\t" 328c2ecf20Sopenharmony_ci "mov.l %0, %2" 338c2ecf20Sopenharmony_ci : "=&r" (__dummy) 348c2ecf20Sopenharmony_ci : "r" (asid), "m" (__m(MMU_PTEH)), 358c2ecf20Sopenharmony_ci "r" (0xffffff00)); 368c2ecf20Sopenharmony_ci} 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_cistatic inline unsigned long get_asid(void) 398c2ecf20Sopenharmony_ci{ 408c2ecf20Sopenharmony_ci unsigned long asid; 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci __asm__ __volatile__ ("mov.l %1, %0" 438c2ecf20Sopenharmony_ci : "=r" (asid) 448c2ecf20Sopenharmony_ci : "m" (__m(MMU_PTEH))); 458c2ecf20Sopenharmony_ci asid &= MMU_CONTEXT_ASID_MASK; 468c2ecf20Sopenharmony_ci return asid; 478c2ecf20Sopenharmony_ci} 488c2ecf20Sopenharmony_ci#endif /* CONFIG_CPU_HAS_PTEAEX */ 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci/* MMU_TTB is used for optimizing the fault handling. */ 518c2ecf20Sopenharmony_cistatic inline void set_TTB(pgd_t *pgd) 528c2ecf20Sopenharmony_ci{ 538c2ecf20Sopenharmony_ci __raw_writel((unsigned long)pgd, MMU_TTB); 548c2ecf20Sopenharmony_ci} 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_cistatic inline pgd_t *get_TTB(void) 578c2ecf20Sopenharmony_ci{ 588c2ecf20Sopenharmony_ci return (pgd_t *)__raw_readl(MMU_TTB); 598c2ecf20Sopenharmony_ci} 608c2ecf20Sopenharmony_ci#endif /* __ASM_SH_MMU_CONTEXT_32_H */ 61