summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-07-20 15:37:52 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2022-09-09 09:12:40 +0200
commita1bc573160adc08e1804ba95b86715587cded586 (patch)
treebbf04ff79b351f92e6613350e53ed0b3688dc9d8
parent972db9c28132979333f31a52ec47a51335f81c1e (diff)
bsp/leon3: Move system control register support
Move, document, and reformat support functions from <leon.h> to <bsp/leon3.h>.
-rw-r--r--bsps/sparc/leon3/include/bsp/leon3.h99
-rw-r--r--bsps/sparc/leon3/include/leon.h53
-rw-r--r--bsps/sparc/leon3/start/bspsmp.c1
-rw-r--r--bsps/sparc/leon3/start/bspstart.c2
-rw-r--r--bsps/sparc/leon3/start/cache.c2
5 files changed, 101 insertions, 56 deletions
diff --git a/bsps/sparc/leon3/include/bsp/leon3.h b/bsps/sparc/leon3/include/bsp/leon3.h
index 623cbe5912..daa3f43591 100644
--- a/bsps/sparc/leon3/include/bsp/leon3.h
+++ b/bsps/sparc/leon3/include/bsp/leon3.h
@@ -61,6 +61,105 @@ extern "C" {
extern uint32_t LEON3_Cpu_Index;
/**
+ * @brief This constant represents the flush instruction cache flag of the LEON
+ * cache control register.
+ */
+#define LEON3_REG_CACHE_CTRL_FI 0x00200000U
+
+/**
+ * @brief This constant represents the data cache snooping enable flag of the
+ * LEON cache control register.
+ */
+#define LEON3_REG_CACHE_CTRL_DS 0x00800000U
+
+/**
+ * @brief Sets the ASI 0x2 system register value.
+ *
+ * @param addr is the address of the ASI 0x2 system register.
+ *
+ * @param val is the value to set.
+ */
+static inline void leon3_set_system_register( uint32_t addr, uint32_t val )
+{
+ __asm__ volatile(
+ "sta %1, [%0] 2"
+ :
+ : "r" ( addr ), "r" ( val )
+ );
+}
+
+/**
+ * @brief Gets the ASI 0x2 system register value.
+ *
+ * @param addr is the address of the ASI 0x2 system register.
+ *
+ * @return Returns the register value.
+ */
+static inline uint32_t leon3_get_system_register( uint32_t addr )
+{
+ uint32_t val;
+
+ __asm__ volatile(
+ "lda [%1] 2, %0"
+ : "=r" ( val )
+ : "r" ( addr )
+ );
+
+ return val;
+}
+
+/**
+ * @brief Sets the LEON cache control register value.
+ *
+ * @param val is the value to set.
+ */
+static inline void leon3_set_cache_control_register( uint32_t val )
+{
+ leon3_set_system_register( 0x0, val );
+}
+
+/**
+ * @brief Gets the LEON cache control register value.
+ *
+ * @return Returns the register value.
+ */
+static inline uint32_t leon3_get_cache_control_register( void )
+{
+ return leon3_get_system_register( 0x0 );
+}
+
+/**
+ * @brief Checks if the data cache snooping is enabled.
+ *
+ * @return Returns true, if the data cache snooping is enabled, otherwise
+ * false.
+ */
+static inline bool leon3_data_cache_snooping_enabled( void )
+{
+ return ( leon3_get_cache_control_register() & LEON3_REG_CACHE_CTRL_DS ) != 0;
+}
+
+/**
+ * @brief Gets the LEON instruction cache configuration register value.
+ *
+ * @return Returns the register value.
+ */
+static inline uint32_t leon3_get_inst_cache_config_register( void )
+{
+ return leon3_get_system_register( 0x8 );
+}
+
+/**
+ * @brief Gets the LEON data cache configuration register value.
+ *
+ * @return Returns the register value.
+ */
+static inline uint32_t leon3_get_data_cache_config_register( void )
+{
+ return leon3_get_system_register( 0xc );
+}
+
+/**
* @brief This lock serializes the interrupt controller access.
*/
extern rtems_interrupt_lock LEON3_IrqCtrl_Lock;
diff --git a/bsps/sparc/leon3/include/leon.h b/bsps/sparc/leon3/include/leon.h
index 848039f514..99c8873c00 100644
--- a/bsps/sparc/leon3/include/leon.h
+++ b/bsps/sparc/leon3/include/leon.h
@@ -123,12 +123,6 @@ extern "C" {
#define LEON_REG_UART_CTRL_FA 0x80000000 /* FIFO Available */
#define LEON_REG_UART_CTRL_FA_BIT 31
-/*
- * The following defines the bits in the LEON Cache Control Register.
- */
-#define LEON3_REG_CACHE_CTRL_FI 0x00200000 /* Flush instruction cache */
-#define LEON3_REG_CACHE_CTRL_DS 0x00800000 /* Data cache snooping */
-
/* LEON3 GP Timer */
extern volatile struct gptimer_regs *LEON3_Timer_Regs;
extern struct ambapp_dev *LEON3_Timer_Adev;
@@ -366,53 +360,6 @@ extern unsigned int leon3_timer_prescaler;
RTEMS_NO_RETURN void leon3_power_down_loop(void);
-static inline void leon3_set_system_register(uint32_t addr, uint32_t val)
-{
- __asm__ volatile(
- "sta %1, [%0] 2"
- :
- : "r" (addr), "r" (val)
- );
-}
-
-static inline uint32_t leon3_get_system_register(uint32_t addr)
-{
- uint32_t val;
-
- __asm__ volatile(
- "lda [%1] 2, %0"
- : "=r" (val)
- : "r" (addr)
- );
-
- return val;
-}
-
-static inline void leon3_set_cache_control_register(uint32_t val)
-{
- leon3_set_system_register(0x0, val);
-}
-
-static inline uint32_t leon3_get_cache_control_register(void)
-{
- return leon3_get_system_register(0x0);
-}
-
-static inline bool leon3_data_cache_snooping_enabled(void)
-{
- return leon3_get_cache_control_register() & LEON3_REG_CACHE_CTRL_DS;
-}
-
-static inline uint32_t leon3_get_inst_cache_config_register(void)
-{
- return leon3_get_system_register(0x8);
-}
-
-static inline uint32_t leon3_get_data_cache_config_register(void)
-{
- return leon3_get_system_register(0xc);
-}
-
static inline uint32_t leon3_up_counter_low(void)
{
uint32_t asr23;
diff --git a/bsps/sparc/leon3/start/bspsmp.c b/bsps/sparc/leon3/start/bspsmp.c
index a8ad60b497..7f8496289a 100644
--- a/bsps/sparc/leon3/start/bspsmp.c
+++ b/bsps/sparc/leon3/start/bspsmp.c
@@ -18,7 +18,6 @@
#include <bsp/fatal.h>
#include <bsp/irq.h>
#include <bsp/leon3.h>
-#include <leon.h>
#include <rtems/bspIo.h>
#include <rtems/sysinit.h>
#include <rtems/score/assert.h>
diff --git a/bsps/sparc/leon3/start/bspstart.c b/bsps/sparc/leon3/start/bspstart.c
index 75042e4c20..373121e0ba 100644
--- a/bsps/sparc/leon3/start/bspstart.c
+++ b/bsps/sparc/leon3/start/bspstart.c
@@ -21,7 +21,7 @@
#include <bsp.h>
#include <bsp/irq-generic.h>
-#include <leon.h>
+#include <bsp/leon3.h>
#include <bsp/bootcard.h>
#include <rtems/sysinit.h>
diff --git a/bsps/sparc/leon3/start/cache.c b/bsps/sparc/leon3/start/cache.c
index 922fef59e9..7ce1790635 100644
--- a/bsps/sparc/leon3/start/cache.c
+++ b/bsps/sparc/leon3/start/cache.c
@@ -7,7 +7,7 @@
*/
#include <amba.h>
-#include <leon.h>
+#include <bsp/leon3.h>
#define CPU_CACHE_SUPPORT_PROVIDES_RANGE_FUNCTIONS