[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH for-10.0 2/7] hw/riscv/riscv-iommu: parametrize CAP.IGS
From: |
Alistair Francis |
Subject: |
Re: [PATCH for-10.0 2/7] hw/riscv/riscv-iommu: parametrize CAP.IGS |
Date: |
Tue, 19 Nov 2024 11:23:33 +1000 |
On Wed, Nov 6, 2024 at 11:36 PM Daniel Henrique Barboza
<dbarboza@ventanamicro.com> wrote:
>
> Interrupt Generation Support (IGS) is a capability that is tied to the
> interrupt deliver mechanism, not with the core IOMMU emulation. We
> should allow device implementations to set IGS as they wish.
>
> A new helper is added to make it easier for device impls to set IGS. Use
> it in our existing IOMMU device (riscv-iommu-pci) to set
> RISCV_IOMMU_CAPS_IGS_MSI.
>
> Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Alistair
> ---
> hw/riscv/riscv-iommu-bits.h | 6 ++++++
> hw/riscv/riscv-iommu-pci.c | 1 +
> hw/riscv/riscv-iommu.c | 5 +++++
> hw/riscv/riscv-iommu.h | 4 ++++
> 4 files changed, 16 insertions(+)
>
> diff --git a/hw/riscv/riscv-iommu-bits.h b/hw/riscv/riscv-iommu-bits.h
> index 6359ae0353..485f36b9c9 100644
> --- a/hw/riscv/riscv-iommu-bits.h
> +++ b/hw/riscv/riscv-iommu-bits.h
> @@ -88,6 +88,12 @@ struct riscv_iommu_pq_record {
> #define RISCV_IOMMU_CAP_PD17 BIT_ULL(39)
> #define RISCV_IOMMU_CAP_PD20 BIT_ULL(40)
>
> +enum riscv_iommu_igs_modes {
> + RISCV_IOMMU_CAP_IGS_MSI = 0,
> + RISCV_IOMMU_CAP_IGS_WSI,
> + RISCV_IOMMU_CAP_IGS_BOTH
> +};
> +
> /* 5.4 Features control register (32bits) */
> #define RISCV_IOMMU_REG_FCTL 0x0008
> #define RISCV_IOMMU_FCTL_BE BIT(0)
> diff --git a/hw/riscv/riscv-iommu-pci.c b/hw/riscv/riscv-iommu-pci.c
> index a42242532d..4ce9bf6b78 100644
> --- a/hw/riscv/riscv-iommu-pci.c
> +++ b/hw/riscv/riscv-iommu-pci.c
> @@ -155,6 +155,7 @@ static void riscv_iommu_pci_init(Object *obj)
> qdev_alias_all_properties(DEVICE(iommu), obj);
>
> iommu->icvec_avail_vectors = RISCV_IOMMU_PCI_ICVEC_VECTORS;
> + riscv_iommu_set_cap_igs(iommu, RISCV_IOMMU_CAP_IGS_MSI);
> }
>
> static Property riscv_iommu_pci_properties[] = {
> diff --git a/hw/riscv/riscv-iommu.c b/hw/riscv/riscv-iommu.c
> index 1893584028..d95b4b95d8 100644
> --- a/hw/riscv/riscv-iommu.c
> +++ b/hw/riscv/riscv-iommu.c
> @@ -2096,6 +2096,11 @@ static const MemoryRegionOps riscv_iommu_trap_ops = {
> }
> };
>
> +void riscv_iommu_set_cap_igs(RISCVIOMMUState *s, riscv_iommu_igs_mode mode)
> +{
> + s->cap = set_field(s->cap, RISCV_IOMMU_CAP_IGS, mode);
> +}
> +
> static void riscv_iommu_instance_init(Object *obj)
> {
> RISCVIOMMUState *s = RISCV_IOMMU(obj);
> diff --git a/hw/riscv/riscv-iommu.h b/hw/riscv/riscv-iommu.h
> index da3f03440c..f9f2827808 100644
> --- a/hw/riscv/riscv-iommu.h
> +++ b/hw/riscv/riscv-iommu.h
> @@ -21,6 +21,9 @@
>
> #include "qom/object.h"
> #include "hw/riscv/iommu.h"
> +#include "hw/riscv/riscv-iommu-bits.h"
> +
> +typedef enum riscv_iommu_igs_modes riscv_iommu_igs_mode;
>
> struct RISCVIOMMUState {
> /*< private >*/
> @@ -85,6 +88,7 @@ struct RISCVIOMMUState {
>
> void riscv_iommu_pci_setup_iommu(RISCVIOMMUState *iommu, PCIBus *bus,
> Error **errp);
> +void riscv_iommu_set_cap_igs(RISCVIOMMUState *s, riscv_iommu_igs_mode mode);
>
> /* private helpers */
>
> --
> 2.45.2
>
>
- [PATCH for-10.0 0/7] hw/riscv: riscv-iommu-sys device, Daniel Henrique Barboza, 2024/11/06
- [PATCH for-10.0 1/7] hw/riscv/riscv-iommu.c: add riscv_iommu_instance_init(), Daniel Henrique Barboza, 2024/11/06
- [PATCH for-10.0 2/7] hw/riscv/riscv-iommu: parametrize CAP.IGS, Daniel Henrique Barboza, 2024/11/06
- Re: [PATCH for-10.0 2/7] hw/riscv/riscv-iommu: parametrize CAP.IGS,
Alistair Francis <=
- [PATCH for-10.0 3/7] hw/riscv: add riscv-iommu-sys platform device, Daniel Henrique Barboza, 2024/11/06
- [PATCH for-10.0 4/7] hw/riscv/virt: Add IOMMU as platform device if the option is set, Daniel Henrique Barboza, 2024/11/06
- [PATCH for-10.0 6/7] hw/riscv/riscv-iommu: implement reset protocol, Daniel Henrique Barboza, 2024/11/06
- [PATCH for-10.0 7/7] docs/specs: add riscv-iommu-sys information, Daniel Henrique Barboza, 2024/11/06
- [PATCH for-10.0 5/7] hw/riscv/virt.c, riscv-iommu-sys.c: add MSIx support, Daniel Henrique Barboza, 2024/11/06