aboutsummaryrefslogtreecommitdiff
path: root/src/cpu/x86/smm
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2017-06-16 11:45:32 -0500
committerAaron Durbin <adurbin@chromium.org>2017-06-22 03:45:41 +0000
commit25a885b52dc4184b20c088683588d38bf68a6069 (patch)
treeca3c1ef40c02d8ee62a57a5a2aace21488533153 /src/cpu/x86/smm
parent08f93599a9728682783505fe7e6fa3e3b025a497 (diff)
cpu/x86/smm: fix up types in module loader
For sizes and dimensions use size_t. For pointer casts use uintptr_t. Also, use the ALIGN_UP macro instead of open coding the operation. Change-Id: Id28968e60e51f46662c37249277454998afd5c0d Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://review.coreboot.org/20241 Reviewed-by: Furquan Shaikh <furquan@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Diffstat (limited to 'src/cpu/x86/smm')
-rw-r--r--src/cpu/x86/smm/smm_module_loader.c52
1 files changed, 26 insertions, 26 deletions
diff --git a/src/cpu/x86/smm/smm_module_loader.c b/src/cpu/x86/smm/smm_module_loader.c
index 0f93970e9b..a396b7df8f 100644
--- a/src/cpu/x86/smm/smm_module_loader.c
+++ b/src/cpu/x86/smm/smm_module_loader.c
@@ -64,10 +64,10 @@ struct smm_entry_ins {
* a given stride. The entry_start is the highest entry point's address. All
* other entry points are stride size below the previous.
*/
-static void smm_place_jmp_instructions(void *entry_start, int stride, int num,
- void *jmp_target)
+static void smm_place_jmp_instructions(void *entry_start, size_t stride,
+ size_t num, void *jmp_target)
{
- int i;
+ size_t i;
char *cur;
struct smm_entry_ins entry = { .jmp_rel = 0xe9 };
@@ -80,9 +80,9 @@ static void smm_place_jmp_instructions(void *entry_start, int stride, int num,
* the jmp instruction needs to be taken into account. */
cur = entry_start;
for (i = 0; i < num; i++) {
- uint32_t disp = (uint32_t)jmp_target;
+ uint32_t disp = (uintptr_t)jmp_target;
- disp -= sizeof(entry) + (uint32_t)cur;
+ disp -= sizeof(entry) + (uintptr_t)cur;
printk(BIOS_DEBUG,
"SMM Module: placing jmp sequence at %p rel16 0x%04x\n",
cur, disp);
@@ -94,10 +94,10 @@ static void smm_place_jmp_instructions(void *entry_start, int stride, int num,
/* Place stacks in base -> base + size region, but ensure the stacks don't
* overlap the staggered entry points. */
-static void *smm_stub_place_stacks(char *base, int size,
+static void *smm_stub_place_stacks(char *base, size_t size,
struct smm_loader_params *params)
{
- int total_stack_size;
+ size_t total_stack_size;
char *stacks_top;
if (params->stack_top != NULL)
@@ -128,14 +128,14 @@ static void *smm_stub_place_stacks(char *base, int size,
static void smm_stub_place_staggered_entry_points(char *base,
const struct smm_loader_params *params, const struct rmodule *smm_stub)
{
- int stub_entry_offset;
+ size_t stub_entry_offset;
stub_entry_offset = rmodule_entry_offset(smm_stub);
/* If there are staggered entry points or the stub is not located
* at the SMM entry point then jmp instructions need to be placed. */
if (params->num_concurrent_save_states > 1 || stub_entry_offset != 0) {
- int num_entries;
+ size_t num_entries;
base += SMM_ENTRY_OFFSET;
num_entries = params->num_concurrent_save_states;
@@ -166,12 +166,12 @@ static void smm_stub_place_staggered_entry_points(char *base,
*/
static int smm_module_setup_stub(void *smbase, struct smm_loader_params *params)
{
- int total_save_state_size;
- int smm_stub_size;
- int stub_entry_offset;
+ size_t total_save_state_size;
+ size_t smm_stub_size;
+ size_t stub_entry_offset;
char *smm_stub_loc;
void *stacks_top;
- int size;
+ size_t size;
char *base;
int i;
struct smm_stub_params *stub_params;
@@ -212,10 +212,9 @@ static int smm_module_setup_stub(void *smbase, struct smm_loader_params *params)
/* Adjust for jmp instruction sequence. */
if (stub_entry_offset != 0) {
- int entry_sequence_size = sizeof(struct smm_entry_ins);
+ size_t entry_sequence_size = sizeof(struct smm_entry_ins);
/* Align up to 16 bytes. */
- entry_sequence_size += 15;
- entry_sequence_size &= ~15;
+ entry_sequence_size = ALIGN_UP(entry_sequence_size, 16);
smm_stub_loc += entry_sequence_size;
smm_stub_size += entry_sequence_size;
}
@@ -250,11 +249,11 @@ static int smm_module_setup_stub(void *smbase, struct smm_loader_params *params)
/* Setup the parameters for the stub code. */
stub_params = rmodule_parameters(&smm_stub);
- stub_params->stack_top = (u32)stacks_top;
+ stub_params->stack_top = (uintptr_t)stacks_top;
stub_params->stack_size = params->per_cpu_stack_size;
- stub_params->c_handler = (u32)params->handler;
- stub_params->c_handler_arg = (u32)params->handler_arg;
- stub_params->runtime.smbase = (u32)smbase;
+ stub_params->c_handler = (uintptr_t)params->handler;
+ stub_params->c_handler_arg = (uintptr_t)params->handler_arg;
+ stub_params->runtime.smbase = (uintptr_t)smbase;
stub_params->runtime.save_state_size = params->per_cpu_save_state_size;
/* Initialize the APIC id to CPU number table to be 1:1 */
@@ -314,13 +313,13 @@ int smm_setup_relocation_handler(struct smm_loader_params *params)
* expects a region large enough to encompass the handler and stacks
* as well as the SMM_DEFAULT_SIZE.
*/
-int smm_load_module(void *smram, int size, struct smm_loader_params *params)
+int smm_load_module(void *smram, size_t size, struct smm_loader_params *params)
{
struct rmodule smm_mod;
- int total_stack_size;
- int handler_size;
- int module_alignment;
- int alignment_size;
+ size_t total_stack_size;
+ size_t handler_size;
+ size_t module_alignment;
+ size_t alignment_size;
char *base;
if (size <= SMM_DEFAULT_SIZE)
@@ -344,7 +343,8 @@ int smm_load_module(void *smram, int size, struct smm_loader_params *params)
base += SMM_DEFAULT_SIZE;
handler_size = rmodule_memory_size(&smm_mod);
module_alignment = rmodule_load_alignment(&smm_mod);
- alignment_size = module_alignment - ((u32)base % module_alignment);
+ alignment_size = module_alignment -
+ ((uintptr_t)base % module_alignment);
if (alignment_size != module_alignment) {
handler_size += alignment_size;
base += alignment_size;