From aaaf689007cb6d80d326e5a297899e6719bdac30 Mon Sep 17 00:00:00 2001 From: Stefan Reinauer Date: Thu, 29 Aug 2013 15:57:11 -0700 Subject: chromeos: On ARM platforms VBNV lives in the EC This patch renames the x86 way of doing things to explicitly mention CMOS (which is not available on our ARM platforms) and adds an implementation to get VBNV through the Chrome EC. We might want to refine this further in the future to allow VBNV in the EC even on x86 platforms. Will be fixed when that appears. Also, not all ARM platforms running ChromeOS might use the Google EC in the future, in which case this code will need additional work. Signed-off-by: Stefan Reinauer Change-Id: Ice09d0e277dbb131f9ad763e762e8877007db901 Reviewed-on: https://chromium-review.googlesource.com/167540 Reviewed-by: David Hendrix Tested-by: Stefan Reinauer Commit-Queue: Stefan Reinauer (cherry picked from commit 8df6cdbcacb082af88c069ef8b542b44ff21d97a) Signed-off-by: Isaac Christensen Reviewed-on: http://review.coreboot.org/6616 Tested-by: build bot (Jenkins) Reviewed-by: David Hendricks --- src/ec/google/chromeec/ec.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'src/ec/google/chromeec/ec.c') diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c index ab4db545fc..24f9693735 100644 --- a/src/ec/google/chromeec/ec.c +++ b/src/ec/google/chromeec/ec.c @@ -18,6 +18,7 @@ */ #include +#include #include #include #include @@ -26,7 +27,6 @@ #include #include #include -#include #include "chip.h" #include "ec.h" @@ -154,6 +154,38 @@ u16 google_chromeec_get_board_version(void) return board_v.board_version; } + +int google_chromeec_vbnv_context(int is_read, uint8_t *data, int len) +{ + struct chromeec_command cec_cmd; + struct ec_params_vbnvcontext cmd_vbnvcontext; + struct ec_response_vbnvcontext rsp_vbnvcontext; + + if (len != EC_VBNV_BLOCK_SIZE) + return -1; + + + cec_cmd.cmd_code = EC_CMD_VBNV_CONTEXT; + cec_cmd.cmd_version = EC_VER_VBNV_CONTEXT; + cec_cmd.cmd_data_in = &cmd_vbnvcontext; + cec_cmd.cmd_data_out = &rsp_vbnvcontext; + cec_cmd.cmd_size_in = sizeof(cmd_vbnvcontext); + cec_cmd.cmd_size_out = sizeof(rsp_vbnvcontext); + + cmd_vbnvcontext.op = is_read ? EC_VBNV_CONTEXT_OP_READ : + EC_VBNV_CONTEXT_OP_WRITE; + + if (!is_read) + memcpy(&cmd_vbnvcontext.block, data, EC_VBNV_BLOCK_SIZE); + + google_chromeec_command(&cec_cmd); + + if (is_read) + memcpy(data, &rsp_vbnvcontext.block, EC_VBNV_BLOCK_SIZE); + + return cec_cmd.cmd_code; +} + #endif /* ! __SMM__ */ #ifndef __PRE_RAM__ -- cgit v1.2.3