xref: /arm-trusted-firmware/plat/intel/soc/common/include/socfpga_handoff.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2019-2023, Intel Corporation. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef	HANDOFF_H
8*91f16700Schasinglulu #define	HANDOFF_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #define HANDOFF_MAGIC_HEADER			0x424f4f54	/* BOOT */
11*91f16700Schasinglulu #define HANDOFF_MAGIC_PINMUX_SEL		0x504d5558	/* PMUX */
12*91f16700Schasinglulu #define HANDOFF_MAGIC_IOCTLR			0x494f4354	/* IOCT */
13*91f16700Schasinglulu #define HANDOFF_MAGIC_FPGA				0x46504741	/* FPGA */
14*91f16700Schasinglulu #define HANDOFF_MAGIC_IODELAY			0x444c4159	/* DLAY */
15*91f16700Schasinglulu #define HANDOFF_MAGIC_CLOCK				0x434c4b53	/* CLKS */
16*91f16700Schasinglulu #define HANDOFF_MAGIC_MISC				0x4d495343	/* MISC */
17*91f16700Schasinglulu #define HANDOFF_MAGIC_PERIPHERAL		0x50455249	/* PERIPHERAL */
18*91f16700Schasinglulu #define HANDOFF_MAGIC_DDR				0x5344524d	/* DDR */
19*91f16700Schasinglulu 
20*91f16700Schasinglulu #include <socfpga_plat_def.h>
21*91f16700Schasinglulu 
22*91f16700Schasinglulu typedef struct handoff_t {
23*91f16700Schasinglulu 	/* header */
24*91f16700Schasinglulu 	uint32_t	header_magic;
25*91f16700Schasinglulu 	uint32_t	header_device;
26*91f16700Schasinglulu 	uint32_t	_pad_0x08_0x10[2];
27*91f16700Schasinglulu 
28*91f16700Schasinglulu 	/* pinmux configuration - select */
29*91f16700Schasinglulu 	uint32_t	pinmux_sel_magic;
30*91f16700Schasinglulu 	uint32_t	pinmux_sel_length;
31*91f16700Schasinglulu 	uint32_t	_pad_0x18_0x20[2];
32*91f16700Schasinglulu 	uint32_t	pinmux_sel_array[96];	/* offset, value */
33*91f16700Schasinglulu 
34*91f16700Schasinglulu 	/* pinmux configuration - io control */
35*91f16700Schasinglulu 	uint32_t	pinmux_io_magic;
36*91f16700Schasinglulu 	uint32_t	pinmux_io_length;
37*91f16700Schasinglulu 	uint32_t	_pad_0x1a8_0x1b0[2];
38*91f16700Schasinglulu 	uint32_t	pinmux_io_array[96];	/* offset, value */
39*91f16700Schasinglulu 
40*91f16700Schasinglulu 	/* pinmux configuration - use fpga switch */
41*91f16700Schasinglulu 	uint32_t	pinmux_fpga_magic;
42*91f16700Schasinglulu 	uint32_t	pinmux_fpga_length;
43*91f16700Schasinglulu 	uint32_t	_pad_0x338_0x340[2];
44*91f16700Schasinglulu 	uint32_t	pinmux_fpga_array[44];	/* offset, value */
45*91f16700Schasinglulu 	/* TODO: Temp remove due to add in extra handoff data */
46*91f16700Schasinglulu 	// uint32_t	_pad_0x3e8_0x3f0[2];
47*91f16700Schasinglulu 
48*91f16700Schasinglulu 	/* pinmux configuration - io delay */
49*91f16700Schasinglulu 	uint32_t	pinmux_delay_magic;
50*91f16700Schasinglulu 	uint32_t	pinmux_delay_length;
51*91f16700Schasinglulu 	uint32_t	_pad_0x3f8_0x400[2];
52*91f16700Schasinglulu 	uint32_t	pinmux_iodelay_array[96];	/* offset, value */
53*91f16700Schasinglulu 
54*91f16700Schasinglulu 	/* clock configuration */
55*91f16700Schasinglulu #if PLATFORM_MODEL == PLAT_SOCFPGA_STRATIX10
56*91f16700Schasinglulu 	uint32_t	clock_magic;
57*91f16700Schasinglulu 	uint32_t	clock_length;
58*91f16700Schasinglulu 	uint32_t	_pad_0x588_0x590[2];
59*91f16700Schasinglulu 	uint32_t	main_pll_mpuclk;
60*91f16700Schasinglulu 	uint32_t	main_pll_nocclk;
61*91f16700Schasinglulu 	uint32_t	main_pll_cntr2clk;
62*91f16700Schasinglulu 	uint32_t	main_pll_cntr3clk;
63*91f16700Schasinglulu 	uint32_t	main_pll_cntr4clk;
64*91f16700Schasinglulu 	uint32_t	main_pll_cntr5clk;
65*91f16700Schasinglulu 	uint32_t	main_pll_cntr6clk;
66*91f16700Schasinglulu 	uint32_t	main_pll_cntr7clk;
67*91f16700Schasinglulu 	uint32_t	main_pll_cntr8clk;
68*91f16700Schasinglulu 	uint32_t	main_pll_cntr9clk;
69*91f16700Schasinglulu 	uint32_t	main_pll_nocdiv;
70*91f16700Schasinglulu 	uint32_t	main_pll_pllglob;
71*91f16700Schasinglulu 	uint32_t	main_pll_fdbck;
72*91f16700Schasinglulu 	uint32_t	main_pll_pllc0;
73*91f16700Schasinglulu 	uint32_t	main_pll_pllc1;
74*91f16700Schasinglulu 	uint32_t	_pad_0x5cc_0x5d0[1];
75*91f16700Schasinglulu 	uint32_t	per_pll_cntr2clk;
76*91f16700Schasinglulu 	uint32_t	per_pll_cntr3clk;
77*91f16700Schasinglulu 	uint32_t	per_pll_cntr4clk;
78*91f16700Schasinglulu 	uint32_t	per_pll_cntr5clk;
79*91f16700Schasinglulu 	uint32_t	per_pll_cntr6clk;
80*91f16700Schasinglulu 	uint32_t	per_pll_cntr7clk;
81*91f16700Schasinglulu 	uint32_t	per_pll_cntr8clk;
82*91f16700Schasinglulu 	uint32_t	per_pll_cntr9clk;
83*91f16700Schasinglulu 	uint32_t	per_pll_emacctl;
84*91f16700Schasinglulu 	uint32_t	per_pll_gpiodiv;
85*91f16700Schasinglulu 	uint32_t	per_pll_pllglob;
86*91f16700Schasinglulu 	uint32_t	per_pll_fdbck;
87*91f16700Schasinglulu 	uint32_t	per_pll_pllc0;
88*91f16700Schasinglulu 	uint32_t	per_pll_pllc1;
89*91f16700Schasinglulu 	uint32_t	hps_osc_clk_h;
90*91f16700Schasinglulu 	uint32_t	fpga_clk_hz;
91*91f16700Schasinglulu #elif PLATFORM_MODEL == PLAT_SOCFPGA_AGILEX
92*91f16700Schasinglulu 	uint32_t	clock_magic;
93*91f16700Schasinglulu 	uint32_t	clock_length;
94*91f16700Schasinglulu 	uint32_t	_pad_0x588_0x590[2];
95*91f16700Schasinglulu 	uint32_t	main_pll_mpuclk;
96*91f16700Schasinglulu 	uint32_t	main_pll_nocclk;
97*91f16700Schasinglulu 	uint32_t	main_pll_nocdiv;
98*91f16700Schasinglulu 	uint32_t	main_pll_pllglob;
99*91f16700Schasinglulu 	uint32_t	main_pll_fdbck;
100*91f16700Schasinglulu 	uint32_t	main_pll_pllc0;
101*91f16700Schasinglulu 	uint32_t	main_pll_pllc1;
102*91f16700Schasinglulu 	uint32_t	main_pll_pllc2;
103*91f16700Schasinglulu 	uint32_t	main_pll_pllc3;
104*91f16700Schasinglulu 	uint32_t	main_pll_pllm;
105*91f16700Schasinglulu 	uint32_t	per_pll_emacctl;
106*91f16700Schasinglulu 	uint32_t	per_pll_gpiodiv;
107*91f16700Schasinglulu 	uint32_t	per_pll_pllglob;
108*91f16700Schasinglulu 	uint32_t	per_pll_fdbck;
109*91f16700Schasinglulu 	uint32_t	per_pll_pllc0;
110*91f16700Schasinglulu 	uint32_t	per_pll_pllc1;
111*91f16700Schasinglulu 	uint32_t	per_pll_pllc2;
112*91f16700Schasinglulu 	uint32_t	per_pll_pllc3;
113*91f16700Schasinglulu 	uint32_t	per_pll_pllm;
114*91f16700Schasinglulu 	uint32_t	alt_emacactr;
115*91f16700Schasinglulu 	uint32_t	alt_emacbctr;
116*91f16700Schasinglulu 	uint32_t	alt_emacptpctr;
117*91f16700Schasinglulu 	uint32_t	alt_gpiodbctr;
118*91f16700Schasinglulu 	uint32_t	alt_sdmmcctr;
119*91f16700Schasinglulu 	uint32_t	alt_s2fuser0ctr;
120*91f16700Schasinglulu 	uint32_t	alt_s2fuser1ctr;
121*91f16700Schasinglulu 	uint32_t	alt_psirefctr;
122*91f16700Schasinglulu 	uint32_t	hps_osc_clk_h;
123*91f16700Schasinglulu 	uint32_t	fpga_clk_hz;
124*91f16700Schasinglulu 	uint32_t	_pad_0x604_0x610[3];
125*91f16700Schasinglulu #elif PLATFORM_MODEL == PLAT_SOCFPGA_AGILEX5
126*91f16700Schasinglulu 	uint32_t	clock_magic;
127*91f16700Schasinglulu 	uint32_t	clock_length;
128*91f16700Schasinglulu 	uint32_t	_pad_0x588_0x590[2];
129*91f16700Schasinglulu 	uint32_t	main_pll_nocclk;
130*91f16700Schasinglulu 	uint32_t	main_pll_nocdiv;
131*91f16700Schasinglulu 	uint32_t	main_pll_pllglob;
132*91f16700Schasinglulu 	uint32_t	main_pll_fdbck;
133*91f16700Schasinglulu 	uint32_t	main_pll_pllc0;
134*91f16700Schasinglulu 	uint32_t	main_pll_pllc1;
135*91f16700Schasinglulu 	uint32_t	main_pll_pllc2;
136*91f16700Schasinglulu 	uint32_t	main_pll_pllc3;
137*91f16700Schasinglulu 	uint32_t	main_pll_pllm;
138*91f16700Schasinglulu 	uint32_t	per_pll_emacctl;
139*91f16700Schasinglulu 	uint32_t	per_pll_gpiodiv;
140*91f16700Schasinglulu 	uint32_t	per_pll_pllglob;
141*91f16700Schasinglulu 	uint32_t	per_pll_fdbck;
142*91f16700Schasinglulu 	uint32_t	per_pll_pllc0;
143*91f16700Schasinglulu 	uint32_t	per_pll_pllc1;
144*91f16700Schasinglulu 	uint32_t	per_pll_pllc2;
145*91f16700Schasinglulu 	uint32_t	per_pll_pllc3;
146*91f16700Schasinglulu 	uint32_t	per_pll_pllm;
147*91f16700Schasinglulu 	uint32_t	alt_emacactr;
148*91f16700Schasinglulu 	uint32_t	alt_emacbctr;
149*91f16700Schasinglulu 	uint32_t	alt_emacptpctr;
150*91f16700Schasinglulu 	uint32_t	alt_gpiodbctr;
151*91f16700Schasinglulu 	uint32_t	alt_sdmmcctr;
152*91f16700Schasinglulu 	uint32_t	alt_s2fuser0ctr;
153*91f16700Schasinglulu 	uint32_t	alt_s2fuser1ctr;
154*91f16700Schasinglulu 	uint32_t	alt_psirefctr;
155*91f16700Schasinglulu 	/* TODO: Temp added for clk manager. */
156*91f16700Schasinglulu 	uint32_t	qspi_clk_khz;
157*91f16700Schasinglulu 	uint32_t	hps_osc_clk_hz;
158*91f16700Schasinglulu 	uint32_t	fpga_clk_hz;
159*91f16700Schasinglulu 	/* TODO: Temp added for clk manager. */
160*91f16700Schasinglulu 	uint32_t	ddr_reset_type;
161*91f16700Schasinglulu 	/* TODO: Temp added for clk manager. */
162*91f16700Schasinglulu 	uint32_t	hps_status_coldreset;
163*91f16700Schasinglulu 	/* TODO: Temp remove due to add in extra handoff data */
164*91f16700Schasinglulu 	//uint32_t	_pad_0x604_0x610[3];
165*91f16700Schasinglulu #endif
166*91f16700Schasinglulu 	/* misc configuration */
167*91f16700Schasinglulu 	uint32_t	misc_magic;
168*91f16700Schasinglulu 	uint32_t	misc_length;
169*91f16700Schasinglulu 	uint32_t	_pad_0x618_0x620[2];
170*91f16700Schasinglulu 
171*91f16700Schasinglulu #if PLATFORM_MODEL == PLAT_SOCFPGA_AGILEX5
172*91f16700Schasinglulu 	/* peripheral configuration - select */
173*91f16700Schasinglulu 	uint32_t	peripheral_pwr_gate_magic;
174*91f16700Schasinglulu 	uint32_t	peripheral_pwr_gate_length;
175*91f16700Schasinglulu 	uint32_t	_pad_0x08_0x0C[2];
176*91f16700Schasinglulu 	uint32_t	peripheral_pwr_gate_array;	/* offset, value */
177*91f16700Schasinglulu 
178*91f16700Schasinglulu 	/* ddr configuration - select */
179*91f16700Schasinglulu 	uint32_t	ddr_magic;
180*91f16700Schasinglulu 	uint32_t	ddr_length;
181*91f16700Schasinglulu 	uint32_t	_pad_0x1C_0x20[2];
182*91f16700Schasinglulu 	uint32_t	ddr_array[4];	/* offset, value */
183*91f16700Schasinglulu #endif
184*91f16700Schasinglulu } handoff;
185*91f16700Schasinglulu 
186*91f16700Schasinglulu int verify_handoff_image(handoff *hoff_ptr, handoff *reverse_hoff_ptr);
187*91f16700Schasinglulu int socfpga_get_handoff(handoff *hoff_ptr);
188*91f16700Schasinglulu 
189*91f16700Schasinglulu #endif
190