[rtems commit] bsp/altera-cyclone-v: Update clock frequencies
Sebastian Huber
sebh at rtems.org
Thu Dec 14 06:05:00 UTC 2017
Module: rtems
Branch: master
Commit: c0a3c89938c235402c0a5a6f27de868650673fdf
Changeset: http://git.rtems.org/rtems/commit/?id=c0a3c89938c235402c0a5a6f27de868650673fdf
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Fri Oct 13 11:20:39 2017 +0200
bsp/altera-cyclone-v: Update clock frequencies
---
.../libbsp/arm/altera-cyclone-v/startup/bspstart.c | 75 +++++++++++++++++++++-
1 file changed, 73 insertions(+), 2 deletions(-)
diff --git a/c/src/lib/libbsp/arm/altera-cyclone-v/startup/bspstart.c b/c/src/lib/libbsp/arm/altera-cyclone-v/startup/bspstart.c
index c10dad3..ef62790 100644
--- a/c/src/lib/libbsp/arm/altera-cyclone-v/startup/bspstart.c
+++ b/c/src/lib/libbsp/arm/altera-cyclone-v/startup/bspstart.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2015 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2013, 2017 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
* Dornierstr. 4
@@ -14,11 +14,82 @@
#include <bsp/bootcard.h>
#include <bsp/arm-a9mpcore-clock.h>
+#include <bsp/fdt.h>
#include <bsp/irq-generic.h>
#include <bsp/linker-symbols.h>
-void bsp_start( void )
+#include <alt_clock_manager.h>
+
+#include <libfdt.h>
+
+static void set_clock(
+ const void *fdt,
+ int parent,
+ ALT_CLK_t clk,
+ const char *name
+)
+{
+ int node;
+ int len;
+ const uint32_t *val;
+
+ node = fdt_subnode_offset(fdt, parent, name);
+ val = fdt_getprop(fdt, node, "clock-frequency", &len);
+
+ if (val != NULL && len >= 4) {
+ alt_clk_ext_clk_freq_set(clk, fdt32_to_cpu(val[0]));
+ }
+}
+
+static void set_clock_by_output_name(
+ const void *fdt,
+ ALT_CLK_t clk,
+ const char *clock_output_name
+)
+{
+ int node;
+ int len;
+ const uint32_t *val;
+
+ node = fdt_node_offset_by_prop_value(
+ fdt,
+ -1,
+ "clock-output-names",
+ clock_output_name,
+ strlen(clock_output_name) + 1
+ );
+ val = fdt_getprop(fdt, node, "clock-frequency", &len);
+
+ if (val != NULL && len >= 4) {
+ alt_clk_ext_clk_freq_set(clk, fdt32_to_cpu(val[0]));
+ }
+}
+
+static void update_clocks(void)
+{
+ const void *fdt;
+ int parent;
+
+ fdt = bsp_fdt_get();
+
+ /* Try to set by node name */
+ parent = fdt_node_offset_by_compatible(fdt, -1, "altr,clk-mgr");
+ parent = fdt_subnode_offset(fdt, parent, "clocks");
+ set_clock(fdt, parent, ALT_CLK_OSC1, "osc1");
+ set_clock(fdt, parent, ALT_CLK_IN_PIN_OSC2, "osc2");
+ set_clock(fdt, parent, ALT_CLK_F2H_PERIPH_REF, "f2s_periph_ref_clk");
+ set_clock(fdt, parent, ALT_CLK_F2H_SDRAM_REF, "f2s_sdram_ref_clk");
+
+ /* Try to set by "clock-output-names" property value */
+ set_clock_by_output_name(fdt, ALT_CLK_OSC1, "hps_0_eosc1-clk");
+ set_clock_by_output_name(fdt, ALT_CLK_IN_PIN_OSC2, "hps_0_eosc2-clk");
+ set_clock_by_output_name(fdt, ALT_CLK_F2H_PERIPH_REF, "hps_0_f2s_periph_ref_clk-clk");
+ set_clock_by_output_name(fdt, ALT_CLK_F2H_SDRAM_REF, "hps_0_f2s_sdram_ref_clk-clk");
+}
+
+void bsp_start(void)
{
+ update_clocks();
a9mpcore_clock_initialize_early();
bsp_interrupt_initialize();
rtems_cache_coherent_add_area(
More information about the vc
mailing list