aboutsummaryrefslogtreecommitdiff
path: root/openamp/src
diff options
context:
space:
mode:
Diffstat (limited to 'openamp/src')
-rw-r--r--openamp/src/system/freertos/cortexm/sys.c69
-rw-r--r--openamp/src/system/freertos/cortexm/sys.h35
-rw-r--r--openamp/src/system/generic/cortexm/sys.c69
-rw-r--r--openamp/src/system/generic/cortexm/sys.h31
4 files changed, 204 insertions, 0 deletions
diff --git a/openamp/src/system/freertos/cortexm/sys.c b/openamp/src/system/freertos/cortexm/sys.c
new file mode 100644
index 0000000..172ae3a
--- /dev/null
+++ b/openamp/src/system/freertos/cortexm/sys.c
@@ -0,0 +1,69 @@
+/*
+ * SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+/*
+ * @file freertos/cortexm/sys.c
+ * @brief cortex m system primitives implementation.
+ */
+
+#include <metal/io.h>
+#include <metal/sys.h>
+#include <metal/utilities.h>
+#include <stdint.h>
+
+void sys_irq_restore_enable(unsigned int flags)
+{
+ metal_unused(flags);
+ /* we disable/enable all IRQs */
+ __enable_irq();
+}
+
+unsigned int sys_irq_save_disable(void)
+{
+ /* we disable/enable all IRQs */
+ __disable_irq();
+ return 0;
+}
+
+void sys_irq_enable(unsigned int vector)
+{
+ NVIC_EnableIRQ(vector);
+}
+
+void sys_irq_disable(unsigned int vector)
+{
+ NVIC_DisableIRQ(vector);
+}
+
+void metal_machine_cache_flush(void *addr, unsigned int len)
+{
+#if (defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))
+ SCB_CleanDCache_by_Addr(addr, len);
+#else
+ metal_unused(addr);
+ metal_unused(len);
+#endif
+}
+
+void metal_machine_cache_invalidate(void *addr, unsigned int len)
+{
+#if (defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))
+ SCB_InvalidateDCache_by_Addr(addr, len);
+#else
+ metal_unused(addr);
+ metal_unused(len);
+#endif
+}
+
+void *metal_machine_io_mem_map(void *va, metal_phys_addr_t pa,
+ size_t size, unsigned int flags)
+{
+ metal_unused(pa);
+ metal_unused(size);
+ metal_unused(flags);
+
+ return va;
+}
diff --git a/openamp/src/system/freertos/cortexm/sys.h b/openamp/src/system/freertos/cortexm/sys.h
new file mode 100644
index 0000000..041fbd7
--- /dev/null
+++ b/openamp/src/system/freertos/cortexm/sys.h
@@ -0,0 +1,35 @@
+/*
+ * SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+/*
+ * @file freertos/cortexm/sys.h
+ * @brief cortexm system primitives for libmetal.
+ */
+
+#ifndef __METAL_FREERTOS_SYS__H__
+#error "Include metal/freertos/sys.h instead of metal/freertos/cortexm/sys.h"
+#endif
+
+#ifndef __METAL_FREERTOS_CORTEXM_SYS__H__
+#define __METAL_FREERTOS_CORTEXM_SYS__H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef METAL_INTERNAL
+
+void sys_irq_enable(unsigned int vector);
+
+void sys_irq_disable(unsigned int vector);
+
+#endif /* METAL_INTERNAL */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __METAL_FREERTOS_CORTEXM_SYS__H__ */
diff --git a/openamp/src/system/generic/cortexm/sys.c b/openamp/src/system/generic/cortexm/sys.c
new file mode 100644
index 0000000..7034663
--- /dev/null
+++ b/openamp/src/system/generic/cortexm/sys.c
@@ -0,0 +1,69 @@
+/*
+ * SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+/*
+ * @file generic/cortexm/sys.c
+ * @brief cortex m system primitives implementation.
+ */
+
+#include <metal/io.h>
+#include <metal/sys.h>
+#include <metal/utilities.h>
+#include <stdint.h>
+
+void sys_irq_restore_enable(unsigned int flags)
+{
+ metal_unused(flags);
+ /* we disable/enable all IRQs */
+ __enable_irq();
+}
+
+unsigned int sys_irq_save_disable(void)
+{
+ /* we disable/enable all IRQs */
+ __disable_irq();
+ return 0;
+}
+
+void sys_irq_enable(unsigned int vector)
+{
+ NVIC_EnableIRQ(vector);
+}
+
+void sys_irq_disable(unsigned int vector)
+{
+ NVIC_DisableIRQ(vector);
+}
+
+void metal_machine_cache_flush(void *addr, unsigned int len)
+{
+#if (defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))
+ SCB_CleanDCache_by_Addr(addr, len);
+#else
+ metal_unused(addr);
+ metal_unused(len);
+#endif
+}
+
+void metal_machine_cache_invalidate(void *addr, unsigned int len)
+{
+#if (defined(__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))
+ SCB_InvalidateDCache_by_Addr(addr, len);
+#else
+ metal_unused(addr);
+ metal_unused(len);
+#endif
+}
+
+void *metal_machine_io_mem_map(void *va, metal_phys_addr_t pa,
+ size_t size, unsigned int flags)
+{
+ metal_unused(pa);
+ metal_unused(size);
+ metal_unused(flags);
+
+ return va;
+}
diff --git a/openamp/src/system/generic/cortexm/sys.h b/openamp/src/system/generic/cortexm/sys.h
new file mode 100644
index 0000000..35a8aa0
--- /dev/null
+++ b/openamp/src/system/generic/cortexm/sys.h
@@ -0,0 +1,31 @@
+/*
+ * SPDX-FileCopyrightText: Copyright 2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+/*
+ * @file generic/cortexm/sys.h
+ * @brief cortexm system primitives for libmetal.
+ */
+
+#ifndef __METAL_GENERIC_CORTEXM_SYS__H__
+#define __METAL_GENERIC_CORTEXM_SYS__H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef METAL_INTERNAL
+
+void sys_irq_enable(unsigned int vector);
+
+void sys_irq_disable(unsigned int vector);
+
+#endif /* METAL_INTERNAL */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __METAL_GENERIC_CORTEXM_SYS__H__ */