embox

Форк
0
/
platform_init.c 
48 строк · 1.4 Кб
1
/**
2
 * @file
3
 *
4
 * @date Jan 24, 2023
5
 * @author Anton Bondarev
6
 */
7

8
#include <hal/platform.h>
9
#include <hal/reg.h>
10

11
#include "clkctr.h"
12
#include "eliot1_board.h"
13

14
#define FPU_CPACR  0xE000ED88
15
#define FPU_NSACR  0xE000ED8C
16
#define FPU_FPCCR  0xE000EF34
17

18
#define CLOCK_BASE ((struct clkctr_regs *)CLKCTR_BASE)
19

20
static void board_clocks_init(void) {
21
	if (REG_LOAD(CPU_IDENTITY_REG) == 0) {
22
		clkctr_set_pll(CLOCK_BASE, 0, 0);
23
		clkctr_set_sys_div(CLOCK_BASE, 0,              /* FCLK == MAINCLK */
24
		    (BOARD_FCLK_FREQ / BOARD_SYSCLK_FREQ) - 1, /* SYSCLK DIV */
25
		    (BOARD_FCLK_FREQ / BOARD_GNSS_FREQ) - 1,   /* GNSSCLK DIV */
26
		    (BOARD_FCLK_FREQ / BOARD_QSPI_FREQ) - 1);  /* QSPI DIV */
27
		clkctr_set_pll(CLOCK_BASE, BOARD_XTI_FREQ,
28
		    (BOARD_FCLK_FREQ / BOARD_XTI_FREQ) - 1);
29
	}
30
}
31

32
void platform_init(void) {
33
	board_clocks_init();
34

35
	/* Enable FPU */
36
	/* FIXME: Currently FPU is enabled permanently */
37
	REG32_ORIN(FPU_CPACR, 0xf << 20);
38
	/* Set CP0, CP1 Full Access in Secure mode (enable PowerQuad) */
39
	REG32_ORIN(FPU_CPACR, (3UL << 0 * 2) | (3UL << 1 * 2));
40
	REG32_ORIN(FPU_NSACR, 0xf << 20);
41
	/* Enable CP0, CP1, CP10, CP11 Non-secure Access  */
42
	REG32_ORIN(FPU_NSACR, (3UL << 0 * 2) | (3UL << 1 * 2));
43

44
	/* Disable FPU context preservation/restoration on exception
45
	 * entry and exit, because we can guarantee every irq handler
46
	 * execute without using FPU */
47
	REG32_CLEAR(FPU_FPCCR, 0x3 << 30);
48
}
49

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.