# 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"
	depends on SOC_FAMILY_NPCX
	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.

# 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

endif #ESPI_NPCX
