# 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"

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 acknowledge 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 acknowledge of 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.

endif # ESPI
