source: rtems/bsps/arm/raspberrypi/start/bspstarthooks.c @ 9964895

5
Last change on this file since 9964895 was 9964895, checked in by Sebastian Huber <sebastian.huber@…>, on 04/20/18 at 08:35:35

bsps: Move startup files to bsps

Adjust build support files to new directory layout.

This patch is a part of the BSP source reorganization.

Update #3285.

  • Property mode set to 100644
File size: 2.6 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup arm_start
5 *
6 * @brief Rasberry Pi startup code.
7 */
8
9/*
10 * Copyright (c) 2013. Hesham AL-Matary
11 * Copyright (c) 2013 by Alan Cudmore
12 * based on work by:
13 * Copyright (c) 2009
14 * embedded brains GmbH
15 * Obere Lagerstr. 30
16 * D-82178 Puchheim
17 * Germany
18 * <rtems@embedded-brains.de>
19 *
20 * The license and distribution terms for this file may be
21 * found in the file LICENSE in this distribution or at
22 * http://www.rtems.org/license/LICENSE
23 */
24
25#include <bspopts.h>
26#include <bsp/start.h>
27#include <bsp/raspberrypi.h>
28#include <bsp/mm.h>
29#include <libcpu/arm-cp15.h>
30#include <bsp.h>
31
32#ifdef RTEMS_SMP
33#include <rtems/score/smp.h>
34#endif
35
36void BSP_START_TEXT_SECTION bsp_start_hook_0(void)
37{
38  uint32_t sctlr_val;
39#ifdef RTEMS_SMP
40  uint32_t cpu_index_self = _SMP_Get_current_processor();
41#endif /* RTEMS_SMP */
42
43  sctlr_val = arm_cp15_get_control();
44
45  /*
46   * Current U-boot loader seems to start kernel image
47   * with I and D caches on and MMU enabled.
48   * If RTEMS application image finds that cache is on
49   * during startup then disable caches.
50   */
51  if (sctlr_val & (ARM_CP15_CTRL_I | ARM_CP15_CTRL_C | ARM_CP15_CTRL_M)) {
52    if (sctlr_val & (ARM_CP15_CTRL_C | ARM_CP15_CTRL_M)) {
53      /*
54       * If the data cache is on then ensure that it is clean
55       * before switching off to be extra carefull.
56       */
57#ifdef RTEMS_SMP
58      if (cpu_index_self != 0) {
59        arm_cp15_data_cache_clean_level(0);
60        arm_cp15_cache_invalidate_level(0, 0);
61      } else
62#endif /* RTEMS_SMP */
63      {
64        rtems_cache_flush_entire_data();
65        rtems_cache_invalidate_entire_data();
66      }
67    }
68    arm_cp15_flush_prefetch_buffer();
69    sctlr_val &= ~(ARM_CP15_CTRL_I | ARM_CP15_CTRL_C | ARM_CP15_CTRL_M | ARM_CP15_CTRL_A);
70    arm_cp15_set_control(sctlr_val);
71  }
72#ifdef RTEMS_SMP
73  if (cpu_index_self != 0) {
74    arm_cp15_cache_invalidate_level(0, 0);
75  } else
76#endif /* RTEMS_SMP */
77  {
78    rtems_cache_invalidate_entire_data();
79  }
80  rtems_cache_invalidate_entire_instruction();
81  arm_cp15_branch_predictor_invalidate_all();
82  arm_cp15_tlb_invalidate();
83  arm_cp15_flush_prefetch_buffer();
84
85  /* Clear Translation Table Base Control Register */
86  arm_cp15_set_translation_table_base_control_register(0);
87
88  /* Clear Secure or Non-secure Vector Base Address Register */
89  arm_cp15_set_vector_base_address(0);
90
91#ifdef RTEMS_SMP
92  if (cpu_index_self == 0) {
93    rpi_ipi_initialize();
94  } else {
95    rpi_start_rtems_on_secondary_processor();
96  }
97#endif
98}
99
100void BSP_START_TEXT_SECTION bsp_start_hook_1(void)
101{
102  bsp_start_copy_sections();
103  bsp_memory_management_initialize();
104  bsp_start_clear_bss();
105
106  rpi_video_init();
107}
Note: See TracBrowser for help on using the repository browser.