diff options
author | Devin Lu <devin.lu@quantatw.com> | 2020-12-15 13:54:26 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-12-17 06:16:50 +0000 |
commit | c2b7fbf19ca943d9a182fe92273749a6f24c2a2f (patch) | |
tree | 65286e41fb4b5c3ed69c5f59e75f9d30aab946cd | |
parent | 6a6891121c0cda0d5c6b68e30f9ee40d60563f89 (diff) | |
download | chrome-ec-c2b7fbf19ca943d9a182fe92273749a6f24c2a2f.tar.gz |
kukui/usb_pd: Store vbus enable status before sysjump
Since vbus enable status is not store in EC ram while sysjump. This
patch adds tag to store vbus enable status before sysjump.
BUG=b:174376610
BRANCH=firmware-kukui-12573.B
TEST=With PDtrace. Make sure vbus discharing works correctly on sysjump.
Signed-off-by: Devin Lu <Devin.Lu@quantatw.com>
Change-Id: Ibb96d74a8017f8838c59fefe18c5252a98a637e4
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2592531
Reviewed-by: Ting Shen <phoenixshen@chromium.org>
-rw-r--r-- | baseboard/kukui/usb_pd_policy.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/baseboard/kukui/usb_pd_policy.c b/baseboard/kukui/usb_pd_policy.c index 2344c41427..311b0f2663 100644 --- a/baseboard/kukui/usb_pd_policy.c +++ b/baseboard/kukui/usb_pd_policy.c @@ -8,6 +8,7 @@ #include "charger.h" #include "console.h" #include "gpio.h" +#include "hooks.h" #include "system.h" #include "timer.h" #include "usb_mux.h" @@ -29,6 +30,31 @@ static int board_get_polarity(int port) static uint8_t vbus_en; +#define VBUS_EN_SYSJUMP_TAG 0x5645 /* VE */ +#define VBUS_EN_HOOK_VERSION 1 + +static void vbus_en_preserve_state(void) +{ + system_add_jump_tag(VBUS_EN_SYSJUMP_TAG, VBUS_EN_HOOK_VERSION, + sizeof(vbus_en), &vbus_en); +} +DECLARE_HOOK(HOOK_SYSJUMP, vbus_en_preserve_state, HOOK_PRIO_DEFAULT); + +static void vbus_en_restore_state(void) +{ + const uint8_t *prev_vbus_en; + int size, version; + + prev_vbus_en = (const uint8_t *)system_get_jump_tag( + VBUS_EN_SYSJUMP_TAG, &version, &size); + + if (prev_vbus_en && version == VBUS_EN_HOOK_VERSION && + size == sizeof(*prev_vbus_en)) { + memcpy(&vbus_en, prev_vbus_en, sizeof(vbus_en)); + } +} +DECLARE_HOOK(HOOK_INIT, vbus_en_restore_state, HOOK_PRIO_DEFAULT); + int board_vbus_source_enabled(int port) { return vbus_en; |