// SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause /* * Copyright (C) 2023, STMicroelectronics - All Rights Reserved */ #define LOG_CATEGORY LOGC_BOARD #include #include #include #include #include #include #include #include #include #include /* * Get a global data pointer */ DECLARE_GLOBAL_DATA_PTR; int checkboard(void) { int ret; u32 otp; struct udevice *dev; const char *fdt_compat; int fdt_compat_len; fdt_compat = ofnode_get_property(ofnode_root(), "compatible", &fdt_compat_len); log_info("Board: stm32mp2 (%s)\n", fdt_compat && fdt_compat_len ? fdt_compat : ""); /* display the STMicroelectronics board identification */ if (CONFIG_IS_ENABLED(CMD_STBOARD)) { ret = uclass_get_device_by_driver(UCLASS_MISC, DM_DRIVER_GET(stm32mp_bsec), &dev); if (!ret) ret = misc_read(dev, STM32_BSEC_SHADOW(BSEC_OTP_BOARD), &otp, sizeof(otp)); if (ret > 0 && otp) log_info("Board: MB%04x Var%d.%d Rev.%c-%02d\n", otp >> 16, (otp >> 12) & 0xF, (otp >> 4) & 0xF, ((otp >> 8) & 0xF) - 1 + 'A', otp & 0xF); } return 0; } /* board dependent setup after realloc */ int board_init(void) { return 0; } int board_late_init(void) { const void *fdt_compat; int fdt_compat_len; char dtb_name[256]; int buf_len; if (IS_ENABLED(CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG)) { fdt_compat = fdt_getprop(gd->fdt_blob, 0, "compatible", &fdt_compat_len); if (fdt_compat && fdt_compat_len) { if (strncmp(fdt_compat, "st,", 3) != 0) { env_set("board_name", fdt_compat); } else { env_set("board_name", fdt_compat + 3); buf_len = sizeof(dtb_name); strlcpy(dtb_name, fdt_compat + 3, buf_len); buf_len -= strlen(fdt_compat + 3); strlcat(dtb_name, ".dtb", buf_len); env_set("fdtfile", dtb_name); } } } return 0; }