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

if BOARD_INTEL_S1000_CRB

config BOARD
	default "intel_s1000_crb"

config CAVS_ICTL_0_OFFSET
	default 6
config CAVS_ICTL_1_OFFSET
	default 10
config CAVS_ICTL_2_OFFSET
	default 13
config CAVS_ICTL_3_OFFSET
	default 16

config DW_ICTL_OFFSET
	default 7

config 2ND_LVL_INTR_00_OFFSET
	default CAVS_ICTL_0_OFFSET
config 2ND_LVL_INTR_01_OFFSET
	default CAVS_ICTL_1_OFFSET
config 2ND_LVL_INTR_02_OFFSET
	default CAVS_ICTL_2_OFFSET
config 2ND_LVL_INTR_03_OFFSET
	default CAVS_ICTL_3_OFFSET
config 3RD_LVL_INTR_00_OFFSET
	default DW_ICTL_OFFSET

config MAX_IRQ_PER_AGGREGATOR
	default 32
config NUM_2ND_LEVEL_AGGREGATORS
	default 4
config NUM_3RD_LEVEL_AGGREGATORS
	default 1
config 2ND_LVL_ISR_TBL_OFFSET
	default 21
config 3RD_LVL_ISR_TBL_OFFSET
	default 149

config CAVS_ISR_TBL_OFFSET
	default 2ND_LVL_ISR_TBL_OFFSET
config DW_ISR_TBL_OFFSET
	default 3RD_LVL_ISR_TBL_OFFSET

config I2C_0_DEFAULT_CFG
	default 0x12
if DMA_CAVS

config HEAP_MEM_POOL_SIZE
	default 1024

endif # DMA_CAVS

if BOOTLOADER_MCUBOOT
config TEXT_SECTION_OFFSET
	default 0x100
endif

if USB
config USB_DW
	default y

config USB_DW_IRQ_PRI
	default 3

config USB_DW_USB_2_0
	default y

if USB_DEVICE_HID
config USB_REQUEST_BUFFER_SIZE
	default 128
endif

if USB_DFU_CLASS
config USB_REQUEST_BUFFER_SIZE
	default 4096
endif

config USB_DEVICE_STACK
	default y

config USB_DEVICE_VID
	default "0x8087"

config USB_DEVICE_PID
	default "0x0B1A"

config USB_DEVICE_MANUFACTURER
	default "Intel(R) Corporation"

config USB_DEVICE_PRODUCT
	default "Sue Creek (S1000) ASIC"

endif # USB

if UART_NS16550

config UART_NS16550_PORT_0
	default y

if UART_NS16550_PORT_0

config UART_NS16550_PORT_0_OPTIONS
	default 0
config UART_INTERRUPT_DRIVEN
	default y

endif # UART_NS16550_PORT_0

endif # UART_NS16550

if I2C

config I2C_DW
	default y
config I2C_0
	default y

endif

if DMA

config DMA_CAVS
	default y

endif

if I2S
config I2S_CAVS
	default y
endif

if AUDIO
config AUDIO_CODEC
	default y

config AUDIO_TLV320DAC
	default y

config AUDIO_DMIC
	default y

config AUDIO_INTEL_DMIC
	default y

endif


if NEURAL_NET_ACCEL

config INTEL_GNA
	default y
endif

if GPIO

config GPIO_DW
	default y

config GPIO_DW_0
	default y

endif

if FLASH

config SPI
	default y

config SPI_NOR
	default y

config FLASH_HAS_PAGE_LAYOUT
	default y

config FLASH_PAGE_LAYOUT
	default y

endif

if SPI

config SPI_DW
	default y

config SPI_0
	default y

endif

if PINMUX

config PINMUX_INTEL_S1000
	default y

endif

endif # BOARD_INTEL_S1000_CRB
