diff options
author | Justin TerAvest <teravest@google.com> | 2018-05-17 11:17:41 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-05-17 19:34:56 -0700 |
commit | 65b05ac7b128e871dcbe55cc5fdcb6612448ab2d (patch) | |
tree | 92fff687eaaaf0999f6713d5fd83fe20820a061c /chip/it83xx | |
parent | 160f62a60a8c36474c77fff1afa15a002f942a83 (diff) | |
download | chrome-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.c | 26 |
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 |