# Copyright (c) 2025 Espressif Systems (Shanghai) Co., Ltd.
# SPDX-License-Identifier: Apache-2.0

menu "Ultra Low Power (ULP) Coprocessor"

config ULP_COPROC_ENABLED
	bool "Ultra Low Power (ULP) Coprocessor"
	default y if SOC_ESP32C6_LPCORE
	select SOC_LATE_INIT_HOOK if SOC_ESP32C6_HPCORE
	help
	  Enable this feature if you plan to use the ULP Coprocessor.
	  Once this option is enabled, further ULP co-processor configuration will appear in the menu.

choice ULP_COPROC_TYPE
	prompt "ULP Coprocessor type"
	depends on ULP_COPROC_ENABLED
	default ULP_COPROC_TYPE_LP_CORE if SOC_SERIES_ESP32C6
	help
	  Choose the ULP Coprocessor type: ULP FSM (Finite State Machine) or ULP RISC-V.

config ULP_COPROC_TYPE_FSM
	bool "ULP FSM (Finite State Machine)"
	depends on SOC_SERIES_ESP32 || SOC_SERIES_ESP32S2 || SOC_SERIES_ESP32S3

config ULP_COPROC_TYPE_RISCV
	bool "ULP RISC-V"
	depends on SOC_SERIES_ESP32S2 || SOC_SERIES_ESP32S3

config ULP_COPROC_TYPE_LP_CORE
	bool "LP core RISC-V"
	depends on SOC_SERIES_ESP32C6
endchoice

menu "ULP RISC-V Settings"
	depends on ULP_COPROC_TYPE_RISCV

config ULP_RISCV_INTERRUPT_ENABLE
	bool "ULP RISC-V interrupts"
	help
	  Turn on this setting to enabled interrupts on the ULP RISC-V core.

endmenu

menu "ULP Debugging Options"

config ULP_PANIC_OUTPUT_ENABLE
	bool "Panic handler outputs to LP UART"
	depends on ULP_COPROC_TYPE_LP_CORE
	help
	  Set this option to enable panic handler functionality. If this option is
	  enabled then the LP Core will output a panic dump over LP UART,
	  similar to what the main core does. Output depends on LP UART already being
	  initialized and configured.
	  Disabling this option will reduce the LP core binary size by not
	  linking in panic handler functionality.

config ULP_HP_UART_CONSOLE_PRINT
	bool "Route lp_core_printf to the console HP-UART"
	depends on ULP_COPROC_TYPE_LP_CORE
	help
	  Set this option to route lp_core_printf to the console HP-UART.
	  This allows you to easily view print outputs from the LP core, without
	  having to connect to the LP-UART. This option comes with the following
	  limitations:

	  1. There is no mutual exclusion between the HP-Core and the LP-Core accessing
	  the HP-UART, which means that if both cores are logging heavily the output
	  strings might get mangled together.
	  2. The HP-UART can only work while the HP-Core is running, which means that
	  if the HP-Core is in deep sleep, the LP-Core will not be able to print to the
	  console HP-UART.

	  Due to these limitations it is only recommended to use this option for easy debugging.
	  For more serious use-cases you should use the LP-UART.

config ULP_NORESET_UNDER_DEBUG
	bool "Avoid resetting LP core when debugger is attached"
	depends on ULP_COPROC_TYPE_LP_CORE
	default y
	help
	  Enable this feature to avoid resetting LP core in sleep mode when debugger is attached,
	  otherwise configured HW breakpoints and dcsr.ebreak* bits will be missed.
	  This is a workaround until it will be fixed in HW.

endmenu

endmenu  # Ultra Low Power (ULP) Coprocessor
