// SPDX-License-Identifier: GPL-2.0+ /* * Copyright (c) 2017 General Electric Company. All rights reserved. */ #include #include #include #define BC_MAGIC 0xbc void bootcount_store(ulong a) { u8 *buf; loff_t len; int ret; if (fs_set_blk_dev(CONFIG_SYS_BOOTCOUNT_EXT_INTERFACE, CONFIG_SYS_BOOTCOUNT_EXT_DEVPART, FS_TYPE_EXT)) { puts("Error selecting device\n"); return; } buf = map_sysmem(CONFIG_SYS_BOOTCOUNT_ADDR, 2); buf[0] = BC_MAGIC; buf[1] = (a & 0xff); unmap_sysmem(buf); ret = fs_write(CONFIG_SYS_BOOTCOUNT_EXT_NAME, CONFIG_SYS_BOOTCOUNT_ADDR, 0, 2, &len); if (ret != 0) puts("Error storing bootcount\n"); } ulong bootcount_load(void) { u8 *buf; loff_t len_read; int ret; if (fs_set_blk_dev(CONFIG_SYS_BOOTCOUNT_EXT_INTERFACE, CONFIG_SYS_BOOTCOUNT_EXT_DEVPART, FS_TYPE_EXT)) { puts("Error selecting device\n"); return 0; } ret = fs_read(CONFIG_SYS_BOOTCOUNT_EXT_NAME, CONFIG_SYS_BOOTCOUNT_ADDR, 0, 2, &len_read); if (ret != 0 || len_read != 2) { puts("Error loading bootcount\n"); return 0; } buf = map_sysmem(CONFIG_SYS_BOOTCOUNT_ADDR, 2); if (buf[0] == BC_MAGIC) ret = buf[1]; unmap_sysmem(buf); return ret; }