# 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 1ST_LEVEL_INTERRUPT_BITS
	int "Total number of first level interrupt bits"
	range 1 32
	default 8
	help
	  The number of bits to use of the 32 bit interrupt mask for first
	  tier interrupts.

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.

config 2ND_LEVEL_INTERRUPT_BITS
	int "Total number of second level interrupt bits"
	range 0 31
	default 8
	help
	  The number of bits to use of the 32 bit interrupt mask for second
	  tier 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.

config 3RD_LEVEL_INTERRUPT_BITS
	int "Total number of third level interrupt bits"
	range 0 30
	default 8
	help
	  The number of bits to use of the 32 bit interrupt mask for third
	  tier 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"
