Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
8cb1c48
hw/ssi: Fix Linux driver init issue with xilinx_spi
chrisrauer Apr 3, 2023
e1c9ba2
hw/sd/ssi-sd: Fix response to CMD58 (READ_OCR)
Jan 23, 2024
174af47
hw/sd/sdcard: Fix response to CMD0 (GO_IDLE_STATE)
Jan 23, 2024
a775e7f
hw/gpio: Import Xilinx AXI GPIO
Dec 31, 2023
15a35fb
riscv/plic: add const qualifier to signature
Mar 20, 2024
e202a67
hw/riscv: Add Codasip Hobgoblin machine
martin-kaiser Dec 31, 2023
0eb63bd
hw/riscv/hobgoblin: sanitize and explain UART mapping
Mar 19, 2024
4538257
hw/riscv/hobgoblin: add gpio-restart
Mar 19, 2024
099b004
hw/riscv/hobgoblin: Add FPGA SRAM block
Jan 23, 2024
c0bbb13
net: xilinx_ethlite: Add PHY emulation
Mar 21, 2024
755b640
hw/intc: sifive_plic: Add edge detection for level interrupts
Mar 22, 2024
0b2d69e
hw/riscv/hobgoblin: add Xilinx Ethernet Lite MAC
Mar 20, 2024
952fa38
hw/riscv/hobgoblin: Add virtio blocks
May 15, 2024
b56c173
hw/riscv/hobgoblin: Add support for proFPGA platform
May 15, 2024
8f21340
hw/riscv/hobgoblin: Increase size of ROM to 128K
May 16, 2024
56e1f94
hw/riscv/hobgoblin: Add support for Xilinx AXI Ethernet device
Jun 12, 2024
35ab971
hw/riscv/hobgoblin: add Codasip Timer
Jun 7, 2024
899ed5f
hw/riscv/hobgoblin: Add support for Codasip timer
Jun 11, 2024
0aebf82
hw/riscv/hobgoblin: Fix crash when calling property get functions
Jun 29, 2024
7c2b17f
hw/riscv/hobgoblin: Rework Genesys2/proFPGA code to use qemu object m…
Jul 19, 2024
6895cbd
hw/riscv/hobgoblin: Better support ROMs
Jul 28, 2024
c9f9e72
hw/riscv/hobgoblin: Add id_register
Jul 28, 2024
05062da
hw/riscv/hobgoblin: Add additional ID registers
Jul 31, 2024
dac37f9
hw/riscv/hobgoblin: enum for memory type
martin-kaiser Aug 6, 2024
c6751a4
hw/riscv/hobgoblin: register ram regions as cheri tagmem
martin-kaiser Aug 6, 2024
31fc3d9
hw/riscv/hobgoblin: use next available block device for sd card
martin-kaiser Jul 16, 2024
322287a
hw/riscv/hobgoblin: declare sram as cheri tagmem
martin-kaiser Aug 9, 2024
2712cb4
hw/riscv/hobgoblin: simplify redundant parameters
martin-kaiser Jul 26, 2024
c91bdc3
hw/riscv/hobgoblin: separate spi and sd card setup
martin-kaiser Aug 1, 2024
e76d62b
hw/riscv/hobgoblin: document the card detect gpio
martin-kaiser Aug 1, 2024
b43c18c
hw/riscv/hobgoblin: remove empty section names from memmap
martin-kaiser Aug 6, 2024
92b9bd9
hw/riscv/hobgoblin: get class from instance
martin-kaiser Aug 12, 2024
1dec053
Remove hobgoblin from RV32 builds.
buxtonpaul Aug 22, 2024
a290376
hw/riscv/hobgoblin: add missing dependencies
martin-kaiser Oct 8, 2024
67c272b
hw/riscv/hobgoblin: remove local RISCV64_BIOS_BIN
martin-kaiser Aug 23, 2024
9b3d3aa
hw: misc: Add Codasip TRNG (True Random Number Generator)
Oct 3, 2024
22413e8
hw: riscv: hobgoblin: Add TRNG peripherial
Oct 3, 2024
7f6057d
Expose invalidate to be callable without a CPU.
buxtonpaul Oct 3, 2024
352b321
Add a CMU device skeleton.
buxtonpaul Oct 2, 2024
ff33456
cmu: define properties for cmu configuration
martin-kaiser Oct 16, 2024
7a67881
cmu: set invalidate_region pointer
martin-kaiser Oct 23, 2024
24304ae
hw/riscv/hobgoblin: return newly added memory region
martin-kaiser Oct 16, 2024
92e03ba
hw/riscv/hobgoblin: create cmu devices
martin-kaiser Oct 2, 2024
191ed4c
cmu: move invalidate_region into the class
martin-kaiser Oct 16, 2024
83cf51f
cmu: check that subtractions don't overflow
martin-kaiser Oct 28, 2024
1129b80
cmu: Write arbitrary sizes upto 64bits.
buxtonpaul Oct 31, 2024
b1140b6
nvram: simulate hobgoblin nvemu
martin-kaiser Nov 4, 2024
c089b57
hw/riscv/hobgoblin: Use class_data to initialize machine classes
Nov 4, 2024
b6b9730
hw/dma/xilinx_axidma: Improve 32/64 bit addressing
Nov 7, 2024
1c6ab07
hw/net/xilinx_axienet: Implement ID register
Nov 8, 2024
2a470cb
hw/net/xilinx_axienet: Implement full transmit checksum offloading
Nov 8, 2024
f893ba8
hw/riscv/hobgoblin: Remove BOOT_SRAM
Nov 11, 2024
f28d5be
hw/riscv/hobgoblin: Fix SRAM size
Nov 11, 2024
9374ab8
hw/riscv/hobgoblin: Initialise DRAM through machine class
Nov 11, 2024
997a3e6
hw/riscv/hobgoblin: Set 64bit property on Xilinx axi-dma device
Nov 11, 2024
3af99de
hw/riscv/hobgoblin: Add VCU118 board type
Nov 12, 2024
54d4ed2
hw/riscv/hobgoblin: Add support for initrd and kernel command line
Nov 15, 2024
9018294
hw/riscv/hobgoblin: Update ID register values
Nov 15, 2024
de6771b
cmu: area for tag clearing must be within the ram region
martin-kaiser Nov 27, 2024
d685eed
hw/intc: sifive_plic: Change "priority-base" to start from interrupt …
lbmeng Dec 11, 2022
981a0fc
hw/riscv/hobgoblin: use cpu_type in a consistent manner
martin-kaiser Jan 2, 2025
777fd8b
cmu: replace dot in class name
martin-kaiser Jan 3, 2025
abba942
cmu: move instance init to realize
martin-kaiser Jan 3, 2025
8c67e01
cmu: make cache line size configurable
martin-kaiser Jan 3, 2025
0fa5262
hw/riscv/hobgoblin: handle unsupported dumdtb option
martin-kaiser Feb 3, 2025
9c4e176
hw/dma/xilinx_axidma: Check DMASR.HALTED to prevent infinite loop.
May 25, 2023
0106a86
Add support for simulating CMU TCMO sequences.
grayoliver Mar 25, 2025
d57ec12
Change default CMU cache line size to 256bit to match fpga hardware d…
grayoliver Mar 25, 2025
430d89c
Enable L730 as default 32bit CPU for when Hobgoblin machine is used
grayoliver Mar 25, 2025
c7b5a0d
Increase Hobgoblin SRAM to 1M inline with the hw platform
grayoliver Apr 16, 2025
c2d96ec
riscv: hobgoblin: Switch timer to Xilinx timer
May 19, 2025
b611b77
char: xilinx_uartlite: Correct interrupt behaviour
May 19, 2025
99ae26e
char: xilinx_uartlite: Handle error conditions
May 19, 2025
ec407ed
char: xilinx_uartlite: Model hardware register read/write behaviour
May 19, 2025
7e0b5b4
hw/dma/xilinx_axidma: Report correct TX size in status
Sep 23, 2025
34489b5
riscv: hobgoblin: Add second UART
May 19, 2025
7d7486e
Fix VCU118 memory sizes
Jun 5, 2025
ff7f513
hw/pci-host/xilinx: Add prefetchable memory region
Mar 19, 2025
9991cbe
Increase size of ID reg area.
buxtonpaul Jun 26, 2025
3336366
Add hobgoblin2 memory map
buxtonpaul Jun 26, 2025
ef79b72
Introduce additional V2 IRQ entries
buxtonpaul Jun 26, 2025
adac7a3
Add V2 Irq map
buxtonpaul Jun 26, 2025
fe22fdc
Add helpers to access the IRQMap and memmep entries
buxtonpaul Jun 26, 2025
916f9cc
Use Helper macro to access IRQ map
buxtonpaul Jun 26, 2025
f851a2b
Switch memmap to table version using helper
buxtonpaul Jun 26, 2025
73dff94
Update platformID handling to support Hobgoblin2
buxtonpaul Jun 26, 2025
0685620
Add PCIE to hobgoblin2 VCU118
buxtonpaul Jun 20, 2025
e6ff7f8
Add map and irq version to machine initialisation
buxtonpaul Jun 27, 2025
49ebb04
Add Hobgoblin V2 machines
buxtonpaul Jun 27, 2025
1635597
riscv: hobgoblin: fix two warnings
martin-kaiser Jun 27, 2025
c581d5e
Update CMU register map to include new version fields
grayoliver Jun 26, 2025
f1f9986
Add a codasip-prime machine type which maps to the hobgoblin_v2vcu118.
buxtonpaul Aug 7, 2025
7513a52
feat: add devicetree creation for vcu118 hobgoblin machine
Sep 17, 2025
cb2f562
riscv: hobgoblin: Remove unused irq_pcie phandle in generated DT
Sep 23, 2025
8181ef4
riscv: hobgoblin: Include cache fields in generated DT
Sep 23, 2025
77deef1
riscv: hobgoblin: Add placeholder phandles in the generated DT
Sep 23, 2025
e9e51fb
riscv: hobgoblin: Fix SPI gpio node in generated DT
Sep 23, 2025
ec2e39a
riscv: hobgoblin: Re-indent create_fdt_ethernet [NFC]
Sep 23, 2025
85e21df
riscv: hobgoblin: Use version specific interrupts in generated DT
Sep 23, 2025
5e9e42e
riscv: hobgoblin: Introduce Ethernet PHY IRQs for generated DT
Sep 23, 2025
0096a92
riscv: hobgoblin: Add PCIe "dma-noncoherent" property in generated DT
Sep 23, 2025
3c26ef7
riscv: hobgoblin: Use memmap for PCIe ranges property in generated DT
Sep 23, 2025
d86cf13
riscv: hobgoblin: Simplify UART in generated DT
Sep 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions configs/devices/riscv32-softmmu/default.mak
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ CONFIG_SIFIVE_E=y
CONFIG_SIFIVE_U=y
CONFIG_RISCV_VIRT=y
CONFIG_OPENTITAN=y
CONFIG_HOBGOBLIN=y
1 change: 1 addition & 0 deletions configs/devices/riscv64-softmmu/default.mak
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ CONFIG_SIFIVE_U=y
CONFIG_RISCV_VIRT=y
CONFIG_MICROCHIP_PFSOC=y
CONFIG_SHAKTI_C=y
CONFIG_HOBGOBLIN=y
44 changes: 26 additions & 18 deletions hw/char/xilinx_uartlite.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
#define STATUS_OVERRUN 0x20
#define STATUS_FRAME 0x40
#define STATUS_PARITY 0x80
#define STATUS_ERRORS (STATUS_OVERRUN | STATUS_FRAME | STATUS_PARITY)

