| // SPDX-License-Identifier: GPL-2.0-or-later |
| /* |
| * Copyright (c) 2023, Linaro Limited |
| */ |
| |
| #include <efi_loader.h> |
| #include <fwu.h> |
| #include <fwu_mdata.h> |
| #include <memalign.h> |
| #include <mtd.h> |
| |
| #define DFU_ALT_BUF_LEN 256 |
| |
| /* Generate dfu_alt_info from partitions */ |
| void set_dfu_alt_info(char *interface, char *devstr) |
| { |
| ALLOC_CACHE_ALIGN_BUFFER(char, buf, DFU_ALT_BUF_LEN); |
| struct mtd_info *mtd; |
| int ret; |
| |
| memset(buf, 0, sizeof(buf)); |
| |
| mtd_probe_devices(); |
| |
| mtd = get_mtd_device_nm("nor1"); |
| if (IS_ERR_OR_NULL(mtd)) |
| return; |
| |
| ret = fwu_gen_alt_info_from_mtd(buf, DFU_ALT_BUF_LEN, mtd); |
| if (ret < 0) { |
| log_err("Error: Failed to generate dfu_alt_info. (%d)\n", ret); |
| return; |
| } |
| log_debug("Make dfu_alt_info: '%s'\n", buf); |
| |
| env_set("dfu_alt_info", buf); |
| } |
| |
| /** |
| * fwu_plat_get_bootidx() - Get the value of the boot index |
| * @boot_idx: Boot index value |
| * |
| * Get the value of the bank(partition) from which the platform |
| * has booted. This value is passed to U-Boot from the earlier |
| * stage bootloader which loads and boots all the relevant |
| * firmware images |
| */ |
| void fwu_plat_get_bootidx(uint *boot_idx) |
| { |
| int ret; |
| u32 buf; |
| size_t readlen; |
| struct mtd_info *mtd; |
| |
| *boot_idx = 0; |
| |
| mtd_probe_devices(); |
| mtd = get_mtd_device_nm("nor1"); |
| if (IS_ERR_OR_NULL(mtd)) |
| return; |
| |
| ret = mtd_read(mtd, SCB_PLAT_METADATA_OFFSET, sizeof(buf), |
| &readlen, (u_char *)&buf); |
| if (ret < 0) |
| return; |
| |
| *boot_idx = buf; |
| } |