xref: /openbmc/qemu/include/hw/riscv/opentitan.h (revision 336d354b)
1 /*
2  * QEMU RISC-V Board Compatible with OpenTitan FPGA platform
3  *
4  * Copyright (c) 2020 Western Digital
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2 or later, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License along with
16  * this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18 
19 #ifndef HW_OPENTITAN_H
20 #define HW_OPENTITAN_H
21 
22 #include "hw/riscv/riscv_hart.h"
23 #include "hw/intc/sifive_plic.h"
24 #include "hw/char/ibex_uart.h"
25 #include "hw/timer/ibex_timer.h"
26 #include "qom/object.h"
27 
28 #define TYPE_RISCV_IBEX_SOC "riscv.lowrisc.ibex.soc"
29 OBJECT_DECLARE_SIMPLE_TYPE(LowRISCIbexSoCState, RISCV_IBEX_SOC)
30 
31 struct LowRISCIbexSoCState {
32     /*< private >*/
33     SysBusDevice parent_obj;
34 
35     /*< public >*/
36     RISCVHartArrayState cpus;
37     SiFivePLICState plic;
38     IbexUartState uart;
39     IbexTimerState timer;
40 
41     MemoryRegion flash_mem;
42     MemoryRegion rom;
43     MemoryRegion flash_alias;
44 };
45 
46 typedef struct OpenTitanState {
47     /*< private >*/
48     SysBusDevice parent_obj;
49 
50     /*< public >*/
51     LowRISCIbexSoCState soc;
52 } OpenTitanState;
53 
54 enum {
55     IBEX_DEV_ROM,
56     IBEX_DEV_RAM,
57     IBEX_DEV_FLASH,
58     IBEX_DEV_FLASH_VIRTUAL,
59     IBEX_DEV_UART,
60     IBEX_DEV_SPI_DEVICE,
61     IBEX_DEV_SPI_HOST0,
62     IBEX_DEV_SPI_HOST1,
63     IBEX_DEV_GPIO,
64     IBEX_DEV_I2C,
65     IBEX_DEV_PATTGEN,
66     IBEX_DEV_TIMER,
67     IBEX_DEV_SENSOR_CTRL,
68     IBEX_DEV_OTP_CTRL,
69     IBEX_DEV_PWRMGR,
70     IBEX_DEV_RSTMGR,
71     IBEX_DEV_CLKMGR,
72     IBEX_DEV_PINMUX,
73     IBEX_DEV_PADCTRL,
74     IBEX_DEV_USBDEV,
75     IBEX_DEV_FLASH_CTRL,
76     IBEX_DEV_PLIC,
77     IBEX_DEV_AES,
78     IBEX_DEV_HMAC,
79     IBEX_DEV_KMAC,
80     IBEX_DEV_KEYMGR,
81     IBEX_DEV_CSRNG,
82     IBEX_DEV_ENTROPY,
83     IBEX_DEV_EDNO,
84     IBEX_DEV_EDN1,
85     IBEX_DEV_ALERT_HANDLER,
86     IBEX_DEV_NMI_GEN,
87     IBEX_DEV_OTBN,
88     IBEX_DEV_PERI,
89 };
90 
91 enum {
92     IBEX_TIMER_TIMEREXPIRED0_0 = 126,
93     IBEX_UART0_RX_PARITY_ERR_IRQ = 8,
94     IBEX_UART0_RX_TIMEOUT_IRQ = 7,
95     IBEX_UART0_RX_BREAK_ERR_IRQ = 6,
96     IBEX_UART0_RX_FRAME_ERR_IRQ = 5,
97     IBEX_UART0_RX_OVERFLOW_IRQ = 4,
98     IBEX_UART0_TX_EMPTY_IRQ = 3,
99     IBEX_UART0_RX_WATERMARK_IRQ = 2,
100     IBEX_UART0_TX_WATERMARK_IRQ = 1,
101 };
102 
103 #endif
104