// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * Copyright (c) 2019 Amlogic, Inc. All rights reserved.
 */

#include <environment.h>
#include <memalign.h>
#include <errno.h>
#include <amlogic/storage.h>

DECLARE_GLOBAL_DATA_PTR;

#ifdef CONFIG_CMD_SAVEENV
static int env_storage_save(void)
{
	if (store_get_type() == BOOT_NONE) {
		printf("env_storage: must init before save\n");
		return -ENOENT;
	}
	ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE);

	if (env_export(buf)) {
		printf("env_storage: export failed\n");
		return -EINVAL;
	}

	if (store_rsv_write(RSV_ENV, CONFIG_ENV_SIZE, (void *)buf)) {
		printf("env_storage: write failed\n");
		return -EIO;
	}

	return 0;
}
#endif /* CONFIG_CMD_SAVEENV */

static int env_storage_load(void)
{
	if (store_get_type() == BOOT_NONE) {
		printf("env_storage: must init before load\n");
		return -ENOENT;
	}
	ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE);

	if (store_rsv_read(RSV_ENV, CONFIG_ENV_SIZE, (void *)buf)) {
		set_default_env("!env_storage: read failed", 0);
		return -EIO;
	}
	else if (env_import(buf, 1)) {
		set_default_env("!env_storage: import failed", 0);
		return -EINVAL;
	}

	return 0;
}


U_BOOT_ENV_LOCATION(storage) = {
	.location	= ENVL_STORAGE,
	ENV_NAME("STORAGE")
	.load		= env_storage_load,
#ifdef CONFIG_CMD_SAVEENV
	.save		= env_save_ptr(env_storage_save),
#endif
};
