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