# 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"
	help
	  Allows x86 processor to kickoff the ARC slave processor.

config ARC_GDB_ENABLE
	bool "Allows the usage of GDB with the ARC processor."
	depends on ARC_INIT
	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 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 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
