spike.c (d45a5270d075ea589f0b0ddcf963a5fea1f500ac) | spike.c (7cfbb17f023dc014d366b2f30af852aa62a5c3b1) |
---|---|
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 * --- 45 unchanged lines hidden (view full) --- 54 uint64_t addr, size; 55 unsigned long clint_addr; 56 int cpu, socket; 57 MachineState *mc = MACHINE(s); 58 uint32_t *clint_cells; 59 uint32_t cpu_phandle, intc_phandle, phandle = 1; 60 char *name, *mem_name, *clint_name, *clust_name; 61 char *core_name, *cpu_name, *intc_name; | 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 * --- 45 unchanged lines hidden (view full) --- 54 uint64_t addr, size; 55 unsigned long clint_addr; 56 int cpu, socket; 57 MachineState *mc = MACHINE(s); 58 uint32_t *clint_cells; 59 uint32_t cpu_phandle, intc_phandle, phandle = 1; 60 char *name, *mem_name, *clint_name, *clust_name; 61 char *core_name, *cpu_name, *intc_name; |
62 static const char * const clint_compat[2] = { 63 "sifive,clint0", "riscv,clint0" 64 }; |
|
62 63 fdt = s->fdt = create_device_tree(&s->fdt_size); 64 if (!fdt) { 65 error_report("create_device_tree() failed"); 66 exit(1); 67 } 68 69 qemu_fdt_setprop_string(fdt, "/", "model", "ucbbar,spike-bare,qemu"); --- 77 unchanged lines hidden (view full) --- 147 qemu_fdt_setprop_string(fdt, mem_name, "device_type", "memory"); 148 riscv_socket_fdt_write_id(mc, fdt, mem_name, socket); 149 g_free(mem_name); 150 151 clint_addr = memmap[SPIKE_CLINT].base + 152 (memmap[SPIKE_CLINT].size * socket); 153 clint_name = g_strdup_printf("/soc/clint@%lx", clint_addr); 154 qemu_fdt_add_subnode(fdt, clint_name); | 65 66 fdt = s->fdt = create_device_tree(&s->fdt_size); 67 if (!fdt) { 68 error_report("create_device_tree() failed"); 69 exit(1); 70 } 71 72 qemu_fdt_setprop_string(fdt, "/", "model", "ucbbar,spike-bare,qemu"); --- 77 unchanged lines hidden (view full) --- 150 qemu_fdt_setprop_string(fdt, mem_name, "device_type", "memory"); 151 riscv_socket_fdt_write_id(mc, fdt, mem_name, socket); 152 g_free(mem_name); 153 154 clint_addr = memmap[SPIKE_CLINT].base + 155 (memmap[SPIKE_CLINT].size * socket); 156 clint_name = g_strdup_printf("/soc/clint@%lx", clint_addr); 157 qemu_fdt_add_subnode(fdt, clint_name); |
155 qemu_fdt_setprop_string(fdt, clint_name, "compatible", "riscv,clint0"); | 158 qemu_fdt_setprop_string_array(fdt, clint_name, "compatible", 159 (char **)&clint_compat, ARRAY_SIZE(clint_compat)); |
156 qemu_fdt_setprop_cells(fdt, clint_name, "reg", 157 0x0, clint_addr, 0x0, memmap[SPIKE_CLINT].size); 158 qemu_fdt_setprop(fdt, clint_name, "interrupts-extended", 159 clint_cells, s->soc[socket].num_harts * sizeof(uint32_t) * 4); 160 riscv_socket_fdt_write_id(mc, fdt, clint_name, socket); 161 162 g_free(clint_name); 163 g_free(clint_cells); --- 176 unchanged lines hidden --- | 160 qemu_fdt_setprop_cells(fdt, clint_name, "reg", 161 0x0, clint_addr, 0x0, memmap[SPIKE_CLINT].size); 162 qemu_fdt_setprop(fdt, clint_name, "interrupts-extended", 163 clint_cells, s->soc[socket].num_harts * sizeof(uint32_t) * 4); 164 riscv_socket_fdt_write_id(mc, fdt, clint_name, socket); 165 166 g_free(clint_name); 167 g_free(clint_cells); --- 176 unchanged lines hidden --- |