xref: /rk3399_ARM-atf/plat/nvidia/tegra/common/tegra_stack_protector.c (revision c6ef55c541d7d26df2ffb1b32ed788d301224302)
1*359acf77SVarun Wadekar /*
2*359acf77SVarun Wadekar  * Copyright (c) 2020, NVIDIA Corporation. All rights reserved.
3*359acf77SVarun Wadekar  *
4*359acf77SVarun Wadekar  * SPDX-License-Identifier: BSD-3-Clause
5*359acf77SVarun Wadekar  */
6*359acf77SVarun Wadekar 
7*359acf77SVarun Wadekar #include <stdint.h>
8*359acf77SVarun Wadekar 
9*359acf77SVarun Wadekar #include <arch_helpers.h>
10*359acf77SVarun Wadekar #include <lib/mmio.h>
11*359acf77SVarun Wadekar #include <plat/common/platform.h>
12*359acf77SVarun Wadekar #include <platform_def.h>
13*359acf77SVarun Wadekar 
plat_get_stack_protector_canary(void)14*359acf77SVarun Wadekar u_register_t plat_get_stack_protector_canary(void)
15*359acf77SVarun Wadekar {
16*359acf77SVarun Wadekar 	u_register_t seed;
17*359acf77SVarun Wadekar 
18*359acf77SVarun Wadekar 	/*
19*359acf77SVarun Wadekar 	 * Ideally, a random number should be returned instead. As the
20*359acf77SVarun Wadekar 	 * platform does not have any random number generator, this is
21*359acf77SVarun Wadekar 	 * better than nothing, but not really secure.
22*359acf77SVarun Wadekar 	 */
23*359acf77SVarun Wadekar 	seed = mmio_read_32(TEGRA_MISC_BASE + HARDWARE_REVISION_OFFSET);
24*359acf77SVarun Wadekar 	seed <<= 32;
25*359acf77SVarun Wadekar 	seed |= mmio_read_32(TEGRA_TMRUS_BASE);
26*359acf77SVarun Wadekar 
27*359acf77SVarun Wadekar 	return seed ^ read_cntpct_el0();
28*359acf77SVarun Wadekar }
29