# Multilevel interrupt configuration

# Copyright (c) 2017 Intel Corporation
# Copyright (c) 2018 Foundries.io
# SPDX-License-Identifier: Apache-2.0

config MULTI_LEVEL_INTERRUPTS
	bool "Multi-level interrupt support"
	depends on GEN_SW_ISR_TABLE
	help
	  Multiple levels of interrupts are normally used to increase the
	  number of addressable interrupts in a system. For example, if two
	  levels are used, a second level interrupt aggregator would combine
	  all interrupts routed to it into one IRQ line in the first level
	  interrupt controller. If three levels are used, a third level
	  aggregator combines its input interrupts into one IRQ line at the
	  second level. The number of interrupt levels is usually determined
	  by the hardware. (The term "aggregator" here means "interrupt
	  controller".)

config MAX_IRQ_PER_AGGREGATOR
	int "Max IRQs per interrupt aggregator"
	default 0
	depends on MULTI_LEVEL_INTERRUPTS
	help
	  The maximum number of interrupt inputs to any aggregator in the
	  system.

config 2ND_LEVEL_INTERRUPTS
	bool "Second-level interrupt support"
	depends on MULTI_LEVEL_INTERRUPTS
	help
	  Second level interrupts are used to increase the number of
	  addressable interrupts in a system.

config 2ND_LVL_ISR_TBL_OFFSET
	int "Offset in _sw_isr_table for level 2 interrupts"
	default 0
	depends on 2ND_LEVEL_INTERRUPTS
	help
	  This is the offset in _sw_isr_table, the generated ISR handler table,
	  where storage for 2nd level interrupt ISRs begins. This is
	  typically allocated after ISRs for level 1 interrupts.

config NUM_2ND_LEVEL_AGGREGATORS
	int "Total number of second level interrupt aggregators"
	range 1 8
	default 1
	depends on 2ND_LEVEL_INTERRUPTS
	help
	  The number of level 2 interrupt aggregators to support. Each
	  aggregator can manage at most MAX_IRQ_PER_AGGREGATOR level 2
	  interrupts.

prev-level-num = 1
cur-level-num = 2
cur-level = 2ND
aggregator = 0
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 1
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 2
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 3
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 4
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 5
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 6
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 7
rsource "Kconfig.multilevel.aggregator_template"

config 3RD_LEVEL_INTERRUPTS
	bool "Third-level interrupt support"
	depends on 2ND_LEVEL_INTERRUPTS
	help
	  Third level interrupts are used to increase the number of
	  addressable interrupts in a system.

config NUM_3RD_LEVEL_AGGREGATORS
	int "Total number of third level interrupt aggregators"
	range 1 8
	default 1
	depends on 3RD_LEVEL_INTERRUPTS
	help
	  The number of level 3 interrupt aggregators to support. Each
	  aggregator can manage at most MAX_IRQ_PER_AGGREGATOR level 3
	  interrupts.

config 3RD_LVL_ISR_TBL_OFFSET
	int "Offset in _sw_isr_table for level 3 interrupts"
	default 0
	depends on 3RD_LEVEL_INTERRUPTS
	help
	  This is the offset in _sw_isr_table, the generated ISR handler table,
	  where storage for 3rd level interrupt ISRs begins. This is
	  typically allocated after ISRs for level 2 interrupts.

prev-level-num = 2
cur-level-num = 3
cur-level = 3RD
aggregator = 0
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 1
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 2
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 3
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 4
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 5
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 6
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 7
rsource "Kconfig.multilevel.aggregator_template"
