driver: eSPI: npcx: workaround the errata rev1_2, No.3.10
Enabling an eSPI channel (r.g. Peripheral Channel, Virtual Wire Channel, etc.) during an eSPI transaction might (with low probability) cause the eSPI_SIF module to transition to a wrong state and therefore response with FATAL_ERROR on an incoming transaction. This CL workarounds this issue by clearing the bit 4 of NPCX eSPI specific register#2. Signed-off-by: Jun Lin <CHLin56@nuvoton.com>
This commit is contained in:
parent
8a4aeeb11e
commit
51978d9d61
4 changed files with 37 additions and 7 deletions
|
@ -30,6 +30,17 @@ config ESPI_NPCX_PERIPHERAL_HOST_CMD_PARAM_SIZE
|
|||
Please notice the valid value in npcx ec series for this option is
|
||||
8/16/32/64/128/256/512/1024/2048/4096 bytes.
|
||||
|
||||
config ESPI_NPCX_BYPASS_CH_ENABLE_FATAL_ERROR
|
||||
bool
|
||||
depends on SOC_SERIES_NPCX7 || SOC_SERIES_NPCX9
|
||||
default y
|
||||
help
|
||||
Workaround the issue documented in NPCX99nF errata rev1_2, No.3.10.
|
||||
Enabling an eSPI channel during an eSPI transaction might
|
||||
(with low probability) cause the eSPI_SIF module to transition to
|
||||
a wrong state and therefore response with FATAL_ERROR on an incoming
|
||||
transaction.
|
||||
|
||||
# The default value 'y' for the existing options if ESPI_NPCX is selected.
|
||||
if ESPI_NPCX
|
||||
|
||||
|
|
|
@ -865,6 +865,14 @@ static int espi_npcx_init(const struct device *dev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_ESPI_NPCX_BYPASS_CH_ENABLE_FATAL_ERROR)) {
|
||||
/* Enable the access to the NPCX_ONLY_ESPI_REG2 register */
|
||||
inst->NPCX_ONLY_ESPI_REG1 = NPCX_ONLY_ESPI_REG1_UNLOCK_REG2;
|
||||
inst->NPCX_ONLY_ESPI_REG2 &= ~BIT(NPCX_ONLY_ESPI_REG2_TRANS_END_CONFIG);
|
||||
/* Disable the access to the NPCX_ONLY_ESPI_REG2 register */
|
||||
inst->NPCX_ONLY_ESPI_REG1 = NPCX_ONLY_ESPI_REG1_LOCK_REG2;
|
||||
}
|
||||
|
||||
/* Enable events which share the same espi bus interrupt */
|
||||
for (i = 0; i < ARRAY_SIZE(espi_bus_isr_tbl); i++) {
|
||||
inst->ESPIIE |= BIT(espi_bus_isr_tbl[i].int_en_bit);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue