1*328718f2SHadi Asyrafi /* 2*328718f2SHadi Asyrafi * Copyright (c) 2019, Intel Corporation. All rights reserved. 3*328718f2SHadi Asyrafi * 4*328718f2SHadi Asyrafi * SPDX-License-Identifier: BSD-3-Clause 5*328718f2SHadi Asyrafi */ 6*328718f2SHadi Asyrafi 7*328718f2SHadi Asyrafi #ifndef HANDOFF_H 8*328718f2SHadi Asyrafi #define HANDOFF_H 9*328718f2SHadi Asyrafi 10*328718f2SHadi Asyrafi #define HANDOFF_MAGIC_HEADER 0x424f4f54 /* BOOT */ 11*328718f2SHadi Asyrafi #define HANDOFF_MAGIC_PINMUX_SEL 0x504d5558 /* PMUX */ 12*328718f2SHadi Asyrafi #define HANDOFF_MAGIC_IOCTLR 0x494f4354 /* IOCT */ 13*328718f2SHadi Asyrafi #define HANDOFF_MAGIC_FPGA 0x46504741 /* FPGA */ 14*328718f2SHadi Asyrafi #define HANDOFF_MAGIC_IODELAY 0x444c4159 /* DLAY */ 15*328718f2SHadi Asyrafi #define HANDOFF_MAGIC_CLOCK 0x434c4b53 /* CLKS */ 16*328718f2SHadi Asyrafi #define HANDOFF_MAGIC_MISC 0x4d495343 /* MISC */ 17*328718f2SHadi Asyrafi 18*328718f2SHadi Asyrafi #include <socfpga_plat_def.h> 19*328718f2SHadi Asyrafi 20*328718f2SHadi Asyrafi typedef struct handoff_t { 21*328718f2SHadi Asyrafi /* header */ 22*328718f2SHadi Asyrafi uint32_t header_magic; 23*328718f2SHadi Asyrafi uint32_t header_device; 24*328718f2SHadi Asyrafi uint32_t _pad_0x08_0x10[2]; 25*328718f2SHadi Asyrafi 26*328718f2SHadi Asyrafi /* pinmux configuration - select */ 27*328718f2SHadi Asyrafi uint32_t pinmux_sel_magic; 28*328718f2SHadi Asyrafi uint32_t pinmux_sel_length; 29*328718f2SHadi Asyrafi uint32_t _pad_0x18_0x20[2]; 30*328718f2SHadi Asyrafi uint32_t pinmux_sel_array[96]; /* offset, value */ 31*328718f2SHadi Asyrafi 32*328718f2SHadi Asyrafi /* pinmux configuration - io control */ 33*328718f2SHadi Asyrafi uint32_t pinmux_io_magic; 34*328718f2SHadi Asyrafi uint32_t pinmux_io_length; 35*328718f2SHadi Asyrafi uint32_t _pad_0x1a8_0x1b0[2]; 36*328718f2SHadi Asyrafi uint32_t pinmux_io_array[96]; /* offset, value */ 37*328718f2SHadi Asyrafi 38*328718f2SHadi Asyrafi /* pinmux configuration - use fpga switch */ 39*328718f2SHadi Asyrafi uint32_t pinmux_fpga_magic; 40*328718f2SHadi Asyrafi uint32_t pinmux_fpga_length; 41*328718f2SHadi Asyrafi uint32_t _pad_0x338_0x340[2]; 42*328718f2SHadi Asyrafi uint32_t pinmux_fpga_array[42]; /* offset, value */ 43*328718f2SHadi Asyrafi uint32_t _pad_0x3e8_0x3f0[2]; 44*328718f2SHadi Asyrafi 45*328718f2SHadi Asyrafi /* pinmux configuration - io delay */ 46*328718f2SHadi Asyrafi uint32_t pinmux_delay_magic; 47*328718f2SHadi Asyrafi uint32_t pinmux_delay_length; 48*328718f2SHadi Asyrafi uint32_t _pad_0x3f8_0x400[2]; 49*328718f2SHadi Asyrafi uint32_t pinmux_iodelay_array[96]; /* offset, value */ 50*328718f2SHadi Asyrafi 51*328718f2SHadi Asyrafi /* clock configuration */ 52*328718f2SHadi Asyrafi 53*328718f2SHadi Asyrafi #if PLATFORM_MODEL == PLAT_SOCFPGA_STRATIX10 54*328718f2SHadi Asyrafi uint32_t clock_magic; 55*328718f2SHadi Asyrafi uint32_t clock_length; 56*328718f2SHadi Asyrafi uint32_t _pad_0x588_0x590[2]; 57*328718f2SHadi Asyrafi uint32_t main_pll_mpuclk; 58*328718f2SHadi Asyrafi uint32_t main_pll_nocclk; 59*328718f2SHadi Asyrafi uint32_t main_pll_cntr2clk; 60*328718f2SHadi Asyrafi uint32_t main_pll_cntr3clk; 61*328718f2SHadi Asyrafi uint32_t main_pll_cntr4clk; 62*328718f2SHadi Asyrafi uint32_t main_pll_cntr5clk; 63*328718f2SHadi Asyrafi uint32_t main_pll_cntr6clk; 64*328718f2SHadi Asyrafi uint32_t main_pll_cntr7clk; 65*328718f2SHadi Asyrafi uint32_t main_pll_cntr8clk; 66*328718f2SHadi Asyrafi uint32_t main_pll_cntr9clk; 67*328718f2SHadi Asyrafi uint32_t main_pll_nocdiv; 68*328718f2SHadi Asyrafi uint32_t main_pll_pllglob; 69*328718f2SHadi Asyrafi uint32_t main_pll_fdbck; 70*328718f2SHadi Asyrafi uint32_t main_pll_pllc0; 71*328718f2SHadi Asyrafi uint32_t main_pll_pllc1; 72*328718f2SHadi Asyrafi uint32_t _pad_0x5cc_0x5d0[1]; 73*328718f2SHadi Asyrafi uint32_t per_pll_cntr2clk; 74*328718f2SHadi Asyrafi uint32_t per_pll_cntr3clk; 75*328718f2SHadi Asyrafi uint32_t per_pll_cntr4clk; 76*328718f2SHadi Asyrafi uint32_t per_pll_cntr5clk; 77*328718f2SHadi Asyrafi uint32_t per_pll_cntr6clk; 78*328718f2SHadi Asyrafi uint32_t per_pll_cntr7clk; 79*328718f2SHadi Asyrafi uint32_t per_pll_cntr8clk; 80*328718f2SHadi Asyrafi uint32_t per_pll_cntr9clk; 81*328718f2SHadi Asyrafi uint32_t per_pll_emacctl; 82*328718f2SHadi Asyrafi uint32_t per_pll_gpiodiv; 83*328718f2SHadi Asyrafi uint32_t per_pll_pllglob; 84*328718f2SHadi Asyrafi uint32_t per_pll_fdbck; 85*328718f2SHadi Asyrafi uint32_t per_pll_pllc0; 86*328718f2SHadi Asyrafi uint32_t per_pll_pllc1; 87*328718f2SHadi Asyrafi uint32_t hps_osc_clk_h; 88*328718f2SHadi Asyrafi uint32_t fpga_clk_hz; 89*328718f2SHadi Asyrafi #elif PLATFORM_MODEL == PLAT_SOCFPGA_AGILEX 90*328718f2SHadi Asyrafi uint32_t clock_magic; 91*328718f2SHadi Asyrafi uint32_t clock_length; 92*328718f2SHadi Asyrafi uint32_t _pad_0x588_0x590[2]; 93*328718f2SHadi Asyrafi uint32_t main_pll_mpuclk; 94*328718f2SHadi Asyrafi uint32_t main_pll_nocclk; 95*328718f2SHadi Asyrafi uint32_t main_pll_nocdiv; 96*328718f2SHadi Asyrafi uint32_t main_pll_pllglob; 97*328718f2SHadi Asyrafi uint32_t main_pll_fdbck; 98*328718f2SHadi Asyrafi uint32_t main_pll_pllc0; 99*328718f2SHadi Asyrafi uint32_t main_pll_pllc1; 100*328718f2SHadi Asyrafi uint32_t main_pll_pllc2; 101*328718f2SHadi Asyrafi uint32_t main_pll_pllc3; 102*328718f2SHadi Asyrafi uint32_t main_pll_pllm; 103*328718f2SHadi Asyrafi uint32_t per_pll_emacctl; 104*328718f2SHadi Asyrafi uint32_t per_pll_gpiodiv; 105*328718f2SHadi Asyrafi uint32_t per_pll_pllglob; 106*328718f2SHadi Asyrafi uint32_t per_pll_fdbck; 107*328718f2SHadi Asyrafi uint32_t per_pll_pllc0; 108*328718f2SHadi Asyrafi uint32_t per_pll_pllc1; 109*328718f2SHadi Asyrafi uint32_t per_pll_pllc2; 110*328718f2SHadi Asyrafi uint32_t per_pll_pllc3; 111*328718f2SHadi Asyrafi uint32_t per_pll_pllm; 112*328718f2SHadi Asyrafi uint32_t alt_emacactr; 113*328718f2SHadi Asyrafi uint32_t alt_emacbctr; 114*328718f2SHadi Asyrafi uint32_t alt_emacptpctr; 115*328718f2SHadi Asyrafi uint32_t alt_gpiodbctr; 116*328718f2SHadi Asyrafi uint32_t alt_sdmmcctr; 117*328718f2SHadi Asyrafi uint32_t alt_s2fuser0ctr; 118*328718f2SHadi Asyrafi uint32_t alt_s2fuser1ctr; 119*328718f2SHadi Asyrafi uint32_t alt_psirefctr; 120*328718f2SHadi Asyrafi uint32_t hps_osc_clk_h; 121*328718f2SHadi Asyrafi uint32_t fpga_clk_hz; 122*328718f2SHadi Asyrafi uint32_t _pad_0x604_0x610[3]; 123*328718f2SHadi Asyrafi #endif 124*328718f2SHadi Asyrafi /* misc configuration */ 125*328718f2SHadi Asyrafi uint32_t misc_magic; 126*328718f2SHadi Asyrafi uint32_t misc_length; 127*328718f2SHadi Asyrafi uint32_t _pad_0x618_0x620[2]; 128*328718f2SHadi Asyrafi uint32_t boot_source; 129*328718f2SHadi Asyrafi } handoff; 130*328718f2SHadi Asyrafi 131*328718f2SHadi Asyrafi int verify_handoff_image(handoff *hoff_ptr, handoff *reverse_hoff_ptr); 132*328718f2SHadi Asyrafi int socfpga_get_handoff(handoff *hoff_ptr); 133*328718f2SHadi Asyrafi 134*328718f2SHadi Asyrafi #endif 135*328718f2SHadi Asyrafi 136*328718f2SHadi Asyrafi 137