sifive_e.c (9fc7fc4d3909817555ce0af6bcb69dff1606140d) | sifive_e.c (db873cc5d1a4aaa67eea87768d504b2f89d88738) |
---|---|
1/* 2 * QEMU RISC-V Board Compatible with SiFive Freedom E SDK 3 * 4 * Copyright (c) 2017 SiFive, Inc. 5 * 6 * Provides a board compatible with the SiFive Freedom E SDK: 7 * 8 * 0) UART --- 133 unchanged lines hidden (view full) --- 142 143type_init(sifive_e_machine_init_register_types) 144 145static void riscv_sifive_e_soc_init(Object *obj) 146{ 147 MachineState *ms = MACHINE(qdev_get_machine()); 148 SiFiveESoCState *s = RISCV_E_SOC(obj); 149 | 1/* 2 * QEMU RISC-V Board Compatible with SiFive Freedom E SDK 3 * 4 * Copyright (c) 2017 SiFive, Inc. 5 * 6 * Provides a board compatible with the SiFive Freedom E SDK: 7 * 8 * 0) UART --- 133 unchanged lines hidden (view full) --- 142 143type_init(sifive_e_machine_init_register_types) 144 145static void riscv_sifive_e_soc_init(Object *obj) 146{ 147 MachineState *ms = MACHINE(qdev_get_machine()); 148 SiFiveESoCState *s = RISCV_E_SOC(obj); 149 |
150 sysbus_init_child_obj(obj, "cpus", &s->cpus, 151 sizeof(s->cpus), TYPE_RISCV_HART_ARRAY); | 150 object_initialize_child(obj, "cpus", &s->cpus, TYPE_RISCV_HART_ARRAY); |
152 object_property_set_int(OBJECT(&s->cpus), ms->smp.cpus, "num-harts", 153 &error_abort); | 151 object_property_set_int(OBJECT(&s->cpus), ms->smp.cpus, "num-harts", 152 &error_abort); |
154 sysbus_init_child_obj(obj, "riscv.sifive.e.gpio0", 155 &s->gpio, sizeof(s->gpio), 156 TYPE_SIFIVE_GPIO); | 153 object_initialize_child(obj, "riscv.sifive.e.gpio0", &s->gpio, 154 TYPE_SIFIVE_GPIO); |
157} 158 159static void riscv_sifive_e_soc_realize(DeviceState *dev, Error **errp) 160{ 161 MachineState *ms = MACHINE(qdev_get_machine()); 162 const struct MemmapEntry *memmap = sifive_e_memmap; 163 Error *err = NULL; 164 165 SiFiveESoCState *s = RISCV_E_SOC(dev); 166 MemoryRegion *sys_mem = get_system_memory(); 167 168 object_property_set_str(OBJECT(&s->cpus), ms->cpu_type, "cpu-type", 169 &error_abort); | 155} 156 157static void riscv_sifive_e_soc_realize(DeviceState *dev, Error **errp) 158{ 159 MachineState *ms = MACHINE(qdev_get_machine()); 160 const struct MemmapEntry *memmap = sifive_e_memmap; 161 Error *err = NULL; 162 163 SiFiveESoCState *s = RISCV_E_SOC(dev); 164 MemoryRegion *sys_mem = get_system_memory(); 165 166 object_property_set_str(OBJECT(&s->cpus), ms->cpu_type, "cpu-type", 167 &error_abort); |
170 object_property_set_bool(OBJECT(&s->cpus), true, "realized", 171 &error_abort); | 168 sysbus_realize(SYS_BUS_DEVICE(&s->cpus), &error_abort); |
172 173 /* Mask ROM */ 174 memory_region_init_rom(&s->mask_rom, OBJECT(dev), "riscv.sifive.e.mrom", 175 memmap[SIFIVE_E_MROM].size, &error_fatal); 176 memory_region_add_subregion(sys_mem, 177 memmap[SIFIVE_E_MROM].base, &s->mask_rom); 178 179 /* MMIO */ --- 12 unchanged lines hidden (view full) --- 192 memmap[SIFIVE_E_CLINT].size, ms->smp.cpus, 193 SIFIVE_SIP_BASE, SIFIVE_TIMECMP_BASE, SIFIVE_TIME_BASE, false); 194 create_unimplemented_device("riscv.sifive.e.aon", 195 memmap[SIFIVE_E_AON].base, memmap[SIFIVE_E_AON].size); 196 sifive_e_prci_create(memmap[SIFIVE_E_PRCI].base); 197 198 /* GPIO */ 199 | 169 170 /* Mask ROM */ 171 memory_region_init_rom(&s->mask_rom, OBJECT(dev), "riscv.sifive.e.mrom", 172 memmap[SIFIVE_E_MROM].size, &error_fatal); 173 memory_region_add_subregion(sys_mem, 174 memmap[SIFIVE_E_MROM].base, &s->mask_rom); 175 176 /* MMIO */ --- 12 unchanged lines hidden (view full) --- 189 memmap[SIFIVE_E_CLINT].size, ms->smp.cpus, 190 SIFIVE_SIP_BASE, SIFIVE_TIMECMP_BASE, SIFIVE_TIME_BASE, false); 191 create_unimplemented_device("riscv.sifive.e.aon", 192 memmap[SIFIVE_E_AON].base, memmap[SIFIVE_E_AON].size); 193 sifive_e_prci_create(memmap[SIFIVE_E_PRCI].base); 194 195 /* GPIO */ 196 |
200 object_property_set_bool(OBJECT(&s->gpio), true, "realized", &err); | 197 sysbus_realize(SYS_BUS_DEVICE(&s->gpio), &err); |
201 if (err) { 202 error_propagate(errp, err); 203 return; 204 } 205 206 /* Map GPIO registers */ 207 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpio), 0, memmap[SIFIVE_E_GPIO0].base); 208 --- 57 unchanged lines hidden --- | 198 if (err) { 199 error_propagate(errp, err); 200 return; 201 } 202 203 /* Map GPIO registers */ 204 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpio), 0, memmap[SIFIVE_E_GPIO0].base); 205 --- 57 unchanged lines hidden --- |