opentitan.c (a05f8ecd88f15273d033b6f044b850a8af84a5b8) opentitan.c (732612856a8948a6ba1148322651743aa963b51c)
1/*
2 * QEMU RISC-V Board Compatible with OpenTitan FPGA platform
3 *
4 * Copyright (c) 2020 Western Digital
5 *
6 * Provides a board compatible with the OpenTitan FPGA platform:
7 *
8 * This program is free software; you can redistribute it and/or modify it

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

23#include "qapi/error.h"
24#include "hw/boards.h"
25#include "hw/misc/unimp.h"
26#include "hw/riscv/boot.h"
27#include "exec/address-spaces.h"
28#include "qemu/units.h"
29#include "sysemu/sysemu.h"
30
1/*
2 * QEMU RISC-V Board Compatible with OpenTitan FPGA platform
3 *
4 * Copyright (c) 2020 Western Digital
5 *
6 * Provides a board compatible with the OpenTitan FPGA platform:
7 *
8 * This program is free software; you can redistribute it and/or modify it

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

23#include "qapi/error.h"
24#include "hw/boards.h"
25#include "hw/misc/unimp.h"
26#include "hw/riscv/boot.h"
27#include "exec/address-spaces.h"
28#include "qemu/units.h"
29#include "sysemu/sysemu.h"
30
31static const struct MemmapEntry {
32 hwaddr base;
33 hwaddr size;
34} ibex_memmap[] = {
31static const MemMapEntry ibex_memmap[] = {
35 [IBEX_DEV_ROM] = { 0x00008000, 16 * KiB },
36 [IBEX_DEV_RAM] = { 0x10000000, 0x10000 },
37 [IBEX_DEV_FLASH] = { 0x20000000, 0x80000 },
38 [IBEX_DEV_UART] = { 0x40000000, 0x1000 },
39 [IBEX_DEV_GPIO] = { 0x40040000, 0x1000 },
40 [IBEX_DEV_SPI] = { 0x40050000, 0x1000 },
41 [IBEX_DEV_I2C] = { 0x40080000, 0x1000 },
42 [IBEX_DEV_PATTGEN] = { 0x400e0000, 0x1000 },

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

61 [IBEX_DEV_EDN1] = { 0x41180000, 0x1000 },
62 [IBEX_DEV_ALERT_HANDLER] = { 0x411b0000, 0x1000 },
63 [IBEX_DEV_NMI_GEN] = { 0x411c0000, 0x1000 },
64 [IBEX_DEV_OTBN] = { 0x411d0000, 0x10000 },
65};
66
67static void opentitan_board_init(MachineState *machine)
68{
32 [IBEX_DEV_ROM] = { 0x00008000, 16 * KiB },
33 [IBEX_DEV_RAM] = { 0x10000000, 0x10000 },
34 [IBEX_DEV_FLASH] = { 0x20000000, 0x80000 },
35 [IBEX_DEV_UART] = { 0x40000000, 0x1000 },
36 [IBEX_DEV_GPIO] = { 0x40040000, 0x1000 },
37 [IBEX_DEV_SPI] = { 0x40050000, 0x1000 },
38 [IBEX_DEV_I2C] = { 0x40080000, 0x1000 },
39 [IBEX_DEV_PATTGEN] = { 0x400e0000, 0x1000 },

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

58 [IBEX_DEV_EDN1] = { 0x41180000, 0x1000 },
59 [IBEX_DEV_ALERT_HANDLER] = { 0x411b0000, 0x1000 },
60 [IBEX_DEV_NMI_GEN] = { 0x411c0000, 0x1000 },
61 [IBEX_DEV_OTBN] = { 0x411d0000, 0x10000 },
62};
63
64static void opentitan_board_init(MachineState *machine)
65{
69 const struct MemmapEntry *memmap = ibex_memmap;
66 const MemMapEntry *memmap = ibex_memmap;
70 OpenTitanState *s = g_new0(OpenTitanState, 1);
71 MemoryRegion *sys_mem = get_system_memory();
72 MemoryRegion *main_mem = g_new(MemoryRegion, 1);
73
74 /* Initialize SoC */
75 object_initialize_child(OBJECT(machine), "soc", &s->soc,
76 TYPE_RISCV_IBEX_SOC);
77 qdev_realize(DEVICE(&s->soc), NULL, &error_abort);

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

109
110 object_initialize_child(obj, "plic", &s->plic, TYPE_IBEX_PLIC);
111
112 object_initialize_child(obj, "uart", &s->uart, TYPE_IBEX_UART);
113}
114
115static void lowrisc_ibex_soc_realize(DeviceState *dev_soc, Error **errp)
116{
67 OpenTitanState *s = g_new0(OpenTitanState, 1);
68 MemoryRegion *sys_mem = get_system_memory();
69 MemoryRegion *main_mem = g_new(MemoryRegion, 1);
70
71 /* Initialize SoC */
72 object_initialize_child(OBJECT(machine), "soc", &s->soc,
73 TYPE_RISCV_IBEX_SOC);
74 qdev_realize(DEVICE(&s->soc), NULL, &error_abort);

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

106
107 object_initialize_child(obj, "plic", &s->plic, TYPE_IBEX_PLIC);
108
109 object_initialize_child(obj, "uart", &s->uart, TYPE_IBEX_UART);
110}
111
112static void lowrisc_ibex_soc_realize(DeviceState *dev_soc, Error **errp)
113{
117 const struct MemmapEntry *memmap = ibex_memmap;
114 const MemMapEntry *memmap = ibex_memmap;
118 MachineState *ms = MACHINE(qdev_get_machine());
119 LowRISCIbexSoCState *s = RISCV_IBEX_SOC(dev_soc);
120 MemoryRegion *sys_mem = get_system_memory();
121
122 object_property_set_str(OBJECT(&s->cpus), "cpu-type", ms->cpu_type,
123 &error_abort);
124 object_property_set_int(OBJECT(&s->cpus), "num-harts", ms->smp.cpus,
125 &error_abort);

--- 115 unchanged lines hidden ---
115 MachineState *ms = MACHINE(qdev_get_machine());
116 LowRISCIbexSoCState *s = RISCV_IBEX_SOC(dev_soc);
117 MemoryRegion *sys_mem = get_system_memory();
118
119 object_property_set_str(OBJECT(&s->cpus), "cpu-type", ms->cpu_type,
120 &error_abort);
121 object_property_set_int(OBJECT(&s->cpus), "num-harts", ms->smp.cpus,
122 &error_abort);

--- 115 unchanged lines hidden ---