From: Eric Auger <eric.auger@redhat.com>
To: Nabih Estefan <nabihestefan@google.com>, peter.maydell@linaro.org
Cc: qemu-arm@nongnu.org, qemu-devel@nongnu.org,
qemu-block@nongnu.org, its@irrelevant.dk, kbusch@kernel.org,
roqueh@google.com
Subject: Re: [PATCH 2/2] hw/arm/smmu-common: Create virtual function for implementation defined StreamID
Date: Fri, 23 Feb 2024 09:09:15 +0100 [thread overview]
Message-ID: <81c2b165-0961-4fea-947d-f55677049e9f@redhat.com> (raw)
In-Reply-To: <20240221171716.1260192-3-nabihestefan@google.com>
Hi,
On 2/21/24 18:17, Nabih Estefan wrote:
> From: Roque Arcudia Hernandez <roqueh@google.com>
>
> According to the SMMU specification the StreamID construction and size is
> IMPLEMENTATION DEFINED, the size being between 0 and 32 bits.
>
> This patch creates virtual functions get_sid and get_iommu_mr to allow different
> implementations of how the StreamID is constructed via inheritance. The default
> implementation of these functions will match the current ones where the BDF is
> used directly as StreamID.
The patch itself looks good to me but it lacks a concrete derived
implementation of get_sid() and get_iommu_mr(). Until you do not
upstream it I don't see the point in introducing those callbacks. Thanks
Eric
>
> Signed-off-by: Roque Arcudia Hernandez <roqueh@google.com>
> Signed-off-by: Nabih Estefan <nabihestefan@google.com>
> ---
> hw/arm/smmu-common.c | 12 ++++++++++++
> include/hw/arm/smmu-common.h | 16 +++++++++++-----
> 2 files changed, 23 insertions(+), 5 deletions(-)
>
> diff --git a/hw/arm/smmu-common.c b/hw/arm/smmu-common.c
> index 4caedb4998..14b3240a88 100644
> --- a/hw/arm/smmu-common.c
> +++ b/hw/arm/smmu-common.c
> @@ -621,6 +621,11 @@ static const PCIIOMMUOps smmu_ops = {
> };
>
> IOMMUMemoryRegion *smmu_iommu_mr(SMMUState *s, uint32_t sid)
> +{
> + return ARM_SMMU_GET_CLASS(s)->get_iommu_mr(s, sid);
> +}
> +
> +static IOMMUMemoryRegion *smmu_base_iommu_mr(SMMUState *s, uint32_t sid)
> {
> uint8_t bus_n, devfn;
> SMMUPciBus *smmu_bus;
> @@ -659,6 +664,11 @@ void smmu_inv_notifiers_all(SMMUState *s)
> }
> }
>
> +static uint32_t smmu_base_get_sid(SMMUDevice *sdev)
> +{
> + return PCI_BUILD_BDF(pci_bus_num(sdev->bus), sdev->devfn);
> +}
> +
> static void smmu_base_realize(DeviceState *dev, Error **errp)
> {
> SMMUState *s = ARM_SMMU(dev);
> @@ -709,6 +719,8 @@ static void smmu_base_class_init(ObjectClass *klass, void *data)
> device_class_set_parent_realize(dc, smmu_base_realize,
> &sbc->parent_realize);
> rc->phases.hold = smmu_base_reset_hold;
> + sbc->get_sid = smmu_base_get_sid;
> + sbc->get_iommu_mr = smmu_base_iommu_mr;
> }
>
> static const TypeInfo smmu_base_info = {
> diff --git a/include/hw/arm/smmu-common.h b/include/hw/arm/smmu-common.h
> index 5ec2e6c1a4..d53121fe37 100644
> --- a/include/hw/arm/smmu-common.h
> +++ b/include/hw/arm/smmu-common.h
> @@ -131,6 +131,9 @@ typedef struct SMMUIOTLBKey {
> uint8_t level;
> } SMMUIOTLBKey;
>
> +#define TYPE_ARM_SMMU "arm-smmu"
> +OBJECT_DECLARE_TYPE(SMMUState, SMMUBaseClass, ARM_SMMU)
> +
> struct SMMUState {
> /* <private> */
> SysBusDevice dev;
> @@ -147,6 +150,9 @@ struct SMMUState {
> PCIBus *primary_bus;
> };
>
> +typedef uint32_t GetSidFunc(SMMUDevice *obj);
> +typedef IOMMUMemoryRegion *GetIommuMr(SMMUState *s, uint32_t sid);
> +
> struct SMMUBaseClass {
> /* <private> */
> SysBusDeviceClass parent_class;
> @@ -154,19 +160,19 @@ struct SMMUBaseClass {
> /*< public >*/
>
> DeviceRealize parent_realize;
> + GetSidFunc *get_sid;
> + GetIommuMr *get_iommu_mr;
>
> };
>
> -#define TYPE_ARM_SMMU "arm-smmu"
> -OBJECT_DECLARE_TYPE(SMMUState, SMMUBaseClass, ARM_SMMU)
> -
> /* Return the SMMUPciBus handle associated to a PCI bus number */
> SMMUPciBus *smmu_find_smmu_pcibus(SMMUState *s, uint8_t bus_num);
>
> /* Return the stream ID of an SMMU device */
> -static inline uint16_t smmu_get_sid(SMMUDevice *sdev)
> +static inline uint32_t smmu_get_sid(SMMUDevice *sdev)
> {
> - return PCI_BUILD_BDF(pci_bus_num(sdev->bus), sdev->devfn);
> + SMMUState *s = sdev->smmu;
> + return ARM_SMMU_GET_CLASS(s)->get_sid(sdev);
> }
>
> /**
next prev parent reply other threads:[~2024-02-23 8:10 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-21 17:17 [PATCH 0/2] ARM SMMUv3 StreamID Implementation Nabih Estefan
2024-02-21 17:17 ` [PATCH 1/2] hw/arm/smmuv3: Check StreamIDs against SMMU_IDR1.SIDSIZE value Nabih Estefan
2024-02-23 7:55 ` Eric Auger
2024-02-21 17:17 ` [PATCH 2/2] hw/arm/smmu-common: Create virtual function for implementation defined StreamID Nabih Estefan
2024-02-23 8:09 ` Eric Auger [this message]
2025-01-09 17:34 ` [PATCH 0/2] ARM SMMUv3 StreamID Implementation Alex Bennée
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=81c2b165-0961-4fea-947d-f55677049e9f@redhat.com \
--to=eric.auger@redhat.com \
--cc=its@irrelevant.dk \
--cc=kbusch@kernel.org \
--cc=nabihestefan@google.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=roqueh@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).