All of lore.kernel.org
 help / color / mirror / Atom feed
From: Miles Chen <miles.chen@mediatek.com>
To: Matthias Brugger <matthias.bgg@gmail.com>
Cc: Yong Wu <yong.wu@mediatek.com>, Joerg Roedel <joro@8bytes.org>,
	"Rob Herring" <robh@kernel.org>,
	<iommu@lists.linux-foundation.org>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-mediatek@lists.infradead.org>,
	<linux-kernel@vger.kernel.org>, <wsd_upstream@mediatek.com>,
	Mike Rapoport <rppt@linux.ibm.com>,
	David Hildenbrand <david@redhat.com>,
	Yingjoe Chen <yingjoe.chen@mediatek.com>,
	Christoph Hellwig <hch@lst.de>, Chao Hao <chao.hao@mediatek.com>
Subject: Re: [PATCH v2] iommu/mediatek: check 4GB mode by reading infracfg
Date: Wed, 22 Jul 2020 17:37:17 +0800	[thread overview]
Message-ID: <1595410637.10848.7.camel@mtkswgap22> (raw)
In-Reply-To: <1595402238.10848.3.camel@mtkswgap22>

On Wed, 2020-07-22 at 15:17 +0800, Miles Chen wrote:
> On Tue, 2020-07-21 at 23:19 +0200, Matthias Brugger wrote:
> > 
> > On 21/07/2020 13:24, Yong Wu wrote:
> > > On Tue, 2020-07-21 at 11:40 +0200, Matthias Brugger wrote:
> > >>
> > >> On 21/07/2020 04:16, Miles Chen wrote:
> > >>> In previous discussion [1] and [2], we found that it is risky to
> > >>> use max_pfn or totalram_pages to tell if 4GB mode is enabled.
> > >>>
> > >>> Check 4GB mode by reading infracfg register, remove the usage
> > >>> of the un-exported symbol max_pfn.
> > >>>
> > >>> This is a step towards building mtk_iommu as a kernel module.
> > >>>
> > >>> Change since v1:
> > >>> 1. remove the phandle usage, search for infracfg instead [3]
> > >>> 2. use infracfg instead of infracfg_regmap
> > >>> 3. move infracfg definitaions to linux/soc/mediatek/infracfg.h
> > >>> 4. update enable_4GB only when has_4gb_mode
> > >>>
> > >>> [1] https://urldefense.com/v3/__https://lkml.org/lkml/2020/6/3/733__;!!CTRNKA9wMg0ARbw!w5YjY83YRL9_ijgXHwB1x2Dnb5BqiFUI8H5IAyAWWFMvUJKI9Qbj_zta2AaiFZejiQ$ 
> > >>> [2] https://urldefense.com/v3/__https://lkml.org/lkml/2020/6/4/136__;!!CTRNKA9wMg0ARbw!w5YjY83YRL9_ijgXHwB1x2Dnb5BqiFUI8H5IAyAWWFMvUJKI9Qbj_zta2Aa9U2yQyg$ 
> > >>> [3] https://urldefense.com/v3/__https://lkml.org/lkml/2020/7/15/1147__;!!CTRNKA9wMg0ARbw!w5YjY83YRL9_ijgXHwB1x2Dnb5BqiFUI8H5IAyAWWFMvUJKI9Qbj_zta2Aaxpk_Wjw$ 
> > >>>
> > >>> Cc: Mike Rapoport <rppt@linux.ibm.com>
> > >>> Cc: David Hildenbrand <david@redhat.com>
> > >>> Cc: Yong Wu <yong.wu@mediatek.com>
> > >>> Cc: Yingjoe Chen <yingjoe.chen@mediatek.com>
> > >>> Cc: Christoph Hellwig <hch@lst.de>
> > >>> Cc: Yong Wu <yong.wu@mediatek.com>
> > >>> Cc: Chao Hao <chao.hao@mediatek.com>
> > >>> Cc: Rob Herring <robh@kernel.org>
> > >>> Cc: Matthias Brugger <matthias.bgg@gmail.com>
> > >>> Signed-off-by: Miles Chen <miles.chen@mediatek.com>
> > >>> ---
> > >>>    drivers/iommu/mtk_iommu.c             | 26 +++++++++++++++++++++-----
> > >>>    include/linux/soc/mediatek/infracfg.h |  3 +++
> > >>>    2 files changed, 24 insertions(+), 5 deletions(-)
> > >>>
> > >>> diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
> > >>> index 2be96f1cdbd2..16765f532853 100644
> > >>> --- a/drivers/iommu/mtk_iommu.c
> > >>> +++ b/drivers/iommu/mtk_iommu.c
> > >>> @@ -3,7 +3,6 @@
> > >>>     * Copyright (c) 2015-2016 MediaTek Inc.
> > >>>     * Author: Yong Wu <yong.wu@mediatek.com>
> > >>>     */
> > >>> -#include <linux/memblock.h>
> > >>>    #include <linux/bug.h>
> > >>>    #include <linux/clk.h>
> > >>>    #include <linux/component.h>
> > >>> @@ -15,13 +14,16 @@
> > >>>    #include <linux/iommu.h>
> > >>>    #include <linux/iopoll.h>
> > >>>    #include <linux/list.h>
> > >>> +#include <linux/mfd/syscon.h>
> > >>>    #include <linux/of_address.h>
> > >>>    #include <linux/of_iommu.h>
> > >>>    #include <linux/of_irq.h>
> > >>>    #include <linux/of_platform.h>
> > >>>    #include <linux/platform_device.h>
> > >>> +#include <linux/regmap.h>
> > >>>    #include <linux/slab.h>
> > >>>    #include <linux/spinlock.h>
> > >>> +#include <linux/soc/mediatek/infracfg.h>
> > >>>    #include <asm/barrier.h>
> > >>>    #include <soc/mediatek/smi.h>
> > >>>    
> > >>> @@ -599,8 +601,10 @@ static int mtk_iommu_probe(struct platform_device *pdev)
> > >>>    	struct resource         *res;
> > >>>    	resource_size_t		ioaddr;
> > >>>    	struct component_match  *match = NULL;
> > >>> +	struct regmap		*infracfg;
> > >>>    	void                    *protect;
> > >>>    	int                     i, larb_nr, ret;
> > >>> +	u32			val;
> > >>>    
> > >>>    	data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
> > >>>    	if (!data)
> > >>> @@ -614,10 +618,22 @@ static int mtk_iommu_probe(struct platform_device *pdev)
> > >>>    		return -ENOMEM;
> > >>>    	data->protect_base = ALIGN(virt_to_phys(protect), MTK_PROTECT_PA_ALIGN);
> > >>>    
> > >>> -	/* Whether the current dram is over 4GB */
> > >>> -	data->enable_4GB = !!(max_pfn > (BIT_ULL(32) >> PAGE_SHIFT));
> > >>> -	if (!data->plat_data->has_4gb_mode)
> > >>> -		data->enable_4GB = false;
> > >>> +	data->enable_4GB = false;
> > >>> +	if (data->plat_data->has_4gb_mode) {
> > >>> +		infracfg = syscon_regmap_lookup_by_compatible(
> > >>> +				"mediatek,mt8173-infracfg");
> > >>> +		if (IS_ERR(infracfg)) {
> > >>> +			infracfg = syscon_regmap_lookup_by_compatible(
> > >>> +					"mediatek,mt2712-infracfg");
> > >>> +			if (IS_ERR(infracfg))
> > >>> +				return PTR_ERR(infracfg);
> > >>
> > >> I think we should check m4u_plat instead to decide which compatible we have to
> > >> look for.
> > >> Another option would be to add a general compatible something like
> > >> "mtk-infracfg" and search for that. That would need an update of all DTS having
> > >> a infracfg compatible right now. After thinking twice, this would break newer
> > >> kernel with older device tree, so maybe it's better to go with m4u_plat switch
> > >> statement.
> > > 
> > > Add a "char *infracfg" in the plat_data, Use the mt2712, mt8173
> > > corresponding string in it. If it is NULL, It means the "enable_4GB"
> > > always is false. Then we also can remove the flag "has_4gb_mode".
> > > 
> > > is this OK?
> > > 
> > 
> > It's an option, but I personally find that a bit hacky.
> 
> Thanks Yong and Matthias for your comment.
> I will try adding a char *infracfg in patch v3.
> 

I misunderstood the comment.
I should check m4u_plat to decide which string to look for, not adding a
char *infracfg in patch v3.


Miles
> 
> > 
> > Regards,
> > Matthias
> 


WARNING: multiple messages have this Message-ID (diff)
From: Miles Chen <miles.chen@mediatek.com>
To: Matthias Brugger <matthias.bgg@gmail.com>
Cc: Rob Herring <robh@kernel.org>,
	wsd_upstream@mediatek.com, David Hildenbrand <david@redhat.com>,
	linux-kernel@vger.kernel.org, Mike Rapoport <rppt@linux.ibm.com>,
	Chao Hao <chao.hao@mediatek.com>,
	iommu@lists.linux-foundation.org,
	linux-mediatek@lists.infradead.org,
	Yingjoe Chen <yingjoe.chen@mediatek.com>,
	Christoph Hellwig <hch@lst.de>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2] iommu/mediatek: check 4GB mode by reading infracfg
Date: Wed, 22 Jul 2020 17:37:17 +0800	[thread overview]
Message-ID: <1595410637.10848.7.camel@mtkswgap22> (raw)
In-Reply-To: <1595402238.10848.3.camel@mtkswgap22>

On Wed, 2020-07-22 at 15:17 +0800, Miles Chen wrote:
> On Tue, 2020-07-21 at 23:19 +0200, Matthias Brugger wrote:
> > 
> > On 21/07/2020 13:24, Yong Wu wrote:
> > > On Tue, 2020-07-21 at 11:40 +0200, Matthias Brugger wrote:
> > >>
> > >> On 21/07/2020 04:16, Miles Chen wrote:
> > >>> In previous discussion [1] and [2], we found that it is risky to
> > >>> use max_pfn or totalram_pages to tell if 4GB mode is enabled.
> > >>>
> > >>> Check 4GB mode by reading infracfg register, remove the usage
> > >>> of the un-exported symbol max_pfn.
> > >>>
> > >>> This is a step towards building mtk_iommu as a kernel module.
> > >>>
> > >>> Change since v1:
> > >>> 1. remove the phandle usage, search for infracfg instead [3]
> > >>> 2. use infracfg instead of infracfg_regmap
> > >>> 3. move infracfg definitaions to linux/soc/mediatek/infracfg.h
> > >>> 4. update enable_4GB only when has_4gb_mode
> > >>>
> > >>> [1] https://urldefense.com/v3/__https://lkml.org/lkml/2020/6/3/733__;!!CTRNKA9wMg0ARbw!w5YjY83YRL9_ijgXHwB1x2Dnb5BqiFUI8H5IAyAWWFMvUJKI9Qbj_zta2AaiFZejiQ$ 
> > >>> [2] https://urldefense.com/v3/__https://lkml.org/lkml/2020/6/4/136__;!!CTRNKA9wMg0ARbw!w5YjY83YRL9_ijgXHwB1x2Dnb5BqiFUI8H5IAyAWWFMvUJKI9Qbj_zta2Aa9U2yQyg$ 
> > >>> [3] https://urldefense.com/v3/__https://lkml.org/lkml/2020/7/15/1147__;!!CTRNKA9wMg0ARbw!w5YjY83YRL9_ijgXHwB1x2Dnb5BqiFUI8H5IAyAWWFMvUJKI9Qbj_zta2Aaxpk_Wjw$ 
> > >>>
> > >>> Cc: Mike Rapoport <rppt@linux.ibm.com>
> > >>> Cc: David Hildenbrand <david@redhat.com>
> > >>> Cc: Yong Wu <yong.wu@mediatek.com>
> > >>> Cc: Yingjoe Chen <yingjoe.chen@mediatek.com>
> > >>> Cc: Christoph Hellwig <hch@lst.de>
> > >>> Cc: Yong Wu <yong.wu@mediatek.com>
> > >>> Cc: Chao Hao <chao.hao@mediatek.com>
> > >>> Cc: Rob Herring <robh@kernel.org>
> > >>> Cc: Matthias Brugger <matthias.bgg@gmail.com>
> > >>> Signed-off-by: Miles Chen <miles.chen@mediatek.com>
> > >>> ---
> > >>>    drivers/iommu/mtk_iommu.c             | 26 +++++++++++++++++++++-----
> > >>>    include/linux/soc/mediatek/infracfg.h |  3 +++
> > >>>    2 files changed, 24 insertions(+), 5 deletions(-)
> > >>>
> > >>> diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
> > >>> index 2be96f1cdbd2..16765f532853 100644
> > >>> --- a/drivers/iommu/mtk_iommu.c
> > >>> +++ b/drivers/iommu/mtk_iommu.c
> > >>> @@ -3,7 +3,6 @@
> > >>>     * Copyright (c) 2015-2016 MediaTek Inc.
> > >>>     * Author: Yong Wu <yong.wu@mediatek.com>
> > >>>     */
> > >>> -#include <linux/memblock.h>
> > >>>    #include <linux/bug.h>
> > >>>    #include <linux/clk.h>
> > >>>    #include <linux/component.h>
> > >>> @@ -15,13 +14,16 @@
> > >>>    #include <linux/iommu.h>
> > >>>    #include <linux/iopoll.h>
> > >>>    #include <linux/list.h>
> > >>> +#include <linux/mfd/syscon.h>
> > >>>    #include <linux/of_address.h>
> > >>>    #include <linux/of_iommu.h>
> > >>>    #include <linux/of_irq.h>
> > >>>    #include <linux/of_platform.h>
> > >>>    #include <linux/platform_device.h>
> > >>> +#include <linux/regmap.h>
> > >>>    #include <linux/slab.h>
> > >>>    #include <linux/spinlock.h>
> > >>> +#include <linux/soc/mediatek/infracfg.h>
> > >>>    #include <asm/barrier.h>
> > >>>    #include <soc/mediatek/smi.h>
> > >>>    
> > >>> @@ -599,8 +601,10 @@ static int mtk_iommu_probe(struct platform_device *pdev)
> > >>>    	struct resource         *res;
> > >>>    	resource_size_t		ioaddr;
> > >>>    	struct component_match  *match = NULL;
> > >>> +	struct regmap		*infracfg;
> > >>>    	void                    *protect;
> > >>>    	int                     i, larb_nr, ret;
> > >>> +	u32			val;
> > >>>    
> > >>>    	data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
> > >>>    	if (!data)
> > >>> @@ -614,10 +618,22 @@ static int mtk_iommu_probe(struct platform_device *pdev)
> > >>>    		return -ENOMEM;
> > >>>    	data->protect_base = ALIGN(virt_to_phys(protect), MTK_PROTECT_PA_ALIGN);
> > >>>    
> > >>> -	/* Whether the current dram is over 4GB */
> > >>> -	data->enable_4GB = !!(max_pfn > (BIT_ULL(32) >> PAGE_SHIFT));
> > >>> -	if (!data->plat_data->has_4gb_mode)
> > >>> -		data->enable_4GB = false;
> > >>> +	data->enable_4GB = false;
> > >>> +	if (data->plat_data->has_4gb_mode) {
> > >>> +		infracfg = syscon_regmap_lookup_by_compatible(
> > >>> +				"mediatek,mt8173-infracfg");
> > >>> +		if (IS_ERR(infracfg)) {
> > >>> +			infracfg = syscon_regmap_lookup_by_compatible(
> > >>> +					"mediatek,mt2712-infracfg");
> > >>> +			if (IS_ERR(infracfg))
> > >>> +				return PTR_ERR(infracfg);
> > >>
> > >> I think we should check m4u_plat instead to decide which compatible we have to
> > >> look for.
> > >> Another option would be to add a general compatible something like
> > >> "mtk-infracfg" and search for that. That would need an update of all DTS having
> > >> a infracfg compatible right now. After thinking twice, this would break newer
> > >> kernel with older device tree, so maybe it's better to go with m4u_plat switch
> > >> statement.
> > > 
> > > Add a "char *infracfg" in the plat_data, Use the mt2712, mt8173
> > > corresponding string in it. If it is NULL, It means the "enable_4GB"
> > > always is false. Then we also can remove the flag "has_4gb_mode".
> > > 
> > > is this OK?
> > > 
> > 
> > It's an option, but I personally find that a bit hacky.
> 
> Thanks Yong and Matthias for your comment.
> I will try adding a char *infracfg in patch v3.
> 

I misunderstood the comment.
I should check m4u_plat to decide which string to look for, not adding a
char *infracfg in patch v3.


Miles
> 
> > 
> > Regards,
> > Matthias
> 

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

WARNING: multiple messages have this Message-ID (diff)
From: Miles Chen <miles.chen@mediatek.com>
To: Matthias Brugger <matthias.bgg@gmail.com>
Cc: Rob Herring <robh@kernel.org>,
	wsd_upstream@mediatek.com, David Hildenbrand <david@redhat.com>,
	Joerg Roedel <joro@8bytes.org>,
	linux-kernel@vger.kernel.org, Mike Rapoport <rppt@linux.ibm.com>,
	Chao Hao <chao.hao@mediatek.com>,
	iommu@lists.linux-foundation.org,
	linux-mediatek@lists.infradead.org,
	Yong Wu <yong.wu@mediatek.com>,
	Yingjoe Chen <yingjoe.chen@mediatek.com>,
	Christoph Hellwig <hch@lst.de>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2] iommu/mediatek: check 4GB mode by reading infracfg
Date: Wed, 22 Jul 2020 17:37:17 +0800	[thread overview]
Message-ID: <1595410637.10848.7.camel@mtkswgap22> (raw)
In-Reply-To: <1595402238.10848.3.camel@mtkswgap22>

On Wed, 2020-07-22 at 15:17 +0800, Miles Chen wrote:
> On Tue, 2020-07-21 at 23:19 +0200, Matthias Brugger wrote:
> > 
> > On 21/07/2020 13:24, Yong Wu wrote:
> > > On Tue, 2020-07-21 at 11:40 +0200, Matthias Brugger wrote:
> > >>
> > >> On 21/07/2020 04:16, Miles Chen wrote:
> > >>> In previous discussion [1] and [2], we found that it is risky to
> > >>> use max_pfn or totalram_pages to tell if 4GB mode is enabled.
> > >>>
> > >>> Check 4GB mode by reading infracfg register, remove the usage
> > >>> of the un-exported symbol max_pfn.
> > >>>
> > >>> This is a step towards building mtk_iommu as a kernel module.
> > >>>
> > >>> Change since v1:
> > >>> 1. remove the phandle usage, search for infracfg instead [3]
> > >>> 2. use infracfg instead of infracfg_regmap
> > >>> 3. move infracfg definitaions to linux/soc/mediatek/infracfg.h
> > >>> 4. update enable_4GB only when has_4gb_mode
> > >>>
> > >>> [1] https://urldefense.com/v3/__https://lkml.org/lkml/2020/6/3/733__;!!CTRNKA9wMg0ARbw!w5YjY83YRL9_ijgXHwB1x2Dnb5BqiFUI8H5IAyAWWFMvUJKI9Qbj_zta2AaiFZejiQ$ 
> > >>> [2] https://urldefense.com/v3/__https://lkml.org/lkml/2020/6/4/136__;!!CTRNKA9wMg0ARbw!w5YjY83YRL9_ijgXHwB1x2Dnb5BqiFUI8H5IAyAWWFMvUJKI9Qbj_zta2Aa9U2yQyg$ 
> > >>> [3] https://urldefense.com/v3/__https://lkml.org/lkml/2020/7/15/1147__;!!CTRNKA9wMg0ARbw!w5YjY83YRL9_ijgXHwB1x2Dnb5BqiFUI8H5IAyAWWFMvUJKI9Qbj_zta2Aaxpk_Wjw$ 
> > >>>
> > >>> Cc: Mike Rapoport <rppt@linux.ibm.com>
> > >>> Cc: David Hildenbrand <david@redhat.com>
> > >>> Cc: Yong Wu <yong.wu@mediatek.com>
> > >>> Cc: Yingjoe Chen <yingjoe.chen@mediatek.com>
> > >>> Cc: Christoph Hellwig <hch@lst.de>
> > >>> Cc: Yong Wu <yong.wu@mediatek.com>
> > >>> Cc: Chao Hao <chao.hao@mediatek.com>
> > >>> Cc: Rob Herring <robh@kernel.org>
> > >>> Cc: Matthias Brugger <matthias.bgg@gmail.com>
> > >>> Signed-off-by: Miles Chen <miles.chen@mediatek.com>
> > >>> ---
> > >>>    drivers/iommu/mtk_iommu.c             | 26 +++++++++++++++++++++-----
> > >>>    include/linux/soc/mediatek/infracfg.h |  3 +++
> > >>>    2 files changed, 24 insertions(+), 5 deletions(-)
> > >>>
> > >>> diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
> > >>> index 2be96f1cdbd2..16765f532853 100644
> > >>> --- a/drivers/iommu/mtk_iommu.c
> > >>> +++ b/drivers/iommu/mtk_iommu.c
> > >>> @@ -3,7 +3,6 @@
> > >>>     * Copyright (c) 2015-2016 MediaTek Inc.
> > >>>     * Author: Yong Wu <yong.wu@mediatek.com>
> > >>>     */
> > >>> -#include <linux/memblock.h>
> > >>>    #include <linux/bug.h>
> > >>>    #include <linux/clk.h>
> > >>>    #include <linux/component.h>
> > >>> @@ -15,13 +14,16 @@
> > >>>    #include <linux/iommu.h>
> > >>>    #include <linux/iopoll.h>
> > >>>    #include <linux/list.h>
> > >>> +#include <linux/mfd/syscon.h>
> > >>>    #include <linux/of_address.h>
> > >>>    #include <linux/of_iommu.h>
> > >>>    #include <linux/of_irq.h>
> > >>>    #include <linux/of_platform.h>
> > >>>    #include <linux/platform_device.h>
> > >>> +#include <linux/regmap.h>
> > >>>    #include <linux/slab.h>
> > >>>    #include <linux/spinlock.h>
> > >>> +#include <linux/soc/mediatek/infracfg.h>
> > >>>    #include <asm/barrier.h>
> > >>>    #include <soc/mediatek/smi.h>
> > >>>    
> > >>> @@ -599,8 +601,10 @@ static int mtk_iommu_probe(struct platform_device *pdev)
> > >>>    	struct resource         *res;
> > >>>    	resource_size_t		ioaddr;
> > >>>    	struct component_match  *match = NULL;
> > >>> +	struct regmap		*infracfg;
> > >>>    	void                    *protect;
> > >>>    	int                     i, larb_nr, ret;
> > >>> +	u32			val;
> > >>>    
> > >>>    	data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
> > >>>    	if (!data)
> > >>> @@ -614,10 +618,22 @@ static int mtk_iommu_probe(struct platform_device *pdev)
> > >>>    		return -ENOMEM;
> > >>>    	data->protect_base = ALIGN(virt_to_phys(protect), MTK_PROTECT_PA_ALIGN);
> > >>>    
> > >>> -	/* Whether the current dram is over 4GB */
> > >>> -	data->enable_4GB = !!(max_pfn > (BIT_ULL(32) >> PAGE_SHIFT));
> > >>> -	if (!data->plat_data->has_4gb_mode)
> > >>> -		data->enable_4GB = false;
> > >>> +	data->enable_4GB = false;
> > >>> +	if (data->plat_data->has_4gb_mode) {
> > >>> +		infracfg = syscon_regmap_lookup_by_compatible(
> > >>> +				"mediatek,mt8173-infracfg");
> > >>> +		if (IS_ERR(infracfg)) {
> > >>> +			infracfg = syscon_regmap_lookup_by_compatible(
> > >>> +					"mediatek,mt2712-infracfg");
> > >>> +			if (IS_ERR(infracfg))
> > >>> +				return PTR_ERR(infracfg);
> > >>
> > >> I think we should check m4u_plat instead to decide which compatible we have to
> > >> look for.
> > >> Another option would be to add a general compatible something like
> > >> "mtk-infracfg" and search for that. That would need an update of all DTS having
> > >> a infracfg compatible right now. After thinking twice, this would break newer
> > >> kernel with older device tree, so maybe it's better to go with m4u_plat switch
> > >> statement.
> > > 
> > > Add a "char *infracfg" in the plat_data, Use the mt2712, mt8173
> > > corresponding string in it. If it is NULL, It means the "enable_4GB"
> > > always is false. Then we also can remove the flag "has_4gb_mode".
> > > 
> > > is this OK?
> > > 
> > 
> > It's an option, but I personally find that a bit hacky.
> 
> Thanks Yong and Matthias for your comment.
> I will try adding a char *infracfg in patch v3.
> 

I misunderstood the comment.
I should check m4u_plat to decide which string to look for, not adding a
char *infracfg in patch v3.


Miles
> 
> > 
> > Regards,
> > Matthias
> 

_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

WARNING: multiple messages have this Message-ID (diff)
From: Miles Chen <miles.chen@mediatek.com>
To: Matthias Brugger <matthias.bgg@gmail.com>
Cc: Rob Herring <robh@kernel.org>,
	wsd_upstream@mediatek.com, David Hildenbrand <david@redhat.com>,
	Joerg Roedel <joro@8bytes.org>,
	linux-kernel@vger.kernel.org, Mike Rapoport <rppt@linux.ibm.com>,
	Chao Hao <chao.hao@mediatek.com>,
	iommu@lists.linux-foundation.org,
	linux-mediatek@lists.infradead.org,
	Yong Wu <yong.wu@mediatek.com>,
	Yingjoe Chen <yingjoe.chen@mediatek.com>,
	Christoph Hellwig <hch@lst.de>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2] iommu/mediatek: check 4GB mode by reading infracfg
Date: Wed, 22 Jul 2020 17:37:17 +0800	[thread overview]
Message-ID: <1595410637.10848.7.camel@mtkswgap22> (raw)
In-Reply-To: <1595402238.10848.3.camel@mtkswgap22>

On Wed, 2020-07-22 at 15:17 +0800, Miles Chen wrote:
> On Tue, 2020-07-21 at 23:19 +0200, Matthias Brugger wrote:
> > 
> > On 21/07/2020 13:24, Yong Wu wrote:
> > > On Tue, 2020-07-21 at 11:40 +0200, Matthias Brugger wrote:
> > >>
> > >> On 21/07/2020 04:16, Miles Chen wrote:
> > >>> In previous discussion [1] and [2], we found that it is risky to
> > >>> use max_pfn or totalram_pages to tell if 4GB mode is enabled.
> > >>>
> > >>> Check 4GB mode by reading infracfg register, remove the usage
> > >>> of the un-exported symbol max_pfn.
> > >>>
> > >>> This is a step towards building mtk_iommu as a kernel module.
> > >>>
> > >>> Change since v1:
> > >>> 1. remove the phandle usage, search for infracfg instead [3]
> > >>> 2. use infracfg instead of infracfg_regmap
> > >>> 3. move infracfg definitaions to linux/soc/mediatek/infracfg.h
> > >>> 4. update enable_4GB only when has_4gb_mode
> > >>>
> > >>> [1] https://urldefense.com/v3/__https://lkml.org/lkml/2020/6/3/733__;!!CTRNKA9wMg0ARbw!w5YjY83YRL9_ijgXHwB1x2Dnb5BqiFUI8H5IAyAWWFMvUJKI9Qbj_zta2AaiFZejiQ$ 
> > >>> [2] https://urldefense.com/v3/__https://lkml.org/lkml/2020/6/4/136__;!!CTRNKA9wMg0ARbw!w5YjY83YRL9_ijgXHwB1x2Dnb5BqiFUI8H5IAyAWWFMvUJKI9Qbj_zta2Aa9U2yQyg$ 
> > >>> [3] https://urldefense.com/v3/__https://lkml.org/lkml/2020/7/15/1147__;!!CTRNKA9wMg0ARbw!w5YjY83YRL9_ijgXHwB1x2Dnb5BqiFUI8H5IAyAWWFMvUJKI9Qbj_zta2Aaxpk_Wjw$ 
> > >>>
> > >>> Cc: Mike Rapoport <rppt@linux.ibm.com>
> > >>> Cc: David Hildenbrand <david@redhat.com>
> > >>> Cc: Yong Wu <yong.wu@mediatek.com>
> > >>> Cc: Yingjoe Chen <yingjoe.chen@mediatek.com>
> > >>> Cc: Christoph Hellwig <hch@lst.de>
> > >>> Cc: Yong Wu <yong.wu@mediatek.com>
> > >>> Cc: Chao Hao <chao.hao@mediatek.com>
> > >>> Cc: Rob Herring <robh@kernel.org>
> > >>> Cc: Matthias Brugger <matthias.bgg@gmail.com>
> > >>> Signed-off-by: Miles Chen <miles.chen@mediatek.com>
> > >>> ---
> > >>>    drivers/iommu/mtk_iommu.c             | 26 +++++++++++++++++++++-----
> > >>>    include/linux/soc/mediatek/infracfg.h |  3 +++
> > >>>    2 files changed, 24 insertions(+), 5 deletions(-)
> > >>>
> > >>> diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
> > >>> index 2be96f1cdbd2..16765f532853 100644
> > >>> --- a/drivers/iommu/mtk_iommu.c
> > >>> +++ b/drivers/iommu/mtk_iommu.c
> > >>> @@ -3,7 +3,6 @@
> > >>>     * Copyright (c) 2015-2016 MediaTek Inc.
> > >>>     * Author: Yong Wu <yong.wu@mediatek.com>
> > >>>     */
> > >>> -#include <linux/memblock.h>
> > >>>    #include <linux/bug.h>
> > >>>    #include <linux/clk.h>
> > >>>    #include <linux/component.h>
> > >>> @@ -15,13 +14,16 @@
> > >>>    #include <linux/iommu.h>
> > >>>    #include <linux/iopoll.h>
> > >>>    #include <linux/list.h>
> > >>> +#include <linux/mfd/syscon.h>
> > >>>    #include <linux/of_address.h>
> > >>>    #include <linux/of_iommu.h>
> > >>>    #include <linux/of_irq.h>
> > >>>    #include <linux/of_platform.h>
> > >>>    #include <linux/platform_device.h>
> > >>> +#include <linux/regmap.h>
> > >>>    #include <linux/slab.h>
> > >>>    #include <linux/spinlock.h>
> > >>> +#include <linux/soc/mediatek/infracfg.h>
> > >>>    #include <asm/barrier.h>
> > >>>    #include <soc/mediatek/smi.h>
> > >>>    
> > >>> @@ -599,8 +601,10 @@ static int mtk_iommu_probe(struct platform_device *pdev)
> > >>>    	struct resource         *res;
> > >>>    	resource_size_t		ioaddr;
> > >>>    	struct component_match  *match = NULL;
> > >>> +	struct regmap		*infracfg;
> > >>>    	void                    *protect;
> > >>>    	int                     i, larb_nr, ret;
> > >>> +	u32			val;
> > >>>    
> > >>>    	data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
> > >>>    	if (!data)
> > >>> @@ -614,10 +618,22 @@ static int mtk_iommu_probe(struct platform_device *pdev)
> > >>>    		return -ENOMEM;
> > >>>    	data->protect_base = ALIGN(virt_to_phys(protect), MTK_PROTECT_PA_ALIGN);
> > >>>    
> > >>> -	/* Whether the current dram is over 4GB */
> > >>> -	data->enable_4GB = !!(max_pfn > (BIT_ULL(32) >> PAGE_SHIFT));
> > >>> -	if (!data->plat_data->has_4gb_mode)
> > >>> -		data->enable_4GB = false;
> > >>> +	data->enable_4GB = false;
> > >>> +	if (data->plat_data->has_4gb_mode) {
> > >>> +		infracfg = syscon_regmap_lookup_by_compatible(
> > >>> +				"mediatek,mt8173-infracfg");
> > >>> +		if (IS_ERR(infracfg)) {
> > >>> +			infracfg = syscon_regmap_lookup_by_compatible(
> > >>> +					"mediatek,mt2712-infracfg");
> > >>> +			if (IS_ERR(infracfg))
> > >>> +				return PTR_ERR(infracfg);
> > >>
> > >> I think we should check m4u_plat instead to decide which compatible we have to
> > >> look for.
> > >> Another option would be to add a general compatible something like
> > >> "mtk-infracfg" and search for that. That would need an update of all DTS having
> > >> a infracfg compatible right now. After thinking twice, this would break newer
> > >> kernel with older device tree, so maybe it's better to go with m4u_plat switch
> > >> statement.
> > > 
> > > Add a "char *infracfg" in the plat_data, Use the mt2712, mt8173
> > > corresponding string in it. If it is NULL, It means the "enable_4GB"
> > > always is false. Then we also can remove the flag "has_4gb_mode".
> > > 
> > > is this OK?
> > > 
> > 
> > It's an option, but I personally find that a bit hacky.
> 
> Thanks Yong and Matthias for your comment.
> I will try adding a char *infracfg in patch v3.
> 

I misunderstood the comment.
I should check m4u_plat to decide which string to look for, not adding a
char *infracfg in patch v3.


Miles
> 
> > 
> > Regards,
> > Matthias
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-07-22  9:37 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-21  2:16 [PATCH v2] iommu/mediatek: check 4GB mode by reading infracfg Miles Chen
2020-07-21  2:16 ` Miles Chen
2020-07-21  2:16 ` Miles Chen
2020-07-21  2:16 ` Miles Chen
2020-07-21  9:10 ` David Hildenbrand
2020-07-21  9:10   ` David Hildenbrand
2020-07-21  9:10   ` David Hildenbrand
2020-07-21  9:10   ` David Hildenbrand
2020-07-22  7:15   ` Miles Chen
2020-07-22  7:15     ` Miles Chen
2020-07-22  7:15     ` Miles Chen
2020-07-22  7:15     ` Miles Chen
2020-07-21  9:40 ` Matthias Brugger
2020-07-21  9:40   ` Matthias Brugger
2020-07-21  9:40   ` Matthias Brugger
2020-07-21  9:40   ` Matthias Brugger
2020-07-21 11:24   ` Yong Wu
2020-07-21 11:24     ` Yong Wu
2020-07-21 11:24     ` Yong Wu
2020-07-21 11:24     ` Yong Wu
2020-07-21 21:19     ` Matthias Brugger
2020-07-21 21:19       ` Matthias Brugger
2020-07-21 21:19       ` Matthias Brugger
2020-07-21 21:19       ` Matthias Brugger
2020-07-22  7:17       ` Miles Chen
2020-07-22  7:17         ` Miles Chen
2020-07-22  7:17         ` Miles Chen
2020-07-22  7:17         ` Miles Chen
2020-07-22  9:37         ` Miles Chen [this message]
2020-07-22  9:37           ` Miles Chen
2020-07-22  9:37           ` Miles Chen
2020-07-22  9:37           ` Miles 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=1595410637.10848.7.camel@mtkswgap22 \
    --to=miles.chen@mediatek.com \
    --cc=chao.hao@mediatek.com \
    --cc=david@redhat.com \
    --cc=hch@lst.de \
    --cc=iommu@lists.linux-foundation.org \
    --cc=joro@8bytes.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@kernel.org \
    --cc=rppt@linux.ibm.com \
    --cc=wsd_upstream@mediatek.com \
    --cc=yingjoe.chen@mediatek.com \
    --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 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.