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

if SOC_SERIES_ESP32

config MINIMAL_LIBC_OPTIMIZE_STRING_FOR_SIZE
	default n

config SYS_CLOCK_HW_CYCLES_PER_SEC
	default $(dt_node_int_prop_int,/cpus/cpu@0,clock-frequency)

config XTENSA_CCOUNT_HZ
	default SYS_CLOCK_HW_CYCLES_PER_SEC

config ESPTOOLPY_FLASHFREQ_80M
	default y

config FLASH_SIZE
	default $(dt_node_reg_size_int,/soc/flash-controller@3ff42000/flash@0,0)

config FLASH_BASE_ADDRESS
	default $(dt_node_reg_addr_hex,/soc/flash-controller@3ff42000/flash@0)

if SMP

config SCHED_IPI_SUPPORTED
	default y

config SCHED_CPU_MASK
	default y if SCHED_DUMB

config MP_MAX_NUM_CPUS
	default 2

endif # SMP config

if GDBSTUB

# ESP32 GDB expects 420 bytes G-packet.
# So double for hexadecimal digits.
config GDBSTUB_BUF_SZ
	default 840 if GDBSTUB

endif # GDBSTUB config

endif # SOC_SERIES_ESP32 config
