UPSTREAM: soc/intel/common: fix gsmi handler

The gsmi_exec() expects the parameter to be a pointer
to the 32-bit register storage of the SMI save state.
The previous code was passing a pointer with the value
obtained from the saved-state -- not a pointer to the
storage of the register value. This bug causes gsmi
to not log events because it's interrogating the
parameter buffer itself as if it were a pointer.

BUG=chrome-os-partner:55932
BRANCH=None
TEST=None

Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: https://review.coreboot.org/16087
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>

Change-Id: I37981424f1414edad1456b31cad1b99020d57db6
Reviewed-on: https://chromium-review.googlesource.com/368281
Commit-Ready: Furquan Shaikh <furquan@chromium.org>
Tested-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Aaron Durbin 2016-08-05 21:26:53 -05:00 committed by chrome-bot
parent 81409d4602
commit b404ff39cf

View file

@ -221,7 +221,7 @@ static void southbridge_smi_gsmi(const struct
reg_ebx = save_state_ops->get_reg(io_smi, RBX);
/* drivers/elog/gsmi.c */
ret = gsmi_exec(sub_command, (u32 *)(uintptr_t)reg_ebx);
ret = gsmi_exec(sub_command, &reg_ebx);
save_state_ops->set_reg(io_smi, RAX, ret);
}