# eSPI configuration options

# Copyright (c) 2019 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menuconfig ESPI
	bool "Enhanced Serial Peripheral Interface (eSPI) bus drivers"
	help
	  Enable ESPI Driver.

if ESPI

source "drivers/espi/Kconfig.xec"

source "drivers/espi/Kconfig.npcx"

source "drivers/espi/Kconfig.espi_emul"

source "drivers/espi/Kconfig.it8xxx2"

module = ESPI
module-str = espi
source "subsys/logging/Kconfig.template.log_config"

config ESPI_TARGET
	bool "ESPI target driver"
	default y
	help
	  Enables eSPI driver in target mode.

config ESPI_INIT_PRIORITY
	int "ESPI Controller driver initialization priority"
	default 3
	help
	  Driver initialization priority for eSPI driver.

config ESPI_PERIPHERAL_CHANNEL
	bool "eSPI peripheral channel"
	default y
	help
	  eSPI Controller supports peripheral channel.

config ESPI_VWIRE_CHANNEL
	bool "eSPI virtual wire channel"
	default y
	help
	  eSPI Controller supports virtual wires channel.

config ESPI_VWIRE_VALID_BIT_CHECK
	bool "eSPI virtual wire valid bit check"
	default y
	depends on ESPI_VWIRE_CHANNEL
	help
	  Enable the checking of the eSPI virtual wire valid bit. If this
	  configuration is not set, treat the new values as the previously
	  retained valid values and return the received virtual wire level.

config ESPI_AUTOMATIC_WARNING_ACKNOWLEDGE
	bool "Automatic acknowledge for eSPI HOST warnings"
	default y
	depends on ESPI_VWIRE_CHANNEL
	depends on ESPI_TARGET
	help
	  Enable automatic acknowledgment from eSPI target towards eSPI controller
	  whenever it receives suspend or reset warning.
	  If this is disabled, it means the app wants to be give the opportunity
	  to prepare for either HOST suspend or reset.

config ESPI_AUTOMATIC_BOOT_DONE_ACKNOWLEDGE
	bool "Automatic acknowledge target boot status"
	default y
	depends on ESPI_VWIRE_CHANNEL
	depends on ESPI_TARGET
	help
	  Enable automatic acknowledgment from target basic configuration been
	  completed by sending a virtual wire message to the eSPI master.
	  This depends on SPI boot configuration. It could be either very
	  early in the flow after the VW channel is configured. Or it could be
	  until flash channel is configured.

config ESPI_OOB_CHANNEL
	bool "eSPI Out-of-band channel"
	help
	  eSPI Controller supports OOB channel.

config ESPI_FLASH_CHANNEL
	bool "ESPI flash channel"
	help
	  eSPI Controller supports flash channel.

if ESPI_PERIPHERAL_CHANNEL

config ESPI_PERIPHERAL_UART
	bool "UART peripheral"
	help
	  Enables UART over eSPI peripheral channel.

config ESPI_PERIPHERAL_8042_KBC
	bool "8042 kbc peripheral"
	help
	  Enables 8042 keyboard controller over eSPI peripheral channel.

config ESPI_PERIPHERAL_HOST_IO
	bool "Host I/O peripheral"
	help
	  Enables ACPI Host I/O over eSPI peripheral channel.

config ESPI_PERIPHERAL_HOST_IO_PVT
	bool "Host I/O peripheral Private Channel"
	help
	  Enables ACPI Host I/O over eSPI peripheral channel for private channel.

config ESPI_PERIPHERAL_HOST_IO_PVT_PORT_NUM
	hex "Host I/O peripheral Private Channel"
	depends on ESPI_PERIPHERAL_HOST_IO_PVT
	default 0x06A00000
	help
	  This is the port number used by the Host and EC to communicate over
	  the private channel. Please ensure the Host code is configured to use
	  the same port. Also, ensure the port number selected doesn't clash
	  with the existing ports (like 80, 92, 62 etc).

config ESPI_PERIPHERAL_DEBUG_PORT_80
	bool "Debug Port 80 peripheral"
	help
	  Enables debug Port 80 over eSPI peripheral channel.

config ESPI_PERIPHERAL_EC_HOST_CMD
	bool "Host peripheral device support EC host command subsystem"
	help
	  Enables Embedded Controller (EC) host command subsystem via eSPI
	  peripheral channel.

config ESPI_PERIPHERAL_ACPI_SHM_REGION
	bool "Host peripheral device support shared memory region"
	help
	  Enables shared memory region over eSPI peripheral channel to access
	  the ACPI response data.

config ESPI_PERIPHERAL_ACPI_SHM_REGION_PORT_NUM
	hex "Host I/O peripheral port number for shared memory region"
	depends on ESPI_PERIPHERAL_ACPI_SHM_REGION
	default 0x0900
	help
	  This is the port number used by the Host and EC to communicate over
	  the shared memory region to access the ACPI response data. Please
	  ensure the Host code is configured to use for accessing ACPI response
	  data. Also, ensure the port number selected doesn't clash with the
	  existing ports.

config ESPI_PERIPHERAL_CUSTOM_OPCODE
	bool "Host peripheral device support customized opcode"
	help
	  Enables opcode is customized for certain platforms such as Chromebook
	  and so on over eSPI peripheral channel.

config ESPI_PERIPHERAL_HOST_CMD_DATA_PORT_NUM
	hex "Host I/O peripheral port number for ec host command data"
	depends on ESPI_PERIPHERAL_EC_HOST_CMD
	default 0x0200
	help
	  This is the port number used by the Host and EC to communicate over
	  the eSPI peripheral channel to send EC host command data and its
	  result. Please ensure the Host code is configured to use for accessing
	  host command data and result. Also, ensure the port number selected
	  doesn't clash with the existing ports.

config ESPI_PERIPHERAL_HOST_CMD_PARAM_PORT_NUM
	hex "Host I/O peripheral port number for ec host command parameters"
	depends on ESPI_PERIPHERAL_EC_HOST_CMD
	default 0x0800
	help
	  This is the port number used by the Host and EC to communicate over
	  the eSPI peripheral channel to access the host command request and
	  response data. Please ensure the Host code is configured to use for
	  accessing these package data. Also, ensure the port number selected
	  doesn't clash with the existing ports.

endif # ESPI_PERIPHERAL_CHANNEL

config ESPI_OOB_CHANNEL_RX_ASYNC
	bool "OOB host-initiated traffic handling"
	depends on ESPI_OOB_CHANNEL
	help
	  Enables asynchronous handling for host-initiated OOB traffic.
	  Otherwise OOB traffic is assumed to be always client-initiated.

config ESPI_TAF
	bool "ESPI TAF driver"
	depends on ESPI_FLASH_CHANNEL
	help
	  Enable Target Attached Flash eSPI driver. TAF depends upon ESPI driver
	  and flash channel.

config ESPI_TAF_INIT_PRIORITY
	int "ESPI TAF driver initialization priority"
	depends on ESPI_TAF
	default 4
	help
	  Driver initialization priority for eSPI TAF driver. TAF driver must
	  initialize after the ESPI driver.

endif # ESPI
