# 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

if DMA_DW

config HEAP_MEM_POOL_SIZE
	default 1024

endif # DMA_DW

if BOOTLOADER_MCUBOOT
config TEXT_SECTION_OFFSET
	default 0x100
endif

if USB
config USB_DW
	default y

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_DW
	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
