2026-02-01T15:58:09-08:00, Drew Fustini <[email protected]>:
> From: Nicolas Pitre <[email protected]>
>
> Implement a capacity controller according to the Capacity and Bandwidth
> QoS Register Interface (CBQRI) which supports these capabilities:
>
>   - Number of access types: 2 (code and data)
>   - Usage monitoring operations: CONFIG_EVENT, READ_COUNTER
>   - Event IDs supported: None, Occupancy
>   - Capacity allocation ops: CONFIG_LIMIT, READ_LIMIT, FLUSH_RCID
>
> Link: https://github.com/riscv-non-isa/riscv-cbqri/releases/tag/v1.0
> Signed-off-by: Nicolas Pitre <[email protected]>
> [fustini: add fields introduced in the ratified spec: cunits, rpfx, p]
> Signed-off-by: Drew Fustini <[email protected]>
> ---
> diff --git a/hw/riscv/cbqri_capacity.c b/hw/riscv/cbqri_capacity.c
> @@ -0,0 +1,733 @@
> [...]
> +static void riscv_cbqri_cc_write_wrapper(void *opaque, hwaddr addr,
> +                                             uint64_t value, unsigned size)
> +{
> +    if (size == 4) {
> +        uint64_t reg = riscv_cbqri_cc_read(opaque, addr & ~0x7UL, 8);
> +        if (addr & 0x7) {
> +            value = value << 32 | (reg & 0xffffffff);
> +        } else {
> +            value = value | (reg & ~0xffffffffUL);
> +        }
> +    }
> +    riscv_cbqri_cc_write(opaque, addr & ~0x7UL, value, 8);
> +}

I know I wrote it like this, but I wonder if QEMU prefers ULL or even
MAKE_64BIT_MASK?  UL shouldn't break unless we compile with MSVC,

Reviewed-by: Radim Krčmář <[email protected]>

Reply via email to