| // 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; | |
| } |