From: Nicolin Chen <nicolinc@nvidia.com>
To: Will Deacon <will@kernel.org>
Cc: <robin.murphy@arm.com>, <joro@8bytes.org>, <jgg@nvidia.com>,
<thierry.reding@gmail.com>, <vdumpa@nvidia.com>,
<jonathanh@nvidia.com>, <linux-kernel@vger.kernel.org>,
<iommu@lists.linux.dev>, <linux-arm-kernel@lists.infradead.org>,
<linux-tegra@vger.kernel.org>
Subject: Re: [PATCH v9 4/6] iommu/arm-smmu-v3: Add CS_NONE quirk for CONFIG_TEGRA241_CMDQV
Date: Fri, 5 Jul 2024 17:32:24 -0700 [thread overview]
Message-ID: <ZoiQmAszSQbP18lQ@Asurada-Nvidia> (raw)
In-Reply-To: <Zog3IgdmYRU7VbJB@Asurada-Nvidia>
On Fri, Jul 05, 2024 at 11:10:47AM -0700, Nicolin Chen wrote:
> Hi Will,
>
> On Fri, Jul 05, 2024 at 04:27:21PM +0100, Will Deacon wrote:
> > On Tue, Jul 02, 2024 at 01:10:19PM -0700, Nicolin Chen wrote:
> > > On Tue, Jul 02, 2024 at 12:47:14PM -0700, Nicolin Chen wrote:
> > > > @@ -345,6 +345,11 @@ static void arm_smmu_cmdq_build_sync_cmd(u64 *cmd, struct arm_smmu_device *smmu,
> > > > FIELD_PREP(CMDQ_SYNC_0_MSH, ARM_SMMU_SH_ISH) |
> > > > FIELD_PREP(CMDQ_SYNC_0_MSIATTR, ARM_SMMU_MEMATTR_OIWB);
> > > >
> > > > + if (cmdq->type == TEGRA241_VCMDQ) {
> > > > + cmd[0] |= FIELD_PREP(CMDQ_SYNC_0_CS, CMDQ_SYNC_0_CS_NONE);
> > > > + return;
> > > > + }
> > > > +
> > > > if (!(smmu->options & ARM_SMMU_OPT_MSIPOLL)) {
> > > > cmd[0] |= FIELD_PREP(CMDQ_SYNC_0_CS, CMDQ_SYNC_0_CS_SEV);
> > > > return;
> > > > @@ -690,7 +695,8 @@ static int arm_smmu_cmdq_poll_until_sync(struct arm_smmu_device *smmu,
> > > > struct arm_smmu_cmdq *cmdq,
> > > > struct arm_smmu_ll_queue *llq)
> > > > {
> > > > - if (smmu->options & ARM_SMMU_OPT_MSIPOLL)
> > > > + if (smmu->options & ARM_SMMU_OPT_MSIPOLL &&
> > > > + cmdq->type != TEGRA241_VCMDQ) {
> > > > return __arm_smmu_cmdq_poll_until_msi(smmu, cmdq, llq);
> > > >
> > > > --------------------------------------------------------------
> > > >
> > > > Would you prefer this one? I feel CMDQ_QUIRK_SYNC_CS_NONE_ONLY
> > > > is more general looking though..
> > >
> > > And we would need some additional lines of comments for the two
> > > pieces above, explaining why TEGRA241_VCMDQ type needs the first
> > > one while bypasses the second one. Again, it feels even worse :(
> >
> > I hacked the code around a bit this afternoon. Please can you see if:
> >
> > https://git.kernel.org/pub/scm/linux/kernel/git/will/linux.git/log/?h=for-nicolin/grace-vcmdq-wip
> >
> > does roughly what you need?
>
> I appreciate the patch. Yet, we cannot use IORT's model field.
> This would need to go through IORT documentation, for A. And B,
> we had a very long discussion with ARM (Robin was there) years
> ago, and concluded that this CMDQV would not be a model in IORT
> but a DSDT node as an extension. So, this is firm...
>
> With that, we cannot avoid an unconditional hard-coding tegra
> function call even if we switch to an impl design:
>
> +static int acpi_smmu_impl_init(u32 model, struct arm_smmu_device *smmu)
> +{
> + /*
> + * unconditional go through ACPI table to detect if there is a tegra241
> + * implementation that extends SMMU with a CMDQV. The probe() will fill
> + * the smmu->impl pointer upon success. Otherwise, fall back to regular
> + * SMMU CMDQ.
> + */
> + tegra241_impl_acpi_probe(smmu);
> + return 0;
> +}
>
> As for arm_smmu_cmdq_needs_busy_polling, it doesn't really look
> very optimal to me. But if you insist on having an smmu option,
> we still have to take in the PATCH-3 in this series, enforcing
> an arm_smmu_cmdq_build_sync_cmd() call in the IRQ handler too.
> So, it would eventually look like [attachment].
Please ignore the attachment. Since we are adding arm_smmu_impl,
I figure that we could add an arm_smmu_cmdq_impl too. There's an
another small feature that I didn't implement in this v9, while
being able to benefit from a cmdq impl now.
The impl can also hold a boolean busy_polling, so we won't need
a global smmu option.
I will send a new version asap, though I am not sure if we can
still make it to this cycle that we hoped for :-/
Thanks
Nicolin
next prev parent reply other threads:[~2024-07-06 0:32 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-12 21:45 [PATCH v9 0/6] Add Tegra241 (Grace) CMDQV Support (part 1/2) Nicolin Chen
2024-06-12 21:45 ` [PATCH v9 1/6] iommu/arm-smmu-v3: Make symbols public for CONFIG_TEGRA241_CMDQV Nicolin Chen
2024-06-12 21:45 ` [PATCH v9 2/6] iommu/arm-smmu-v3: Issue a batch of commands to the same cmdq Nicolin Chen
2024-06-12 21:45 ` [PATCH v9 3/6] iommu/arm-smmu-v3: Enforce arm_smmu_cmdq_build_sync_cmd Nicolin Chen
2024-06-12 21:45 ` [PATCH v9 4/6] iommu/arm-smmu-v3: Add CS_NONE quirk for CONFIG_TEGRA241_CMDQV Nicolin Chen
2024-07-02 17:43 ` Will Deacon
2024-07-02 18:19 ` Nicolin Chen
2024-07-02 18:49 ` Will Deacon
2024-07-02 19:47 ` Nicolin Chen
2024-07-02 20:10 ` Nicolin Chen
2024-07-05 15:27 ` Will Deacon
2024-07-05 18:10 ` Nicolin Chen
2024-07-06 0:32 ` Nicolin Chen [this message]
2024-07-08 11:31 ` Will Deacon
2024-07-08 18:02 ` Nicolin Chen
2024-07-08 11:29 ` Will Deacon
2024-07-08 11:43 ` Will Deacon
2024-07-08 18:05 ` Nicolin Chen
2024-07-08 17:59 ` Nicolin Chen
2024-07-09 18:29 ` Nicolin Chen
2024-06-12 21:45 ` [PATCH v9 5/6] iommu/arm-smmu-v3: Add in-kernel support for NVIDIA Tegra241 (Grace) CMDQV Nicolin Chen
2024-07-02 17:41 ` Will Deacon
2024-07-02 19:23 ` Nicolin Chen
2024-06-12 21:45 ` [PATCH v9 6/6] iommu/tegra241-cmdqv: Limit CMDs for guest owned VINTF Nicolin Chen
2024-06-28 19:26 ` [PATCH v9 0/6] Add Tegra241 (Grace) CMDQV Support (part 1/2) Pavel Machek
2024-06-28 21:29 ` Nicolin Chen
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=ZoiQmAszSQbP18lQ@Asurada-Nvidia \
--to=nicolinc@nvidia.com \
--cc=iommu@lists.linux.dev \
--cc=jgg@nvidia.com \
--cc=jonathanh@nvidia.com \
--cc=joro@8bytes.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=robin.murphy@arm.com \
--cc=thierry.reding@gmail.com \
--cc=vdumpa@nvidia.com \
--cc=will@kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.