summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-11-14 11:08:28 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2019-11-14 11:48:28 +0100
commitdf9426f970c6c3ff11300cefbf221abee679b270 (patch)
treebf01743b689bf2b7a3cbc34157884672ab44f3d4
parentbsp/gumstix: Fix warning (diff)
downloadrtems-df9426f970c6c3ff11300cefbf221abee679b270.tar.bz2
bsp/riscv: riscv_get_core_frequency()
Always provide this function. Return 0 by default. Fix formatting. Simplify function. Update #3785.
-rw-r--r--bsps/riscv/riscv/include/bsp/riscv.h2
-rw-r--r--bsps/riscv/riscv/start/bspstart.c64
2 files changed, 23 insertions, 43 deletions
diff --git a/bsps/riscv/riscv/include/bsp/riscv.h b/bsps/riscv/riscv/include/bsp/riscv.h
index f2f1a597ca..a469155865 100644
--- a/bsps/riscv/riscv/include/bsp/riscv.h
+++ b/bsps/riscv/riscv/include/bsp/riscv.h
@@ -38,9 +38,7 @@ extern volatile RISCV_CLINT_regs *riscv_clint;
void *riscv_fdt_get_address(const void *fdt, int node);
-#if RISCV_ENABLE_FRDME310ARTY_SUPPORT != 0
uint32_t riscv_get_core_frequency(void);
-#endif
#ifdef RTEMS_SMP
extern uint32_t riscv_hart_count;
diff --git a/bsps/riscv/riscv/start/bspstart.c b/bsps/riscv/riscv/start/bspstart.c
index a462bbe6e1..ff5738628d 100644
--- a/bsps/riscv/riscv/start/bspstart.c
+++ b/bsps/riscv/riscv/start/bspstart.c
@@ -32,9 +32,7 @@
#include <libfdt.h>
#include <string.h>
-#if RISCV_ENABLE_FRDME310ARTY_SUPPORT != 0
-unsigned int riscv_core_freq;
-#endif
+static uint32_t riscv_core_freq;
void *riscv_fdt_get_address(const void *fdt, int node)
{
@@ -166,55 +164,39 @@ uint32_t riscv_get_hart_index_by_phandle(uint32_t phandle)
return UINT32_MAX;
}
-#if RISCV_ENABLE_FRDME310ARTY_SUPPORT != 0
static uint32_t get_core_frequency(void)
{
- uint32_t node;
- const char *fdt=bsp_fdt_get();
-
- char *tlclk;
- uint32_t len;
-
- do
- {
- node=fdt_node_offset_by_compatible(fdt, -1,"fixed-clock");
- uint32_t *val=NULL;
- if (node>0)
- {
- tlclk = fdt_getprop(fdt, node, "clock-output-names", &len);
-
- if (strcmp(tlclk,"tlclk") == 0)
- {
- val = fdt_getprop(fdt, node, "clock-frequency", &len);
- if(val !=NULL)
- {
- riscv_core_freq=fdt32_to_cpu(*val);
- break;
- }
- }
- }else
- {
- bsp_fatal(RISCV_FATAL_NO_TLCLOCK_FREQUENCY_IN_DEVICE_TREE);
- }
+#if RISCV_ENABLE_FRDME310ARTY_SUPPORT != 0
+ uint32_t node;
+ const char *fdt;
+ const char *tlclk;
+ int len;
+ const fdt32_t *val;
- } while (node > 0);
+ fdt = bsp_fdt_get();
+ node = fdt_node_offset_by_compatible(fdt, -1,"fixed-clock");
+ tlclk = fdt_getprop(fdt, node, "clock-output-names", &len);
- return riscv_core_freq;
+ if (strcmp(tlclk,"tlclk") != 0) {
+ bsp_fatal(RISCV_FATAL_NO_TLCLOCK_FREQUENCY_IN_DEVICE_TREE);
+ }
+
+ val = fdt_getprop(fdt, node, "clock-frequency", &len);
+ if (val != NULL && len == 4) {
+ return fdt32_to_cpu(*val);
+ }
+#endif
+ return 0;
}
-inline uint32_t riscv_get_core_frequency(void)
+uint32_t riscv_get_core_frequency(void)
{
- return riscv_core_freq;
+ return riscv_core_freq;
}
-#endif
void bsp_start(void)
{
riscv_find_harts();
bsp_interrupt_initialize();
-
-#if RISCV_ENABLE_FRDME310ARTY_SUPPORT != 0
- riscv_core_freq=get_core_frequency();
-#endif
-
+ riscv_core_freq = get_core_frequency();
}