From: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
To: Matthias Brugger <matthias.bgg@gmail.com>, yong.wu@mediatek.com
Cc: joro@8bytes.org, will@kernel.org, robh+dt@kernel.org,
krzysztof.kozlowski+dt@linaro.org,
iommu@lists.linux-foundation.org,
linux-mediatek@lists.infradead.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
krzysztof.kozlowski@linaro.org
Subject: Re: [PATCH v3 6/6] iommu: mtk_iommu: Lookup phandle to retrieve syscon to pericfg
Date: Wed, 15 Jun 2022 14:28:22 +0200 [thread overview]
Message-ID: <e4a2c56e-8e38-b44c-04b4-fd792fbf2f74@collabora.com> (raw)
In-Reply-To: <8b31b1d2-4ed7-11a1-2124-4641c8f3abcd@gmail.com>
Il 15/06/22 14:09, Matthias Brugger ha scritto:
>
>
> On 09/06/2022 12:08, AngeloGioacchino Del Regno wrote:
>> On some SoCs (of which only MT8195 is supported at the time of writing),
>> the "R" and "W" (I/O) enable bits for the IOMMUs are in the pericfg_ao
>> register space and not in the IOMMU space: as it happened already with
>> infracfg, it is expected that this list will grow.
>>
>> Instead of specifying pericfg compatibles on a per-SoC basis, following
>> what was done with infracfg, let's lookup the syscon by phandle instead.
>>
>> Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
>> ---
>> drivers/iommu/mtk_iommu.c | 23 +++++++++++++----------
>> 1 file changed, 13 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
>> index 90685946fcbe..0ea0848581e9 100644
>> --- a/drivers/iommu/mtk_iommu.c
>> +++ b/drivers/iommu/mtk_iommu.c
>> @@ -138,6 +138,8 @@
>> /* PM and clock always on. e.g. infra iommu */
>> #define PM_CLK_AO BIT(15)
>> #define IFA_IOMMU_PCIE_SUPPORT BIT(16)
>> +/* IOMMU I/O (r/w) is enabled using PERICFG_IOMMU_1 register */
>> +#define HAS_PERI_IOMMU1_REG BIT(17)
>
> From what I can see MTK_IOMMU_TYPE_INFRA is only set in MT8195 which uses pericfg.
> So we don't need a new flag here. For me the flag name MTK_IOMMU_TYPE_INFRA was
> confusing as it has nothing to do with the use of infracfg. I'll hijack this patch
> to provide some feedback on the actual code, please see below.
>
>> #define MTK_IOMMU_HAS_FLAG_MASK(pdata, _x, mask) \
>> ((((pdata)->flags) & (mask)) == (_x))
>> @@ -187,7 +189,6 @@ struct mtk_iommu_plat_data {
>> u32 flags;
>> u32 inv_sel_reg;
>> - char *pericfg_comp_str;
>> struct list_head *hw_list;
>> unsigned int iova_region_nr;
>> const struct mtk_iommu_iova_region *iova_region;
>> @@ -1218,14 +1219,16 @@ static int mtk_iommu_probe(struct platform_device *pdev)
>> goto out_runtime_disable;
>> }
>> } else if (MTK_IOMMU_IS_TYPE(data->plat_data, MTK_IOMMU_TYPE_INFRA) &&
>> - data->plat_data->pericfg_comp_str) {
>
> Check for pericfg_comp_str is not needed, we only have one platform that uses
> MTK_IOMMU_TYPE_INFRA.
>
Fair enough. I agree.
>> - infracfg =
>> syscon_regmap_lookup_by_compatible(data->plat_data->pericfg_comp_str);
>
> We can do something like this to make the code clearer:
> data->pericfg = syscon_regmap_lookup_by_compatible(data->plat_data->pericfg_comp_str);
> if (IS_ERR(data->pericfg)) {
>
> Using infracfg variable here is confusing as it has nothing to do with infracfg
> used with HAS_4GB_MODE flag.
Yes Matthias, using the infracfg variable is confusing - that's why I changed that
already....
>
> Regards,
> Matthias
>
>> - if (IS_ERR(infracfg)) {
>> - ret = PTR_ERR(infracfg);
>> - goto out_runtime_disable;
>> + MTK_IOMMU_HAS_FLAG(data->plat_data, HAS_PERI_IOMMU1_REG)) {
>> + data->pericfg = syscon_regmap_lookup_by_phandle(dev->of_node,
>> "mediatek,pericfg");
....Here, where I'm assigning directly to data->pericfg :-P
By the way, since it was only about one platform, my intention was to remove the
pericfg_comp_str from struct iommu_plat_data (as you can see), but then, with the
current code, I had to assign .....
>> + if (IS_ERR(data->pericfg)) {
>> + p = "mediatek,mt8195-pericfg_ao";
...the string to 'p', because otherwise it would go over 100 columns.
In any case, I just checked and, apparently, MT8195 is really the one and only SoC
that needs this pericfg register to be managed by Linux... even the latest and
greatest smartphone chip (Dimensity 9000, MT6983) doesn't need this (at least,
from what I can read on a downstream kernel).
On an afterthought, perhaps the best idea is to just leave this as it is and, as
you proposed, avoid using that confusing infracfg variable, without adding the
pericfg handle at all.
After all, it's just one single SoC.
I'll send a new version soon!
Cheers,
Angelo
next prev parent reply other threads:[~2022-06-15 12:28 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-09 10:07 [PATCH v3 0/6] mtk_iommu: Specify phandles to infracfg and pericfg AngeloGioacchino Del Regno
2022-06-09 10:07 ` [PATCH v3 1/6] dt-bindings: iommu: mediatek: Add mediatek,infracfg phandle AngeloGioacchino Del Regno
2022-06-09 14:23 ` Rob Herring
2022-06-09 10:07 ` [PATCH v3 2/6] iommu: mtk_iommu: Lookup phandle to retrieve syscon to infracfg AngeloGioacchino Del Regno
2022-06-09 17:52 ` Miles Chen
2022-06-13 5:31 ` Yong Wu
2022-06-14 15:14 ` Matthias Brugger
2022-06-09 10:07 ` [PATCH v3 3/6] arm64: dts: mediatek: mt8173: Add mediatek,infracfg phandle for IOMMU AngeloGioacchino Del Regno
2022-06-09 18:06 ` Miles Chen
2022-06-09 10:08 ` [PATCH v3 4/6] arm64: dts: mediatek: mt2712e: " AngeloGioacchino Del Regno
2022-06-09 18:08 ` Miles Chen
2022-06-09 10:08 ` [PATCH v3 5/6] dt-bindings: iommu: mediatek: Add mediatek,pericfg phandle AngeloGioacchino Del Regno
2022-06-14 15:16 ` Matthias Brugger
2022-06-09 10:08 ` [PATCH v3 6/6] iommu: mtk_iommu: Lookup phandle to retrieve syscon to pericfg AngeloGioacchino Del Regno
2022-06-13 5:32 ` Yong Wu
2022-06-13 8:13 ` AngeloGioacchino Del Regno
2022-06-16 6:30 ` Yong Wu
2022-06-16 8:45 ` AngeloGioacchino Del Regno
2022-06-15 12:09 ` Matthias Brugger
2022-06-15 12:28 ` AngeloGioacchino Del Regno [this message]
2022-06-17 10:32 ` Matthias Brugger
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=e4a2c56e-8e38-b44c-04b4-fd792fbf2f74@collabora.com \
--to=angelogioacchino.delregno@collabora.com \
--cc=devicetree@vger.kernel.org \
--cc=iommu@lists.linux-foundation.org \
--cc=joro@8bytes.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=krzysztof.kozlowski@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=matthias.bgg@gmail.com \
--cc=robh+dt@kernel.org \
--cc=will@kernel.org \
--cc=yong.wu@mediatek.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).