On Thu, 19 Jun 2025 at 00:06, Jackson Donaldson <jackson88...@gmail.com> wrote: > > This commit implements the True Random Number > Generator for the MAX78000 > > Signed-off-by: Jackson Donaldson <jc...@duck.com>
> static const MemoryRegionOps max78000_gcr_ops = { > diff --git a/hw/misc/max78000_trng.c b/hw/misc/max78000_trng.c > new file mode 100644 > index 0000000000..f406681730 > --- /dev/null > +++ b/hw/misc/max78000_trng.c > @@ -0,0 +1,127 @@ > +/* > + * MAX78000 True Random Number Generator > + * > + * Copyright (c) 2025 Jackson Donaldson <jc...@duck.com> > + * > + * SPDX-License-Identifier: GPL-2.0-or-later > + */ > + > +#include "qemu/osdep.h" > +#include "qemu/log.h" > +#include "trace.h" > +#include "hw/irq.h" > +#include "migration/vmstate.h" > +#include "hw/misc/max78000_trng.h" > +#include "qemu/guest-random.h" > + > +static uint64_t max78000_trng_read(void *opaque, hwaddr addr, > + unsigned int size) > +{ > + uint32_t data; > + > + Max78000TrngState *s = opaque; > + switch (addr) { > + case CTRL: > + return s->ctrl; > + > + case STATUS: > + return 1; > + > + case DATA: > + qemu_guest_getrandom_nofail(&data, sizeof(data)); > + return data; > + > + default: > + qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" > + HWADDR_PRIx "\n", __func__, addr); > + break; > + } > + return 0; > +} > + > +static void max78000_trng_write(void *opaque, hwaddr addr, > + uint64_t val64, unsigned int size) > +{ > + Max78000TrngState *s = opaque; > + uint32_t val = val64; > + switch (addr) { > + case CTRL: > + /* TODO: implement AES keygen */ > + s->ctrl = val; > + if (val & RND_IE) { > + qemu_set_irq(s->irq, 1); > + } else{ > + qemu_set_irq(s->irq, 0); > + } > + break; > + > + default: > + qemu_log_mask(LOG_GUEST_ERROR, "%s: Bad offset 0x%" > + HWADDR_PRIx "\n", __func__, addr); > + break; > + } > +} The interrupt generation logic still doesn't look right here to me -- see my comments on the TRNG patch in v1 of this patchset. thanks -- PMM