summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMary Ruthven <mruthven@chromium.org>2016-04-19 18:48:54 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-04-26 14:21:00 -0700
commit2cab8b20816eea34f71cc0b74e1d14c3d7d22a96 (patch)
tree31ca0f0e11267324c9fcfc9fd7ae15c27e560385
parent539e261d720e8851a64e2d95bbc5f5883718a193 (diff)
downloadchrome-ec-stabilize-8249.B.tar.gz
cr50: enable AP and EC flash accessstabilize-8249.B
The cr50 SPI master can control the external AP and EC SPI ROM. This change adds support for doing spi_transactions, but does not use the SPI transactions for anything except console commands. This support will be used for flashing the AP and EC through CCD. For now AP and EC flash select must be done manually using the spi_flash_select console command. Flash select should be disabled after use, because it will prevent the system from booting. BUG=chrome-os-partner:50701 BRANCH=none TEST=Enable spi_flash commands. Select AP ROM and verify spi_flashinfo, read, erase, and write commands work properly. Select EC ROM and verify the same commands. Change-Id: I16c55015794f8513effe0fa5712488a84bed2627 Signed-off-by: Mary Ruthven <mruthven@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/339844 Reviewed-by: Shawn N <shawnn@chromium.org>
-rw-r--r--board/cr50/board.c7
-rw-r--r--board/cr50/board.h6
-rw-r--r--chip/g/spi_master.c7
-rw-r--r--include/config.h3
4 files changed, 23 insertions, 0 deletions
diff --git a/board/cr50/board.c b/board/cr50/board.c
index 139b550087..4640064c81 100644
--- a/board/cr50/board.c
+++ b/board/cr50/board.c
@@ -15,6 +15,7 @@
#include "usb_descriptor.h"
#include "usb_hid.h"
#include "util.h"
+#include "spi.h"
/* Define interrupt and gpio structs */
#include "gpio_list.h"
@@ -123,6 +124,12 @@ const void * const usb_strings[] = {
BUILD_ASSERT(ARRAY_SIZE(usb_strings) == USB_STR_COUNT);
#endif
+/* SPI devices */
+const struct spi_device_t spi_devices[] = {
+ [CONFIG_SPI_FLASH_PORT] = {0, 4, GPIO_COUNT}
+};
+const unsigned int spi_devices_used = ARRAY_SIZE(spi_devices);
+
int flash_regions_to_enable(struct g_flash_region *regions,
int max_regions)
{
diff --git a/board/cr50/board.h b/board/cr50/board.h
index 685d511c1c..d04c44a79e 100644
--- a/board/cr50/board.h
+++ b/board/cr50/board.h
@@ -38,6 +38,12 @@
#define CONFIG_USB_PID 0x5014
+/* Enable SPI Master (SPI) module */
+#define CONFIG_SPI_MASTER
+#define CONFIG_SPI_MASTER_NO_CS_GPIOS
+#define CONFIG_SPI_MASTER_CONFIGURE_GPIOS
+#define CONFIG_SPI_FLASH_PORT 0
+
/* Enable SPI Slave (SPS) module */
#define CONFIG_SPS
#define CONFIG_TPM_SPS
diff --git a/chip/g/spi_master.c b/chip/g/spi_master.c
index 322d112797..aa9f9707b8 100644
--- a/chip/g/spi_master.c
+++ b/chip/g/spi_master.c
@@ -211,6 +211,13 @@ static void spi_init(void)
{
size_t i;
+#ifdef CONFIG_SPI_MASTER_CONFIGURE_GPIOS
+ /* Set SPI_MISO as an input */
+ GWRITE_FIELD(PINMUX, DIOA11_CTL, IE, 1); /* SPS_MISO */
+ /* Set SPI_CS to be an internal pull up */
+ GWRITE_FIELD(PINMUX, DIOA14_CTL, PU, 1);
+#endif
+
for (i = 0; i < SPI_NUM_PORTS; i++) {
/* Configure the SPI ports to default to mode0. */
set_spi_clock_mode(i, SPI_CLOCK_MODE0);
diff --git a/include/config.h b/include/config.h
index 173db8f3ed..63096c843c 100644
--- a/include/config.h
+++ b/include/config.h
@@ -1606,6 +1606,9 @@
/* SPI master feature */
#undef CONFIG_SPI_MASTER
+/* SPI master configure gpios on init */
+#undef CONFIG_SPI_MASTER_CONFIGURE_GPIOS
+
/* Support SPI masters without GPIO-specified Chip Selects, instead rely on the
* SPI master port's hardwired CS pin. */
#undef CONFIG_SPI_MASTER_NO_CS_GPIOS