#define CONTROL_RST_TX 0x01
#define CONTROL_RST_RX 0x02
Expand All @@ -70,23 +71,20 @@ struct XilinxUARTLite {
uint32_t regs[R_MAX];
};

static void uart_update_irq(XilinxUARTLite *s)
static void uart_raise_irq(XilinxUARTLite *s)
{
unsigned int irq;

if (s->rx_fifo_len)
s->regs[R_STATUS] |= STATUS_IE;

irq = (s->regs[R_STATUS] & STATUS_IE) && (s->regs[R_CTRL] & CONTROL_IE);
qemu_set_irq(s->irq, irq);
if (s->regs[R_CTRL] & CONTROL_IE) {
qemu_irq_pulse(s->irq);
}
}

static void uart_update_status(XilinxUARTLite *s)
{
uint32_t r;

r = s->regs[R_STATUS];
r &= ~7;
r &= STATUS_ERRORS;
r |= s->regs[R_CTRL] & STATUS_IE;
r |= 1 << 2; /* Tx fifo is always empty. We are fast :) */
r |= (s->rx_fifo_len == sizeof (s->rx_fifo)) << 1;
r |= (!!s->rx_fifo_len);
Expand All @@ -110,14 +108,23 @@ uart_read(void *opaque, hwaddr addr, unsigned int size)
r = s->rx_fifo[(s->rx_fifo_pos - s->rx_fifo_len) & 7];
if (s->rx_fifo_len)
s->rx_fifo_len--;
else
qemu_log_mask(LOG_GUEST_ERROR, "%s: read from empty FIFO\n",
__func__);
uart_update_status(s);
uart_update_irq(s);
qemu_chr_fe_accept_input(&s->chr);
break;

case R_CTRL:
case R_TX:
break;

case R_STATUS:
r = s->regs[addr];
s->regs[R_STATUS] &= ~STATUS_ERRORS;
break;

default:
if (addr < ARRAY_SIZE(s->regs))
r = s->regs[addr];
DUART(qemu_log("%s addr=%x v=%x\n", __func__, addr, r));
break;
}
Expand Down Expand Up @@ -154,18 +161,17 @@ uart_write(void *opaque, hwaddr addr,
qemu_chr_fe_write_all(&s->chr, &ch, 1);
s->regs[addr] = value;

/* hax. */
s->regs[R_STATUS] |= STATUS_IE;
uart_raise_irq(s);
break;

case R_RX:
break;

default:
DUART(printf("%s addr=%x v=%x\n", __func__, addr, value));
if (addr < ARRAY_SIZE(s->regs))
s->regs[addr] = value;
break;
}
uart_update_status(s);
uart_update_irq(s);
}

