public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
From: Bibek Kumar Patro <quic_bibekkum@quicinc.com>
To: Rob Clark <robdclark@gmail.com>, Robin Murphy <robin.murphy@arm.com>
Cc: <will@kernel.org>, <joro@8bytes.org>, <jgg@ziepe.ca>,
	<jsnitsel@redhat.com>, <robh@kernel.org>,
	<krzysztof.kozlowski@linaro.org>, <quic_c_gdjako@quicinc.com>,
	<dmitry.baryshkov@linaro.org>, <iommu@lists.linux.dev>,
	<linux-arm-msm@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v16 3/5] iommu/arm-smmu: add support for PRR bit setup
Date: Thu, 31 Oct 2024 01:57:47 +0530	[thread overview]
Message-ID: <92f0df16-c755-49c2-8356-0b7b94754390@quicinc.com> (raw)
In-Reply-To: <CAF6AEGvAYeY-fuk1Dg-0gsrod7Dy91qifKvChCd03=bs_zfs-g@mail.gmail.com>



On 10/30/2024 10:28 PM, Rob Clark wrote:
> On Wed, Oct 30, 2024 at 8:23 AM Robin Murphy <robin.murphy@arm.com> wrote:
>>
>> On 30/10/2024 1:14 pm, Bibek Kumar Patro wrote:
>>>
>>>
>>> On 10/29/2024 6:59 PM, Robin Murphy wrote:
>>>> On 2024-10-08 1:54 pm, Bibek Kumar Patro wrote:
>>>>> Add an adreno-smmu-priv interface for drm/msm to call
>>>>> into arm-smmu-qcom and initiate the PRR bit setup or reset
>>>>> sequence as per request.
>>>>>
>>>>> This will be used by GPU to setup the PRR bit and related
>>>>> configuration registers through adreno-smmu private
>>>>> interface instead of directly poking the smmu hardware.
>>>>>
>>>>> Suggested-by: Rob Clark <robdclark@gmail.com>
>>>>> Signed-off-by: Bibek Kumar Patro <quic_bibekkum@quicinc.com>
>>>>> ---
>>>>>    drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c | 37 ++++++++++++++++++++++
>>>>>    drivers/iommu/arm/arm-smmu/arm-smmu.h      |  2 ++
>>>>>    include/linux/adreno-smmu-priv.h           | 10 +++++-
>>>>>    3 files changed, 48 insertions(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c b/drivers/
>>>>> iommu/arm/arm-smmu/arm-smmu-qcom.c
>>>>> index 6e0a2a43e45a..38ac9cab763b 100644
>>>>> --- a/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c
>>>>> +++ b/drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c
>>>>> @@ -25,6 +25,7 @@
>>>>>
>>>>>    #define CPRE            (1 << 1)
>>>>>    #define CMTLB            (1 << 0)
>>>>> +#define GFX_ACTLR_PRR        (1 << 5)
>>>>>
>>>>>    static struct qcom_smmu *to_qcom_smmu(struct arm_smmu_device *smmu)
>>>>>    {
>>>>> @@ -109,6 +110,40 @@ static void
>>>>> qcom_adreno_smmu_resume_translation(const void *cookie, bool termina
>>>>>        arm_smmu_cb_write(smmu, cfg->cbndx, ARM_SMMU_CB_RESUME, reg);
>>>>>    }
>>>>>
>>>>> +static void qcom_adreno_smmu_set_prr_bit(const void *cookie, bool set)
>>>>> +{
>>>>> +    struct arm_smmu_domain *smmu_domain = (void *)cookie;
>>>>> +    struct arm_smmu_device *smmu = smmu_domain->smmu;
>>>>> +    const struct device_node *np = smmu->dev->of_node;
>>>>> +    struct arm_smmu_cfg *cfg = &smmu_domain->cfg;
>>>>> +    u32 reg = 0;
>>>>> +
>>>>> +    if (of_device_is_compatible(np, "qcom,smmu-500") &&
>>>>> +            of_device_is_compatible(np, "qcom,adreno-smmu")) {
>>>>
>>>> These conditions aren't going to change between calls - wouldn't it
>>>> make more sense to conditionally assign the callbacks in the first
>>>> place? Not the biggest deal if this is a one-off context-setup type
>>>> thing, just that it looks a little funky.
>>>>
>>>
>>> Let me know if you want to pursue this still.
>>>   From the current PRR implementation in the graphics
>>> vendor layer, this seems to be just setup kind-of thing.
>>> Also if we keep this conditional check before assigning callbacks,
>>> and vendor layer caller won't be having any such check,
>>> wouldn't it be an issue in unsupported platforms (!qcom,smmu-500 or
>>> !qcom,adreno-smmu)
>>> as the callbacks won't be assigned?
>>> So as per my understanding I think it would be safe to keep the
>>> condition check here?
>>
>> Like I say, it makes more sense to me personally if SMMUs which don't
>> have a PRR don't offer a callback for setting the PRR which they don't
>> have, and for it to be the caller's responsibility not to call a NULL
>> callback where they wouldn't need to call one anyway. But the
>> adreno_priv interface is kind of Rob's thing, so I'll leave it to his
>> preference.
> 
> We can go the route of NULL cb if it is not supported (but should make
> note of that in the adreno-smmu-priv.h header comment)
> 

Actually I liked Robin's suggestion to use the compatible check before 
assignment in the sense that there won't be repeated compatible checks
for each call. My only concern was how to handle the non PRR supported 
targets incase vendors called it.
Thanks for clarifying the same, we can use null callbacks for non-PRR 
supported targets with a note in adreno-smmu-priv.h header, so that
caller could take care while implementing the same.
I'll incorporate these changes in next patch along with the CPRE workaround.

Thanks & regards,
Bibek


> BR,
> -R
> 
>> Thanks,
>> Robin.



  reply	other threads:[~2024-10-30 20:32 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-08 12:54 [PATCH v16 0/5] iommu/arm-smmu: introduction of ACTLR implementation for Qualcomm SoCs Bibek Kumar Patro
2024-10-08 12:54 ` [PATCH v16 1/5] iommu/arm-smmu: re-enable context caching in smmu reset operation Bibek Kumar Patro
2024-10-24 12:52   ` Will Deacon
2024-10-25 14:21     ` Bibek Kumar Patro
2024-10-29 12:47       ` Will Deacon
2024-10-29 13:25         ` Robin Murphy
2024-10-30 11:30         ` Bibek Kumar Patro
2024-11-01 12:10           ` Will Deacon
2024-11-04  6:31             ` Bibek Kumar Patro
2024-11-04 11:10         ` Dmitry Baryshkov
2024-11-05 11:37           ` Will Deacon
2024-11-06  7:40             ` Dmitry Baryshkov
2024-10-28 21:12   ` Rob Clark
2024-10-08 12:54 ` [PATCH v16 2/5] iommu/arm-smmu: refactor qcom_smmu structure to include single pointer Bibek Kumar Patro
2024-10-28 21:13   ` Rob Clark
2024-10-08 12:54 ` [PATCH v16 3/5] iommu/arm-smmu: add support for PRR bit setup Bibek Kumar Patro
2024-10-28 21:13   ` Rob Clark
2024-10-29 13:29   ` Robin Murphy
2024-10-30 13:14     ` Bibek Kumar Patro
2024-10-30 15:23       ` Robin Murphy
2024-10-30 16:58         ` Rob Clark
2024-10-30 20:27           ` Bibek Kumar Patro [this message]
2024-10-08 12:54 ` [PATCH v16 4/5] iommu/arm-smmu: introduction of ACTLR for custom prefetcher settings Bibek Kumar Patro
2024-10-09 19:02   ` Dmitry Baryshkov
2024-10-28 21:14   ` Rob Clark
2024-10-08 12:54 ` [PATCH v16 5/5] iommu/arm-smmu: add ACTLR data and support for qcom_smmu_500 Bibek Kumar Patro
2024-10-28 21:16   ` Rob Clark
2024-10-29 12:40     ` Bibek Kumar Patro
2024-10-29 13:36   ` Robin Murphy
2024-10-23 19:07 ` [PATCH v16 0/5] iommu/arm-smmu: introduction of ACTLR implementation for Qualcomm SoCs Bibek Kumar Patro

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=92f0df16-c755-49c2-8356-0b7b94754390@quicinc.com \
    --to=quic_bibekkum@quicinc.com \
    --cc=dmitry.baryshkov@linaro.org \
    --cc=iommu@lists.linux.dev \
    --cc=jgg@ziepe.ca \
    --cc=joro@8bytes.org \
    --cc=jsnitsel@redhat.com \
    --cc=krzysztof.kozlowski@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=quic_c_gdjako@quicinc.com \
    --cc=robdclark@gmail.com \
    --cc=robh@kernel.org \
    --cc=robin.murphy@arm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox