/* * Copyright (c) 2006-2022, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2022-12-12 WangXiaoyao the first version */ #ifndef __TLB_H__ #define __TLB_H__ #include "mm_aspace.h" #include #include #include #define dsb(scope) __asm__ volatile("dsb " #scope : : : "memory") #define isb() __asm__ volatile("isb" : : : "memory") #define STORE_CP32(r, name...) "mcr " RT_STRINGIFY(CP32(%r, name)) ";" #define WRITE_CP32(v, name...) do { \ register uint32_t _r = (v); \ asm volatile(STORE_CP32(0, name) : : "r" (_r)); \ } while (0) static inline void rt_hw_tlb_invalidate_all(void) { asm volatile ("mcr p15, 0, r0, c8, c7, 0\ndsb\nisb" ::: "memory"); } static inline void rt_hw_tlb_invalidate_all_local(void) { rt_hw_tlb_invalidate_all(); } static inline void rt_hw_tlb_invalidate_aspace(rt_aspace_t aspace) { rt_hw_tlb_invalidate_all(); } static inline void rt_hw_tlb_invalidate_range(rt_aspace_t aspace, void *start, size_t size, size_t stride) { rt_hw_tlb_invalidate_all(); } #endif /* __TLB_H__ */