xref: /rk3399_ARM-atf/plat/nxp/s32/s32g274ardb2/plat_bl2_setup.c (revision 23e15fadc34fca8aae33246348f023a6146f96c1)
1*8c824273SArunachalam Ganapathy /*
2*8c824273SArunachalam Ganapathy  * Copyright 2024-2025 NXP
3*8c824273SArunachalam Ganapathy  * Copyright (c) 2025, Arm Limited and Contributors. All rights reserved.
4*8c824273SArunachalam Ganapathy  *
5*8c824273SArunachalam Ganapathy  * SPDX-License-Identifier: BSD-3-Clause
6*8c824273SArunachalam Ganapathy  */
7*8c824273SArunachalam Ganapathy 
8*8c824273SArunachalam Ganapathy #include <errno.h>
9*8c824273SArunachalam Ganapathy 
10*8c824273SArunachalam Ganapathy #include <common/debug.h>
11*8c824273SArunachalam Ganapathy #include <common/desc_image_load.h>
12*8c824273SArunachalam Ganapathy #include <drivers/generic_delay_timer.h>
13*8c824273SArunachalam Ganapathy #include <imx_usdhc.h>
14*8c824273SArunachalam Ganapathy #include <lib/mmio.h>
15*8c824273SArunachalam Ganapathy #include <lib/utils.h>
16*8c824273SArunachalam Ganapathy #include <lib/xlat_tables/xlat_tables_v2.h>
17*8c824273SArunachalam Ganapathy #include <plat/common/platform.h>
18*8c824273SArunachalam Ganapathy #include <plat_console.h>
19*8c824273SArunachalam Ganapathy #include <s32cc-clk-drv.h>
20*8c824273SArunachalam Ganapathy 
21*8c824273SArunachalam Ganapathy #include <plat_io_storage.h>
22*8c824273SArunachalam Ganapathy #include <s32cc-bl-common.h>
23*8c824273SArunachalam Ganapathy #include <s32cc-ncore.h>
24*8c824273SArunachalam Ganapathy 
25*8c824273SArunachalam Ganapathy #define SIUL20_BASE		UL(0x4009C000)
26*8c824273SArunachalam Ganapathy #define SIUL2_PC09_MSCR		UL(0x4009C2E4)
27*8c824273SArunachalam Ganapathy #define SIUL2_PC10_MSCR		UL(0x4009C2E8)
28*8c824273SArunachalam Ganapathy #define SIUL2_PC10_LIN0_IMCR	UL(0x4009CA40)
29*8c824273SArunachalam Ganapathy 
30*8c824273SArunachalam Ganapathy #define LIN0_TX_MSCR_CFG	U(0x00214001)
31*8c824273SArunachalam Ganapathy #define LIN0_RX_MSCR_CFG	U(0x00094000)
32*8c824273SArunachalam Ganapathy #define LIN0_RX_IMCR_CFG	U(0x00000002)
33*8c824273SArunachalam Ganapathy 
plat_get_bl_image_load_info(void)34*8c824273SArunachalam Ganapathy struct bl_load_info *plat_get_bl_image_load_info(void)
35*8c824273SArunachalam Ganapathy {
36*8c824273SArunachalam Ganapathy 	return get_bl_load_info_from_mem_params_desc();
37*8c824273SArunachalam Ganapathy }
38*8c824273SArunachalam Ganapathy 
plat_get_next_bl_params(void)39*8c824273SArunachalam Ganapathy struct bl_params *plat_get_next_bl_params(void)
40*8c824273SArunachalam Ganapathy {
41*8c824273SArunachalam Ganapathy 	return get_next_bl_params_from_mem_params_desc();
42*8c824273SArunachalam Ganapathy }
43*8c824273SArunachalam Ganapathy 
plat_flush_next_bl_params(void)44*8c824273SArunachalam Ganapathy void plat_flush_next_bl_params(void)
45*8c824273SArunachalam Ganapathy {
46*8c824273SArunachalam Ganapathy 	flush_bl_params_desc();
47*8c824273SArunachalam Ganapathy }
48*8c824273SArunachalam Ganapathy 
bl2_platform_setup(void)49*8c824273SArunachalam Ganapathy void bl2_platform_setup(void)
50*8c824273SArunachalam Ganapathy {
51*8c824273SArunachalam Ganapathy 	int ret;
52*8c824273SArunachalam Ganapathy 
53*8c824273SArunachalam Ganapathy 	ret = mmap_add_dynamic_region(S32G_FIP_BASE, S32G_FIP_BASE,
54*8c824273SArunachalam Ganapathy 				      S32G_FIP_SIZE,
55*8c824273SArunachalam Ganapathy 				      MT_MEMORY | MT_RW | MT_SECURE);
56*8c824273SArunachalam Ganapathy 	if (ret != 0) {
57*8c824273SArunachalam Ganapathy 		panic();
58*8c824273SArunachalam Ganapathy 	}
59*8c824273SArunachalam Ganapathy }
60*8c824273SArunachalam Ganapathy 
s32g_mmap_siul2(void)61*8c824273SArunachalam Ganapathy static int s32g_mmap_siul2(void)
62*8c824273SArunachalam Ganapathy {
63*8c824273SArunachalam Ganapathy 	return mmap_add_dynamic_region(SIUL20_BASE, SIUL20_BASE, PAGE_SIZE,
64*8c824273SArunachalam Ganapathy 				       MT_DEVICE | MT_RW | MT_SECURE);
65*8c824273SArunachalam Ganapathy }
66*8c824273SArunachalam Ganapathy 
linflex_config_pinctrl(void)67*8c824273SArunachalam Ganapathy static void linflex_config_pinctrl(void)
68*8c824273SArunachalam Ganapathy {
69*8c824273SArunachalam Ganapathy 	/* set PC09 - MSCR[41] - for UART0 TXD */
70*8c824273SArunachalam Ganapathy 	mmio_write_32(SIUL2_PC09_MSCR, LIN0_TX_MSCR_CFG);
71*8c824273SArunachalam Ganapathy 	/* set PC10 - MSCR[42] - for UART0 RXD */
72*8c824273SArunachalam Ganapathy 	mmio_write_32(SIUL2_PC10_MSCR, LIN0_RX_MSCR_CFG);
73*8c824273SArunachalam Ganapathy 	/* set PC10 - MSCR[512]/IMCR[0] - for UART0 RXD */
74*8c824273SArunachalam Ganapathy 	mmio_write_32(SIUL2_PC10_LIN0_IMCR, LIN0_RX_IMCR_CFG);
75*8c824273SArunachalam Ganapathy }
76*8c824273SArunachalam Ganapathy 
init_s32g_usdhc(void)77*8c824273SArunachalam Ganapathy static void init_s32g_usdhc(void)
78*8c824273SArunachalam Ganapathy {
79*8c824273SArunachalam Ganapathy 	static struct mmc_device_info sd_device_info = {
80*8c824273SArunachalam Ganapathy 		.mmc_dev_type = MMC_IS_SD_HC,
81*8c824273SArunachalam Ganapathy 		.ocr_voltage = OCR_3_2_3_3 | OCR_3_3_3_4,
82*8c824273SArunachalam Ganapathy 	};
83*8c824273SArunachalam Ganapathy 	imx_usdhc_params_t params;
84*8c824273SArunachalam Ganapathy 
85*8c824273SArunachalam Ganapathy 	zeromem(&params, sizeof(imx_usdhc_params_t));
86*8c824273SArunachalam Ganapathy 
87*8c824273SArunachalam Ganapathy 	params.reg_base = S32G_USDHC_BASE;
88*8c824273SArunachalam Ganapathy 	params.clk_rate = 25000000;
89*8c824273SArunachalam Ganapathy 	params.bus_width = MMC_BUS_WIDTH_4;
90*8c824273SArunachalam Ganapathy 	params.flags = MMC_FLAG_SD_CMD6;
91*8c824273SArunachalam Ganapathy 
92*8c824273SArunachalam Ganapathy 	imx_usdhc_init(&params, &sd_device_info);
93*8c824273SArunachalam Ganapathy }
94*8c824273SArunachalam Ganapathy 
plat_s32_mmc_setup(void)95*8c824273SArunachalam Ganapathy static void plat_s32_mmc_setup(void)
96*8c824273SArunachalam Ganapathy {
97*8c824273SArunachalam Ganapathy 	init_s32g_usdhc();
98*8c824273SArunachalam Ganapathy }
99*8c824273SArunachalam Ganapathy 
bl2_early_platform_setup2(u_register_t arg0,u_register_t arg1,u_register_t arg2,u_register_t arg3)100*8c824273SArunachalam Ganapathy void bl2_early_platform_setup2(u_register_t arg0, u_register_t arg1,
101*8c824273SArunachalam Ganapathy 				  u_register_t arg2, u_register_t arg3)
102*8c824273SArunachalam Ganapathy {
103*8c824273SArunachalam Ganapathy 	int ret;
104*8c824273SArunachalam Ganapathy 
105*8c824273SArunachalam Ganapathy 	/* Restore (clear) the CAIUTC[IsolEn] bit for the primary cluster, which
106*8c824273SArunachalam Ganapathy 	 * we have manually set during early BL2 boot.
107*8c824273SArunachalam Ganapathy 	 */
108*8c824273SArunachalam Ganapathy 	ncore_disable_caiu_isolation(A53_CLUSTER0_CAIU);
109*8c824273SArunachalam Ganapathy 
110*8c824273SArunachalam Ganapathy 	ncore_init();
111*8c824273SArunachalam Ganapathy 	ncore_caiu_online(A53_CLUSTER0_CAIU);
112*8c824273SArunachalam Ganapathy 
113*8c824273SArunachalam Ganapathy 	ret = s32cc_init_core_clocks();
114*8c824273SArunachalam Ganapathy 	if (ret != 0) {
115*8c824273SArunachalam Ganapathy 		panic();
116*8c824273SArunachalam Ganapathy 	}
117*8c824273SArunachalam Ganapathy 
118*8c824273SArunachalam Ganapathy 	ret = s32cc_bl_mmu_setup();
119*8c824273SArunachalam Ganapathy 	if (ret != 0) {
120*8c824273SArunachalam Ganapathy 		panic();
121*8c824273SArunachalam Ganapathy 	}
122*8c824273SArunachalam Ganapathy 
123*8c824273SArunachalam Ganapathy 	ret = s32cc_init_early_clks();
124*8c824273SArunachalam Ganapathy 	if (ret != 0) {
125*8c824273SArunachalam Ganapathy 		panic();
126*8c824273SArunachalam Ganapathy 	}
127*8c824273SArunachalam Ganapathy 
128*8c824273SArunachalam Ganapathy 	ret = s32g_mmap_siul2();
129*8c824273SArunachalam Ganapathy 	if (ret != 0) {
130*8c824273SArunachalam Ganapathy 		panic();
131*8c824273SArunachalam Ganapathy 	}
132*8c824273SArunachalam Ganapathy 
133*8c824273SArunachalam Ganapathy 	generic_delay_timer_init();
134*8c824273SArunachalam Ganapathy 
135*8c824273SArunachalam Ganapathy 	/* Configure the generic timer frequency to ensure proper operation
136*8c824273SArunachalam Ganapathy 	 * of the architectural timer in BL2.
137*8c824273SArunachalam Ganapathy 	 */
138*8c824273SArunachalam Ganapathy 	write_cntfrq_el0(plat_get_syscnt_freq2());
139*8c824273SArunachalam Ganapathy 
140*8c824273SArunachalam Ganapathy 	linflex_config_pinctrl();
141*8c824273SArunachalam Ganapathy 	console_s32g2_register();
142*8c824273SArunachalam Ganapathy 
143*8c824273SArunachalam Ganapathy 	plat_s32_mmc_setup();
144*8c824273SArunachalam Ganapathy 
145*8c824273SArunachalam Ganapathy 	plat_s32g2_io_setup();
146*8c824273SArunachalam Ganapathy }
147*8c824273SArunachalam Ganapathy 
bl2_plat_arch_setup(void)148*8c824273SArunachalam Ganapathy void bl2_plat_arch_setup(void)
149*8c824273SArunachalam Ganapathy {
150*8c824273SArunachalam Ganapathy }
151*8c824273SArunachalam Ganapathy 
bl2_plat_handle_pre_image_load(unsigned int image_id)152*8c824273SArunachalam Ganapathy int bl2_plat_handle_pre_image_load(unsigned int image_id)
153*8c824273SArunachalam Ganapathy {
154*8c824273SArunachalam Ganapathy 	const struct bl_mem_params_node *desc = get_bl_mem_params_node(image_id);
155*8c824273SArunachalam Ganapathy 	const struct image_info *img_info;
156*8c824273SArunachalam Ganapathy 	size_t size;
157*8c824273SArunachalam Ganapathy 
158*8c824273SArunachalam Ganapathy 	if (desc == NULL) {
159*8c824273SArunachalam Ganapathy 		return -EINVAL;
160*8c824273SArunachalam Ganapathy 	}
161*8c824273SArunachalam Ganapathy 
162*8c824273SArunachalam Ganapathy 	img_info = &desc->image_info;
163*8c824273SArunachalam Ganapathy 
164*8c824273SArunachalam Ganapathy 	if ((img_info == NULL) || (img_info->image_max_size == 0U)) {
165*8c824273SArunachalam Ganapathy 		return -EINVAL;
166*8c824273SArunachalam Ganapathy 	}
167*8c824273SArunachalam Ganapathy 
168*8c824273SArunachalam Ganapathy 	size = page_align(img_info->image_max_size, UP);
169*8c824273SArunachalam Ganapathy 
170*8c824273SArunachalam Ganapathy 	return mmap_add_dynamic_region(img_info->image_base,
171*8c824273SArunachalam Ganapathy 				       img_info->image_base,
172*8c824273SArunachalam Ganapathy 				       size,
173*8c824273SArunachalam Ganapathy 				       MT_MEMORY | MT_RW | MT_SECURE);
174*8c824273SArunachalam Ganapathy }
175