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