1*ab1981dbSLouis Mayencourt /* 2*ab1981dbSLouis Mayencourt * Copyright (c) 2019-2020, ARM Limited. All rights reserved. 3*ab1981dbSLouis Mayencourt * 4*ab1981dbSLouis Mayencourt * SPDX-License-Identifier: BSD-3-Clause 5*ab1981dbSLouis Mayencourt */ 6*ab1981dbSLouis Mayencourt 7*ab1981dbSLouis Mayencourt #include <assert.h> 8*ab1981dbSLouis Mayencourt 9*ab1981dbSLouis Mayencourt #include <common/debug.h> 10*ab1981dbSLouis Mayencourt #include <lib/fconf/fconf.h> 11*ab1981dbSLouis Mayencourt #include <libfdt.h> 12*ab1981dbSLouis Mayencourt #include <platform_def.h> 13*ab1981dbSLouis Mayencourt 14*ab1981dbSLouis Mayencourt void fconf_populate(uintptr_t config) 15*ab1981dbSLouis Mayencourt { 16*ab1981dbSLouis Mayencourt assert(config != 0UL); 17*ab1981dbSLouis Mayencourt 18*ab1981dbSLouis Mayencourt /* Check if the pointer to DTB is correct */ 19*ab1981dbSLouis Mayencourt if (fdt_check_header((void *)config) != 0) { 20*ab1981dbSLouis Mayencourt ERROR("FCONF: Invalid DTB file passed for FW_CONFIG\n"); 21*ab1981dbSLouis Mayencourt panic(); 22*ab1981dbSLouis Mayencourt } 23*ab1981dbSLouis Mayencourt 24*ab1981dbSLouis Mayencourt INFO("FCONF: Reading firmware configuration file from: 0x%lx\n", config); 25*ab1981dbSLouis Mayencourt 26*ab1981dbSLouis Mayencourt /* Go through all registered populate functions */ 27*ab1981dbSLouis Mayencourt IMPORT_SYM(struct fconf_populator *, __FCONF_POPULATOR_START__, start); 28*ab1981dbSLouis Mayencourt IMPORT_SYM(struct fconf_populator *, __FCONF_POPULATOR_END__, end); 29*ab1981dbSLouis Mayencourt const struct fconf_populator *populator; 30*ab1981dbSLouis Mayencourt 31*ab1981dbSLouis Mayencourt for (populator = start; populator != end; populator++) { 32*ab1981dbSLouis Mayencourt assert((populator->info != NULL) && (populator->populate != NULL)); 33*ab1981dbSLouis Mayencourt 34*ab1981dbSLouis Mayencourt INFO("FCONF: Reading firmware configuration information for: %s\n", populator->info); 35*ab1981dbSLouis Mayencourt if (populator->populate(config) != 0) { 36*ab1981dbSLouis Mayencourt /* TODO: handle property miss */ 37*ab1981dbSLouis Mayencourt panic(); 38*ab1981dbSLouis Mayencourt } 39*ab1981dbSLouis Mayencourt } 40*ab1981dbSLouis Mayencourt } 41