summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-early.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-early.c')
-rw-r--r--c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-early.c216
1 files changed, 0 insertions, 216 deletions
diff --git a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-early.c b/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-early.c
deleted file mode 100644
index e1a0b3da09..0000000000
--- a/c/src/lib/libbsp/powerpc/mpc55xxevb/startup/start-early.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- * @file
- *
- * @ingroup mpc55xx
- *
- * @brief Early initialization code.
- */
-
-/*
- * Copyright (c) 2008-2012 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Obere Lagerstr. 30
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <bsp/mpc55xx-config.h>
-#include <bsp/linker-symbols.h>
-
-/* This function is defined in start.S */
-BSP_START_TEXT_SECTION void mpc55xx_start_load_section(
- void *dst,
- const void *src,
- size_t n
-);
-
-static BSP_START_TEXT_SECTION void mpc55xx_start_mmu(void)
-{
- #ifdef MPC55XX_BOOTFLAGS
- /* If the low bit of bootflag 0 is clear don't change the MMU. */
- bool do_mmu_config = (mpc55xx_bootflag_0 [0] & 1) != 0;
- #else
- bool do_mmu_config = true;
- #endif
-
- if (do_mmu_config) {
- mpc55xx_start_mmu_apply_config(
- &mpc55xx_start_config_mmu [0],
- mpc55xx_start_config_mmu_count [0]
- );
- }
-}
-
-static BSP_START_TEXT_SECTION void mpc55xx_start_internal_ram(void)
-{
- #ifdef MPC55XX_NEEDS_LOW_LEVEL_INIT
- /* Initialize internal SRAM to zero (ECC) */
- bsp_start_zero(
- (char *) bsp_ram_start + MPC55XX_EARLY_STACK_SIZE,
- (size_t) bsp_ram_size - MPC55XX_EARLY_STACK_SIZE
- );
- #ifdef MPC55XX_HAS_SECOND_INTERNAL_RAM_AREA
- bsp_start_zero(&bsp_ram_1_start [0], (size_t) bsp_ram_1_size);
- #endif
- #else
- bsp_start_zero(
- bsp_section_sbss_begin,
- (size_t) bsp_section_sbss_size
- );
- bsp_start_zero(
- bsp_section_bss_begin,
- (size_t) bsp_section_bss_size
- );
- #endif
-}
-
-static BSP_START_TEXT_SECTION void mpc55xx_start_load_nocache_section(void)
-{
- mpc55xx_start_load_section(
- bsp_section_nocache_begin,
- bsp_section_nocache_load_begin,
- (size_t) bsp_section_nocache_size
- );
- rtems_cache_flush_multiple_data_lines(
- bsp_section_nocache_begin,
- (size_t) bsp_section_nocache_size
- );
-}
-
-static BSP_START_TEXT_SECTION void mpc55xx_start_mode_change(void)
-{
- #ifdef MPC55XX_NEEDS_LOW_LEVEL_INIT
- #ifdef MPC55XX_HAS_MODE_CONTROL
- uint32_t mctl_key1 = 0x5af0;
- uint32_t mctl_key2 = 0xa50f;
- int i = 0;
-
- /* Clear any pending RGM status */
- RGM.FES.R = 0xffff;
- RGM.DES.R = 0xffff;
-
- /* Make sure XOSC and PLLs are on in RUN0 state */
- ME.DRUN_MC.R = 0x001f0074;
- ME.RUN_MC [0].R = 0x001f0074;
-
- /*
- * Make sure all peripherals are active in DRUN and RUN0 state.
- *
- * FIXME: This might be optimized to reduce power consumtion.
- */
- for (i = 0; i < 8; ++i) {
- ME_RUN_PC_32B_tag run_pc = { .R = ME.RUN_PC [i].R };
-
- run_pc.B.DRUN = 1;
- run_pc.B.RUN0 = 1;
-
- ME.RUN_PC [i].R = run_pc.R;
- }
-
- /* Switch to RUN0 state */
- ME.MCTL.R = 0x40000000 | mctl_key1;
- ME.MCTL.R = 0x40000000 | mctl_key2;
-
- while (ME.GS.B.S_MTRANS) {
- /* Wait for mode switch to be completed */
- }
- #endif
- #endif
-}
-
-static BSP_START_TEXT_SECTION void mpc55xx_start_siu(void)
-{
- size_t i = 0;
-
- for (i = 0; i < mpc55xx_start_config_siu_pcr_count [0]; ++i) {
- const mpc55xx_siu_pcr_config *e = &mpc55xx_start_config_siu_pcr [i];
- int j = e->index;
- int n = j + e->count;
- uint8_t gpdo = e->output;
- uint16_t pcr = e->pcr.R;
-
- while (j < n) {
- SIU.GPDO [j].R = gpdo;
- SIU.PCR [j].R = pcr;
- ++j;
- }
- }
-}
-
-static BSP_START_TEXT_SECTION void mpc55xx_start_ebi_chip_select(void)
-{
- #ifdef MPC55XX_HAS_EBI
- size_t i = 0;
-
- for (i = 0; i < mpc55xx_start_config_ebi_cs_count [0]; ++i) {
- EBI.CS [i] = mpc55xx_start_config_ebi_cs [i];
- }
-
- for (i = 0; i < mpc55xx_start_config_ebi_cal_cs_count [0]; ++i) {
- EBI.CAL_CS [i] = mpc55xx_start_config_ebi_cal_cs [i];
- }
- #endif
-}
-
-static BSP_START_TEXT_SECTION void mpc55xx_start_ebi(void)
-{
- #ifdef MPC55XX_HAS_EBI
- size_t i = 0;
-
- for (i = 0; i < mpc55xx_start_config_ebi_count [0]; ++i) {
- SIU.ECCR.B.EBDF = mpc55xx_start_config_ebi [i].siu_eccr_ebdf;
- EBI.MCR.R = mpc55xx_start_config_ebi [i].ebi_mcr.R;
- }
- #endif
-}
-
-#ifdef MPC55XX_NEEDS_LOW_LEVEL_INIT
-static BSP_START_TEXT_SECTION bool
-mpc55xx_start_is_in_internal_ram(const void *addr)
-{
- return (size_t) addr - (size_t) bsp_ram_start < (size_t) bsp_ram_size;
-}
-#endif
-
-static BSP_START_TEXT_SECTION void mpc55xx_start_clear_bss(void)
-{
- #ifdef MPC55XX_NEEDS_LOW_LEVEL_INIT
- if (!mpc55xx_start_is_in_internal_ram(bsp_section_sbss_begin)) {
- bsp_start_zero(
- bsp_section_sbss_begin,
- (size_t) bsp_section_sbss_size
- );
- }
-
- if (!mpc55xx_start_is_in_internal_ram(bsp_section_bss_begin)) {
- bsp_start_zero(
- bsp_section_bss_begin,
- (size_t) bsp_section_bss_size
- );
- }
- #endif
-}
-
-BSP_START_TEXT_SECTION void mpc55xx_start_early(void)
-{
- mpc55xx_start_watchdog();
- mpc55xx_start_clock();
- mpc55xx_start_flash();
- #if defined(BSP_DATA_CACHE_ENABLED) || defined(BSP_INSTRUCTION_CACHE_ENABLED)
- mpc55xx_start_cache();
- #endif
- mpc55xx_start_internal_ram();
- mpc55xx_start_load_nocache_section();
- mpc55xx_start_mmu();
- mpc55xx_start_mode_change();
- mpc55xx_start_siu();
- mpc55xx_start_ebi_chip_select();
- mpc55xx_start_ebi();
- mpc55xx_start_clear_bss();
-}