static const MemoryRegionOps uart_ops = {
Expand All @@ -190,6 +196,7 @@ static void uart_rx(void *opaque, const uint8_t *buf, int size)
/* Got a byte. */
if (s->rx_fifo_len >= 8) {
printf("WARNING: UART dropped char.\n");
s->regs[R_STATUS] |= STATUS_OVERRUN;
return;
}
s->rx_fifo[s->rx_fifo_pos] = *buf;
Expand All @@ -198,7 +205,8 @@ static void uart_rx(void *opaque, const uint8_t *buf, int size)
s->rx_fifo_len++;

uart_update_status(s);
uart_update_irq(s);
if (s->rx_fifo_len == 1)
uart_raise_irq(s);
}

static int uart_can_rx(void *opaque)
Expand Down
87 changes: 67 additions & 20 deletions hw/dma/xilinx_axidma.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,9 @@ DECLARE_INSTANCE_CHECKER(XilinxAXIDMAStreamSink, XILINX_AXI_DMA_CONTROL_STREAM,
#define R_DMACR (0x00 / 4)
#define R_DMASR (0x04 / 4)
#define R_CURDESC (0x08 / 4)
#define R_CURDESC_MSB (0x0c / 4)
#define R_TAILDESC (0x10 / 4)
#define R_TAILDESC_MSB (0x14 / 4)
#define R_MAX (0x30 / 4)

#define CONTROL_PAYLOAD_WORDS 5
Expand Down Expand Up @@ -121,6 +123,12 @@ struct XilinxAXIDMAStreamSink {
struct XilinxAXIDMA *dma;
};

enum {
XILINX_AXIDMA_FLAG_64BIT_BIT,
};

#define XILINX_AXIDMA_FLAG_64BIT (1 << XILINX_AXIDMA_FLAG_64BIT_BIT)

struct XilinxAXIDMA {
SysBusDevice busdev;
MemoryRegion iomem;
Expand All @@ -132,6 +140,7 @@ struct XilinxAXIDMA {
StreamSink *tx_control_dev;
XilinxAXIDMAStreamSink rx_data_dev;
XilinxAXIDMAStreamSink rx_control_dev;
uint32_t flags;

struct Stream streams[2];

Expand Down Expand Up @@ -168,6 +177,11 @@ static inline int stream_idle(struct Stream *s)
return !!(s->regs[R_DMASR] & DMASR_IDLE);
}

static inline int stream_halted(struct Stream *s)
{
return !!(s->regs[R_DMASR] & DMASR_HALTED);
}

static void stream_reset(struct Stream *s)
{
s->regs[R_DMASR] = DMASR_HALTED; /* starts up halted. */
Expand All @@ -185,15 +199,36 @@ static inline int streamid_from_addr(hwaddr addr)
return sid;
}

static inline hwaddr stream_ptr_get(struct Stream *s, int base)
{
if (s->dma->flags & XILINX_AXIDMA_FLAG_64BIT) {
return s->regs[base] | ((hwaddr)s->regs[base + 1] << 32);
} else {
return s->regs[base];
}
}

static inline void stream_ptr_set(struct Stream *s, int base, hwaddr addr)
{
s->regs[base] = addr;
if (s->dma->flags & XILINX_AXIDMA_FLAG_64BIT)
s->regs[base + 1] = addr >> 32;
}

static void stream_desc_load(struct Stream *s, hwaddr addr)
{
struct SDesc *d = &s->desc;

address_space_read(&s->dma->as, addr, MEMTXATTRS_UNSPECIFIED, d, sizeof *d);

/* Convert from LE into host endianness. */
d->buffer_address = le64_to_cpu(d->buffer_address);
d->nxtdesc = le64_to_cpu(d->nxtdesc);
if (s->dma->flags & XILINX_AXIDMA_FLAG_64BIT) {
d->buffer_address = le64_to_cpu(d->buffer_address);
d->nxtdesc = le64_to_cpu(d->nxtdesc);
} else {
d->buffer_address = le32_to_cpu(*(uint32_t *)&d->buffer_address);
d->nxtdesc = le32_to_cpu(*(uint32_t *)&d->nxtdesc);
}
d->control = le32_to_cpu(d->control);
d->status = le32_to_cpu(d->status);
}
Expand Down Expand Up @@ -264,17 +299,17 @@ static void stream_complete(struct Stream *s)
static void stream_process_mem2s(struct Stream *s, StreamSink *tx_data_dev,
StreamSink *tx_control_dev)
{
uint32_t prev_d;
uint32_t txlen;
uint64_t prev_d;
uint32_t orig_txlen, txlen;
uint64_t addr;
bool eop;

if (!stream_running(s) || stream_idle(s)) {
if (!stream_running(s) || stream_idle(s) || stream_halted(s)) {
return;
}

while (1) {
stream_desc_load(s, s->regs[R_CURDESC]);
stream_desc_load(s, stream_ptr_get(s, R_CURDESC));

if (s->desc.status & SDESC_STATUS_COMPLETE) {
s->regs[R_DMASR] |= DMASR_HALTED;
Expand All @@ -285,7 +320,7 @@ static void stream_process_mem2s(struct Stream *s, StreamSink *tx_data_dev,
stream_push(tx_control_dev, s->desc.app, sizeof(s->desc.app), true);
}

txlen = s->desc.control & SDESC_CTRL_LEN_MASK;
orig_txlen = txlen = s->desc.control & SDESC_CTRL_LEN_MASK;

eop = stream_desc_eof(&s->desc);
addr = s->desc.buffer_address;
Expand All @@ -306,13 +341,13 @@ static void stream_process_mem2s(struct Stream *s, StreamSink *tx_data_dev,
}

/* Update the descriptor. */
s->desc.status = txlen | SDESC_STATUS_COMPLETE;
stream_desc_store(s, s->regs[R_CURDESC]);
s->desc.status = orig_txlen | SDESC_STATUS_COMPLETE;
stream_desc_store(s, stream_ptr_get(s, R_CURDESC));

/* Advance. */
prev_d = s->regs[R_CURDESC];
s->regs[R_CURDESC] = s->desc.nxtdesc;
if (prev_d == s->regs[R_TAILDESC]) {
prev_d = stream_ptr_get(s, R_CURDESC);
stream_ptr_set(s, R_CURDESC, s->desc.nxtdesc);
if (prev_d == stream_ptr_get(s, R_TAILDESC)) {
s->regs[R_DMASR] |= DMASR_IDLE;
break;
}
Expand All @@ -322,16 +357,16 @@ static void stream_process_mem2s(struct Stream *s, StreamSink *tx_data_dev,
static size_t stream_process_s2mem(struct Stream *s, unsigned char *buf,
size_t len, bool eop)
{
uint32_t prev_d;
uint64_t prev_d;
unsigned int rxlen;
size_t pos = 0;

if (!stream_running(s) || stream_idle(s)) {
if (!stream_running(s) || stream_idle(s) || stream_halted(s)) {
return 0;
}

while (len) {
stream_desc_load(s, s->regs[R_CURDESC]);
stream_desc_load(s, stream_ptr_get(s, R_CURDESC));

if (s->desc.status & SDESC_STATUS_COMPLETE) {
s->regs[R_DMASR] |= DMASR_HALTED;
Expand All @@ -358,13 +393,13 @@ static size_t stream_process_s2mem(struct Stream *s, unsigned char *buf,

s->desc.status |= s->sof << SDESC_STATUS_SOF_BIT;
s->desc.status |= SDESC_STATUS_COMPLETE;
stream_desc_store(s, s->regs[R_CURDESC]);
stream_desc_store(s, stream_ptr_get(s, R_CURDESC));
s->sof = eop;

/* Advance. */
prev_d = s->regs[R_CURDESC];
s->regs[R_CURDESC] = s->desc.nxtdesc;
if (prev_d == s->regs[R_TAILDESC]) {
prev_d = stream_ptr_get(s, R_CURDESC);
stream_ptr_set(s, R_CURDESC, s->desc.nxtdesc);
if (prev_d == stream_ptr_get(s, R_TAILDESC)) {
s->regs[R_DMASR] |= DMASR_IDLE;
break;
}
Expand Down Expand Up @@ -407,7 +442,7 @@ xilinx_axidma_data_stream_can_push(StreamSink *obj,
XilinxAXIDMAStreamSink *ds = XILINX_AXI_DMA_DATA_STREAM(obj);
struct Stream *s = &ds->dma->streams[1];

if (!stream_running(s) || stream_idle(s)) {
if (!stream_running(s) || stream_idle(s) || stream_halted(s)) {
ds->dma->notify = notify;
ds->dma->notify_opaque = notify_opaque;
return false;
Expand Down Expand Up @@ -502,12 +537,22 @@ static void axidma_write(void *opaque, hwaddr addr,
break;

case R_TAILDESC:
case R_TAILDESC_MSB:
if ((addr == R_TAILDESC_MSB) &&
!(s->dma->flags & XILINX_AXIDMA_FLAG_64BIT))
break;

s->regs[addr] = value;
if ((addr == R_TAILDESC) &&
(s->dma->flags & XILINX_AXIDMA_FLAG_64BIT))
break;

s->regs[R_DMASR] &= ~DMASR_IDLE; /* Not idle. */
if (!sid) {
stream_process_mem2s(s, d->tx_data_dev, d->tx_control_dev);
}
break;

default:
D(qemu_log("%s: ch=%d addr=" TARGET_FMT_plx " v=%x\n",
__func__, sid, addr * 4, (unsigned)value));
Expand Down Expand Up @@ -591,6 +636,8 @@ static Property axidma_properties[] = {
tx_data_dev, TYPE_STREAM_SINK, StreamSink *),
DEFINE_PROP_LINK("axistream-control-connected", XilinxAXIDMA,
tx_control_dev, TYPE_STREAM_SINK, StreamSink *),
DEFINE_PROP_BIT("64bit", XilinxAXIDMA, flags,
XILINX_AXIDMA_FLAG_64BIT_BIT, false),
DEFINE_PROP_END_OF_LIST(),
};

Expand Down
4 changes: 4 additions & 0 deletions hw/gpio/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,7 @@ config GPIO_PWR

config SIFIVE_GPIO
bool

config XILINX_AXI_GPIO
bool
select REGISTER
1 change: 1 addition & 0 deletions hw/gpio/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ softmmu_ss.add(when: 'CONFIG_OMAP', if_true: files('omap_gpio.c'))
softmmu_ss.add(when: 'CONFIG_RASPI', if_true: files('bcm2835_gpio.c'))
softmmu_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files('aspeed_gpio.c'))
softmmu_ss.add(when: 'CONFIG_SIFIVE_GPIO', if_true: files('sifive_gpio.c'))
softmmu_ss.add(when: 'CONFIG_XILINX_AXI_GPIO', if_true: files('xilinx-axi-gpio.c'))
Loading
Loading