aboutsummaryrefslogtreecommitdiff
path: root/fwu/ns_bl2u/ns_bl2u_main.c
blob: 5b1373f64fea60ccbf43767157ad1041b15fd808 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
 * Copyright (c) 2018, Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <arch_helpers.h>
#include <bl1.h>
#include <debug.h>
#include <firmware_image_package.h>
#include <fwu_nvm.h>
#include <platform.h>
#include <platform_def.h>

extern const char version_string[];

void ns_bl2u_main(void)
{
	smc_args fwu_params = {0};
	smc_ret_values fwu_result = {0};

	NOTICE("NS_BL2U: %s\n", version_string);
	NOTICE("NS_BL2U: %s\n", build_message);

	tftf_platform_setup();

#if FWU_BL_TEST
	unsigned int toc_header;
	STATUS status = fwu_nvm_read(0, &toc_header, 4);
	if (status != STATUS_SUCCESS) {
		ERROR("NS_BL2U: Failed to read NVM\n");
		panic();
	}

	/* Update the TOC if found invalid. */
	if (toc_header != TOC_HEADER_NAME) {
		toc_header = TOC_HEADER_NAME;
		status = fwu_nvm_write(0, &toc_header, 4);
		if (status != STATUS_SUCCESS) {
			ERROR("NS_BL2U: Failed to update TOC value\n");
			panic();
		}
		INFO("NS_BL2U: Updated TOC value\n");
	}
#endif

	/* Update the FIP image. */
	if (fwu_update_fip(FIP_BKP_ADDRESS) != STATUS_SUCCESS) {
		ERROR("NS_BL2U: Firmware Image Update Failed\n");
		panic();
	}

	/* Call FWU_SMC_UPDATE_DONE to indicate image update done. */
	INFO("NS_BL2U: Calling FWU_SMC_UPDATE_DONE\n");
	fwu_params.fid = FWU_SMC_UPDATE_DONE;
	fwu_result = tftf_smc(&fwu_params);
	ERROR("NS_BL2U: Unexpected return from FWU process (%d)\n",
			(int)fwu_result.ret0);
	panic();
}