summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Mittelberg <bmbm@google.com>2023-02-14 17:57:59 -0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-02-17 18:59:05 +0000
commit6dcfdc7b10f44852c40b30564d596fe27c5249c8 (patch)
treef5eaca0a12973576e5602c1abafa3fa3afef748a
parent111ff65dbd498641a773ff77928595ccd0b58667 (diff)
downloadchrome-ec-6dcfdc7b10f44852c40b30564d596fe27c5249c8.tar.gz
i8042: return self-test status on reset
As described in PS/2 keyboard protocol spec, the reset command 0xff is followed by diagnostic self-test, aka BAT. Along with the ACK for reset command EC must return BAT status. BRANCH=none BUG=b:134366527 TEST=buildall; make run-kb_8042; depthcharge screen on brya Change-Id: I5803d06b204d552c458ad443393f80072d41e40e Signed-off-by: Boris Mittelberg <bmbm@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4252007 Reviewed-by: Raul Rangel <rrangel@chromium.org> Reviewed-by: CoolStar <coolstarorganization@gmail.com> Tested-by: Raul Rangel <rrangel@chromium.org>
-rw-r--r--common/keyboard_8042.c1
-rw-r--r--test/kb_8042.c17
2 files changed, 15 insertions, 3 deletions
diff --git a/common/keyboard_8042.c b/common/keyboard_8042.c
index fc55628719..f3c454382b 100644
--- a/common/keyboard_8042.c
+++ b/common/keyboard_8042.c
@@ -735,6 +735,7 @@ static int handle_keyboard_data(uint8_t data, uint8_t *output)
reset_rate_and_delay();
keyboard_clear_buffer();
output[out_len++] = ATKBD_RET_ACK;
+ output[out_len++] = ATKBD_RET_TEST_SUCCESS;
break;
case ATKBD_CMD_RESEND:
diff --git a/test/kb_8042.c b/test/kb_8042.c
index 0065319576..792b6ea0d5 100644
--- a/test/kb_8042.c
+++ b/test/kb_8042.c
@@ -184,14 +184,14 @@ static int _enable_keystroke(int enabled)
#define ENABLE_KEYSTROKE(enabled) \
TEST_EQ(_enable_keystroke(enabled), EC_SUCCESS, "%d")
-static int _reset_8042(void)
+static int _reset_8042_def(void)
{
keyboard_host_write(ATKBD_CMD_RESET_DEF, 0);
VERIFY_ATKBD_ACK();
return EC_SUCCESS;
}
-#define RESET_8042() TEST_EQ(_reset_8042(), EC_SUCCESS, "%d")
+#define RESET_8042_DEF() TEST_EQ(_reset_8042_def(), EC_SUCCESS, "%d")
static int _set_typematic(uint8_t val)
{
@@ -603,7 +603,7 @@ test_static int test_typematic(void)
/*
* 500ms delay, 10.9 chars / sec.
*/
- RESET_8042();
+ RESET_8042_DEF();
press_key(1, 1, 1);
VERIFY_LPC_CHAR_DELAY("\x01\x01\x01", 650);
@@ -801,6 +801,16 @@ test_static int test_atkbd_set_ex_leds(void)
return EC_SUCCESS;
}
+test_static int test_atkbd_reset(void)
+{
+ i8042_write_data(ATKBD_CMD_RESET);
+ VERIFY_ATKBD_ACK();
+ /* Successful BAT self-test */
+ VERIFY_LPC_CHAR("\xAA");
+
+ return EC_SUCCESS;
+}
+
test_static int test_scancode_set2(void)
{
SET_SCANCODE(2);
@@ -989,6 +999,7 @@ void run_test(int argc, const char **argv)
RUN_TEST(test_atkbd_set_leds_keypress_during);
RUN_TEST(test_atkbd_set_leds_abort_set);
RUN_TEST(test_atkbd_set_ex_leds);
+ RUN_TEST(test_atkbd_reset);
RUN_TEST(test_single_key_press);
RUN_TEST(test_disable_keystroke);
RUN_TEST(test_typematic);