UPSTREAM: libpayload-x86: i8042: fix i8042_data_ready_ps2 and i8042_data_ready_aux

keyboard_disconnect was called without keyboard_init being called and in this
case keyboard_havechar returns true because i8042_data_ready_ps2 is
dereferencing uninitialized variable ps2_fifo from within fifo_is_empty causing
keyboard_disconnect to be stuck in this while loop.
while (keyboard_havechar())
    keyboard_getchar();

BUG=b:80299098
TEST=Check if the normal mode path in depthcharge is not causing a hang

Change-Id: I7844e880c066f22814fecc0c4c5b77896cbd8ab3
Signed-off-by: Furquan Shaikh <furquan@google.com>
Original-Commit-Id: b81362a82e40fac5c6debd8e0034feacb00d5e0a
Original-Change-Id: I944b4836005c887a2715717dff2df1b5a220818e
Original-Signed-off-by: Hannah Williams <hannah.williams@intel.com>
Original-Reviewed-on: https://review.coreboot.org/26590
Original-Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Original-Reviewed-by: Furquan Shaikh <furquan@google.com>
Reviewed-on: https://chromium-review.googlesource.com/1077749
Commit-Ready: Furquan Shaikh <furquan@chromium.org>
Tested-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-by: Furquan Shaikh <furquan@chromium.org>
diff --git a/payloads/libpayload/drivers/i8042/i8042.c b/payloads/libpayload/drivers/i8042/i8042.c
index 1bf1855..b679448 100644
--- a/payloads/libpayload/drivers/i8042/i8042.c
+++ b/payloads/libpayload/drivers/i8042/i8042.c
@@ -87,6 +87,8 @@
  */
 static int fifo_is_empty(struct fifo *fifo)
 {
+	if (!fifo)
+		return 1;
 	return fifo->tx == fifo->rx;
 }
 
@@ -332,6 +334,8 @@
  */
 u8 i8042_data_ready_ps2(void)
 {
+	if (!initialized)
+		return 0;
 	i8042_data_poll();
 	return !fifo_is_empty(ps2_fifo);
 }
@@ -341,6 +345,8 @@
  */
 u8 i8042_data_ready_aux(void)
 {
+	if (!initialized)
+		return 0;
 	i8042_data_poll();
 	return !fifo_is_empty(aux_fifo);
 }
diff --git a/payloads/libpayload/drivers/i8042/keyboard.c b/payloads/libpayload/drivers/i8042/keyboard.c
index a4f91b0..a24d5a2 100644
--- a/payloads/libpayload/drivers/i8042/keyboard.c
+++ b/payloads/libpayload/drivers/i8042/keyboard.c
@@ -324,6 +324,9 @@
 	if (inb(0x64) == 0xFF)
 		return;
 
+	if (!i8042_has_ps2())
+		return;
+
 	/* Empty keyboard buffer */
 	while (keyboard_havechar())
 		keyboard_getchar();