diff options
author | David Hendricks <dhendrix@chromium.org> | 2014-09-27 20:04:49 -0700 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2015-04-02 17:28:14 +0200 |
commit | 767d245ebf2d6d797bf759d23778553ed6f2a0b2 (patch) | |
tree | 247940814ab4844978218296b1e81409d9798d74 /src/ec | |
parent | 842978631580333becf635cc78f1901615d34929 (diff) | |
download | coreboot-767d245ebf2d6d797bf759d23778553ed6f2a0b2.tar.xz |
chromeec: Add wakeup delay after SPI /CS assertion
Some ECs may require a few microseconds to ramp up their clock after
being awaken by /CS assertion. This adds a Kconfig variable that can
be overridden at the mainboard-level which will force a delay between
asserting /CS and beginning a transfer.
BUG=chrome-os-partner:32223
BRANCH=none
TEST=verified ~100us delay using logic analyzer
Change-Id: I6d9b8beaa808252f008efb10e7448afdf96d2004
Signed-off-by: Stefan Reinauer <reinauer@chromium.org>
Original-Commit-Id: ec6b10e4e3f0362dea0dc8046cfd4e4615a42585
Original-Change-Id: Ibba356e4af18f80a7da73c96dadfda0f25251381
Original-Signed-off-by: David Hendricks <dhendrix@chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/220242
Original-Reviewed-by: Julius Werner <jwerner@chromium.org>
Original-Reviewed-by: Alexandru Stan <amstan@chromium.org>
Reviewed-on: http://review.coreboot.org/9217
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Tested-by: build bot (Jenkins)
Diffstat (limited to 'src/ec')
-rw-r--r-- | src/ec/google/chromeec/Kconfig | 7 | ||||
-rw-r--r-- | src/ec/google/chromeec/ec_spi.c | 5 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/ec/google/chromeec/Kconfig b/src/ec/google/chromeec/Kconfig index bec12fb10a..32a42133f2 100644 --- a/src/ec/google/chromeec/Kconfig +++ b/src/ec/google/chromeec/Kconfig @@ -43,6 +43,13 @@ config EC_GOOGLE_CHROMEEC_SPI_BUS depends on EC_GOOGLE_CHROMEEC_SPI hex "SPI bus for Google's Chrome EC" +config EC_GOOGLE_CHROMEEC_SPI_WAKEUP_DELAY_US + depends on EC_GOOGLE_CHROMEEC_SPI + int + default 0 + help + Force delay after asserting /CS to allow EC to wakeup. + config EC_GOOGLE_CHROMEEC_SPI_CHIP depends on EC_GOOGLE_CHROMEEC_SPI hex diff --git a/src/ec/google/chromeec/ec_spi.c b/src/ec/google/chromeec/ec_spi.c index 4b3e587266..d11348cff7 100644 --- a/src/ec/google/chromeec/ec_spi.c +++ b/src/ec/google/chromeec/ec_spi.c @@ -18,6 +18,7 @@ */ #include <console/console.h> +#include <delay.h> #include "ec.h" #include "ec_commands.h" #include <spi-generic.h> @@ -50,6 +51,10 @@ static int crosec_spi_io(size_t req_size, size_t resp_size, void *context) spi_claim_bus(slave); + /* Allow EC to ramp up clock after being awaken. + * See chrome-os-partner:32223 for more details. */ + udelay(CONFIG_EC_GOOGLE_CHROMEEC_SPI_WAKEUP_DELAY_US); + if (spi_xfer(slave, req_buf, req_size, NULL, 0)) { printk(BIOS_ERR, "%s: Failed to send request.\n", __func__); spi_release_bus(slave); |