xref: /openbmc/qemu/include/hw/riscv/sifive_e.h (revision c988de4119af0a0ae7983e870babb5f15793590e)
1eb637edbSMichael Clark /*
2eb637edbSMichael Clark  * SiFive E series machine interface
3eb637edbSMichael Clark  *
4eb637edbSMichael Clark  * Copyright (c) 2017 SiFive, Inc.
5eb637edbSMichael Clark  *
6eb637edbSMichael Clark  * This program is free software; you can redistribute it and/or modify it
7eb637edbSMichael Clark  * under the terms and conditions of the GNU General Public License,
8eb637edbSMichael Clark  * version 2 or later, as published by the Free Software Foundation.
9eb637edbSMichael Clark  *
10eb637edbSMichael Clark  * This program is distributed in the hope it will be useful, but WITHOUT
11eb637edbSMichael Clark  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12eb637edbSMichael Clark  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13eb637edbSMichael Clark  * more details.
14eb637edbSMichael Clark  *
15eb637edbSMichael Clark  * You should have received a copy of the GNU General Public License along with
16eb637edbSMichael Clark  * this program.  If not, see <http://www.gnu.org/licenses/>.
17eb637edbSMichael Clark  */
18eb637edbSMichael Clark 
19eb637edbSMichael Clark #ifndef HW_SIFIVE_E_H
20eb637edbSMichael Clark #define HW_SIFIVE_E_H
21eb637edbSMichael Clark 
2230efbf33SFabien Chouteau #include "hw/riscv/sifive_gpio.h"
2330efbf33SFabien Chouteau 
24651cd8b7SAlistair Francis #define TYPE_RISCV_E_SOC "riscv.sifive.e.soc"
25651cd8b7SAlistair Francis #define RISCV_E_SOC(obj) \
26651cd8b7SAlistair Francis     OBJECT_CHECK(SiFiveESoCState, (obj), TYPE_RISCV_E_SOC)
27651cd8b7SAlistair Francis 
28651cd8b7SAlistair Francis typedef struct SiFiveESoCState {
29651cd8b7SAlistair Francis     /*< private >*/
30651cd8b7SAlistair Francis     SysBusDevice parent_obj;
31651cd8b7SAlistair Francis 
32651cd8b7SAlistair Francis     /*< public >*/
33651cd8b7SAlistair Francis     RISCVHartArrayState cpus;
34651cd8b7SAlistair Francis     DeviceState *plic;
3530efbf33SFabien Chouteau     SIFIVEGPIOState gpio;
36*c988de41SPalmer Dabbelt     MemoryRegion xip_mem;
37*c988de41SPalmer Dabbelt     MemoryRegion mask_rom;
38651cd8b7SAlistair Francis } SiFiveESoCState;
39651cd8b7SAlistair Francis 
40eb637edbSMichael Clark typedef struct SiFiveEState {
41eb637edbSMichael Clark     /*< private >*/
42eb637edbSMichael Clark     SysBusDevice parent_obj;
43eb637edbSMichael Clark 
44eb637edbSMichael Clark     /*< public >*/
45651cd8b7SAlistair Francis     SiFiveESoCState soc;
46eb637edbSMichael Clark } SiFiveEState;
47eb637edbSMichael Clark 
48eb637edbSMichael Clark enum {
49eb637edbSMichael Clark     SIFIVE_E_DEBUG,
50eb637edbSMichael Clark     SIFIVE_E_MROM,
51eb637edbSMichael Clark     SIFIVE_E_OTP,
52eb637edbSMichael Clark     SIFIVE_E_CLINT,
53eb637edbSMichael Clark     SIFIVE_E_PLIC,
54eb637edbSMichael Clark     SIFIVE_E_AON,
55eb637edbSMichael Clark     SIFIVE_E_PRCI,
56eb637edbSMichael Clark     SIFIVE_E_OTP_CTRL,
57eb637edbSMichael Clark     SIFIVE_E_GPIO0,
58eb637edbSMichael Clark     SIFIVE_E_UART0,
59eb637edbSMichael Clark     SIFIVE_E_QSPI0,
60eb637edbSMichael Clark     SIFIVE_E_PWM0,
61eb637edbSMichael Clark     SIFIVE_E_UART1,
62eb637edbSMichael Clark     SIFIVE_E_QSPI1,
63eb637edbSMichael Clark     SIFIVE_E_PWM1,
64eb637edbSMichael Clark     SIFIVE_E_QSPI2,
65eb637edbSMichael Clark     SIFIVE_E_PWM2,
66eb637edbSMichael Clark     SIFIVE_E_XIP,
67eb637edbSMichael Clark     SIFIVE_E_DTIM
68eb637edbSMichael Clark };
69eb637edbSMichael Clark 
70eb637edbSMichael Clark enum {
71eb637edbSMichael Clark     SIFIVE_E_UART0_IRQ  = 3,
7230efbf33SFabien Chouteau     SIFIVE_E_UART1_IRQ  = 4,
7330efbf33SFabien Chouteau     SIFIVE_E_GPIO0_IRQ0 = 8
74eb637edbSMichael Clark };
75eb637edbSMichael Clark 
76eb637edbSMichael Clark #define SIFIVE_E_PLIC_HART_CONFIG "M"
77eb637edbSMichael Clark #define SIFIVE_E_PLIC_NUM_SOURCES 127
78eb637edbSMichael Clark #define SIFIVE_E_PLIC_NUM_PRIORITIES 7
790feb4a71SAlistair Francis #define SIFIVE_E_PLIC_PRIORITY_BASE 0x04
80eb637edbSMichael Clark #define SIFIVE_E_PLIC_PENDING_BASE 0x1000
81eb637edbSMichael Clark #define SIFIVE_E_PLIC_ENABLE_BASE 0x2000
82eb637edbSMichael Clark #define SIFIVE_E_PLIC_ENABLE_STRIDE 0x80
83eb637edbSMichael Clark #define SIFIVE_E_PLIC_CONTEXT_BASE 0x200000
84eb637edbSMichael Clark #define SIFIVE_E_PLIC_CONTEXT_STRIDE 0x1000
85eb637edbSMichael Clark 
86eb637edbSMichael Clark #if defined(TARGET_RISCV32)
87eb637edbSMichael Clark #define SIFIVE_E_CPU TYPE_RISCV_CPU_SIFIVE_E31
88eb637edbSMichael Clark #elif defined(TARGET_RISCV64)
89eb637edbSMichael Clark #define SIFIVE_E_CPU TYPE_RISCV_CPU_SIFIVE_E51
90eb637edbSMichael Clark #endif
91eb637edbSMichael Clark 
92eb637edbSMichael Clark #endif
93