# Digital Signal Processing (DSP) configuration options

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

menu "ARC DSP Options"
depends on CPU_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 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 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
