On Mon, 14 Jul 2025 16:59:31 +0100 Shameer Kolothum <shameerali.kolothum.th...@huawei.com> wrote:
> Also setup specific PCIIOMMUOps for accel SMMUv3 as accel > SMMUv3 will have different handling for those ops callbacks > in subsequent patches. > > The "accel" property is not yet added, so users cannot set it at this > point. It will be introduced in a subsequent patch once the necessary > support is in place. > > Signed-off-by: Shameer Kolothum <shameerali.kolothum.th...@huawei.com> > diff --git a/hw/arm/smmuv3-accel.c b/hw/arm/smmuv3-accel.c > new file mode 100644 > index 0000000000..2eac9c6ff4 > --- /dev/null > +++ b/hw/arm/smmuv3-accel.c > @@ -0,0 +1,66 @@ > +/* > + * Copyright (c) 2025 Huawei Technologies R & D (UK) Ltd > + * Copyright (C) 2025 NVIDIA > + * Written by Nicolin Chen, Shameer Kolothum > + * > + * SPDX-License-Identifier: GPL-2.0-or-later > + */ > + > +#include "qemu/osdep.h" > + > +#include "hw/arm/smmuv3.h" > +#include "smmuv3-accel.h" > + > +static SMMUv3AccelDevice *smmuv3_accel_get_dev(SMMUState *bs, SMMUPciBus > *sbus, > + PCIBus *bus, int devfn) > +{ > + SMMUDevice *sdev = sbus->pbdev[devfn]; > + SMMUv3AccelDevice *accel_dev; > + > + if (sdev) { > + accel_dev = container_of(sdev, SMMUv3AccelDevice, sdev); Nicolin made good point on early return being nicer here. > + } else { > + accel_dev = g_new0(SMMUv3AccelDevice, 1); > + sdev = &accel_dev->sdev; > + > + sbus->pbdev[devfn] = sdev; > + smmu_init_sdev(bs, sdev, bus, devfn); > + } > + > + return accel_dev; > +} > + > +static AddressSpace *smmuv3_accel_find_add_as(PCIBus *bus, void *opaque, > + int devfn) > +{ > + SMMUState *bs = opaque; Why bs? (other than for giggles) If that is standard naming already then fair enough. > + SMMUPciBus *sbus; > + SMMUv3AccelDevice *accel_dev; > + SMMUDevice *sdev; Maybe tidy up the ordering to some scheme. > + > + sbus = smmu_get_sbus(bs, bus); > + accel_dev = smmuv3_accel_get_dev(bs, sbus, bus, devfn); > + sdev = &accel_dev->sdev; > + > + return &sdev->as; Not a lot of point in having local sdev unless you add more stuff here that uses it later. > +} > diff --git a/hw/arm/smmuv3-accel.h b/hw/arm/smmuv3-accel.h > new file mode 100644 > index 0000000000..4cf30b1291 > --- /dev/null > +++ b/hw/arm/smmuv3-accel.h > @@ -0,0 +1,19 @@ > +/* > + * Copyright (c) 2025 Huawei Technologies R & D (UK) Ltd > + * Copyright (C) 2025 NVIDIA > + * Written by Nicolin Chen, Shameer Kolothum > + * > + * SPDX-License-Identifier: GPL-2.0-or-later > + */ > + > +#ifndef HW_ARM_SMMUV3_ACCEL_H > +#define HW_ARM_SMMUV3_ACCEL_H > + > +#include "hw/arm/smmu-common.h" > +#include CONFIG_DEVICES > + > +typedef struct SMMUv3AccelDevice { > + SMMUDevice sdev; Bonus space. > +} SMMUv3AccelDevice; > + > +#endif /* HW_ARM_SMMUV3_ACCEL_H */