xref: /openbmc/qemu/include/hw/riscv/sifive_e.h (revision ec150c7e09071bcf51bfaa8071fe23efb6df69f7)
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 
22*ec150c7eSMarkus Armbruster #include "hw/riscv/riscv_hart.h"
2330efbf33SFabien Chouteau #include "hw/riscv/sifive_gpio.h"
2430efbf33SFabien Chouteau 
25651cd8b7SAlistair Francis #define TYPE_RISCV_E_SOC "riscv.sifive.e.soc"
26651cd8b7SAlistair Francis #define RISCV_E_SOC(obj) \
27651cd8b7SAlistair Francis     OBJECT_CHECK(SiFiveESoCState, (obj), TYPE_RISCV_E_SOC)
28651cd8b7SAlistair Francis 
29651cd8b7SAlistair Francis typedef struct SiFiveESoCState {
30651cd8b7SAlistair Francis     /*< private >*/
31651cd8b7SAlistair Francis     SysBusDevice parent_obj;
32651cd8b7SAlistair Francis 
33651cd8b7SAlistair Francis     /*< public >*/
34651cd8b7SAlistair Francis     RISCVHartArrayState cpus;
35651cd8b7SAlistair Francis     DeviceState *plic;
3630efbf33SFabien Chouteau     SIFIVEGPIOState gpio;
37c988de41SPalmer Dabbelt     MemoryRegion xip_mem;
38c988de41SPalmer Dabbelt     MemoryRegion mask_rom;
39651cd8b7SAlistair Francis } SiFiveESoCState;
40651cd8b7SAlistair Francis 
41eb637edbSMichael Clark typedef struct SiFiveEState {
42eb637edbSMichael Clark     /*< private >*/
43eb637edbSMichael Clark     SysBusDevice parent_obj;
44eb637edbSMichael Clark 
45eb637edbSMichael Clark     /*< public >*/
46651cd8b7SAlistair Francis     SiFiveESoCState soc;
47eb637edbSMichael Clark } SiFiveEState;
48eb637edbSMichael Clark 
49eb637edbSMichael Clark enum {
50eb637edbSMichael Clark     SIFIVE_E_DEBUG,
51eb637edbSMichael Clark     SIFIVE_E_MROM,
52eb637edbSMichael Clark     SIFIVE_E_OTP,
53eb637edbSMichael Clark     SIFIVE_E_CLINT,
54eb637edbSMichael Clark     SIFIVE_E_PLIC,
55eb637edbSMichael Clark     SIFIVE_E_AON,
56eb637edbSMichael Clark     SIFIVE_E_PRCI,
57eb637edbSMichael Clark     SIFIVE_E_OTP_CTRL,
58eb637edbSMichael Clark     SIFIVE_E_GPIO0,
59eb637edbSMichael Clark     SIFIVE_E_UART0,
60eb637edbSMichael Clark     SIFIVE_E_QSPI0,
61eb637edbSMichael Clark     SIFIVE_E_PWM0,
62eb637edbSMichael Clark     SIFIVE_E_UART1,
63eb637edbSMichael Clark     SIFIVE_E_QSPI1,
64eb637edbSMichael Clark     SIFIVE_E_PWM1,
65eb637edbSMichael Clark     SIFIVE_E_QSPI2,
66eb637edbSMichael Clark     SIFIVE_E_PWM2,
67eb637edbSMichael Clark     SIFIVE_E_XIP,
68eb637edbSMichael Clark     SIFIVE_E_DTIM
69eb637edbSMichael Clark };
70eb637edbSMichael Clark 
71eb637edbSMichael Clark enum {
72eb637edbSMichael Clark     SIFIVE_E_UART0_IRQ  = 3,
7330efbf33SFabien Chouteau     SIFIVE_E_UART1_IRQ  = 4,
7430efbf33SFabien Chouteau     SIFIVE_E_GPIO0_IRQ0 = 8
75eb637edbSMichael Clark };
76eb637edbSMichael Clark 
77eb637edbSMichael Clark #define SIFIVE_E_PLIC_HART_CONFIG "M"
78eb637edbSMichael Clark #define SIFIVE_E_PLIC_NUM_SOURCES 127
79eb637edbSMichael Clark #define SIFIVE_E_PLIC_NUM_PRIORITIES 7
800feb4a71SAlistair Francis #define SIFIVE_E_PLIC_PRIORITY_BASE 0x04
81eb637edbSMichael Clark #define SIFIVE_E_PLIC_PENDING_BASE 0x1000
82eb637edbSMichael Clark #define SIFIVE_E_PLIC_ENABLE_BASE 0x2000
83eb637edbSMichael Clark #define SIFIVE_E_PLIC_ENABLE_STRIDE 0x80
84eb637edbSMichael Clark #define SIFIVE_E_PLIC_CONTEXT_BASE 0x200000
85eb637edbSMichael Clark #define SIFIVE_E_PLIC_CONTEXT_STRIDE 0x1000
86eb637edbSMichael Clark 
87eb637edbSMichael Clark #if defined(TARGET_RISCV32)
88eb637edbSMichael Clark #define SIFIVE_E_CPU TYPE_RISCV_CPU_SIFIVE_E31
89eb637edbSMichael Clark #elif defined(TARGET_RISCV64)
90eb637edbSMichael Clark #define SIFIVE_E_CPU TYPE_RISCV_CPU_SIFIVE_E51
91eb637edbSMichael Clark #endif
92eb637edbSMichael Clark 
93eb637edbSMichael Clark #endif
94