xref: /rk3399_ARM-atf/plat/intel/soc/common/include/socfpga_handoff.h (revision fcbb5cf7eadb8b048149941b08f09d04a860fee0)
1328718f2SHadi Asyrafi /*
2*fcbb5cf7SJit Loon Lim  * Copyright (c) 2019-2023, Intel Corporation. All rights reserved.
3328718f2SHadi Asyrafi  *
4328718f2SHadi Asyrafi  * SPDX-License-Identifier: BSD-3-Clause
5328718f2SHadi Asyrafi  */
6328718f2SHadi Asyrafi 
7328718f2SHadi Asyrafi #ifndef	HANDOFF_H
8328718f2SHadi Asyrafi #define	HANDOFF_H
9328718f2SHadi Asyrafi 
10328718f2SHadi Asyrafi #define HANDOFF_MAGIC_HEADER			0x424f4f54	/* BOOT */
11328718f2SHadi Asyrafi #define HANDOFF_MAGIC_PINMUX_SEL		0x504d5558	/* PMUX */
12328718f2SHadi Asyrafi #define HANDOFF_MAGIC_IOCTLR			0x494f4354	/* IOCT */
13328718f2SHadi Asyrafi #define HANDOFF_MAGIC_FPGA				0x46504741	/* FPGA */
14328718f2SHadi Asyrafi #define HANDOFF_MAGIC_IODELAY			0x444c4159	/* DLAY */
15328718f2SHadi Asyrafi #define HANDOFF_MAGIC_CLOCK				0x434c4b53	/* CLKS */
16328718f2SHadi Asyrafi #define HANDOFF_MAGIC_MISC				0x4d495343	/* MISC */
17*fcbb5cf7SJit Loon Lim #define HANDOFF_MAGIC_PERIPHERAL		0x50455249	/* PERIPHERAL */
18*fcbb5cf7SJit Loon Lim #define HANDOFF_MAGIC_DDR				0x5344524d	/* DDR */
19328718f2SHadi Asyrafi 
20328718f2SHadi Asyrafi #include <socfpga_plat_def.h>
21328718f2SHadi Asyrafi 
22328718f2SHadi Asyrafi typedef struct handoff_t {
23328718f2SHadi Asyrafi 	/* header */
24328718f2SHadi Asyrafi 	uint32_t	header_magic;
25328718f2SHadi Asyrafi 	uint32_t	header_device;
26328718f2SHadi Asyrafi 	uint32_t	_pad_0x08_0x10[2];
27328718f2SHadi Asyrafi 
28328718f2SHadi Asyrafi 	/* pinmux configuration - select */
29328718f2SHadi Asyrafi 	uint32_t	pinmux_sel_magic;
30328718f2SHadi Asyrafi 	uint32_t	pinmux_sel_length;
31328718f2SHadi Asyrafi 	uint32_t	_pad_0x18_0x20[2];
32328718f2SHadi Asyrafi 	uint32_t	pinmux_sel_array[96];	/* offset, value */
33328718f2SHadi Asyrafi 
34328718f2SHadi Asyrafi 	/* pinmux configuration - io control */
35328718f2SHadi Asyrafi 	uint32_t	pinmux_io_magic;
36328718f2SHadi Asyrafi 	uint32_t	pinmux_io_length;
37328718f2SHadi Asyrafi 	uint32_t	_pad_0x1a8_0x1b0[2];
38328718f2SHadi Asyrafi 	uint32_t	pinmux_io_array[96];	/* offset, value */
39328718f2SHadi Asyrafi 
40328718f2SHadi Asyrafi 	/* pinmux configuration - use fpga switch */
41328718f2SHadi Asyrafi 	uint32_t	pinmux_fpga_magic;
42328718f2SHadi Asyrafi 	uint32_t	pinmux_fpga_length;
43328718f2SHadi Asyrafi 	uint32_t	_pad_0x338_0x340[2];
44*fcbb5cf7SJit Loon Lim 	uint32_t	pinmux_fpga_array[44];	/* offset, value */
45*fcbb5cf7SJit Loon Lim 	/* TODO: Temp remove due to add in extra handoff data */
46*fcbb5cf7SJit Loon Lim 	// uint32_t	_pad_0x3e8_0x3f0[2];
47328718f2SHadi Asyrafi 
48328718f2SHadi Asyrafi 	/* pinmux configuration - io delay */
49328718f2SHadi Asyrafi 	uint32_t	pinmux_delay_magic;
50328718f2SHadi Asyrafi 	uint32_t	pinmux_delay_length;
51328718f2SHadi Asyrafi 	uint32_t	_pad_0x3f8_0x400[2];
52328718f2SHadi Asyrafi 	uint32_t	pinmux_iodelay_array[96];	/* offset, value */
53328718f2SHadi Asyrafi 
54328718f2SHadi Asyrafi 	/* clock configuration */
55328718f2SHadi Asyrafi #if PLATFORM_MODEL == PLAT_SOCFPGA_STRATIX10
56328718f2SHadi Asyrafi 	uint32_t	clock_magic;
57328718f2SHadi Asyrafi 	uint32_t	clock_length;
58328718f2SHadi Asyrafi 	uint32_t	_pad_0x588_0x590[2];
59328718f2SHadi Asyrafi 	uint32_t	main_pll_mpuclk;
60328718f2SHadi Asyrafi 	uint32_t	main_pll_nocclk;
61328718f2SHadi Asyrafi 	uint32_t	main_pll_cntr2clk;
62328718f2SHadi Asyrafi 	uint32_t	main_pll_cntr3clk;
63328718f2SHadi Asyrafi 	uint32_t	main_pll_cntr4clk;
64328718f2SHadi Asyrafi 	uint32_t	main_pll_cntr5clk;
65328718f2SHadi Asyrafi 	uint32_t	main_pll_cntr6clk;
66328718f2SHadi Asyrafi 	uint32_t	main_pll_cntr7clk;
67328718f2SHadi Asyrafi 	uint32_t	main_pll_cntr8clk;
68328718f2SHadi Asyrafi 	uint32_t	main_pll_cntr9clk;
69328718f2SHadi Asyrafi 	uint32_t	main_pll_nocdiv;
70328718f2SHadi Asyrafi 	uint32_t	main_pll_pllglob;
71328718f2SHadi Asyrafi 	uint32_t	main_pll_fdbck;
72328718f2SHadi Asyrafi 	uint32_t	main_pll_pllc0;
73328718f2SHadi Asyrafi 	uint32_t	main_pll_pllc1;
74328718f2SHadi Asyrafi 	uint32_t	_pad_0x5cc_0x5d0[1];
75328718f2SHadi Asyrafi 	uint32_t	per_pll_cntr2clk;
76328718f2SHadi Asyrafi 	uint32_t	per_pll_cntr3clk;
77328718f2SHadi Asyrafi 	uint32_t	per_pll_cntr4clk;
78328718f2SHadi Asyrafi 	uint32_t	per_pll_cntr5clk;
79328718f2SHadi Asyrafi 	uint32_t	per_pll_cntr6clk;
80328718f2SHadi Asyrafi 	uint32_t	per_pll_cntr7clk;
81328718f2SHadi Asyrafi 	uint32_t	per_pll_cntr8clk;
82328718f2SHadi Asyrafi 	uint32_t	per_pll_cntr9clk;
83328718f2SHadi Asyrafi 	uint32_t	per_pll_emacctl;
84328718f2SHadi Asyrafi 	uint32_t	per_pll_gpiodiv;
85328718f2SHadi Asyrafi 	uint32_t	per_pll_pllglob;
86328718f2SHadi Asyrafi 	uint32_t	per_pll_fdbck;
87328718f2SHadi Asyrafi 	uint32_t	per_pll_pllc0;
88328718f2SHadi Asyrafi 	uint32_t	per_pll_pllc1;
89328718f2SHadi Asyrafi 	uint32_t	hps_osc_clk_h;
90328718f2SHadi Asyrafi 	uint32_t	fpga_clk_hz;
91328718f2SHadi Asyrafi #elif PLATFORM_MODEL == PLAT_SOCFPGA_AGILEX
92328718f2SHadi Asyrafi 	uint32_t	clock_magic;
93328718f2SHadi Asyrafi 	uint32_t	clock_length;
94328718f2SHadi Asyrafi 	uint32_t	_pad_0x588_0x590[2];
95328718f2SHadi Asyrafi 	uint32_t	main_pll_mpuclk;
96328718f2SHadi Asyrafi 	uint32_t	main_pll_nocclk;
97328718f2SHadi Asyrafi 	uint32_t	main_pll_nocdiv;
98328718f2SHadi Asyrafi 	uint32_t	main_pll_pllglob;
99328718f2SHadi Asyrafi 	uint32_t	main_pll_fdbck;
100328718f2SHadi Asyrafi 	uint32_t	main_pll_pllc0;
101328718f2SHadi Asyrafi 	uint32_t	main_pll_pllc1;
102328718f2SHadi Asyrafi 	uint32_t	main_pll_pllc2;
103328718f2SHadi Asyrafi 	uint32_t	main_pll_pllc3;
104328718f2SHadi Asyrafi 	uint32_t	main_pll_pllm;
105328718f2SHadi Asyrafi 	uint32_t	per_pll_emacctl;
106328718f2SHadi Asyrafi 	uint32_t	per_pll_gpiodiv;
107328718f2SHadi Asyrafi 	uint32_t	per_pll_pllglob;
108328718f2SHadi Asyrafi 	uint32_t	per_pll_fdbck;
109328718f2SHadi Asyrafi 	uint32_t	per_pll_pllc0;
110328718f2SHadi Asyrafi 	uint32_t	per_pll_pllc1;
111328718f2SHadi Asyrafi 	uint32_t	per_pll_pllc2;
112328718f2SHadi Asyrafi 	uint32_t	per_pll_pllc3;
113328718f2SHadi Asyrafi 	uint32_t	per_pll_pllm;
114328718f2SHadi Asyrafi 	uint32_t	alt_emacactr;
115328718f2SHadi Asyrafi 	uint32_t	alt_emacbctr;
116328718f2SHadi Asyrafi 	uint32_t	alt_emacptpctr;
117328718f2SHadi Asyrafi 	uint32_t	alt_gpiodbctr;
118328718f2SHadi Asyrafi 	uint32_t	alt_sdmmcctr;
119328718f2SHadi Asyrafi 	uint32_t	alt_s2fuser0ctr;
120328718f2SHadi Asyrafi 	uint32_t	alt_s2fuser1ctr;
121328718f2SHadi Asyrafi 	uint32_t	alt_psirefctr;
122328718f2SHadi Asyrafi 	uint32_t	hps_osc_clk_h;
123328718f2SHadi Asyrafi 	uint32_t	fpga_clk_hz;
124328718f2SHadi Asyrafi 	uint32_t	_pad_0x604_0x610[3];
125*fcbb5cf7SJit Loon Lim #elif PLATFORM_MODEL == PLAT_SOCFPGA_AGILEX5
126*fcbb5cf7SJit Loon Lim 	uint32_t	clock_magic;
127*fcbb5cf7SJit Loon Lim 	uint32_t	clock_length;
128*fcbb5cf7SJit Loon Lim 	uint32_t	_pad_0x588_0x590[2];
129*fcbb5cf7SJit Loon Lim 	uint32_t	main_pll_nocclk;
130*fcbb5cf7SJit Loon Lim 	uint32_t	main_pll_nocdiv;
131*fcbb5cf7SJit Loon Lim 	uint32_t	main_pll_pllglob;
132*fcbb5cf7SJit Loon Lim 	uint32_t	main_pll_fdbck;
133*fcbb5cf7SJit Loon Lim 	uint32_t	main_pll_pllc0;
134*fcbb5cf7SJit Loon Lim 	uint32_t	main_pll_pllc1;
135*fcbb5cf7SJit Loon Lim 	uint32_t	main_pll_pllc2;
136*fcbb5cf7SJit Loon Lim 	uint32_t	main_pll_pllc3;
137*fcbb5cf7SJit Loon Lim 	uint32_t	main_pll_pllm;
138*fcbb5cf7SJit Loon Lim 	uint32_t	per_pll_emacctl;
139*fcbb5cf7SJit Loon Lim 	uint32_t	per_pll_gpiodiv;
140*fcbb5cf7SJit Loon Lim 	uint32_t	per_pll_pllglob;
141*fcbb5cf7SJit Loon Lim 	uint32_t	per_pll_fdbck;
142*fcbb5cf7SJit Loon Lim 	uint32_t	per_pll_pllc0;
143*fcbb5cf7SJit Loon Lim 	uint32_t	per_pll_pllc1;
144*fcbb5cf7SJit Loon Lim 	uint32_t	per_pll_pllc2;
145*fcbb5cf7SJit Loon Lim 	uint32_t	per_pll_pllc3;
146*fcbb5cf7SJit Loon Lim 	uint32_t	per_pll_pllm;
147*fcbb5cf7SJit Loon Lim 	uint32_t	alt_emacactr;
148*fcbb5cf7SJit Loon Lim 	uint32_t	alt_emacbctr;
149*fcbb5cf7SJit Loon Lim 	uint32_t	alt_emacptpctr;
150*fcbb5cf7SJit Loon Lim 	uint32_t	alt_gpiodbctr;
151*fcbb5cf7SJit Loon Lim 	uint32_t	alt_sdmmcctr;
152*fcbb5cf7SJit Loon Lim 	uint32_t	alt_s2fuser0ctr;
153*fcbb5cf7SJit Loon Lim 	uint32_t	alt_s2fuser1ctr;
154*fcbb5cf7SJit Loon Lim 	uint32_t	alt_psirefctr;
155*fcbb5cf7SJit Loon Lim 	/* TODO: Temp added for clk manager. */
156*fcbb5cf7SJit Loon Lim 	uint32_t	qspi_clk_khz;
157*fcbb5cf7SJit Loon Lim 	uint32_t	hps_osc_clk_hz;
158*fcbb5cf7SJit Loon Lim 	uint32_t	fpga_clk_hz;
159*fcbb5cf7SJit Loon Lim 	/* TODO: Temp added for clk manager. */
160*fcbb5cf7SJit Loon Lim 	uint32_t	ddr_reset_type;
161*fcbb5cf7SJit Loon Lim 	/* TODO: Temp added for clk manager. */
162*fcbb5cf7SJit Loon Lim 	uint32_t	hps_status_coldreset;
163*fcbb5cf7SJit Loon Lim 	/* TODO: Temp remove due to add in extra handoff data */
164*fcbb5cf7SJit Loon Lim 	//uint32_t	_pad_0x604_0x610[3];
165328718f2SHadi Asyrafi #endif
166328718f2SHadi Asyrafi 	/* misc configuration */
167328718f2SHadi Asyrafi 	uint32_t	misc_magic;
168328718f2SHadi Asyrafi 	uint32_t	misc_length;
169328718f2SHadi Asyrafi 	uint32_t	_pad_0x618_0x620[2];
170*fcbb5cf7SJit Loon Lim 
171*fcbb5cf7SJit Loon Lim #if PLATFORM_MODEL == PLAT_SOCFPGA_AGILEX5
172*fcbb5cf7SJit Loon Lim 	/* peripheral configuration - select */
173*fcbb5cf7SJit Loon Lim 	uint32_t	peripheral_pwr_gate_magic;
174*fcbb5cf7SJit Loon Lim 	uint32_t	peripheral_pwr_gate_length;
175*fcbb5cf7SJit Loon Lim 	uint32_t	_pad_0x08_0x0C[2];
176*fcbb5cf7SJit Loon Lim 	uint32_t	peripheral_pwr_gate_array;	/* offset, value */
177*fcbb5cf7SJit Loon Lim 
178*fcbb5cf7SJit Loon Lim 	/* ddr configuration - select */
179*fcbb5cf7SJit Loon Lim 	uint32_t	ddr_magic;
180*fcbb5cf7SJit Loon Lim 	uint32_t	ddr_length;
181*fcbb5cf7SJit Loon Lim 	uint32_t	_pad_0x1C_0x20[2];
182*fcbb5cf7SJit Loon Lim 	uint32_t	ddr_array[4];	/* offset, value */
183*fcbb5cf7SJit Loon Lim #endif
184328718f2SHadi Asyrafi } handoff;
185328718f2SHadi Asyrafi 
186328718f2SHadi Asyrafi int verify_handoff_image(handoff *hoff_ptr, handoff *reverse_hoff_ptr);
187328718f2SHadi Asyrafi int socfpga_get_handoff(handoff *hoff_ptr);
188328718f2SHadi Asyrafi 
189328718f2SHadi Asyrafi #endif
190