Software APIs
device_sim_qemu.c
Go to the documentation of this file.
1// Copyright lowRISC contributors (OpenTitan project).
2// Licensed under the Apache License, Version 2.0, see LICENSE for details.
3// SPDX-License-Identifier: Apache-2.0
4
5#include <stdbool.h>
6
7#include "hw/top/dt/rv_core_ibex.h" // Generated
10
11#include "hw/top/rv_core_ibex_regs.h" // Generated
12
13// Use the first dt_rv_core_ibex_t enum, i.e. the first Ibex core instance.
14static const dt_rv_core_ibex_t kRvCoreIbexDt = (dt_rv_core_ibex_t)0;
15static_assert(kDtRvCoreIbexCount == 1, "Only single core tops are supported");
16
17static inline uintptr_t rv_core_ibex_base(void) {
18 return (uintptr_t)dt_rv_core_ibex_primary_reg_block(kRvCoreIbexDt);
19}
20
21/**
22 * @file
23 * @brief Device-specific symbol definitions for the QEMU emulation.
24 */
25
27
28const uint64_t kClockFreqCpuMhz = 24;
29
30const uint64_t kClockFreqCpuHz = kClockFreqCpuMhz * 1000 * 1000;
31
32uint64_t to_cpu_cycles(uint64_t usec) { return usec * kClockFreqCpuMhz; }
33
34const uint64_t kClockFreqHiSpeedPeripheralHz = 24 * 1000 * 1000; // 24MHz
35
36const uint64_t kClockFreqPeripheralHz = 6 * 1000 * 1000; // 6MHz
37
38const uint64_t kClockFreqUsbHz = 48 * 1000 * 1000; // 48MHz
39
40const uint64_t kClockFreqAonHz = 250 * 1000; // 250kHz
41
42const uint64_t kUartBaudrate = 115200;
43
44const uint32_t kUartNCOValue =
45 CALCULATE_UART_NCO(kUartBaudrate, kClockFreqPeripheralHz);
46
47const uint32_t kUartBaud115K =
48 CALCULATE_UART_NCO(115200, kClockFreqPeripheralHz);
49const uint32_t kUartBaud230K =
50 CALCULATE_UART_NCO(115200 * 2, kClockFreqPeripheralHz);
51const uint32_t kUartBaud460K =
52 CALCULATE_UART_NCO(115200 * 4, kClockFreqPeripheralHz);
53const uint32_t kUartBaud921K =
54 CALCULATE_UART_NCO(115200 * 8, kClockFreqPeripheralHz);
55const uint32_t kUartBaud1M33 =
56 CALCULATE_UART_NCO(1333333, kClockFreqPeripheralHz);
57const uint32_t kUartBaud1M50 =
58 CALCULATE_UART_NCO(1500000, kClockFreqPeripheralHz);
59
60const uint32_t kAstCheckPollCpuCycles =
62
64 return rv_core_ibex_base() + RV_CORE_IBEX_DV_SIM_WINDOW_REG_OFFSET;
65}
66
67uintptr_t device_log_bypass_uart_address(void) { return 0; }