# Copyright 2022, NXP
# Copyright (c) 2023 Google LLC.
# SPDX-License-Identifier: Apache-2.0

config BOARD_INIT_PRIORITY
	int "Board initialization priority"
	default 45
	help
	  Board initialization priority.

DT_ADSP_RESET_MEM := $(dt_nodelabel_path,adsp_reset)
DT_ADSP_DATA_MEM := $(dt_nodelabel_path,adsp_data)
DT_ADSP_TEXT_MEM := $(dt_nodelabel_path,adsp_text)

if BOARD_MIMXRT595_EVK_MIMXRT595S_F1

config RT595_ADSP_STACK_SIZE
	hex "Boot time stack size"
	default 0x1000
	help
	  Stack space is reserved at the end of the RT595_ADSP_DATA_MEM
	  region, starting at RT595_ADSP_DATA_MEM_ADDR - RT595_ADSP_STACK_SIZE

config RT595_ADSP_RESET_MEM_ADDR
	hex
	default $(dt_node_reg_addr_hex,$(DT_ADSP_RESET_MEM))

config RT595_ADSP_RESET_MEM_SIZE
	hex
	default $(dt_node_reg_size_hex,$(DT_ADSP_RESET_MEM))

config RT595_ADSP_DATA_MEM_ADDR
	hex
	default $(dt_node_reg_addr_hex,$(DT_ADSP_DATA_MEM))

config RT595_ADSP_DATA_MEM_SIZE
	hex
	default $(dt_node_reg_size_hex,$(DT_ADSP_DATA_MEM))

config RT595_ADSP_TEXT_MEM_ADDR
	hex
	default $(dt_node_reg_addr_hex,$(DT_ADSP_TEXT_MEM))

config RT595_ADSP_TEXT_MEM_SIZE
	hex
	default $(dt_node_reg_size_hex,$(DT_ADSP_TEXT_MEM))

endif # BOARD_MIMXRT595_EVK_RT595_F1
