summaryrefslogtreecommitdiff
path: root/chip/it83xx
diff options
context:
space:
mode:
authorJustin TerAvest <teravest@google.com>2018-05-17 11:17:41 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-05-17 19:34:56 -0700
commit65b05ac7b128e871dcbe55cc5fdcb6612448ab2d (patch)
tree92fff687eaaaf0999f6713d5fd83fe20820a061c /chip/it83xx
parent160f62a60a8c36474c77fff1afa15a002f942a83 (diff)
downloadchrome-ec-65b05ac7b128e871dcbe55cc5fdcb6612448ab2d.tar.gz
it83xx: Only use supported VWs on GLK
Gemini Lake-based chipsets support a subset of virtual wires that other Intel processors do. The current settings prevent the GLK APs from bootign in some situations; PLTRST# doesn't get reasserted when there is an error. See "eSPI Compatibility Specification (562633)" for details. BRANCH=None BUG=b:79778835 TEST=Successfully booted bip after a cold reset from servo Change-Id: I02b403ab6b06cbcae61ac46132018e95988a3d43 Signed-off-by: Justin TerAvest <teravest@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1064704 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Jett Rink <jettrink@chromium.org> Reviewed-by: Vijay Hiremath <vijay.p.hiremath@intel.corp-partner.google.com>
Diffstat (limited to 'chip/it83xx')
-rw-r--r--chip/it83xx/espi.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/chip/it83xx/espi.c b/chip/it83xx/espi.c
index b22db29484..e46a74ad4f 100644
--- a/chip/it83xx/espi.c
+++ b/chip/it83xx/espi.c
@@ -28,6 +28,16 @@ struct vw_channel_t {
};
/* VW settings at initialization */
+#ifdef CONFIG_CHIPSET_GEMINILAKE
+static const struct vw_channel_t vw_init_setting[] = {
+ {ESPI_SYSTEM_EVENT_VW_IDX_4,
+ VW_LEVEL_FIELD(0),
+ VW_VALID_FIELD(VW_IDX_4_OOB_RST_ACK)},
+ {ESPI_SYSTEM_EVENT_VW_IDX_5,
+ VW_LEVEL_FIELD(VW_IDX_5_BTLD_STATUS_DONE),
+ VW_VALID_FIELD(VW_IDX_5_BTLD_STATUS_DONE)},
+};
+#else
static const struct vw_channel_t vw_init_setting[] = {
{ESPI_SYSTEM_EVENT_VW_IDX_4,
VW_LEVEL_FIELD(0),
@@ -39,6 +49,7 @@ static const struct vw_channel_t vw_init_setting[] = {
VW_LEVEL_FIELD(0),
VW_VALID_FIELD(VW_IDX_40_SUS_ACK)},
};
+#endif
/* VW settings at host startup */
static const struct vw_channel_t vw_host_startup_setting[] = {
@@ -268,11 +279,13 @@ static void espi_vw_no_isr(uint8_t flag_changed)
{
}
+#ifndef CONFIG_CHIPSET_GEMINILAKE
static void espi_vw_idx41_isr(uint8_t flag_changed)
{
if (flag_changed & VW_LEVEL_FIELD(VW_IDX_41_SUS_WARN))
espi_vw_set_wire(VW_SUS_ACK, espi_vw_get_wire(VW_SUS_WARN_L));
}
+#endif
static void espi_vw_idx7_isr(uint8_t flag_changed)
{
@@ -315,6 +328,18 @@ struct vw_interrupt_t {
uint8_t vw_index;
};
+#ifdef CONFIG_CHIPSET_GEMINILAKE
+static const struct vw_interrupt_t vw_isr_list[CHIP_ESPI_VW_INTERRUPT_NUM] = {
+ {espi_vw_idx2_isr, ESPI_SYSTEM_EVENT_VW_IDX_2},
+ {espi_vw_idx3_isr, ESPI_SYSTEM_EVENT_VW_IDX_3},
+ {espi_vw_idx7_isr, ESPI_SYSTEM_EVENT_VW_IDX_7},
+ {espi_vw_no_isr, ESPI_SYSTEM_EVENT_VW_IDX_41},
+ {espi_vw_no_isr, ESPI_SYSTEM_EVENT_VW_IDX_42},
+ {espi_vw_no_isr, ESPI_SYSTEM_EVENT_VW_IDX_43},
+ {espi_vw_no_isr, ESPI_SYSTEM_EVENT_VW_IDX_44},
+ {espi_vw_no_isr, ESPI_SYSTEM_EVENT_VW_IDX_47},
+};
+#else
static const struct vw_interrupt_t vw_isr_list[CHIP_ESPI_VW_INTERRUPT_NUM] = {
{espi_vw_idx2_isr, ESPI_SYSTEM_EVENT_VW_IDX_2},
{espi_vw_idx3_isr, ESPI_SYSTEM_EVENT_VW_IDX_3},
@@ -325,6 +350,7 @@ static const struct vw_interrupt_t vw_isr_list[CHIP_ESPI_VW_INTERRUPT_NUM] = {
{espi_vw_no_isr, ESPI_SYSTEM_EVENT_VW_IDX_44},
{espi_vw_no_isr, ESPI_SYSTEM_EVENT_VW_IDX_47},
};
+#endif
/*
* This is used to record the previous VW valid / level field state to discover