# ARM Generic Interrupt Controller (GIC) configuration

# Copyright (c) 2019 Stephanos Ioannidis <root@stephanos.io>
# SPDX-License-Identifier: Apache-2.0

if CPU_CORTEX

config GIC
	bool

# Selecting these symbols directly is deprecated: the GIC architecture version
# should be specified by adding the appropriate compat (for example arm,gic-v2)
# to the DT.
config GIC_V1
	def_bool DT_HAS_ARM_GIC_V1_ENABLED
	select GIC
	select DEPRECATED if !DT_HAS_ARM_GIC_V1_ENABLED
	help
	  The ARM Generic Interrupt Controller v1 (e.g. PL390) works with the
	  ARM Cortex-family processors.
	  Selecting this symbol directly is deprecated. Please add the arm,gic-v1
	  compatible to the GIC node in your DT and remove the direct selection.

config GIC_V2
	def_bool DT_HAS_ARM_GIC_V2_ENABLED
	select GIC
	select DEPRECATED if !DT_HAS_ARM_GIC_V2_ENABLED
	help
	  The ARM Generic Interrupt Controller v2 (e.g. GIC-400) works with the
	  ARM Cortex-family processors.
	  Selecting this symbol directly is deprecated. Please add the arm,gic-v2
	  compatible to the GIC node in your DT and remove the direct selection.

config GIC_V3
	def_bool DT_HAS_ARM_GIC_V3_ENABLED
	select GIC
	select DEPRECATED if !DT_HAS_ARM_GIC_V3_ENABLED
	help
	  The ARM Generic Interrupt Controller v3 (e.g. GIC-500 and GIC-600)
	  works with the ARM Cortex-family processors.
	  Selecting this symbol directly is deprecated. Please add the arm,gic-v3
	  compatible to the GIC node in your DT and remove the direct selection.

config GIC_VER
	int
	depends on GIC
	default 1 if GIC_V1
	default 2 if GIC_V2
	default 3 if GIC_V3

config GIC_SINGLE_SECURITY_STATE
	bool
	depends on GIC_V3
	help
	  Some ARM Cortex-family processors only supports single security
	  state.

config GIC_V3_RDIST_MATCHING_AFF0_ONLY
	bool
	depends on GIC_V3
	default y if CPU_CORTEX_R52
	help
	  Some platforms only use aff0 to match mpdir and GICR.aff. With this
	  enabled, we find the target redistributor by comparing the aff0 only.

config GIC_V3_ITS
	bool "GIC v3 Interrupt Translation Service"
	depends on GIC_V3
	# ITS generates Non-secure Group 1 LPI interrupts, requiring EL1NS
	select ARMV8_A_NS
	select DYNAMIC_INTERRUPTS
	help
	  Support for the optional Interrupt Translation Service used to translate
	  hardware interrupt from PCIe MSI messages for example. Please note
	  that ITS uses dynamic memory, so HEAP_MEM_POOL_SIZE should be
	  enough to allocate ITS tables (size is probed at runtime).

endif # CPU_CORTEX
