# Digital Signal Processing (DSP) configuration options

# Copyright (c) 2022 Synopsys
# SPDX-License-Identifier: Apache-2.0

config ARC_HAS_DSP
	bool
	help
	  This option is enabled when the ARC CPU has hardware DSP unit.

menu "ARC DSP Options"
depends on ARC_HAS_DSP

config ARC_DSP
	bool "digital signal processing (DSP)"
	help
	  This option enables DSP and DSP instructions.

config ARC_DSP_TURNED_OFF
	bool "Turn off DSP if it presents"
	depends on !ARC_DSP
	help
	  This option disables DSP block via resetting DSP_CRTL register.

config ARC_DSP_SHARING
	bool "DSP register sharing"
	depends on ARC_DSP && MULTITHREADING
	select ARC_HAS_ACCL_REGS
	help
	  This option enables preservation of the hardware DSP registers
	  across context switches to allow multiple threads to perform concurrent
	  DSP operations.

config ARC_DSP_BFLY_SHARING
	bool "ARC complex DSP operation"
	depends on ARC_DSP && CPU_ARCEM
	help
	  This option is to enable Zephyr to store and restore DSP_BFLY0
	  and FFT_CTRL registers during context switch. This option is
	  only required when butterfly instructions are used in
	  multi-thread.

config ARC_XY_ENABLE
	bool "ARC address generation unit registers"
	help
	  Processors with XY memory and AGU registers can configure this
	  option to accelerate DSP instrctions.

config ARC_AGU_SHARING
	bool "ARC address generation unit register sharing"
	depends on ARC_XY_ENABLE && MULTITHREADING
	default y if ARC_DSP_SHARING
	help
	  This option enables preservation of the hardware AGU registers
	  across context switches to allow multiple threads to perform concurrent
	  operations on XY memory. Save and restore small size AGU registers is
	  set as default, including 4 address pointers regs, 2 address offset regs
	  and 4 modifiers regs.

config ARC_AGU_MEDIUM
	bool "ARC AGU medium size register"
	depends on ARC_AGU_SHARING
	help
	  Save and restore medium AGU registers, including 8 address pointers regs,
	  4 address offset regs and 12 modifiers regs.

config ARC_AGU_LARGE
	bool "ARC AGU large size register"
	depends on ARC_AGU_SHARING
	select ARC_AGU_MEDIUM
	help
	  Save and restore large AGU registers, including 12 address pointers regs,
	  8 address offset regs and 24 modifiers regs.

endmenu
