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

Reply via email to