xref: /qemu/include/hw/riscv/spike.h (revision 2a8756ed7d64f8fed6ad50fb062f7118e47c856c)
15b4beba1SMichael Clark /*
25b4beba1SMichael Clark  * Spike machine interface
35b4beba1SMichael Clark  *
45b4beba1SMichael Clark  * Copyright (c) 2017 SiFive, Inc.
55b4beba1SMichael Clark  *
65b4beba1SMichael Clark  * This program is free software; you can redistribute it and/or modify it
75b4beba1SMichael Clark  * under the terms and conditions of the GNU General Public License,
85b4beba1SMichael Clark  * version 2 or later, as published by the Free Software Foundation.
95b4beba1SMichael Clark  *
105b4beba1SMichael Clark  * This program is distributed in the hope it will be useful, but WITHOUT
115b4beba1SMichael Clark  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
125b4beba1SMichael Clark  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
135b4beba1SMichael Clark  * more details.
145b4beba1SMichael Clark  *
155b4beba1SMichael Clark  * You should have received a copy of the GNU General Public License along with
165b4beba1SMichael Clark  * this program.  If not, see <http://www.gnu.org/licenses/>.
175b4beba1SMichael Clark  */
185b4beba1SMichael Clark 
195b4beba1SMichael Clark #ifndef HW_SPIKE_H
205b4beba1SMichael Clark #define HW_SPIKE_H
215b4beba1SMichael Clark 
225b4beba1SMichael Clark #define TYPE_RISCV_SPIKE_V1_09_1_BOARD "riscv.spike_v1_9_1"
235b4beba1SMichael Clark #define TYPE_RISCV_SPIKE_V1_10_0_BOARD "riscv.spike_v1_10"
245b4beba1SMichael Clark 
255b4beba1SMichael Clark #define SPIKE(obj) \
265b4beba1SMichael Clark     OBJECT_CHECK(SpikeState, (obj), TYPE_RISCV_SPIKE_BOARD)
275b4beba1SMichael Clark 
285b4beba1SMichael Clark typedef struct {
295b4beba1SMichael Clark     /*< private >*/
305b4beba1SMichael Clark     SysBusDevice parent_obj;
315b4beba1SMichael Clark 
325b4beba1SMichael Clark     /*< public >*/
335b4beba1SMichael Clark     RISCVHartArrayState soc;
345b4beba1SMichael Clark     void *fdt;
355b4beba1SMichael Clark     int fdt_size;
365b4beba1SMichael Clark } SpikeState;
375b4beba1SMichael Clark 
385b4beba1SMichael Clark 
395b4beba1SMichael Clark enum {
405b4beba1SMichael Clark     SPIKE_MROM,
415b4beba1SMichael Clark     SPIKE_CLINT,
425b4beba1SMichael Clark     SPIKE_DRAM
435b4beba1SMichael Clark };
445b4beba1SMichael Clark 
45*2a8756edSMichael Clark enum {
46*2a8756edSMichael Clark     SPIKE_CLOCK_FREQ = 1000000000
47*2a8756edSMichael Clark };
48*2a8756edSMichael Clark 
495b4beba1SMichael Clark #if defined(TARGET_RISCV32)
505b4beba1SMichael Clark #define SPIKE_V1_09_1_CPU TYPE_RISCV_CPU_RV32GCSU_V1_09_1
515b4beba1SMichael Clark #define SPIKE_V1_10_0_CPU TYPE_RISCV_CPU_RV32GCSU_V1_10_0
525b4beba1SMichael Clark #elif defined(TARGET_RISCV64)
535b4beba1SMichael Clark #define SPIKE_V1_09_1_CPU TYPE_RISCV_CPU_RV64GCSU_V1_09_1
545b4beba1SMichael Clark #define SPIKE_V1_10_0_CPU TYPE_RISCV_CPU_RV64GCSU_V1_10_0
555b4beba1SMichael Clark #endif
565b4beba1SMichael Clark 
575b4beba1SMichael Clark #endif
58