diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-10-19 08:44:33 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-10-19 09:51:28 +0200 |
commit | e29f1f551cce4a4660895535a8e22fbb8059670d (patch) | |
tree | 38e55b79b01994bf811893cb777737ba467e2801 /c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c | |
parent | libfdt: Merge into librtemscpu (diff) | |
download | rtems-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.c | 57 |
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 } } |