# 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

config GIC_V1
	bool
	select GIC
	help
	  The ARM Generic Interrupt Controller v1 (e.g. PL390) works with the
	  ARM Cortex-family processors.

config GIC_V2
	bool
	select GIC
	help
	  The ARM Generic Interrupt Controller v2 (e.g. GIC-400) works with the
	  ARM Cortex-family processors.

config GIC_V3
	bool
	select GIC
	help
	  The ARM Generic Interrupt Controller v3 (e.g. GIC-500 and GIC-600)
	  works with the ARM Cortex-family processors.

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.

endif # CPU_CORTEX
