//
// Copyright (c) 2023 Google LLC
//
// 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
//
//     https://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.

// ***************************************************
// SMC
// ***************************************************

// TODO(mattharvey): Switch cpu1 to IbexRiscV32. Currently that causes S-mode
// asynchronous interrupts to overshoot the seL4 trap_entry because, with Ibex,
// Renode "corrects" STVEC:
//
//     [WARNING] cpu1: STVEC value written to CSR corrected from 0xff803000
//     to 0xff803001 because of the selected interrupt mode and privilege
//     architecture
//
// For example, an S-mode external interrupt (9) will then jump immediately to
// 0xff803024, without having reloaded sp from sscratch, causing a page fault
// on the very next instruction.
//
// If Ibex cannot have a Vectored mtvec and a Direct stvec simulaneously, one
// of machine_isr.c (boot ROM) or seL4 stvec setting will have to change to
// match the mode of the other. machine_isr.c is probably the better choice
// because it has been Shodan-specific since its initial revision.
cpu1: CPU.RiscV32 @ sysbus
    hartId: 1
    cpuType: "rv32imac_zicsr_zifencei"
    timeProvider: timer_smc
    allowUnalignedAccesses: true

// TODO(b/197745020) - This currently has to be 64 megs until we get the sel4 kernel + rust components pared down
// Remember to update hart_is_mc in rom_crt.S if this changes.
ram_smc: Memory.MappedMemory @ sysbus 0x28000000
    size: 0x04000000

// SMC Specific Peripherals start at 0x50000000

// Control block for the SMC, lets us pause/restart the core at an arbitrary PC.
smc_control: CPU.SmcRiscV32_ControlBlock @ sysbus 0x54020000
    cpu: cpu1
    pc: 0x28000000

// SMC_PLIC
smc_plic: IRQControllers.PlatformLevelInterruptController @ sysbus 0x60000000 // TOP_MATCHA_RV_PLIC_SMC_BASE_ADDR @ top_matcha.h
    // Numbers on the left (0 ->) index PLIC GetGPIOs.
    //
    // Numbers on the right reference bits in the target MIP.
    // Bit 11 corresponds MEIP and bit 9 to SEIP.
    0 -> cpu1@11
    1 -> cpu1@9
    // Must be kTopMatchaPlicIrqIdLastSmc + 1 from top_matcha.h
    numberOfSources: 43
    numberOfContexts: 2  // MEIP and SEIP

uart5: UART.OpenTitan_UART @ sysbus 0x50000000
    TxWatermarkIRQ -> smc_plic@1
    RxWatermarkIRQ -> smc_plic@2
    TxEmptyIRQ -> smc_plic@3
    RxOverflowIRQ -> smc_plic@4
    RxFrameErrorIRQ -> smc_plic@5
    RxBreakErrorIRQ -> smc_plic@6
    RxTimeoutIRQ -> smc_plic@7
    RxParityErrorIRQ -> smc_plic@8

// RV_TIMER_SMC, timer for Cantrip kernel.
// TODO(hcindyl): Use upstream OpenTitan_Timer model
timer_smc: Timers.OpenTitan_Timer@ sysbus 0x50010000
    frequency: 24000000
    IRQ -> cpu1@5

// Timer for Cantrip software timer service.
// TODO(hcindyl): Use upstream OpenTitan_Timer model
timer_smc_sw: Timers.OpenTitan_Timer@ sysbus 0x50030000
    frequency: 24000000
    IRQ -> smc_plic@31

// I2C host connection to camera
cam_i2c: I2C.OpenTitan_I2C @ sysbus 0x54040000

// I2C device connection to external host
ext_host_i2c: I2C.OpenTitan_I2C @ sysbus 0x54070000

// Tag memory for debugging
sysbus:
    init:
        Tag <0x50010000 0x1000> "OPENTITAN_EARLGREY_DEV_RV_TIMER_SMC"
        Tag <0x50030000 0x1000> "OPENTITAN_EARLGREY_DEV_RV_TIMER_SMC_SW"
