1*29d1e29dSJit Loon Lim /* 2*29d1e29dSJit Loon Lim * Copyright (c) 2024-2025, Altera Corporation. All rights reserved. 3*29d1e29dSJit Loon Lim * 4*29d1e29dSJit Loon Lim * SPDX-License-Identifier: BSD-3-Clause 5*29d1e29dSJit Loon Lim */ 6*29d1e29dSJit Loon Lim 7*29d1e29dSJit Loon Lim #ifndef SOCFPGA_DT_H 8*29d1e29dSJit Loon Lim #define SOCFPGA_DT_H 9*29d1e29dSJit Loon Lim 10*29d1e29dSJit Loon Lim 11*29d1e29dSJit Loon Lim #include <stdlib.h> 12*29d1e29dSJit Loon Lim #include <drivers/arm/gicv3.h> 13*29d1e29dSJit Loon Lim #include <drivers/delay_timer.h> 14*29d1e29dSJit Loon Lim /* 15*29d1e29dSJit Loon Lim * This macro takes three arguments: 16*29d1e29dSJit Loon Lim * config: Configuration identifier 17*29d1e29dSJit Loon Lim * name: property namespace 18*29d1e29dSJit Loon Lim * callback: populate() function 19*29d1e29dSJit Loon Lim */ 20*29d1e29dSJit Loon Lim #define SOCFPGA_REGISTER_POPULATOR(config, name, callback) \ 21*29d1e29dSJit Loon Lim __section(".socfpga_populator") __used \ 22*29d1e29dSJit Loon Lim static const struct socfpga_populator (name##__populator) = { \ 23*29d1e29dSJit Loon Lim .config_type = (#config), \ 24*29d1e29dSJit Loon Lim .info = (#name), \ 25*29d1e29dSJit Loon Lim .populate = (callback) \ 26*29d1e29dSJit Loon Lim } 27*29d1e29dSJit Loon Lim 28*29d1e29dSJit Loon Lim /* 29*29d1e29dSJit Loon Lim * Populator callback 30*29d1e29dSJit Loon Lim * 31*29d1e29dSJit Loon Lim * This structure are used by the fconf_populate function and should only be 32*29d1e29dSJit Loon Lim * defined by the SOCFPGA_REGISTER_POPULATOR macro. 33*29d1e29dSJit Loon Lim */ 34*29d1e29dSJit Loon Lim struct socfpga_populator { 35*29d1e29dSJit Loon Lim /* Description of the data loaded by the callback */ 36*29d1e29dSJit Loon Lim const char *config_type; 37*29d1e29dSJit Loon Lim const char *info; 38*29d1e29dSJit Loon Lim 39*29d1e29dSJit Loon Lim /* Callback used by fconf_populate function with a provided config dtb. 40*29d1e29dSJit Loon Lim * Return 0 on success, err_code < 0 otherwise. 41*29d1e29dSJit Loon Lim */ 42*29d1e29dSJit Loon Lim int (*populate)(uintptr_t config); 43*29d1e29dSJit Loon Lim }; 44*29d1e29dSJit Loon Lim 45*29d1e29dSJit Loon Lim /* Hardware Config related getter */ 46*29d1e29dSJit Loon Lim #define hw_config__gicv3_config_getter(prop) plat_gicv3_gic_data.prop 47*29d1e29dSJit Loon Lim 48*29d1e29dSJit Loon Lim /* Function Definitions */ 49*29d1e29dSJit Loon Lim int socfpga_dt_open_and_check(uintptr_t dt_addr, char *compatible_str); 50*29d1e29dSJit Loon Lim int socfpga_dt_populate_gicv3_config(uintptr_t dt_addr, gicv3_driver_data_t *plat_driver_data); 51*29d1e29dSJit Loon Lim int socfpga_dt_populate_dram_layout(uintptr_t dt_addr); 52*29d1e29dSJit Loon Lim 53*29d1e29dSJit Loon Lim #endif 54