# eSPI configuration options

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

menuconfig ESPI
	bool "ESPI Driver"
	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_SLAVE
	bool "ESPI slave driver"
	default y
	help
	  Enables eSPI driver in slave 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_AUTOMATIC_WARNING_ACKNOWLEDGE
	bool "Automatic acknowledge for eSPI HOST warnings"
	default y
	depends on ESPI_VWIRE_CHANNEL
	depends on ESPI_SLAVE
	help
	  Enable automatic acknowledgment from eSPI slave towards eSPI host
	  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 slave boot status"
	default y
	depends on ESPI_VWIRE_CHANNEL
	depends on ESPI_SLAVE
	help
	  Enable automatic acknowledgment from slave 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_SAF
	bool "ESPI SAF driver"
	depends on ESPI_FLASH_CHANNEL
	help
	  Enable Slave Attached Flash eSPI driver. SAF depends upon ESPI driver
	  and flash channel.

config ESPI_SAF_INIT_PRIORITY
	int "ESPI SAF driver initialization priority"
	depends on ESPI_SAF
	default 4
	help
	  Driver initialization priority for eSPI SAF driver. SAF driver must
	  initialize after the ESPI driver.

endif # ESPI
