drivers: interrupt_controller: Refactor GIC configurations

The current GIC configuration scheme is designed to support only one
specific type and version of GIC (i.e. GIC-400 that implements the
GICv2 interface).

This commit adds a set of GIC version configuration symbols that can
be selected by the SoC configuration to specify which version of GIC
interface is implemented in the SoC.

Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
diff --git a/drivers/interrupt_controller/Kconfig b/drivers/interrupt_controller/Kconfig
index eae6f63..b07c68f 100644
--- a/drivers/interrupt_controller/Kconfig
+++ b/drivers/interrupt_controller/Kconfig
@@ -39,13 +39,6 @@
 	help
 	  IRQ implementation for LiteX VexRiscv
 
-config GIC
-	bool "ARM Generic Interrupt Controller (GIC)"
-	depends on CPU_CORTEX_R
-	help
-	  The ARM Generic Interrupt Controller works with Cortex-A and
-	  Cortex-R processors.
-
 source "drivers/interrupt_controller/Kconfig.multilevel"
 
 source "drivers/interrupt_controller/Kconfig.loapic"
@@ -60,4 +53,6 @@
 
 source "drivers/interrupt_controller/Kconfig.sam0"
 
+source "drivers/interrupt_controller/Kconfig.gic"
+
 endmenu
diff --git a/drivers/interrupt_controller/Kconfig.gic b/drivers/interrupt_controller/Kconfig.gic
new file mode 100644
index 0000000..bff602d
--- /dev/null
+++ b/drivers/interrupt_controller/Kconfig.gic
@@ -0,0 +1,39 @@
+# 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
+
+endif # CPU_CORTEX
diff --git a/soc/arm/xilinx_zynqmp/Kconfig.soc b/soc/arm/xilinx_zynqmp/Kconfig.soc
index cb0a41a..9ce2180 100644
--- a/soc/arm/xilinx_zynqmp/Kconfig.soc
+++ b/soc/arm/xilinx_zynqmp/Kconfig.soc
@@ -4,6 +4,6 @@
 config SOC_XILINX_ZYNQMP
 	bool "Xilinx ZynqMP"
 	select CPU_CORTEX_R5
-	select GIC
+	select GIC_V1
 	select MULTI_LEVEL_INTERRUPTS
 	select 2ND_LEVEL_INTERRUPTS