mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-22 19:44:24 +08:00
[rt-smart] move sys_cacheflush to lwp_syscall.c (#7048)
* [syscall] move sys_cacheflush to lwp_syscall.c * [syscall] improve assertion * [format] rename to rt_ctassert * [debug] modified ct assertion on mm_page.c
This commit is contained in:
@@ -11,6 +11,8 @@
|
||||
#ifndef __CACHE_H__
|
||||
#define __CACHE_H__
|
||||
|
||||
#include <rtdef.h>
|
||||
|
||||
void __asm_invalidate_icache_all(void);
|
||||
|
||||
void rt_hw_dcache_flush_all(void);
|
||||
@@ -25,5 +27,7 @@ static inline void rt_hw_icache_invalidate_all(void)
|
||||
}
|
||||
|
||||
void rt_hw_icache_invalidate_range(unsigned long start_addr, int size);
|
||||
void rt_hw_cpu_icache_invalidate(void *addr, rt_size_t size);
|
||||
void rt_hw_cpu_dcache_clean_and_invalidate(void *addr, rt_size_t size);
|
||||
|
||||
#endif /* __CACHE_H__ */
|
||||
|
||||
@@ -77,26 +77,3 @@ rt_base_t rt_hw_cpu_dcache_status(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef RT_USING_LWP
|
||||
#define ICACHE (1<<0)
|
||||
#define DCACHE (1<<1)
|
||||
#define BCACHE (ICACHE|DCACHE)
|
||||
|
||||
int sys_cacheflush(void *addr, int size, int cache)
|
||||
{
|
||||
if ((size_t)addr < KERNEL_VADDR_START && (size_t)addr + size <= KERNEL_VADDR_START)
|
||||
{
|
||||
if ((cache & DCACHE) != 0)
|
||||
{
|
||||
rt_hw_cpu_dcache_clean_and_invalidate(addr, size);
|
||||
}
|
||||
if ((cache & ICACHE) != 0)
|
||||
{
|
||||
rt_hw_cpu_icache_invalidate(addr, size);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -153,26 +153,3 @@ rt_base_t rt_hw_cpu_dcache_status(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef RT_USING_SMART
|
||||
#define ICACHE (1<<0)
|
||||
#define DCACHE (1<<1)
|
||||
#define BCACHE (ICACHE|DCACHE)
|
||||
|
||||
int sys_cacheflush(void *addr, int size, int cache)
|
||||
{
|
||||
if ((size_t)addr < KERNEL_VADDR_START && (size_t)addr + size <= KERNEL_VADDR_START)
|
||||
{
|
||||
if ((cache & DCACHE) != 0)
|
||||
{
|
||||
rt_hw_cpu_dcache_clean_and_invalidate(addr, size);
|
||||
}
|
||||
if ((cache & ICACHE) != 0)
|
||||
{
|
||||
rt_hw_cpu_icache_invalidate(addr, size);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
#ifndef __CACHE_H__
|
||||
#define __CACHE_H__
|
||||
|
||||
void rt_hw_cpu_icache_invalidate(void *addr, int size);
|
||||
void rt_hw_cpu_dcache_clean_and_invalidate(void *addr, int size);
|
||||
|
||||
static inline void rt_hw_icache_invalidate_all(void)
|
||||
{
|
||||
__asm__ volatile("mcr p15, 0, %0, c7, c5, 0"::"r"(0ul));
|
||||
|
||||
@@ -90,7 +90,7 @@ void rt_hw_cpu_dcache_clean_local(void *addr, int size)
|
||||
rt_hw_cpu_sync();
|
||||
}
|
||||
|
||||
void rt_hw_cpu_dcache_clean_invalidate_local(void *addr, int size)
|
||||
void rt_hw_cpu_dcache_clean_and_invalidate_local(void *addr, int size)
|
||||
{
|
||||
dcache_wbinv_range((unsigned long)addr, (unsigned long)((unsigned char *)addr + size));
|
||||
rt_hw_cpu_sync();
|
||||
@@ -127,34 +127,3 @@ void rt_hw_sync_cache_local(void *addr, int size)
|
||||
rt_hw_cpu_dcache_clean_local(addr, size);
|
||||
rt_hw_cpu_icache_invalidate_local(addr, size);
|
||||
}
|
||||
|
||||
#ifdef RT_USING_SMART
|
||||
#include <lwp_arch.h>
|
||||
#define ICACHE (1 << 0)
|
||||
#define DCACHE (1 << 1)
|
||||
#define BCACHE (ICACHE | DCACHE)
|
||||
|
||||
/**
|
||||
* TODO moving syscall to kernel
|
||||
*/
|
||||
int sys_cacheflush(void *addr, int size, int cache)
|
||||
{
|
||||
/* must in user space */
|
||||
if ((size_t)addr >= USER_VADDR_START && (size_t)addr + size < USER_VADDR_TOP)
|
||||
{
|
||||
/**
|
||||
* we DO NOT check argument 'cache' invalid error
|
||||
*/
|
||||
if ((cache & DCACHE) != 0)
|
||||
{
|
||||
rt_hw_cpu_dcache_clean_invalidate_local(addr, size);
|
||||
}
|
||||
if ((cache & ICACHE) != 0)
|
||||
{
|
||||
rt_hw_cpu_icache_invalidate_local(addr, size);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return -RT_ERROR;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
void rt_hw_cpu_dcache_clean_local(void *addr, int size);
|
||||
void rt_hw_cpu_dcache_invalidate_local(void *addr, int size);
|
||||
void rt_hw_cpu_dcache_clean_invalidate_local(void *addr, int size);
|
||||
void rt_hw_cpu_dcache_clean_and_invalidate_local(void *addr, int size);
|
||||
|
||||
void rt_hw_cpu_icache_invalidate_local(void *addr, int size);
|
||||
|
||||
@@ -49,7 +49,7 @@ ALWAYS_INLINE void rt_hw_cpu_dcache_invalidate_all_local(void)
|
||||
rt_hw_cpu_sync();
|
||||
}
|
||||
|
||||
ALWAYS_INLINE void rt_hw_cpu_dcache_clean_invalidate_all_local(void)
|
||||
ALWAYS_INLINE void rt_hw_cpu_dcache_clean_and_invalidate_all_local(void)
|
||||
{
|
||||
__asm__ volatile(OPC_DCACHE_CIALL ::
|
||||
: "memory");
|
||||
@@ -76,11 +76,11 @@ ALWAYS_INLINE void rt_hw_cpu_icache_invalidate_all_local(void)
|
||||
|
||||
void rt_hw_cpu_dcache_clean(void *addr, int size);
|
||||
void rt_hw_cpu_dcache_invalidate(void *addr, int size);
|
||||
void rt_hw_cpu_dcache_clean_invalidate(void *addr, int size);
|
||||
void rt_hw_cpu_dcache_clean_and_invalidate(void *addr, int size);
|
||||
|
||||
void rt_hw_cpu_dcache_clean_all(void);
|
||||
void rt_hw_cpu_dcache_invalidate_all(void);
|
||||
void rt_hw_cpu_dcache_clean_invalidate_all(void);
|
||||
void rt_hw_cpu_dcache_clean_and_invalidate_all(void);
|
||||
|
||||
void rt_hw_cpu_icache_invalidate(void *addr, int size);
|
||||
void rt_hw_cpu_icache_invalidate_all(void);
|
||||
@@ -89,11 +89,11 @@ void rt_hw_cpu_icache_invalidate_all(void);
|
||||
|
||||
#define rt_hw_cpu_dcache_clean rt_hw_cpu_dcache_clean_local
|
||||
#define rt_hw_cpu_dcache_invalidate rt_hw_cpu_dcache_invalidate_local
|
||||
#define rt_hw_cpu_dcache_clean_invalidate rt_hw_cpu_dcache_clean_invalidate_local
|
||||
#define rt_hw_cpu_dcache_clean_and_invalidate rt_hw_cpu_dcache_clean_and_invalidate_local
|
||||
|
||||
#define rt_hw_cpu_dcache_clean_all rt_hw_cpu_dcache_clean_all_local
|
||||
#define rt_hw_cpu_dcache_invalidate_all rt_hw_cpu_dcache_invalidate_all_local
|
||||
#define rt_hw_cpu_dcache_clean_invalidate_all rt_hw_cpu_dcache_clean_invalidate_all_local
|
||||
#define rt_hw_cpu_dcache_clean_and_invalidate_all rt_hw_cpu_dcache_clean_and_invalidate_all_local
|
||||
|
||||
#define rt_hw_cpu_icache_invalidate rt_hw_cpu_icache_invalidate_local
|
||||
#define rt_hw_cpu_icache_invalidate_all rt_hw_cpu_icache_invalidate_all_local
|
||||
|
||||
@@ -57,8 +57,3 @@ rt_base_t rt_hw_cpu_dcache_status()
|
||||
void rt_hw_sync_cache_local(void *addr, int size)
|
||||
{
|
||||
}
|
||||
|
||||
int sys_cacheflush(void *addr, int size, int cache)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -21,11 +21,11 @@
|
||||
|
||||
ALWAYS_INLINE void rt_hw_cpu_dcache_clean_local(void *addr, int size) {}
|
||||
ALWAYS_INLINE void rt_hw_cpu_dcache_invalidate_local(void *addr, int size) {}
|
||||
ALWAYS_INLINE void rt_hw_cpu_dcache_clean_invalidate_local(void *addr, int size) {}
|
||||
ALWAYS_INLINE void rt_hw_cpu_dcache_clean_and_invalidate_local(void *addr, int size) {}
|
||||
|
||||
ALWAYS_INLINE void rt_hw_cpu_dcache_clean_all_local() {}
|
||||
ALWAYS_INLINE void rt_hw_cpu_dcache_invalidate_all_local(void) {}
|
||||
ALWAYS_INLINE void rt_hw_cpu_dcache_clean_invalidate_all_local(void) {}
|
||||
ALWAYS_INLINE void rt_hw_cpu_dcache_clean_and_invalidate_all_local(void) {}
|
||||
|
||||
ALWAYS_INLINE void rt_hw_cpu_icache_invalidate_local(void *addr, int size) {}
|
||||
ALWAYS_INLINE void rt_hw_cpu_icache_invalidate_all_local() {}
|
||||
@@ -36,11 +36,11 @@ ALWAYS_INLINE void rt_hw_cpu_icache_invalidate_all_local() {}
|
||||
|
||||
#define rt_hw_cpu_dcache_clean rt_hw_cpu_dcache_clean_local
|
||||
#define rt_hw_cpu_dcache_invalidate rt_hw_cpu_dcache_invalidate_local
|
||||
#define rt_hw_cpu_dcache_clean_invalidate rt_hw_cpu_dcache_clean_invalidate_local
|
||||
#define rt_hw_cpu_dcache_clean_and_invalidate rt_hw_cpu_dcache_clean_and_invalidate_local
|
||||
|
||||
#define rt_hw_cpu_dcache_clean_all rt_hw_cpu_dcache_clean_all_local
|
||||
#define rt_hw_cpu_dcache_invalidate_all rt_hw_cpu_dcache_invalidate_all_local
|
||||
#define rt_hw_cpu_dcache_clean_invalidate_all rt_hw_cpu_dcache_clean_invalidate_all_local
|
||||
#define rt_hw_cpu_dcache_clean_and_invalidate_all rt_hw_cpu_dcache_clean_and_invalidate_all_local
|
||||
|
||||
#define rt_hw_cpu_icache_invalidate rt_hw_cpu_icache_invalidate_local
|
||||
#define rt_hw_cpu_icache_invalidate_all rt_hw_cpu_icache_invalidate_all_local
|
||||
|
||||
Reference in New Issue
Block a user