#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.
#

# Package: hw/bsp/apollo2_evb

syscfg.defs:
    BSP_APOLLO2:
        description: 'Set to indicate that BSP has the APOLLO2 processor'
        value: 1
    UART_0:
        description: 'Whether to enable UART0'
        value: 1
    UART_0_PIN_TX:
        description: 'TX pin for UART0'
        value: 22
    UART_0_PIN_RX:
        description: 'RX pin for UART0'
        value: 23
    UART_0_PIN_RTS:
        description: 'RTS pin for UART0'
        value: 37
    UART_0_PIN_CTS:
        description: 'CTS pin for UART0'
        value: 38

    SPI_0_MASTER_PIN_SCK:
        description: 'SCK pin for SPI_0_MASTER'
        value:  5
    SPI_0_MASTER_PIN_MOSI:
        description: 'MOSI pin for SPI_0_MASTER'
        value:  7
    SPI_0_MASTER_PIN_MISO:
        description: 'MISO pin for SPI_0_MASTER'
        value:  6

    SPI_1_MASTER_PIN_SCK:
        description: 'SCK pin for SPI_1_MASTER'
        value:  8
    SPI_1_MASTER_PIN_MOSI:
        description: 'MOSI pin for SPI_1_MASTER'
        value:  10
    SPI_1_MASTER_PIN_MISO:
        description: 'MISO pin for SPI_1_MASTER'
        value:  9

    SPI_2_MASTER_PIN_SCK:
        description: 'SCK pin for SPI_2_MASTER'
        value:  0
    SPI_2_MASTER_PIN_MOSI:
        description: 'MOSI pin for SPI_2_MASTER'
        value:  1
    SPI_2_MASTER_PIN_MISO:
        description: 'MISO pin for SPI_2_MASTER'
        value:  2

    SPI_3_MASTER_PIN_SCK:
        description: 'SCK pin for SPI_3_MASTER'
        value:  42
    SPI_3_MASTER_PIN_MOSI:
        description: 'MOSI pin for SPI_3_MASTER'
        value:  38
    SPI_3_MASTER_PIN_MISO:
        description: 'MISO pin for SPI_3_MASTER'
        value:  43

    SPI_4_MASTER_PIN_SCK:
        description: 'SCK pin for SPI_4_MASTER'
        value:  39
    SPI_4_MASTER_PIN_MOSI:
        description: 'MOSI pin for SPI_4_MASTER'
        value:  44
    SPI_4_MASTER_PIN_MISO:
        description: 'MISO pin for SPI_4_MASTER'
        value:  40

    SPI_5_MASTER_PIN_SCK:
        description: 'SCK pin for SPI_5_MASTER'
        value:  48
    SPI_5_MASTER_PIN_MOSI:
        description: 'MOSI pin for SPI_5_MASTER'
        value:  47
    SPI_5_MASTER_PIN_MISO:
        description: 'MISO pin for SPI_5_MASTER'
        value:  49

syscfg.vals:
    CONFIG_FCB_FLASH_AREA: FLASH_AREA_NFFS
    REBOOT_LOG_FLASH_AREA: FLASH_AREA_REBOOT_LOG
    NFFS_FLASH_AREA: FLASH_AREA_NFFS
    COREDUMP_FLASH_AREA: FLASH_AREA_IMAGE_1
