summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Palatin <vpalatin@chromium.org>2015-01-09 10:29:53 -0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2015-01-30 03:28:15 +0000
commit83e4e71ad34628d49146a7cbbbeef574f6b6e365 (patch)
tree1506859efa061d6778bef0cc00a1080cd9709559
parent1aef41d57744d75e029c5300b905ae884e8ea9df (diff)
downloadchrome-ec-83e4e71ad34628d49146a7cbbbeef574f6b6e365.tar.gz
pd: log important events for accessories
Record in the PD log when we fail to verify the RW signature and when the RW partition is erased. Also log the faults on the power supplies. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> BRANCH=samus BUG=chrome-os-partner:32785 TEST=flash a bad rw on Zinger. Original-Change-Id: Ib62dcb0d407867151af0aaecc405533e894d773e Reviewed-on: https://chromium-review.googlesource.com/239913 Reviewed-by: Alec Berg <alecaberg@chromium.org> Commit-Queue: Vincent Palatin <vpalatin@chromium.org> Trybot-Ready: Vincent Palatin <vpalatin@chromium.org> Tested-by: Vincent Palatin <vpalatin@chromium.org> (cherry picked from commit 64ada6e3d8220e51a64b30ff15878f1abff11a47) Reviewed-on: https://chromium-review.googlesource.com/240839 Reviewed-by: Vincent Palatin <vpalatin@chromium.org> (cherry picked from commit e5bffd3453b807556307c76bddf5ff52b3cd2208) Signed-off-by: Todd Broch <tbroch@chromium.org> Change-Id: Ie2322d4e9a3caa38786ff7194b7b2ce553695a6b Reviewed-on: https://chromium-review.googlesource.com/244224 Reviewed-by: Alec Berg <alecaberg@chromium.org> Tested-by: Todd Broch <tbroch@chromium.org> Commit-Queue: Todd Broch <tbroch@chromium.org>
-rw-r--r--board/zinger/board.c2
-rw-r--r--board/zinger/usb_pd_policy.c8
-rw-r--r--common/rwsig.c3
-rw-r--r--common/usb_pd_policy.c1
-rw-r--r--include/ec_commands.h12
5 files changed, 22 insertions, 4 deletions
diff --git a/board/zinger/board.c b/board/zinger/board.c
index cf703296a7..7130f68572 100644
--- a/board/zinger/board.c
+++ b/board/zinger/board.c
@@ -6,6 +6,7 @@
#include "common.h"
#include "debug.h"
+#include "ec_commands.h"
#include "registers.h"
#include "rsa.h"
#include "sha256.h"
@@ -65,6 +66,7 @@ static int check_rw_valid(void *rw_hash)
good = rsa_verify(&pkey, (void *)rw_sig, rw_hash, rsa_workbuf);
if (!good) {
debug_printf("RSA FAILED\n");
+ pd_log_event(PD_EVENT_ACC_RW_FAIL, 0, 0, NULL);
return 0;
}
diff --git a/board/zinger/usb_pd_policy.c b/board/zinger/usb_pd_policy.c
index d61023a13a..018f7477f7 100644
--- a/board/zinger/usb_pd_policy.c
+++ b/board/zinger/usb_pd_policy.c
@@ -7,6 +7,7 @@
#include "common.h"
#include "console.h"
#include "debug.h"
+#include "ec_commands.h"
#include "hooks.h"
#include "registers.h"
#include "system.h"
@@ -340,6 +341,7 @@ int pd_board_checks(void)
if (fault == FAULT_FAST_OCP) {
debug_printf("Fast OCP\n");
+ pd_log_event(PD_EVENT_PS_FAULT, 0, PS_FAULT_FAST_OCP, NULL);
fault = FAULT_OCP;
/* reset over-current after 1 second */
fault_deadline.val = get_time().val + OCP_TIMEOUT;
@@ -357,6 +359,7 @@ int pd_board_checks(void)
debug_printf("OCP %d mA\n",
vbus_amp * VDDA_MV / CURR_GAIN * 1000
/ R_SENSE / ADC_SCALE);
+ pd_log_event(PD_EVENT_PS_FAULT, 0, PS_FAULT_OCP, NULL);
fault = FAULT_OCP;
/* reset over-current after 1 second */
fault_deadline.val = get_time().val + OCP_TIMEOUT;
@@ -383,9 +386,11 @@ int pd_board_checks(void)
if ((output_is_enabled() && (vbus_volt > voltages[ovp_idx].ovp)) ||
(fault && (vbus_volt > voltages[ovp_idx].ovp_rec))) {
- if (!fault)
+ if (!fault) {
debug_printf("OVP %d mV\n",
ADC_TO_VOLT_MV(vbus_volt));
+ pd_log_event(PD_EVENT_PS_FAULT, 0, PS_FAULT_OVP, NULL);
+ }
fault = FAULT_OVP;
/* no timeout */
fault_deadline.val = get_time().val;
@@ -404,6 +409,7 @@ int pd_board_checks(void)
adc_enable_watchdog(ADC_CH_A_SENSE, MAX_CURRENT_FAST, 0);
debug_printf("Disch FAIL %d mV\n",
ADC_TO_VOLT_MV(vbus_volt));
+ pd_log_event(PD_EVENT_PS_FAULT, 0, PS_FAULT_DISCH, NULL);
fault = FAULT_DISCHARGE;
/* reset it after 1 second */
fault_deadline.val = get_time().val + OCP_TIMEOUT;
diff --git a/common/rwsig.c b/common/rwsig.c
index 92b8d1838c..2065a3d215 100644
--- a/common/rwsig.c
+++ b/common/rwsig.c
@@ -8,10 +8,12 @@
*/
#include "console.h"
+#include "ec_commands.h"
#include "rsa.h"
#include "sha256.h"
#include "shared_mem.h"
#include "system.h"
+#include "usb_pd.h"
#include "util.h"
/* Console output macros */
@@ -64,6 +66,7 @@ void check_rw_signature(void)
system_run_image_copy(SYSTEM_IMAGE_RW);
} else {
CPRINTS("RSA verify FAILED\n");
+ pd_log_event(PD_EVENT_ACC_RW_FAIL, 0, 0, NULL);
/* RW firmware is invalid : do not jump there */
if (system_is_locked())
system_disable_jump();
diff --git a/common/usb_pd_policy.c b/common/usb_pd_policy.c
index f555288267..519d72787d 100644
--- a/common/usb_pd_policy.c
+++ b/common/usb_pd_policy.c
@@ -665,6 +665,7 @@ int pd_custom_flash_vdm(int port, int cnt, uint32_t *payload)
/* do not kill the code under our feet */
if (system_get_image_copy() != SYSTEM_IMAGE_RO)
break;
+ pd_log_event(PD_EVENT_ACC_RW_ERASE, 0, 0, NULL);
flash_offset = CONFIG_FW_RW_OFF;
flash_physical_erase(CONFIG_FW_RW_OFF, CONFIG_FW_RW_SIZE);
rw_flash_changed = 1;
diff --git a/include/ec_commands.h b/include/ec_commands.h
index 954a423f5d..357c1de432 100644
--- a/include/ec_commands.h
+++ b/include/ec_commands.h
@@ -2889,9 +2889,7 @@ struct ec_response_pd_log {
#define PD_EVENT_ACC_GFU_ENTER (PD_EVENT_ACC_BASE+2)
/* PD power supply events */
#define PD_EVENT_PS_BASE 0x40
-#define PD_EVENT_PS_OCP (PD_EVENT_PS_BASE+0)
-#define PD_EVENT_PS_OVP (PD_EVENT_PS_BASE+1)
-#define PD_EVENT_PS_TEMP (PD_EVENT_PS_BASE+2)
+#define PD_EVENT_PS_FAULT (PD_EVENT_PS_BASE+0)
/* PD video dongles events */
#define PD_EVENT_VIDEO_BASE 0x60
/* Returned in the "type" field, when there is no entry available */
@@ -2914,6 +2912,14 @@ struct ec_response_pd_log {
/* Power delivery role */
#define CHARGE_FLAGS_ROLE_MASK (7 << 0)
+/*
+ * PD_EVENT_PS_FAULT data field flags definition :
+ */
+#define PS_FAULT_OCP 1
+#define PS_FAULT_FAST_OCP 2
+#define PS_FAULT_OVP 3
+#define PS_FAULT_DISCH 4
+
#endif /* !__ACPI__ */
/*****************************************************************************/