diff options
author | Aaron Durbin <adurbin@chromium.org> | 2014-08-27 10:30:39 -0500 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2015-03-27 08:03:53 +0100 |
commit | 1b315d0cdedede33cc2ac2892ae4fd36fef19b4e (patch) | |
tree | db3639e4d481e5ac06e4b52e0751df4f590f4eff /src/arch | |
parent | ebfee7e9914770b126ba8451ef824d763e1c66c5 (diff) | |
download | coreboot-1b315d0cdedede33cc2ac2892ae4fd36fef19b4e.tar.xz |
arm64: implement cpu_info() correctly
There are 2 things wrong with the current implementation:
1. the stack isn't guaranteed to be aligned to CONFIG_STACK_SIZE.
2. the stack isn't necessarily CONFIG_STACK_SIZE bytes.
Utilize the smp_processor_id() function to obtain the correct
cpu_info structure to obtain the correct index.
BUG=chrome-os-partner:31545
BRANC=None
TEST=Built and booted.
Change-Id: I43d4a2baa26e48147bc0dbdb3e9e13ad023f0690
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Original-Commit-Id: e2c32b1a46ac8dc1364ed03c195322c0bf28dd7f
Original-Change-Id: I2825118e2313dbbf13712a4afdfa05a2e38ee3a4
Original-Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/214665
Original-Reviewed-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-on: http://review.coreboot.org/9009
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/arm64/cpu.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/src/arch/arm64/cpu.c b/src/arch/arm64/cpu.c index f90c759559..e3bc19d163 100644 --- a/src/arch/arm64/cpu.c +++ b/src/arch/arm64/cpu.c @@ -30,13 +30,9 @@ #include <stdlib.h> #include <arch/cpu.h> -/* Return the cpu struct which is at the high memory address of the stack. - */ +static struct cpu_info cpu_infos[CONFIG_MAX_CPUS]; + struct cpu_info *cpu_info(void) { - uintptr_t addr = ALIGN((uintptr_t)__builtin_frame_address(0), - CONFIG_STACK_SIZE); - addr -= sizeof(struct cpu_info); - return (void *)addr; + return &cpu_infos[smp_processor_id()]; } - |