# Kconfig - Quark SE configuration options

#
# Copyright (c) 2016 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

if X86 && SOC_QUARK_SE_C1000

config EOI_FORWARDING_BUG
	bool
	default y
	help
	Quark SE LOAPIC has issues with forwarding EOI to the IOAPIC for level
	triggered interrupts, this is a SW workaround.

config SS_RESET_VECTOR
	hex "Sensor Subsystem Reset Vector"
	default 0x40000000
	help
	Sensor subsystem reset vector. This value is needed to init the ARC
	system on the SoC.

config ARC_INIT
	bool "Quark SE ARC Kickoff"
	default n
	help
	Allows x86 processor to kickoff the ARC slave processor.

config SYS_LOG_ARC_INIT_LEVEL
	int
	prompt "Quark SE Sensor Subsystem log level"
	depends on SYS_LOG
	default 0
	help
	Sets log level for the boot initialization and boot process of the sensor
	sub-system.

	Levels are:

	- 0 OFF, do not write

	- 1 ERROR, only write SYS_LOG_ERR

	- 2 WARNING, write SYS_LOG_WRN in addition to previous level

	- 3 INFO, write SYS_LOG_INF in addition to previous levels

	- 4 DEBUG, write SYS_LOG_DBG in addition to previous levels

config ARC_GDB_ENABLE
	bool "Allows the usage of GDB with the ARC processor."
	depends on ARC_INIT
	default n
	help
	This option will stop the master processor from boot-strapping
	the ARC slave processor. This will allow GDB to halt and
	engage the ARC processor to proceed step by step execution.

if IPM
config QUARK_SE_IPM_IRQ_PRI
	int "IPM interrupt priority"
	default 2
	help
	Priority level for interrupts coming in from the inter-processor
	mailboxes.

if IPM_CONSOLE_RECEIVER
config QUARK_SE_IPM_CONSOLE_RING_BUF_SIZE32
	int "IPM Console Ring Buffer Size"
	default 256
	help
	Size of the buffer for the console receiver, for incoming
	console messages from the ARC side. Must be a power of 2.
endif
endif

config BSP_SHARED_RESTORE_INFO_RAM_ADDR
	hex "Address of the restore information in RAM shared with the QMSI Bootloader"
	default 0xA8013FDC
	help
	Address of the memory shared between the BSP and the Bootloader in order
	to store restore information.

config BSP_SHARED_RESTORE_INFO_SIZE
	hex "Size of the restore information in RAM shared with the QMSI Bootloader"
	default 0x4
	help
	Size of the memory shared between the BSP and the Bootloader in order
	to store restore information.

config BSP_SHARED_GDT_RAM_ADDR
	hex "Address of the GDT in RAM shared with the QMSI Bootloader"
	default 0xA8013FE0
	help
	Address of the memory shared between the BSP and the Bootloader in order
	to store the GDT.

config BSP_SHARED_GDT_RAM_SIZE
	hex "Size of the GDT in RAM shared with the QMSI Bootloader"
	default 0x20
	help
	Size of the memory shared between the BSP and the Bootloader in order
	to store the GDT.

endif #SOC_QUARK_SE_C1000_X86
