#
# Copyright (c) 2014 Wind River Systems, Inc.
# Copyright (c) 2016 Synopsys, Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

if SOC_EM9D

config SOC
	default em9d

config NUM_IRQ_PRIO_LEVELS
	# This processor supports 4 priority levels:
	# 0 for Fast Interrupts (FIRQs) and 1-3 for Regular Interrupts (IRQs).
	# TODO: But regular irq nesting is not implemented --
	# so this must be 2 for now.
	default 2

config NUM_REGULAR_IRQ_PRIO_LEVELS
	# This processor supports 3 Regular Interrupt priority level (1-3).
	# TODO: But regular irq nesting is not implemented -- so use 1.
	default 1

config NUM_IRQS
	# must be > the highest interrupt number used
	default 36

config SYS_CLOCK_HW_CYCLES_PER_SEC
	default 20000000

config HARVARD
	def_bool y

config FLASH_BASE_ADDRESS
	default 0x00000000

config FLASH_SIZE
	default 0
	# em9d has no FLASH so size is 0.

config SRAM_BASE_ADDRESS
	default 0x00000000 if NSIM
	default 0x00000000

config SRAM_SIZE
	default 0 if NSIM
	default 0
	# em9d has no SRAM so size is 0.

config ICCM_BASE_ADDRESS
	default 0x00000000

config ICCM_SIZE
	default 256

config DCCM_BASE_ADDRESS
	default 0x80000000

config DCCM_SIZE
	default 128

if GPIO

config GPIO_DW
	def_bool y

if GPIO_DW

config GPIO_DW_0
	def_bool y

if GPIO_DW_0

config GPIO_DW_0_NAME
	default "GPIO_PORTA"

config GPIO_DW_0_IRQ_PRI
	default 1

endif # GPIO_DW_0

config GPIO_DW_1
	def_bool y

if GPIO_DW_1

config GPIO_DW_1_NAME
	default "GPIO_PORTB"

config GPIO_DW_1_IRQ_PRI
	default 1

endif # GPIO_DW_1

config GPIO_DW_2
	def_bool y

if GPIO_DW_2

config GPIO_DW_2_IRQ_PRI
	default 1

config GPIO_DW_2_NAME
	default "GPIO_PORTC"

endif # GPIO_DW_2

config GPIO_DW_3
	def_bool y

if GPIO_DW_3

config GPIO_DW_3_IRQ_PRI
	default 1

config GPIO_DW_3_NAME
	default "GPIO_PORTD"

endif # GPIO_DW_3

endif # GPIO_DW

endif # GPIO

if I2C

config I2C_CLOCK_SPEED
	default 100

config I2C_DW
	def_bool y

if I2C_DW

config I2C_0
	def_bool y

if I2C_0

config I2C_0_NAME
	default "I2C_0"
config I2C_0_DEFAULT_CFG
	default 0x3
config I2C_0_IRQ_PRI
	default 1

endif # I2C_0

config I2C_1
	def_bool y

if I2C_1

config I2C_1_NAME
	default "I2C_1"
config I2C_1_DEFAULT_CFG
	default 0x3
config I2C_1_IRQ_PRI
	default 1

endif # I2C_1

endif # I2C_DW

endif # I2C

if UART_NS16550

config UART_NS16550_PORT_0
	def_bool n

if UART_NS16550_PORT_0

config UART_NS16550_PORT_0_NAME
	default "UART_0"
config UART_NS16550_PORT_0_IRQ_PRI
	default 1
config UART_NS16550_PORT_0_BAUD_RATE
	default 115200
config UART_NS16550_PORT_0_OPTIONS
	default 0

endif # UART_NS16550_PORT_0

config UART_NS16550_PORT_1
	def_bool y

if UART_NS16550_PORT_1

config UART_NS16550_PORT_1_NAME
	default "UART_1"
config UART_NS16550_PORT_1_IRQ_PRI
	default 1
config UART_NS16550_PORT_1_BAUD_RATE
	default 115200
config UART_NS16550_PORT_1_OPTIONS
	default 0

endif # UART_NS16550_PORT_1

endif # UART_NS16550

if UART_CONSOLE

config UART_CONSOLE_ON_DEV_NAME
	default "UART_1"

endif

if SPI

config SPI_DW
	def_bool y

if SPI_DW

config SPI_DW_CLOCK_GATE
	def_bool n

config SPI_DW_FIFO_DEPTH
	default 32

config SPI_DW_ARC_AUX_REGS
	def_bool n

config SPI_0
	def_bool y

if SPI_0

config SPI_0_IRQ_PRI
	default 0

endif # SPI_0

config SPI_1
	def_bool y

if SPI_1

config SPI_1_IRQ_PRI
	default 0

endif # SPI_1

endif # SPI_DW

endif # SPI

endif #SOC_EM9D
