summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorAseda Aboagye <aaboagye@google.com>2021-07-22 16:41:59 -0700
committerCommit Bot <commit-bot@chromium.org>2021-07-29 20:36:11 +0000
commitdd9b5de765fd683a2e25cbfe83925d71fe524be2 (patch)
treea7967998b1d539c49256008a4eafa9f9777740c0 /common
parent5e07ac82ecf51aff07a8def8a4bae1330c426b22 (diff)
downloadchrome-ec-dd9b5de765fd683a2e25cbfe83925d71fe524be2.tar.gz
cbi: Add CONFIG_EEPROM_CBI_WP
This commit adds the config option, CONFIG_EEPROM_CBI_WP. It is to be defined when the EC directly controls the CBI EEPROM WP signal. The EC will set the WP according to the result of `system_is_locked()`. Note that once the WP is set, the EC must be reset via EC_RST_ODL in order for the WP to become unset. This is enabled by the accompanying hardware. BUG=b:181769483 BRANCH=None TEST=`make -j buildall` Signed-off-by: Aseda Aboagye <aaboagye@google.com> Change-Id: If490594ab4dd24af98119b01299215b997913b66 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3046412 Tested-by: Aseda Aboagye <aaboagye@chromium.org> Auto-Submit: Aseda Aboagye <aaboagye@chromium.org> Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org> Commit-Queue: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'common')
-rw-r--r--common/cbi_eeprom.c9
-rw-r--r--common/main.c9
-rw-r--r--common/system.c2
3 files changed, 19 insertions, 1 deletions
diff --git a/common/cbi_eeprom.c b/common/cbi_eeprom.c
index fe52bcd9f3..2761f0b977 100644
--- a/common/cbi_eeprom.c
+++ b/common/cbi_eeprom.c
@@ -9,6 +9,7 @@
#include "cros_board_info.h"
#include "gpio.h"
#include "i2c.h"
+#include "system.h"
#include "timer.h"
#include "util.h"
@@ -63,6 +64,14 @@ static int eeprom_write(uint8_t *cbi)
return EC_SUCCESS;
}
+#ifdef CONFIG_EEPROM_CBI_WP
+void cbi_latch_eeprom_wp(void)
+{
+ CPRINTS("WP latched");
+ gpio_set_level(GPIO_EC_CBI_WP, 1);
+}
+#endif /* CONFIG_EEPROM_CBI_WP */
+
const struct cbi_storage_driver eeprom_drv = {
.store = eeprom_write,
.load = eeprom_read,
diff --git a/common/main.c b/common/main.c
index 5564100b31..d9fbe94a1e 100644
--- a/common/main.c
+++ b/common/main.c
@@ -12,6 +12,7 @@
#include "common.h"
#include "console.h"
#include "cpu.h"
+#include "cros_board_info.h"
#include "dma.h"
#include "eeprom.h"
#include "flash.h"
@@ -170,6 +171,14 @@ test_mockable __keep int main(void)
#endif
/*
+ * If the EC has exclusive control over the CBI EEPROM WP signal, have
+ * the EC set the WP if appropriate. Note that once the WP is set, the
+ * EC must be reset via EC_RST_ODL in order for the WP to become unset.
+ */
+ if (IS_ENABLED(CONFIG_EEPROM_CBI_WP) && system_is_locked())
+ cbi_latch_eeprom_wp();
+
+ /*
* Keyboard scan init/Button init can set recovery events to
* indicate to host entry into recovery mode. Before this is
* done, LPC_HOST_EVENT_ALWAYS_REPORT mask needs to be initialized
diff --git a/common/system.c b/common/system.c
index adc510fefa..f88fb69072 100644
--- a/common/system.c
+++ b/common/system.c
@@ -175,7 +175,7 @@ static uint32_t __attribute__((unused)) get_size(enum ec_image copy)
}
}
-int system_is_locked(void)
+test_mockable int system_is_locked(void)
{
static int is_locked = -1;