From 0b23894a041bd00a0d3a2288bb34751bbbef790d Mon Sep 17 00:00:00 2001 From: Kumar Gala Date: Tue, 8 Sep 2020 11:56:51 -0500 Subject: [PATCH] lib: update libmetal to SHA db77c464.. Origin: https://github.com/OpenAMP/libmetal commit: db77c464376e603bc46122b38a7956c87597895b Status: merge libmetal new version after removing useless dirs. Signed-off-by: Kumar Gala --- README | 2 +- libmetal/CMakeLists.txt | 4 + libmetal/cmake/modules/FindHugeTLBFS.cmake | 2 +- libmetal/cmake/modules/FindLibSysFS.cmake | 2 +- libmetal/lib/atomic.h | 83 ++++++++++++++++++- libmetal/lib/compiler/gcc/atomic.h | 16 ++-- libmetal/lib/compiler/gcc/compiler.h | 11 +++ libmetal/lib/compiler/iar/compiler.h | 1 + libmetal/lib/io.h | 15 ++-- libmetal/lib/processor/aarch64/cpu.h | 7 +- libmetal/lib/processor/x86/cpu.h | 7 +- libmetal/lib/processor/x86_64/cpu.h | 7 +- libmetal/lib/system/freertos/mutex.h | 26 ++++-- libmetal/lib/system/freertos/zynq7/sys.c | 2 +- libmetal/lib/system/freertos/zynqmp_a53/sys.c | 2 +- libmetal/lib/system/freertos/zynqmp_r5/sys.c | 2 +- .../system/generic/microblaze_generic/sys.c | 24 +++--- libmetal/lib/system/generic/mutex.h | 25 ++++-- libmetal/lib/system/generic/zynq7/sys.c | 2 +- libmetal/lib/system/generic/zynqmp_a53/sys.c | 2 +- libmetal/lib/system/generic/zynqmp_r5/sys.c | 2 +- libmetal/lib/system/nuttx/time.c | 2 +- libmetal/lib/system/zephyr/cortexm/sys.c | 2 +- libmetal/lib/system/zephyr/time.c | 6 +- 24 files changed, 196 insertions(+), 58 deletions(-) diff --git a/README b/README index a1545b2..4af8afd 100644 --- a/README +++ b/README @@ -27,7 +27,7 @@ URL: https://github.com/OpenAMP/libmetal commit: - f1e8154b6392838a7c68871ab03400112b1e59b7 + db77c464376e603bc46122b38a7956c87597895b Maintained-by: External diff --git a/libmetal/CMakeLists.txt b/libmetal/CMakeLists.txt index d8a56c9..7839bd9 100644 --- a/libmetal/CMakeLists.txt +++ b/libmetal/CMakeLists.txt @@ -3,6 +3,10 @@ if (POLICY CMP0048) cmake_policy(SET CMP0048 NEW) endif() +if (POLICY CMP0077) + cmake_policy(SET CMP0077 NEW) +endif() + list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" diff --git a/libmetal/cmake/modules/FindHugeTLBFS.cmake b/libmetal/cmake/modules/FindHugeTLBFS.cmake index 5fab0bf..b3a6c1e 100644 --- a/libmetal/cmake/modules/FindHugeTLBFS.cmake +++ b/libmetal/cmake/modules/FindHugeTLBFS.cmake @@ -25,7 +25,7 @@ find_library (HUGETLBFS_LIBRARY NAMES ${HUGETLBFS_NAMES}) # handle the QUIETLY and REQUIRED arguments and set HUGETLBFS_FOUND to TRUE if # all listed variables are TRUE include (FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS (HUGETLBFS DEFAULT_MSG HUGETLBFS_LIBRARY HUGETLBFS_INCLUDE_DIR) +FIND_PACKAGE_HANDLE_STANDARD_ARGS (HugeTLBFS DEFAULT_MSG HUGETLBFS_LIBRARY HUGETLBFS_INCLUDE_DIR) if (HUGETLBFS_FOUND) set (HUGETLBFS_LIBRARIES ${HUGETLBFS_LIBRARY}) diff --git a/libmetal/cmake/modules/FindLibSysFS.cmake b/libmetal/cmake/modules/FindLibSysFS.cmake index bd3d0da..898a72d 100644 --- a/libmetal/cmake/modules/FindLibSysFS.cmake +++ b/libmetal/cmake/modules/FindLibSysFS.cmake @@ -25,7 +25,7 @@ find_library (LIBSYSFS_LIBRARY NAMES ${LIBSYSFS_NAMES}) # handle the QUIETLY and REQUIRED arguments and set LIBSYSFS_FOUND to TRUE if # all listed variables are TRUE include (FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS (LIBSYSFS DEFAULT_MSG LIBSYSFS_LIBRARY LIBSYSFS_INCLUDE_DIR) +FIND_PACKAGE_HANDLE_STANDARD_ARGS (LibSysFS DEFAULT_MSG LIBSYSFS_LIBRARY LIBSYSFS_INCLUDE_DIR) if (LIBSYSFS_FOUND) set (LIBSYSFS_LIBRARIES ${LIBSYSFS_LIBRARY}) diff --git a/libmetal/lib/atomic.h b/libmetal/lib/atomic.h index 3e05631..d82bb82 100644 --- a/libmetal/lib/atomic.h +++ b/libmetal/lib/atomic.h @@ -14,8 +14,87 @@ #include -#if defined(HAVE_STDATOMIC_H) && !defined(__STDC_NO_ATOMICS__) && \ - !defined(__cplusplus) +#if defined(__cplusplus) +# include + +/* + * has the same functionality as but all members are only + * accessible in the std namespace. As the rest of libmetal is pure C, it does + * not know about namespaces, even when compiled as part of a C++ file. So we + * just export the members of into the global namespace. + */ +# include +using std::atomic_flag; +using std::memory_order; + +using std::atomic_bool; +using std::atomic_char; +using std::atomic_schar; +using std::atomic_uchar; +using std::atomic_short; +using std::atomic_ushort; +using std::atomic_int; +using std::atomic_uint; +using std::atomic_long; +using std::atomic_ulong; +using std::atomic_llong; +using std::atomic_ullong; +using std::atomic_char16_t; +using std::atomic_char32_t; +using std::atomic_wchar_t; +using std::atomic_int_least8_t; +using std::atomic_uint_least8_t; +using std::atomic_int_least16_t; +using std::atomic_uint_least16_t; +using std::atomic_int_least32_t; +using std::atomic_uint_least32_t; +using std::atomic_int_least64_t; +using std::atomic_uint_least64_t; +using std::atomic_int_fast8_t; +using std::atomic_uint_fast8_t; +using std::atomic_int_fast16_t; +using std::atomic_uint_fast16_t; +using std::atomic_int_fast32_t; +using std::atomic_uint_fast32_t; +using std::atomic_int_fast64_t; +using std::atomic_uint_fast64_t; +using std::atomic_intptr_t; +using std::atomic_uintptr_t; +using std::atomic_size_t; +using std::atomic_ptrdiff_t; +using std::atomic_intmax_t; +using std::atomic_uintmax_t; + +using std::atomic_flag_test_and_set; +using std::atomic_flag_test_and_set_explicit; +using std::atomic_flag_clear; +using std::atomic_flag_clear_explicit; +using std::atomic_init; +using std::atomic_is_lock_free; +using std::atomic_store; +using std::atomic_store_explicit; +using std::atomic_load; +using std::atomic_load_explicit; +using std::atomic_exchange; +using std::atomic_exchange_explicit; +using std::atomic_compare_exchange_strong; +using std::atomic_compare_exchange_strong_explicit; +using std::atomic_compare_exchange_weak; +using std::atomic_compare_exchange_weak_explicit; +using std::atomic_fetch_add; +using std::atomic_fetch_add_explicit; +using std::atomic_fetch_sub; +using std::atomic_fetch_sub_explicit; +using std::atomic_fetch_or; +using std::atomic_fetch_or_explicit; +using std::atomic_fetch_xor; +using std::atomic_fetch_xor_explicit; +using std::atomic_fetch_and; +using std::atomic_fetch_and_explicit; +using std::atomic_thread_fence; +using std::atomic_signal_fence; + +#elif defined(HAVE_STDATOMIC_H) && !defined(__STDC_NO_ATOMICS__) # include # include #elif defined(__GNUC__) diff --git a/libmetal/lib/compiler/gcc/atomic.h b/libmetal/lib/compiler/gcc/atomic.h index d7a52cc..7d66299 100644 --- a/libmetal/lib/compiler/gcc/atomic.h +++ b/libmetal/lib/compiler/gcc/atomic.h @@ -63,10 +63,10 @@ typedef enum { atomic_load(OBJ) #define atomic_exchange(OBJ, DES) \ ({ \ - typeof(OBJ) obj = (OBJ); \ - typeof(*obj) des = (DES); \ - typeof(*obj) expval; \ - typeof(*obj) oldval = atomic_load(obj); \ + __typeof__(OBJ) obj = (OBJ); \ + __typeof__(*obj) des = (DES); \ + __typeof__(*obj) expval; \ + __typeof__(*obj) oldval = atomic_load(obj); \ do { \ expval = oldval; \ oldval = __sync_val_compare_and_swap( \ @@ -78,10 +78,10 @@ typedef enum { atomic_exchange((OBJ), (DES)) #define atomic_compare_exchange_strong(OBJ, EXP, DES) \ ({ \ - typeof(OBJ) obj = (OBJ); \ - typeof(EXP) exp = (EXP); \ - typeof(*obj) expval = *exp; \ - typeof(*obj) oldval = __sync_val_compare_and_swap( \ + __typeof__(OBJ) obj = (OBJ); \ + __typeof__(EXP) exp = (EXP); \ + __typeof__(*obj) expval = *exp; \ + __typeof__(*obj) oldval = __sync_val_compare_and_swap( \ obj, expval, (DES)); \ *exp = oldval; \ oldval == expval; \ diff --git a/libmetal/lib/compiler/gcc/compiler.h b/libmetal/lib/compiler/gcc/compiler.h index 76fdfcd..3b1405a 100644 --- a/libmetal/lib/compiler/gcc/compiler.h +++ b/libmetal/lib/compiler/gcc/compiler.h @@ -20,6 +20,17 @@ extern "C" { #define metal_align(n) __attribute__((aligned(n))) #define metal_weak __attribute__((weak)) +#if defined(__STRICT_ANSI__) +#define metal_asm __asm__ +#else +/* + * Even though __asm__ is always available in mainline GCC, we use asm in + * the non-strict modes for compatibility with other compilers that define + * __GNUC__ + */ +#define metal_asm asm +#endif + #define METAL_PACKED_BEGIN #define METAL_PACKED_END __attribute__((__packed__)) diff --git a/libmetal/lib/compiler/iar/compiler.h b/libmetal/lib/compiler/iar/compiler.h index 1a790d8..77d7dee 100644 --- a/libmetal/lib/compiler/iar/compiler.h +++ b/libmetal/lib/compiler/iar/compiler.h @@ -19,6 +19,7 @@ extern "C" { #define restrict __restrict__ #define metal_align(n) __attribute__((aligned(n))) #define metal_weak __attribute__((weak)) +#define metal_asm asm #define METAL_PACKED_BEGIN __packed #define METAL_PACKED_END diff --git a/libmetal/lib/io.h b/libmetal/lib/io.h index 14b3194..565872b 100644 --- a/libmetal/lib/io.h +++ b/libmetal/lib/io.h @@ -274,16 +274,21 @@ metal_io_write(struct metal_io_region *io, unsigned long offset, if (io->ops.write) (*io->ops.write)(io, offset, value, order, width); else if (ptr && sizeof(atomic_uchar) == width) - atomic_store_explicit((atomic_uchar *)ptr, value, order); + atomic_store_explicit((atomic_uchar *)ptr, (unsigned char)value, + order); else if (ptr && sizeof(atomic_ushort) == width) - atomic_store_explicit((atomic_ushort *)ptr, value, order); + atomic_store_explicit((atomic_ushort *)ptr, + (unsigned short)value, order); else if (ptr && sizeof(atomic_uint) == width) - atomic_store_explicit((atomic_uint *)ptr, value, order); + atomic_store_explicit((atomic_uint *)ptr, (unsigned int)value, + order); else if (ptr && sizeof(atomic_ulong) == width) - atomic_store_explicit((atomic_ulong *)ptr, value, order); + atomic_store_explicit((atomic_ulong *)ptr, (unsigned long)value, + order); #ifndef NO_ATOMIC_64_SUPPORT else if (ptr && sizeof(atomic_ullong) == width) - atomic_store_explicit((atomic_ullong *)ptr, value, order); + atomic_store_explicit((atomic_ullong *)ptr, + (unsigned long long)value, order); #endif else metal_assert(0); diff --git a/libmetal/lib/processor/aarch64/cpu.h b/libmetal/lib/processor/aarch64/cpu.h index 3662942..88ae715 100644 --- a/libmetal/lib/processor/aarch64/cpu.h +++ b/libmetal/lib/processor/aarch64/cpu.h @@ -12,6 +12,11 @@ #ifndef __METAL_AARCH64_CPU__H__ #define __METAL_AARCH64_CPU__H__ -#define metal_cpu_yield() asm volatile("yield") +#include + +static inline void metal_cpu_yield(void) +{ + metal_asm volatile("yield"); +} #endif /* __METAL_AARCH64_CPU__H__ */ diff --git a/libmetal/lib/processor/x86/cpu.h b/libmetal/lib/processor/x86/cpu.h index 7484c49..2aad338 100644 --- a/libmetal/lib/processor/x86/cpu.h +++ b/libmetal/lib/processor/x86/cpu.h @@ -12,6 +12,11 @@ #ifndef __METAL_X86_CPU__H__ #define __METAL_X86_CPU__H__ -#define metal_cpu_yield() asm volatile("rep; nop") +#include + +static inline void metal_cpu_yield(void) +{ + metal_asm volatile("rep; nop"); +} #endif /* __METAL_X86_CPU__H__ */ diff --git a/libmetal/lib/processor/x86_64/cpu.h b/libmetal/lib/processor/x86_64/cpu.h index 074411d..b9e02c4 100644 --- a/libmetal/lib/processor/x86_64/cpu.h +++ b/libmetal/lib/processor/x86_64/cpu.h @@ -12,6 +12,11 @@ #ifndef __METAL_X86_64_CPU__H__ #define __METAL_X86_64_CPU__H__ -#define metal_cpu_yield() asm volatile("rep; nop") +#include + +static inline void metal_cpu_yield(void) +{ + metal_asm volatile("rep; nop"); +} #endif /* __METAL_X86_64_CPU__H__ */ diff --git a/libmetal/lib/system/freertos/mutex.h b/libmetal/lib/system/freertos/mutex.h index 26d0efd..921cb2a 100644 --- a/libmetal/lib/system/freertos/mutex.h +++ b/libmetal/lib/system/freertos/mutex.h @@ -17,7 +17,6 @@ #define __METAL_FREERTOS_MUTEX__H__ #include -#include #ifdef __cplusplus extern "C" { @@ -27,11 +26,14 @@ typedef struct { atomic_int v; } metal_mutex_t; +#define METAL_MUTEX_UNLOCKED 0 +#define METAL_MUTEX_LOCKED 1 + /* - * METAL_MUTEX_INIT - used for initializing an mutex elmenet in a static struct + * METAL_MUTEX_INIT - used for initializing an mutex element in a static struct * or global */ -#define METAL_MUTEX_INIT(m) { ATOMIC_VAR_INIT(0) } +#define METAL_MUTEX_INIT(m) { ATOMIC_VAR_INIT(METAL_MUTEX_UNLOCKED) } /* * METAL_MUTEX_DEFINE - used for defining and initializing a global or * static singleton mutex @@ -40,7 +42,7 @@ typedef struct { static inline void __metal_mutex_init(metal_mutex_t *mutex) { - atomic_store(&mutex->v, 0); + atomic_store(&mutex->v, METAL_MUTEX_UNLOCKED); } static inline void __metal_mutex_deinit(metal_mutex_t *mutex) @@ -50,19 +52,29 @@ static inline void __metal_mutex_deinit(metal_mutex_t *mutex) static inline int __metal_mutex_try_acquire(metal_mutex_t *mutex) { - return 1 - atomic_flag_test_and_set(&mutex->v); + int unlocked = METAL_MUTEX_UNLOCKED; + + if (atomic_compare_exchange_strong(&mutex->v, &unlocked, + METAL_MUTEX_LOCKED)) { + return 1; /* acquired */ + } else { + return 0; /* not acquired */ + } } static inline void __metal_mutex_acquire(metal_mutex_t *mutex) { - while (atomic_flag_test_and_set(&mutex->v)) { + int unlocked = METAL_MUTEX_UNLOCKED; + + while (!atomic_compare_exchange_weak(&mutex->v, &unlocked, + METAL_MUTEX_LOCKED)) { ; } } static inline void __metal_mutex_release(metal_mutex_t *mutex) { - atomic_flag_clear(&mutex->v); + atomic_store(&mutex->v, METAL_MUTEX_UNLOCKED); } static inline int __metal_mutex_is_acquired(metal_mutex_t *mutex) diff --git a/libmetal/lib/system/freertos/zynq7/sys.c b/libmetal/lib/system/freertos/zynq7/sys.c index b393f90..3cff41c 100644 --- a/libmetal/lib/system/freertos/zynq7/sys.c +++ b/libmetal/lib/system/freertos/zynq7/sys.c @@ -64,7 +64,7 @@ void metal_machine_cache_invalidate(void *addr, unsigned int len) */ void metal_weak metal_generic_default_poll(void) { - asm volatile("wfi"); + metal_asm volatile("wfi"); } void *metal_machine_io_mem_map(void *va, metal_phys_addr_t pa, diff --git a/libmetal/lib/system/freertos/zynqmp_a53/sys.c b/libmetal/lib/system/freertos/zynqmp_a53/sys.c index b5cd3c8..826f51d 100644 --- a/libmetal/lib/system/freertos/zynqmp_a53/sys.c +++ b/libmetal/lib/system/freertos/zynqmp_a53/sys.c @@ -58,7 +58,7 @@ void metal_machine_cache_invalidate(void *addr, unsigned int len) */ void metal_weak metal_generic_default_poll(void) { - asm volatile("wfi"); + metal_asm volatile("wfi"); } void *metal_machine_io_mem_map(void *va, metal_phys_addr_t pa, diff --git a/libmetal/lib/system/freertos/zynqmp_r5/sys.c b/libmetal/lib/system/freertos/zynqmp_r5/sys.c index a456b00..358f79e 100644 --- a/libmetal/lib/system/freertos/zynqmp_r5/sys.c +++ b/libmetal/lib/system/freertos/zynqmp_r5/sys.c @@ -58,7 +58,7 @@ void metal_machine_cache_invalidate(void *addr, unsigned int len) */ void metal_weak metal_generic_default_poll(void) { - asm volatile("wfi"); + metal_asm volatile("wfi"); } void *metal_machine_io_mem_map(void *va, metal_phys_addr_t pa, diff --git a/libmetal/lib/system/generic/microblaze_generic/sys.c b/libmetal/lib/system/generic/microblaze_generic/sys.c index c2145d1..4cef5f2 100644 --- a/libmetal/lib/system/generic/microblaze_generic/sys.c +++ b/libmetal/lib/system/generic/microblaze_generic/sys.c @@ -27,8 +27,8 @@ unsigned int sys_irq_save_disable(void) { unsigned int state; - asm volatile(" mfs %0, rmsr \n" - " msrclr r0, %1 \n" + metal_asm volatile(" mfs %0, rmsr\n" + " msrclr r0, %1\n" : "=r"(state) : "i"(MSR_IE) : "memory"); @@ -41,9 +41,9 @@ void sys_irq_restore_enable(unsigned int flags) unsigned int tmp; if (flags) - asm volatile(" msrset %0, %1 \n" - : "=r"(tmp) - : "i"(MSR_IE) + metal_asm volatile(" msrset %0, %1\n" + : "=r"(tmp) + : "i"(MSR_IE) : "memory"); } @@ -52,9 +52,9 @@ unsigned int sys_irq_save_disable(void) { unsigned int tmp, state; - asm volatile (" mfs %0, rmsr \n" - " andi %1, %0, %2 \n" - " mts rmsr, %1 \n" + metal_asm volatile (" mfs %0, rmsr\n" + " andi %1, %0, %2\n" + " mts rmsr, %1\n" : "=r"(state), "=r"(tmp) : "i"(~MSR_IE) : "memory"); @@ -67,9 +67,9 @@ void sys_irq_restore_enable(unsigned int flags) unsigned int tmp; if (flags) - asm volatile(" mfs %0, rmsr \n" - " or %0, %0, %1 \n" - " mts rmsr, %0 \n" + metal_asm volatile(" mfs %0, rmsr\n" + " or %0, %0, %1\n" + " mts rmsr, %0\n" : "=r"(tmp) : "r"(flags) : "memory"); @@ -135,7 +135,7 @@ void metal_machine_cache_invalidate(void *addr, unsigned int len) */ void metal_weak metal_generic_default_poll(void) { - asm volatile("nop"); + metal_asm volatile("nop"); } void *metal_machine_io_mem_map(void *va, metal_phys_addr_t pa, diff --git a/libmetal/lib/system/generic/mutex.h b/libmetal/lib/system/generic/mutex.h index ead599d..0a5c719 100644 --- a/libmetal/lib/system/generic/mutex.h +++ b/libmetal/lib/system/generic/mutex.h @@ -26,11 +26,14 @@ typedef struct { atomic_int v; } metal_mutex_t; +#define METAL_MUTEX_UNLOCKED 0 +#define METAL_MUTEX_LOCKED 1 + /* - * METAL_MUTEX_INIT - used for initializing an mutex elmenet in a static struct + * METAL_MUTEX_INIT - used for initializing an mutex element in a static struct * or global */ -#define METAL_MUTEX_INIT(m) { ATOMIC_VAR_INIT(0) } +#define METAL_MUTEX_INIT(m) { ATOMIC_VAR_INIT(METAL_MUTEX_UNLOCKED) } /* * METAL_MUTEX_DEFINE - used for defining and initializing a global or * static singleton mutex @@ -39,7 +42,7 @@ typedef struct { static inline void __metal_mutex_init(metal_mutex_t *mutex) { - atomic_store(&mutex->v, 0); + atomic_store(&mutex->v, METAL_MUTEX_UNLOCKED); } static inline void __metal_mutex_deinit(metal_mutex_t *mutex) @@ -49,19 +52,29 @@ static inline void __metal_mutex_deinit(metal_mutex_t *mutex) static inline int __metal_mutex_try_acquire(metal_mutex_t *mutex) { - return 1 - atomic_flag_test_and_set(&mutex->v); + int unlocked = METAL_MUTEX_UNLOCKED; + + if (atomic_compare_exchange_strong(&mutex->v, &unlocked, + METAL_MUTEX_LOCKED)) { + return 1; /* acquired */ + } else { + return 0; /* not acquired */ + } } static inline void __metal_mutex_acquire(metal_mutex_t *mutex) { - while (atomic_flag_test_and_set(&mutex->v)) { + int unlocked = METAL_MUTEX_UNLOCKED; + + while (!atomic_compare_exchange_weak(&mutex->v, &unlocked, + METAL_MUTEX_LOCKED)) { ; } } static inline void __metal_mutex_release(metal_mutex_t *mutex) { - atomic_flag_clear(&mutex->v); + atomic_store(&mutex->v, METAL_MUTEX_UNLOCKED); } static inline int __metal_mutex_is_acquired(metal_mutex_t *mutex) diff --git a/libmetal/lib/system/generic/zynq7/sys.c b/libmetal/lib/system/generic/zynq7/sys.c index db5fc50..338be25 100644 --- a/libmetal/lib/system/generic/zynq7/sys.c +++ b/libmetal/lib/system/generic/zynq7/sys.c @@ -61,7 +61,7 @@ void metal_machine_cache_invalidate(void *addr, unsigned int len) */ void metal_weak metal_generic_default_poll(void) { - asm volatile("wfi"); + metal_asm volatile("wfi"); } void *metal_machine_io_mem_map(void *va, metal_phys_addr_t pa, diff --git a/libmetal/lib/system/generic/zynqmp_a53/sys.c b/libmetal/lib/system/generic/zynqmp_a53/sys.c index a3c3fd8..d7f24bf 100644 --- a/libmetal/lib/system/generic/zynqmp_a53/sys.c +++ b/libmetal/lib/system/generic/zynqmp_a53/sys.c @@ -58,7 +58,7 @@ void metal_machine_cache_invalidate(void *addr, unsigned int len) */ void metal_weak metal_generic_default_poll(void) { - asm volatile("wfi"); + metal_asm volatile("wfi"); } void *metal_machine_io_mem_map(void *va, metal_phys_addr_t pa, diff --git a/libmetal/lib/system/generic/zynqmp_r5/sys.c b/libmetal/lib/system/generic/zynqmp_r5/sys.c index d6c2622..357bde6 100644 --- a/libmetal/lib/system/generic/zynqmp_r5/sys.c +++ b/libmetal/lib/system/generic/zynqmp_r5/sys.c @@ -58,7 +58,7 @@ void metal_machine_cache_invalidate(void *addr, unsigned int len) */ void metal_weak metal_generic_default_poll(void) { - asm volatile("wfi"); + metal_asm volatile("wfi"); } void *metal_machine_io_mem_map(void *va, metal_phys_addr_t pa, diff --git a/libmetal/lib/system/nuttx/time.c b/libmetal/lib/system/nuttx/time.c index bafc957..986f1ba 100644 --- a/libmetal/lib/system/nuttx/time.c +++ b/libmetal/lib/system/nuttx/time.c @@ -18,7 +18,7 @@ unsigned long long metal_get_timestamp(void) struct timespec tp; int r; - r = clock_systimespec(&tp); + r = clock_systime_timespec(&tp); if (!r) { t = (unsigned long long)tp.tv_sec * NSEC_PER_SEC; t += tp.tv_nsec; diff --git a/libmetal/lib/system/zephyr/cortexm/sys.c b/libmetal/lib/system/zephyr/cortexm/sys.c index f65c827..bce4815 100644 --- a/libmetal/lib/system/zephyr/cortexm/sys.c +++ b/libmetal/lib/system/zephyr/cortexm/sys.c @@ -18,5 +18,5 @@ */ void metal_weak metal_generic_default_poll(void) { - __asm__ __volatile__("wfi"); + metal_asm __volatile__("wfi"); } diff --git a/libmetal/lib/system/zephyr/time.c b/libmetal/lib/system/zephyr/time.c index 4f33615..93a30a7 100644 --- a/libmetal/lib/system/zephyr/time.c +++ b/libmetal/lib/system/zephyr/time.c @@ -10,12 +10,10 @@ */ #include -#include - -extern volatile uint64_t _sys_clock_tick_count; +#include unsigned long long metal_get_timestamp(void) { - return (unsigned long long)_sys_clock_tick_count; + return (unsigned long long)k_uptime_ticks(); }