amd: raminit sysinfo offset fix

The sysinfo object within the k8 ram init is used
to communicate progess/status from all the nodes in the
system. However, the code was assuming where the sysinfo
object lived in cache-as-ram. The layout of cache-as-ram
is dynamic so one needs to do the lookup of the correct
address at runtime. The way the amd code is compiled
by #include'ing .c files makes the solution a little
more complex in that some cache-as-ram support code
needed to be refactored.

Change-Id: I6500fa7b005dc082c4c0b3382ee2c3a138d9ac31
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/10961
Tested-by: build bot (Jenkins)
Tested-by: Raptor Engineering Automated Test Stand <noreply@raptorengineeringinc.com>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
Aaron Durbin
2015-07-16 16:07:02 -05:00
parent db01ddfd49
commit 0dc7354760
8 changed files with 30 additions and 25 deletions

View File

@@ -20,6 +20,8 @@
#ifndef ARCH_EARLY_VARIABLES_H
#define ARCH_EARLY_VARIABLES_H
#include <stdlib.h>
#if defined(__PRE_RAM__) && IS_ENABLED(CONFIG_CACHE_AS_RAM)
asm(".section .car.global_data,\"w\",@nobits");
asm(".previous");
@@ -43,6 +45,20 @@ void *car_sync_var_ptr(void *var);
#define car_set_var(var, val) \
do { car_get_var(var) = (val); } while(0)
extern char _car_data_start[];
extern char _car_data_end[];
static inline size_t car_data_size(void)
{
size_t car_size = &_car_data_end[0] - &_car_data_start[0];
return ALIGN(car_size, 64);
}
static inline size_t car_object_offset(void *ptr)
{
return (char *)ptr - &_car_data_start[0];
}
#else
#define CAR_GLOBAL
static inline void *car_get_var_ptr(void *var) { return var; }