From: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org> To: robdclark@gmail.com Cc: airlied@linux.ie, airlied@redhat.com, akhilpo@codeaurora.org, angelogioacchino.delregno@somainline.org, bjorn.andersson@linaro.org, daniel@ffwll.ch, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, jcrouse@codeaurora.org, jonathan@marek.ca, konrad.dybcio@somainline.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, marijn.suijten@somainline.org, martin.botka@somainline.org, phone-devel@vger.kernel.org, saiprakash.ranjan@codeaurora.org, sean@poorly.run, shawn.guo@linaro.org, smasetty@codeaurora.org, ~postmarketos/upstreaming@lists.sr.ht Subject: Re: [PATCH] drm/msm: Only enable A6xx LLCC code on A6xx Date: Fri, 8 Jan 2021 17:56:01 +0530 [thread overview] Message-ID: <20210108122601.14993-1-saiprakash.ranjan@codeaurora.org> (raw) In-Reply-To: <CAF6AEGu0Sv6nYNDn0z61pXRjNyFLpLw5S4_O3opmrQ-UVNR_MA@mail.gmail.com> Hi Rob, Konrad, On 2021-01-07 22:56, Rob Clark wrote: > On Wed, Jan 6, 2021 at 8:50 PM Sai Prakash Ranjan > <saiprakash.ranjan@codeaurora.org> wrote: >> >> On 2021-01-05 01:00, Konrad Dybcio wrote: >> > Using this code on A5xx (and probably older too) causes a >> > smmu bug. >> > >> > Fixes: 474dadb8b0d5 ("drm/msm/a6xx: Add support for using system >> > cache(LLC)") >> > Signed-off-by: Konrad Dybcio <konrad.dybcio@somainline.org> >> > Tested-by: AngeloGioacchino Del Regno >> > <angelogioacchino.delregno@somainline.org> >> > --- >> >> Reviewed-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org> >> >> > drivers/gpu/drm/msm/adreno/adreno_gpu.c | 21 ++++++++++++--------- >> > drivers/gpu/drm/msm/adreno/adreno_gpu.h | 5 +++++ >> > 2 files changed, 17 insertions(+), 9 deletions(-) >> > >> > diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c >> > b/drivers/gpu/drm/msm/adreno/adreno_gpu.c >> > index 6cf9975e951e..f09175698827 100644 >> > --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c >> > +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c >> > @@ -191,8 +191,6 @@ adreno_iommu_create_address_space(struct msm_gpu >> > *gpu, >> > struct platform_device *pdev) >> > { >> > struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); >> > - struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu); >> > - struct io_pgtable_domain_attr pgtbl_cfg; >> > struct iommu_domain *iommu; >> > struct msm_mmu *mmu; > > struct msm_gem_address_space *aspace; >> > @@ -202,13 +200,18 @@ adreno_iommu_create_address_space(struct msm_gpu >> > *gpu, >> > if (!iommu) >> > return NULL; >> > >> > - /* >> > - * This allows GPU to set the bus attributes required to use system >> > - * cache on behalf of the iommu page table walker. >> > - */ >> > - if (!IS_ERR(a6xx_gpu->htw_llc_slice)) { >> > - pgtbl_cfg.quirks = IO_PGTABLE_QUIRK_ARM_OUTER_WBWA; >> > - iommu_domain_set_attr(iommu, DOMAIN_ATTR_IO_PGTABLE_CFG, >> > &pgtbl_cfg); >> > + >> > + if (adreno_is_a6xx(adreno_gpu)) { >> > + struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu); >> > + struct io_pgtable_domain_attr pgtbl_cfg; >> > + /* >> > + * This allows GPU to set the bus attributes required to use system >> > + * cache on behalf of the iommu page table walker. >> > + */ >> > + if (!IS_ERR(a6xx_gpu->htw_llc_slice)) { >> > + pgtbl_cfg.quirks = IO_PGTABLE_QUIRK_ARM_OUTER_WBWA; >> > + iommu_domain_set_attr(iommu, DOMAIN_ATTR_IO_PGTABLE_CFG, >> > &pgtbl_cfg); >> > + } > > I'm applying for -fixes as this is an obvious problem.. But kinda > thinking that we should try to move it into an a6xx specific > create_address_space() (or wrapper for the generic fxn) > > Sai/Jordan, could I talk one of you into trying to clean this up > better for next cycle? > Looking more closely(sorry I should have before), the quirk setting is already guarded by htw_llc_slice check but what is happening here is that check is not proper when LLCC is disabled i.e., CONFIG_QCOM_LLCC=n. When LLCC is disabled, htw_llc_slice is set to NULL and the !IS_ERR check passes because it doesn't take care of NULL and quirk is set causing bugs. So the proper fix would be to use IS_ERR_OR_NULL for the check. Konrad, can you please test this below change without your change? diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c index 130661898546..3b798e883f82 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -1117,7 +1117,7 @@ static void a6xx_llc_slices_init(struct platform_device *pdev, a6xx_gpu->llc_slice = llcc_slice_getd(LLCC_GPU); a6xx_gpu->htw_llc_slice = llcc_slice_getd(LLCC_GPUHTW); - if (IS_ERR(a6xx_gpu->llc_slice) && IS_ERR(a6xx_gpu->htw_llc_slice)) + if (IS_ERR_OR_NULL(a6xx_gpu->llc_slice) && IS_ERR_OR_NULL(a6xx_gpu->htw_llc_slice)) a6xx_gpu->llc_mmio = ERR_PTR(-EINVAL); } diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c index 6cf9975e951e..dbd5cacddb9c 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c @@ -206,7 +206,7 @@ adreno_iommu_create_address_space(struct msm_gpu *gpu, * This allows GPU to set the bus attributes required to use system * cache on behalf of the iommu page table walker. */ - if (!IS_ERR(a6xx_gpu->htw_llc_slice)) { + if (!IS_ERR_OR_NULL(a6xx_gpu->htw_llc_slice)) { pgtbl_cfg.quirks = IO_PGTABLE_QUIRK_ARM_OUTER_WBWA; iommu_domain_set_attr(iommu, DOMAIN_ATTR_IO_PGTABLE_CFG, &pgtbl_cfg); } Thanks, Sai -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
WARNING: multiple messages have this Message-ID (diff)
From: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org> To: robdclark@gmail.com Cc: sean@poorly.run, saiprakash.ranjan@codeaurora.org, jonathan@marek.ca, martin.botka@somainline.org, airlied@linux.ie, linux-arm-msm@vger.kernel.org, smasetty@codeaurora.org, konrad.dybcio@somainline.org, akhilpo@codeaurora.org, dri-devel@lists.freedesktop.org, bjorn.andersson@linaro.org, marijn.suijten@somainline.org, ~postmarketos/upstreaming@lists.sr.ht, angelogioacchino.delregno@somainline.org, airlied@redhat.com, phone-devel@vger.kernel.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] drm/msm: Only enable A6xx LLCC code on A6xx Date: Fri, 8 Jan 2021 17:56:01 +0530 [thread overview] Message-ID: <20210108122601.14993-1-saiprakash.ranjan@codeaurora.org> (raw) In-Reply-To: <CAF6AEGu0Sv6nYNDn0z61pXRjNyFLpLw5S4_O3opmrQ-UVNR_MA@mail.gmail.com> Hi Rob, Konrad, On 2021-01-07 22:56, Rob Clark wrote: > On Wed, Jan 6, 2021 at 8:50 PM Sai Prakash Ranjan > <saiprakash.ranjan@codeaurora.org> wrote: >> >> On 2021-01-05 01:00, Konrad Dybcio wrote: >> > Using this code on A5xx (and probably older too) causes a >> > smmu bug. >> > >> > Fixes: 474dadb8b0d5 ("drm/msm/a6xx: Add support for using system >> > cache(LLC)") >> > Signed-off-by: Konrad Dybcio <konrad.dybcio@somainline.org> >> > Tested-by: AngeloGioacchino Del Regno >> > <angelogioacchino.delregno@somainline.org> >> > --- >> >> Reviewed-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org> >> >> > drivers/gpu/drm/msm/adreno/adreno_gpu.c | 21 ++++++++++++--------- >> > drivers/gpu/drm/msm/adreno/adreno_gpu.h | 5 +++++ >> > 2 files changed, 17 insertions(+), 9 deletions(-) >> > >> > diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c >> > b/drivers/gpu/drm/msm/adreno/adreno_gpu.c >> > index 6cf9975e951e..f09175698827 100644 >> > --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c >> > +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c >> > @@ -191,8 +191,6 @@ adreno_iommu_create_address_space(struct msm_gpu >> > *gpu, >> > struct platform_device *pdev) >> > { >> > struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); >> > - struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu); >> > - struct io_pgtable_domain_attr pgtbl_cfg; >> > struct iommu_domain *iommu; >> > struct msm_mmu *mmu; > > struct msm_gem_address_space *aspace; >> > @@ -202,13 +200,18 @@ adreno_iommu_create_address_space(struct msm_gpu >> > *gpu, >> > if (!iommu) >> > return NULL; >> > >> > - /* >> > - * This allows GPU to set the bus attributes required to use system >> > - * cache on behalf of the iommu page table walker. >> > - */ >> > - if (!IS_ERR(a6xx_gpu->htw_llc_slice)) { >> > - pgtbl_cfg.quirks = IO_PGTABLE_QUIRK_ARM_OUTER_WBWA; >> > - iommu_domain_set_attr(iommu, DOMAIN_ATTR_IO_PGTABLE_CFG, >> > &pgtbl_cfg); >> > + >> > + if (adreno_is_a6xx(adreno_gpu)) { >> > + struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu); >> > + struct io_pgtable_domain_attr pgtbl_cfg; >> > + /* >> > + * This allows GPU to set the bus attributes required to use system >> > + * cache on behalf of the iommu page table walker. >> > + */ >> > + if (!IS_ERR(a6xx_gpu->htw_llc_slice)) { >> > + pgtbl_cfg.quirks = IO_PGTABLE_QUIRK_ARM_OUTER_WBWA; >> > + iommu_domain_set_attr(iommu, DOMAIN_ATTR_IO_PGTABLE_CFG, >> > &pgtbl_cfg); >> > + } > > I'm applying for -fixes as this is an obvious problem.. But kinda > thinking that we should try to move it into an a6xx specific > create_address_space() (or wrapper for the generic fxn) > > Sai/Jordan, could I talk one of you into trying to clean this up > better for next cycle? > Looking more closely(sorry I should have before), the quirk setting is already guarded by htw_llc_slice check but what is happening here is that check is not proper when LLCC is disabled i.e., CONFIG_QCOM_LLCC=n. When LLCC is disabled, htw_llc_slice is set to NULL and the !IS_ERR check passes because it doesn't take care of NULL and quirk is set causing bugs. So the proper fix would be to use IS_ERR_OR_NULL for the check. Konrad, can you please test this below change without your change? diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c index 130661898546..3b798e883f82 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -1117,7 +1117,7 @@ static void a6xx_llc_slices_init(struct platform_device *pdev, a6xx_gpu->llc_slice = llcc_slice_getd(LLCC_GPU); a6xx_gpu->htw_llc_slice = llcc_slice_getd(LLCC_GPUHTW); - if (IS_ERR(a6xx_gpu->llc_slice) && IS_ERR(a6xx_gpu->htw_llc_slice)) + if (IS_ERR_OR_NULL(a6xx_gpu->llc_slice) && IS_ERR_OR_NULL(a6xx_gpu->htw_llc_slice)) a6xx_gpu->llc_mmio = ERR_PTR(-EINVAL); } diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c index 6cf9975e951e..dbd5cacddb9c 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c @@ -206,7 +206,7 @@ adreno_iommu_create_address_space(struct msm_gpu *gpu, * This allows GPU to set the bus attributes required to use system * cache on behalf of the iommu page table walker. */ - if (!IS_ERR(a6xx_gpu->htw_llc_slice)) { + if (!IS_ERR_OR_NULL(a6xx_gpu->htw_llc_slice)) { pgtbl_cfg.quirks = IO_PGTABLE_QUIRK_ARM_OUTER_WBWA; iommu_domain_set_attr(iommu, DOMAIN_ATTR_IO_PGTABLE_CFG, &pgtbl_cfg); } Thanks, Sai -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2021-01-08 12:27 UTC|newest] Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-01-04 19:30 [PATCH] drm/msm: Only enable A6xx LLCC code on A6xx Konrad Dybcio 2021-01-04 19:30 ` Konrad Dybcio 2021-01-04 21:11 ` Jordan Crouse 2021-01-04 21:11 ` Jordan Crouse 2021-01-07 4:50 ` Sai Prakash Ranjan 2021-01-07 4:50 ` Sai Prakash Ranjan 2021-01-07 17:26 ` Rob Clark 2021-01-07 17:26 ` Rob Clark 2021-01-08 12:26 ` Sai Prakash Ranjan [this message] 2021-01-08 12:26 ` Sai Prakash Ranjan 2021-01-08 13:39 ` Konrad Dybcio 2021-01-08 13:39 ` Konrad Dybcio 2021-01-08 14:05 ` Sai Prakash Ranjan 2021-01-08 14:05 ` Sai Prakash Ranjan 2021-01-08 16:46 ` [Freedreno] " Rob Clark 2021-01-08 16:46 ` Rob Clark 2021-01-11 4:24 ` Sai Prakash Ranjan 2021-01-11 4:24 ` Sai Prakash Ranjan 2021-01-11 16:11 ` Jordan Crouse 2021-01-11 16:11 ` Jordan Crouse 2021-01-12 6:49 ` Sai Prakash Ranjan 2021-01-12 6:49 ` Sai Prakash Ranjan 2021-03-01 19:59 ` patchwork-bot+linux-arm-msm
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=20210108122601.14993-1-saiprakash.ranjan@codeaurora.org \ --to=saiprakash.ranjan@codeaurora.org \ --cc=airlied@linux.ie \ --cc=airlied@redhat.com \ --cc=akhilpo@codeaurora.org \ --cc=angelogioacchino.delregno@somainline.org \ --cc=bjorn.andersson@linaro.org \ --cc=daniel@ffwll.ch \ --cc=dri-devel@lists.freedesktop.org \ --cc=freedreno@lists.freedesktop.org \ --cc=jcrouse@codeaurora.org \ --cc=jonathan@marek.ca \ --cc=konrad.dybcio@somainline.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=marijn.suijten@somainline.org \ --cc=martin.botka@somainline.org \ --cc=phone-devel@vger.kernel.org \ --cc=robdclark@gmail.com \ --cc=sean@poorly.run \ --cc=shawn.guo@linaro.org \ --cc=smasetty@codeaurora.org \ --cc=~postmarketos/upstreaming@lists.sr.ht \ /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: linkBe 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.