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