[coreboot-gerrit] Patch set updated for coreboot: ffd5109 arm64: fix smc bugs in secmon

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Fri Mar 27 12:44:57 CET 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/9094

-gerrit

commit ffd510976668a90fa6d94bdefa37b9dab56ea222
Author: Aaron Durbin <adurbin at chromium.org>
Date:   Fri Sep 19 17:08:20 2014 -0500

    arm64: fix smc bugs in secmon
    
    Two things:
    1. Not returning once setting the return state.
    2. mempcy(x, y, ARRAY_SIZE(x)) is not memcpy(x, y, sizeof(x))
    
    With these 2 changes arguments and results are being processed
    correctly.
    
    BUG=chrome-os-partner:32112
    BRANCH=None
    TEST=Built and brought up SMP using PSCI.
    
    Change-Id: If76a207e1a434a4c08faaa535f069d7386481e9e
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: 42d540afd4e6ea2b34cf3632ad2c683fcaa063c8
    Original-Change-Id: I656b9c11e3bc07cc1664789a600eb88afd639f93
    Original-Signed-off-by: Aaron Durbin <adurbin at chromium.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/218847
    Original-Reviewed-by: Furquan Shaikh <furquan at chromium.org>
---
 src/arch/arm64/armv8/secmon/smc.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/arch/arm64/armv8/secmon/smc.c b/src/arch/arm64/armv8/secmon/smc.c
index 3bb52f0..8aa6d41 100644
--- a/src/arch/arm64/armv8/secmon/smc.c
+++ b/src/arch/arm64/armv8/secmon/smc.c
@@ -84,7 +84,7 @@ int smc_register_range(uint32_t min, uint32_t max, int (*h)(struct smc_call *))
 
 static int smc_cleanup(struct exc_state *state, struct smc_call *smc, int ret)
 {
-	memcpy(&state->regs.x, &smc->results, ARRAY_SIZE(smc->results));
+	memcpy(&state->regs.x, &smc->results, sizeof(smc->results));
 
 	return ret;
 }
@@ -103,15 +103,15 @@ static int smc_handler(struct exc_state *state, uint64_t vector_id)
 	uint32_t esr;
 	struct smc_range *r;
 
-	memcpy(&smc->args, &state->regs.x, ARRAY_SIZE(smc->args));
-	memcpy(&smc->results, &state->regs.x, ARRAY_SIZE(smc->results));
+	memcpy(&smc->args, &state->regs.x, sizeof(smc->args));
+	memcpy(&smc->results, &state->regs.x, sizeof(smc->results));
 
 	esr = raw_read_esr_el3();
 	exception_class = (esr >> 26) & 0x3f;
 
 	/* No support for 32-bit SMC calls. */
 	if (exception_class == EC_SMC32)
-		smc_return_with_error(state, smc);
+		return smc_return_with_error(state, smc);
 
 	/* Check to ensure this is an SMC from aarch64. */
 	if (exception_class != EC_SMC64)
@@ -119,7 +119,7 @@ static int smc_handler(struct exc_state *state, uint64_t vector_id)
 
 	/* Ensure immediate value is 0. */
 	if ((esr & 0xffff) != 0)
-		smc_return_with_error(state, smc);
+		return smc_return_with_error(state, smc);
 
 	r = smc_handler_by_function(smc_function_id(smc));
 



More information about the coreboot-gerrit mailing list