# NPCX eSPI driver configuration options

# Copyright (c) 2020 Nuvoton Technology Corporation.
# SPDX-License-Identifier: Apache-2.0

config ESPI_NPCX
	bool "Nuvoton NPCX embedded controller (EC) ESPI driver"
	default y
	depends on SOC_FAMILY_NPCX
	depends on DT_HAS_NUVOTON_NPCX_ESPI_ENABLED
	select PINCTRL
	help
	  This option enables the Intel Enhanced Serial Peripheral Interface
	  (eSPI) for NPCX family of processors.

config ESPI_NPCX_PERIPHERAL_ACPI_SHD_MEM_SIZE
	int "Host I/O peripheral port size for shared memory in npcx series"
	depends on ESPI_NPCX || ESPI_PERIPHERAL_ACPI_SHM_REGION
	default 256
	help
	  This is the port size used by the Host and EC to communicate over
	  the shared memory region to return the ACPI response data. 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_PERIPHERAL_HOST_CMD_PARAM_SIZE
	int "Host I/O peripheral port size for ec host command in npcx series"
	depends on ESPI_NPCX || ESPI_PERIPHERAL_EC_HOST_CMD
	default 256
	help
	  This is the port size used by the Host and EC to communicate over
	  the shared memory region to return the host command parameter data.
	  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.

config ESPI_NPCX_PERIPHERAL_DEBUG_PORT_80_MULTI_BYTE
	bool "Host can write 1/2/4 bytes of Port80 data in a eSPI transaction"
	depends on (SOC_SERIES_NPCX9 || SOC_SERIES_NPCX4) && ESPI_PERIPHERAL_DEBUG_PORT_80
	select RING_BUFFER
	help
	  EC can accept 1/2/4 bytes of Port 80 data written from the Host in an
	  eSPI transaction.

config ESPI_NPCX_PERIPHERAL_DEBUG_PORT_80_RING_BUF_SIZE
	int "Debug Port80 ring buffer size"
	depends on ESPI_NPCX_PERIPHERAL_DEBUG_PORT_80_MULTI_BYTE
	default 256
	help
	  The size of the ring buffer in byte used by the Port80 ISR to store
	  Postcodes from Host.

config ESPI_TAF_NPCX
	bool "Nuvoton NPCX embedded controller (EC) ESPI TAF driver"
	depends on SOC_SERIES_NPCX4
	depends on FLASH
	help
	  This option enables the Intel Enhanced Serial Peripheral Interface
	  Target Attached Flash (eSPI TAF) for NPCX4 family of processors.

choice ESPI_TAF_ACCESS_MODE_CHOICE
	prompt "eSPI TAF Read Access Mode"
	default ESPI_TAF_AUTO_MODE

config ESPI_TAF_AUTO_MODE
	bool "eSPI TAF Automatic Mode"
	help
	  This is the setting to use auto mode for eSPI TAF read.

config ESPI_TAF_MANUAL_MODE
	bool "eSPI TAF Manual Mode"
	help
	  This is the setting to use manual mode for eSPI TAF read.

endchoice

config ESPI_TAF_PR_NUM
	int "Sets of protection region settings"
	default 16
	help
	  This size is display how many group of slave attached flash protection
	  region.

config ESPI_TAF_NPCX_RPMC_SUPPORT
	bool "eSPI TAF RPMC support"
	depends on ESPI_TAF_NPCX
	select FLASH_EX_OP_ENABLED
	help
	  This option enable the handler for eSPI TAF RPMC request.

# The default value 'y' for the existing options if ESPI_NPCX is selected.
if ESPI_NPCX

config ESPI_OOB_CHANNEL
	default  y

config ESPI_PERIPHERAL_8042_KBC
	default y

config ESPI_PERIPHERAL_HOST_IO
	default y

config ESPI_PERIPHERAL_DEBUG_PORT_80
	default y

config ESPI_PERIPHERAL_EC_HOST_CMD
	default y

config ESPI_PERIPHERAL_ACPI_SHM_REGION
	default y

config ESPI_PERIPHERAL_CUSTOM_OPCODE
	default y

config ESPI_NPCX_SUPP_VW_GPIO
	bool "Indicates that the eSPI hardware supports virtual wire GPIOs"
	default y if SOC_SERIES_NPCX9 || SOC_SERIES_NPCX4
	help
	  Selected if NPCX series supports virtual wire GPIOs in eSPI module.

config ESPI_NPCX_CAF_GLOBAL_RESET_WORKAROUND
	bool
	default y if SOC_SERIES_NPCX4 && ESPI_FLASH_CHANNEL
	help
	  Workaround the issue "Global Reset" in the npcx4 SoC errata.

endif #ESPI_NPCX
