spike.c (df50424b4dcfde823047d3717abd6a61224ea205) spike.c (55c136599f512a86e3fec9f77b6b5a30a6b34cca)
1/*
2 * QEMU RISC-V Spike Board
3 *
4 * Copyright (c) 2016-2017 Sagar Karandikar, sagark@eecs.berkeley.edu
5 * Copyright (c) 2017-2018 SiFive, Inc.
6 *
7 * This provides a RISC-V Board with the following devices:
8 *

--- 184 unchanged lines hidden (view full) ---

193
194static void spike_board_init(MachineState *machine)
195{
196 const MemMapEntry *memmap = spike_memmap;
197 SpikeState *s = SPIKE_MACHINE(machine);
198 MemoryRegion *system_memory = get_system_memory();
199 MemoryRegion *mask_rom = g_new(MemoryRegion, 1);
200 target_ulong firmware_end_addr = memmap[SPIKE_DRAM].base;
1/*
2 * QEMU RISC-V Spike Board
3 *
4 * Copyright (c) 2016-2017 Sagar Karandikar, sagark@eecs.berkeley.edu
5 * Copyright (c) 2017-2018 SiFive, Inc.
6 *
7 * This provides a RISC-V Board with the following devices:
8 *

--- 184 unchanged lines hidden (view full) ---

193
194static void spike_board_init(MachineState *machine)
195{
196 const MemMapEntry *memmap = spike_memmap;
197 SpikeState *s = SPIKE_MACHINE(machine);
198 MemoryRegion *system_memory = get_system_memory();
199 MemoryRegion *mask_rom = g_new(MemoryRegion, 1);
200 target_ulong firmware_end_addr = memmap[SPIKE_DRAM].base;
201 hwaddr firmware_load_addr = memmap[SPIKE_DRAM].base;
201 target_ulong kernel_start_addr;
202 char *firmware_name;
203 uint32_t fdt_load_addr;
204 uint64_t kernel_entry;
205 char *soc_name;
206 int i, base_hartid, hart_count;
207 bool htif_custom_base = false;
208

--- 76 unchanged lines hidden (view full) ---

285 if (!htif_custom_base && machine->kernel_filename) {
286 htif_custom_base = !spike_test_elf_image(machine->kernel_filename);
287 }
288 }
289
290 /* Load firmware */
291 if (firmware_name) {
292 firmware_end_addr = riscv_load_firmware(firmware_name,
202 target_ulong kernel_start_addr;
203 char *firmware_name;
204 uint32_t fdt_load_addr;
205 uint64_t kernel_entry;
206 char *soc_name;
207 int i, base_hartid, hart_count;
208 bool htif_custom_base = false;
209

--- 76 unchanged lines hidden (view full) ---

286 if (!htif_custom_base && machine->kernel_filename) {
287 htif_custom_base = !spike_test_elf_image(machine->kernel_filename);
288 }
289 }
290
291 /* Load firmware */
292 if (firmware_name) {
293 firmware_end_addr = riscv_load_firmware(firmware_name,
293 memmap[SPIKE_DRAM].base,
294 &firmware_load_addr,
294 htif_symbol_callback);
295 g_free(firmware_name);
296 }
297
298 /* Create device tree */
299 create_fdt(s, memmap, riscv_is_32bit(&s->soc[0]), htif_custom_base);
300
301 /* Load kernel */

--- 13 unchanged lines hidden (view full) ---

315 }
316
317 fdt_load_addr = riscv_compute_fdt_addr(memmap[SPIKE_DRAM].base,
318 memmap[SPIKE_DRAM].size,
319 machine);
320 riscv_load_fdt(fdt_load_addr, machine->fdt);
321
322 /* load the reset vector */
295 htif_symbol_callback);
296 g_free(firmware_name);
297 }
298
299 /* Create device tree */
300 create_fdt(s, memmap, riscv_is_32bit(&s->soc[0]), htif_custom_base);
301
302 /* Load kernel */

--- 13 unchanged lines hidden (view full) ---

316 }
317
318 fdt_load_addr = riscv_compute_fdt_addr(memmap[SPIKE_DRAM].base,
319 memmap[SPIKE_DRAM].size,
320 machine);
321 riscv_load_fdt(fdt_load_addr, machine->fdt);
322
323 /* load the reset vector */
323 riscv_setup_rom_reset_vec(machine, &s->soc[0], memmap[SPIKE_DRAM].base,
324 riscv_setup_rom_reset_vec(machine, &s->soc[0], firmware_load_addr,
324 memmap[SPIKE_MROM].base,
325 memmap[SPIKE_MROM].size, kernel_entry,
326 fdt_load_addr);
327
328 /* initialize HTIF using symbols found in load_kernel */
329 htif_mm_init(system_memory, serial_hd(0), memmap[SPIKE_HTIF].base,
330 htif_custom_base);
331}

--- 50 unchanged lines hidden ---
325 memmap[SPIKE_MROM].base,
326 memmap[SPIKE_MROM].size, kernel_entry,
327 fdt_load_addr);
328
329 /* initialize HTIF using symbols found in load_kernel */
330 htif_mm_init(system_memory, serial_hd(0), memmap[SPIKE_HTIF].base,
331 htif_custom_base);
332}

--- 50 unchanged lines hidden ---