summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-10-19 08:44:33 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-10-19 09:51:28 +0200
commite29f1f551cce4a4660895535a8e22fbb8059670d (patch)
tree38e55b79b01994bf811893cb777737ba467e2801 /c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c
parentlibfdt: Merge into librtemscpu (diff)
downloadrtems-e29f1f551cce4a4660895535a8e22fbb8059670d.tar.bz2
bsp/qoriq: Use U-Boot provided FDT
Diffstat (limited to 'c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c')
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c57
1 files changed, 44 insertions, 13 deletions
diff --git a/c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c b/c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c
index 5f8f25bf5a..1f9308112c 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c
@@ -7,10 +7,10 @@
*/
/*
- * Copyright (c) 2010-2012 embedded brains GmbH. All rights reserved.
+ * Copyright (c) 2010-2015 embedded brains GmbH. All rights reserved.
*
* embedded brains GmbH
- * Obere Lagerstr. 30
+ * Dornierstr. 4
* 82178 Puchheim
* Germany
* <rtems@embedded-brains.de>
@@ -20,6 +20,8 @@
* http://www.rtems.org/license/LICENSE.
*/
+#include <libfdt.h>
+
#include <rtems.h>
#include <rtems/config.h>
#include <rtems/counter.h>
@@ -29,14 +31,16 @@
#include <libcpu/powerpc-utility.h>
#include <bsp.h>
-#include <bsp/vectors.h>
#include <bsp/bootcard.h>
+#include <bsp/console-termios.h>
+#include <bsp/fatal.h>
+#include <bsp/fdt.h>
#include <bsp/irq-generic.h>
-#include <bsp/u-boot.h>
#include <bsp/linker-symbols.h>
#include <bsp/mmu.h>
#include <bsp/qoriq.h>
-#include <bsp/console-termios.h>
+#include <bsp/u-boot.h>
+#include <bsp/vectors.h>
LINKER_SYMBOL(bsp_exc_vector_base);
@@ -86,7 +90,7 @@ void bsp_start(void)
get_ppc_cpu_revision();
/* Initialize some device driver parameters */
- #ifdef HAS_UBOOT
+ #if defined(HAS_UBOOT)
BSP_bus_frequency = bsp_uboot_board_info.bi_busfreq
/ QORIQ_BUS_CLOCK_DIVIDER;
bsp_clicks_per_usec = BSP_bus_frequency / 8000000;
@@ -97,7 +101,36 @@ void bsp_start(void)
BSP_bus_frequency / 8
#endif
);
- #endif /* HAS_UBOOT */
+ #elif defined(U_BOOT_USE_FDT)
+ {
+ const void *fdt = bsp_fdt_get();
+ int node;
+ int len;
+ fdt32_t *val_fdt;
+
+ node = fdt_node_offset_by_prop_value(fdt, -1, "device_type", "cpu", 4);
+
+ val_fdt = (fdt32_t *) fdt_getprop(fdt, node, "bus-frequency", &len);
+ if (val_fdt == NULL || len != 4) {
+ bsp_fatal(QORIQ_FATAL_FDT_NO_BUS_FREQUENCY);
+ }
+ BSP_bus_frequency = fdt32_to_cpu(*val_fdt) / QORIQ_BUS_CLOCK_DIVIDER;
+
+ val_fdt = (fdt32_t *) fdt_getprop(fdt, node, "timebase-frequency", &len);
+ if (val_fdt == NULL || len != 4) {
+ bsp_fatal(QORIQ_FATAL_FDT_NO_BUS_FREQUENCY);
+ }
+ bsp_clicks_per_usec = fdt32_to_cpu(*val_fdt) / 1000000;
+
+ #ifdef __PPC_CPU_E6500__
+ val_fdt = (fdt32_t *) fdt_getprop(fdt, node, "clock-frequency", &len);
+ if (val_fdt == NULL || len != 4) {
+ bsp_fatal(QORIQ_FATAL_FDT_NO_CLOCK_FREQUENCY);
+ }
+ #endif
+ rtems_counter_initialize_converter(fdt32_to_cpu(*val_fdt));
+ }
+ #endif
/* Initialize some console parameters */
for (i = 0; i < console_device_count; ++i) {
@@ -114,12 +147,10 @@ void bsp_start(void)
ctx->clock = BSP_bus_frequency;
- #ifdef HAS_UBOOT
- #ifdef U_BOOT_GENERIC_BOARD_INFO
- ctx->initial_baud = 115200;
- #else
- ctx->initial_baud = bsp_uboot_board_info.bi_baudrate;
- #endif
+ #if defined(HAS_UBOOT) && !defined(U_BOOT_GENERIC_BOARD_INFO)
+ ctx->initial_baud = bsp_uboot_board_info.bi_baudrate;
+ #else
+ ctx->initial_baud = 115200;
#endif
}
}