summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Hesling <hesling@chromium.org>2019-07-01 12:21:49 -0700
committerCommit Bot <commit-bot@chromium.org>2019-07-18 00:15:57 +0000
commitdca00fcd76546d28f64dfc805c548d9fb34a7ba4 (patch)
tree22c7fd5a2c1d31dcd1e6fb0541b74180aba4213f
parent048e8abbb05ec7758045cb43dbc71fa1ecc93fbe (diff)
downloadchrome-ec-dca00fcd76546d28f64dfc805c548d9fb34a7ba4.tar.gz
chip/host: Add spi+trng support, and add gpio func
This adds fake SPI Master and TRNG support to the host target. This change also adds the missing emulated gpio interface function. Although general purpose, these changes are setup for allowing fuzzing of the FPMCU specific host commands. Thus, they do not impact any outstanding code. BRANCH=none BUG=b:116065496 TEST=make buildall -j Change-Id: Icfc40e7bf8ee421a4c3ad15377fd56ae68c763d7 Signed-off-by: Craig Hesling <hesling@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1684223 Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r--board/host/board.c9
-rw-r--r--chip/host/build.mk2
-rw-r--r--chip/host/gpio.c6
-rw-r--r--chip/host/spi_master.c42
-rw-r--r--chip/host/trng.c36
5 files changed, 94 insertions, 1 deletions
diff --git a/board/host/board.c b/board/host/board.c
index 58e895a6f2..086a6f1359 100644
--- a/board/host/board.c
+++ b/board/host/board.c
@@ -14,6 +14,7 @@
#include "motion_sense.h"
#include "motion_lid.h"
#include "power_button.h"
+#include "spi.h"
#include "temp_sensor.h"
#include "timer.h"
#include "util.h"
@@ -58,6 +59,14 @@ const struct i2c_port_t i2c_ports[] = {
const unsigned int i2c_ports_used = ARRAY_SIZE(i2c_ports);
#endif
+#ifdef CONFIG_SPI_MASTER
+/* SPI devices */
+const struct spi_device_t spi_devices[] = {
+};
+
+const unsigned int spi_devices_used = ARRAY_SIZE(spi_devices);
+#endif
+
#ifdef TEST_BUILD
/* Poor source of entropy for testing purpose. */
int board_get_entropy(void *buffer, int len)
diff --git a/chip/host/build.mk b/chip/host/build.mk
index dc7ba91560..2e62f8f3d0 100644
--- a/chip/host/build.mk
+++ b/chip/host/build.mk
@@ -9,7 +9,7 @@
CORE:=host
chip-y=system.o gpio.o uart.o persistence.o flash.o lpc.o reboot.o i2c.o \
- clock.o
+ clock.o spi_master.o trng.o
chip-$(HAS_TASK_KEYSCAN)+=keyboard_raw.o
chip-$(CONFIG_USB_PD_TCPC)+=usb_pd_phy.o
diff --git a/chip/host/gpio.c b/chip/host/gpio.c
index 343e780bd0..6033902720 100644
--- a/chip/host/gpio.c
+++ b/chip/host/gpio.c
@@ -62,6 +62,12 @@ test_mockable int gpio_enable_interrupt(enum gpio_signal signal)
return EC_SUCCESS;
}
+test_mockable int gpio_disable_interrupt(enum gpio_signal signal)
+{
+ gpio_interrupt_enabled[signal] = 0;
+ return EC_SUCCESS;
+}
+
test_mockable int gpio_clear_pending_interrupt(enum gpio_signal signal)
{
return EC_SUCCESS;
diff --git a/chip/host/spi_master.c b/chip/host/spi_master.c
new file mode 100644
index 0000000000..83bde96163
--- /dev/null
+++ b/chip/host/spi_master.c
@@ -0,0 +1,42 @@
+/* Copyright 2019 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ * Dummy Master SPI driver for unit test.
+ */
+
+#include <stdint.h>
+
+#include "common.h"
+#include "gpio.h"
+
+#include "spi.h"
+
+test_mockable int spi_enable(int port, int enable)
+{
+ return EC_SUCCESS;
+}
+
+test_mockable int spi_transaction(const struct spi_device_t *spi_device,
+ const uint8_t *txdata, int txlen,
+ uint8_t *rxdata, int rxlen)
+{
+ return EC_SUCCESS;
+}
+
+test_mockable int spi_transaction_async(const struct spi_device_t *spi_device,
+ const uint8_t *txdata, int txlen,
+ uint8_t *rxdata, int rxlen)
+{
+ return EC_SUCCESS;
+}
+
+test_mockable int spi_transaction_flush(const struct spi_device_t *spi_device)
+{
+ return EC_SUCCESS;
+}
+
+test_mockable int spi_transaction_wait(const struct spi_device_t *spi_device)
+{
+ return EC_SUCCESS;
+}
diff --git a/chip/host/trng.c b/chip/host/trng.c
new file mode 100644
index 0000000000..e27dc9d607
--- /dev/null
+++ b/chip/host/trng.c
@@ -0,0 +1,36 @@
+
+/* Copyright 2019 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ * Dummy TRNG driver for unit test.
+ *
+ * Although a TRNG is designed to be anything but predictable,
+ * this implementation strives to be as predictable and defined
+ * as possible to allow reproducing unit tests and fuzzer crashes.
+ */
+
+#include <stdint.h>
+#include <stdlib.h> /* Only valid for host */
+
+#include "common.h"
+
+static unsigned int seed;
+
+test_mockable void init_trng(void)
+{
+ seed = 0;
+ srand(seed);
+}
+
+test_mockable void exit_trng(void)
+{
+}
+
+test_mockable void rand_bytes(void *buffer, size_t len)
+{
+ uint8_t *b, *end;
+
+ for (b = buffer, end = b+len; b != end; b++)
+ *b = (uint8_t)rand_r(&seed);
+}