linux-acpi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] Let pci_fixup_final access iommu_fwnode
@ 2020-05-12  4:08 Zhangfei Gao
  2020-05-12  4:08 ` [PATCH 1/2] iommu/of: " Zhangfei Gao
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Zhangfei Gao @ 2020-05-12  4:08 UTC (permalink / raw)
  To: Joerg Roedel, Lorenzo Pieralisi, Hanjun Guo, Sudeep Holla,
	Rafael J. Wysocki, Len Brown, jean-philippe, Greg Kroah-Hartman,
	Herbert Xu, kenneth-lee-2012, Wangzhou
  Cc: linux-kernel, linux-crypto, iommu, linux-acpi, linux-arm-kernel,
	Zhangfei Gao

Some platform devices appear as PCI but are
actually on the AMBA bus, and they need fixup in
drivers/pci/quirks.c handling iommu_fwnode.
So calling pci_fixup_final after iommu_fwnode is allocated.

For example: 
Hisilicon platform device need fixup in 
drivers/pci/quirks.c

+static void quirk_huawei_pcie_sva(struct pci_dev *pdev)
+{
+	struct iommu_fwspec *fwspec;
+
+	pdev->eetlp_prefix_path = 1;
+	fwspec = dev_iommu_fwspec_get(&pdev->dev);
+	if (fwspec)
+		fwspec->can_stall = 1;
+}
+
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa250, quirk_huawei_pcie_sva);
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa251, quirk_huawei_pcie_sva);
 

Zhangfei Gao (2):
  iommu/of: Let pci_fixup_final access iommu_fwnode
  ACPI/IORT: Let pci_fixup_final access iommu_fwnode

 drivers/acpi/arm64/iort.c | 1 +
 drivers/iommu/of_iommu.c  | 1 +
 2 files changed, 2 insertions(+)

-- 
2.7.4


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/2] iommu/of: Let pci_fixup_final access iommu_fwnode
  2020-05-12  4:08 [PATCH 0/2] Let pci_fixup_final access iommu_fwnode Zhangfei Gao
@ 2020-05-12  4:08 ` Zhangfei Gao
  2020-05-12  4:08 ` [PATCH 2/2] ACPI/IORT: " Zhangfei Gao
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Zhangfei Gao @ 2020-05-12  4:08 UTC (permalink / raw)
  To: Joerg Roedel, Lorenzo Pieralisi, Hanjun Guo, Sudeep Holla,
	Rafael J. Wysocki, Len Brown, jean-philippe, Greg Kroah-Hartman,
	Herbert Xu, kenneth-lee-2012, Wangzhou
  Cc: linux-kernel, linux-crypto, iommu, linux-acpi, linux-arm-kernel,
	Zhangfei Gao

Calling pci_fixup_final after of_pci_iommu_init, which alloc
iommu_fwnode. Some platform devices appear as PCI but are
actually on the AMBA bus, and they need fixup in
drivers/pci/quirks.c handling iommu_fwnode.
So calling pci_fixup_final after iommu_fwnode is allocated.

Signed-off-by: Zhangfei Gao <zhangfei.gao@linaro.org>
---
 drivers/iommu/of_iommu.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c
index 20738aac..c1b58c4 100644
--- a/drivers/iommu/of_iommu.c
+++ b/drivers/iommu/of_iommu.c
@@ -188,6 +188,7 @@ const struct iommu_ops *of_iommu_configure(struct device *dev,
 		pci_request_acs();
 		err = pci_for_each_dma_alias(to_pci_dev(dev),
 					     of_pci_iommu_init, &info);
+		pci_fixup_device(pci_fixup_final, to_pci_dev(dev));
 	} else if (dev_is_fsl_mc(dev)) {
 		err = of_fsl_mc_iommu_init(to_fsl_mc_device(dev), master_np);
 	} else {
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/2] ACPI/IORT: Let pci_fixup_final access iommu_fwnode
  2020-05-12  4:08 [PATCH 0/2] Let pci_fixup_final access iommu_fwnode Zhangfei Gao
  2020-05-12  4:08 ` [PATCH 1/2] iommu/of: " Zhangfei Gao
@ 2020-05-12  4:08 ` Zhangfei Gao
  2020-05-22  2:13 ` [PATCH 0/2] " Zhangfei Gao
  2020-05-25 13:43 ` Joerg Roedel
  3 siblings, 0 replies; 6+ messages in thread
From: Zhangfei Gao @ 2020-05-12  4:08 UTC (permalink / raw)
  To: Joerg Roedel, Lorenzo Pieralisi, Hanjun Guo, Sudeep Holla,
	Rafael J. Wysocki, Len Brown, jean-philippe, Greg Kroah-Hartman,
	Herbert Xu, kenneth-lee-2012, Wangzhou
  Cc: linux-kernel, linux-crypto, iommu, linux-acpi, linux-arm-kernel,
	Zhangfei Gao

Calling pci_fixup_final after iommu_fwspec_init, which alloc
iommu_fwnode. Some platform devices appear as PCI but are
actually on the AMBA bus, and they need fixup in
drivers/pci/quirks.c handling iommu_fwnode.
So calling pci_fixup_final after iommu_fwnode is allocated.

Signed-off-by: Zhangfei Gao <zhangfei.gao@linaro.org>
---
 drivers/acpi/arm64/iort.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c
index 7d04424..02e361d 100644
--- a/drivers/acpi/arm64/iort.c
+++ b/drivers/acpi/arm64/iort.c
@@ -1027,6 +1027,7 @@ const struct iommu_ops *iort_iommu_configure(struct device *dev)
 		info.node = node;
 		err = pci_for_each_dma_alias(to_pci_dev(dev),
 					     iort_pci_iommu_init, &info);
+		pci_fixup_device(pci_fixup_final, to_pci_dev(dev));
 
 		fwspec = dev_iommu_fwspec_get(dev);
 		if (fwspec && iort_pci_rc_supports_ats(node))
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/2] Let pci_fixup_final access iommu_fwnode
  2020-05-12  4:08 [PATCH 0/2] Let pci_fixup_final access iommu_fwnode Zhangfei Gao
  2020-05-12  4:08 ` [PATCH 1/2] iommu/of: " Zhangfei Gao
  2020-05-12  4:08 ` [PATCH 2/2] ACPI/IORT: " Zhangfei Gao
@ 2020-05-22  2:13 ` Zhangfei Gao
  2020-05-25 13:43 ` Joerg Roedel
  3 siblings, 0 replies; 6+ messages in thread
From: Zhangfei Gao @ 2020-05-22  2:13 UTC (permalink / raw)
  To: Joerg Roedel, Lorenzo Pieralisi, Hanjun Guo, Sudeep Holla,
	Rafael J. Wysocki, Len Brown, jean-philippe, Greg Kroah-Hartman,
	Herbert Xu, kenneth-lee-2012, Wangzhou
  Cc: linux-kernel, linux-crypto, iommu, linux-acpi, linux-arm-kernel

Hi, Joerg

On 2020/5/12 下午12:08, Zhangfei Gao wrote:
> Some platform devices appear as PCI but are
> actually on the AMBA bus, and they need fixup in
> drivers/pci/quirks.c handling iommu_fwnode.
> So calling pci_fixup_final after iommu_fwnode is allocated.
>
> For example:
> Hisilicon platform device need fixup in
> drivers/pci/quirks.c
>
> +static void quirk_huawei_pcie_sva(struct pci_dev *pdev)
> +{
> +	struct iommu_fwspec *fwspec;
> +
> +	pdev->eetlp_prefix_path = 1;
> +	fwspec = dev_iommu_fwspec_get(&pdev->dev);
> +	if (fwspec)
> +		fwspec->can_stall = 1;
> +}
> +
> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa250, quirk_huawei_pcie_sva);
> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa251, quirk_huawei_pcie_sva);
>   
>
> Zhangfei Gao (2):
>    iommu/of: Let pci_fixup_final access iommu_fwnode
>    ACPI/IORT: Let pci_fixup_final access iommu_fwnode
>
>   drivers/acpi/arm64/iort.c | 1 +
>   drivers/iommu/of_iommu.c  | 1 +
>   2 files changed, 2 insertions(+)
>
Would you mind give any suggestion?

We need access fwspec->can_stall describing the platform device (a fake 
pcie) can support stall feature.
can_stall will be used arm_smmu_add_device [1].
And stall is not a pci feature, so no such member in struct pci_dev.

iommu_fwnode is allocated in iommu_fwspec_init, from of_pci_iommu_init 
or iort_pci_iommu_init.
The pci_fixup_device(pci_fixup_final, dev) in pci_bus_add_device is too 
early that  iommu_fwnode
is not allocated.
The pci_fixup_device(pci_fixup_enable, dev) in do_pci_enable_device is 
too late after

arm_smmu_add_device.


So the idea here is calling pci_fixup_device(pci_fixup_final) after
of_pci_iommu_init and iort_pci_iommu_init, where iommu_fwnode is allocated.



[1] https://www.spinics.net/lists/linux-pci/msg94559.html

Thanks


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/2] Let pci_fixup_final access iommu_fwnode
  2020-05-12  4:08 [PATCH 0/2] Let pci_fixup_final access iommu_fwnode Zhangfei Gao
                   ` (2 preceding siblings ...)
  2020-05-22  2:13 ` [PATCH 0/2] " Zhangfei Gao
@ 2020-05-25 13:43 ` Joerg Roedel
  2020-05-26 12:07   ` Zhangfei Gao
  3 siblings, 1 reply; 6+ messages in thread
From: Joerg Roedel @ 2020-05-25 13:43 UTC (permalink / raw)
  To: Zhangfei Gao
  Cc: Lorenzo Pieralisi, Hanjun Guo, Sudeep Holla, Rafael J. Wysocki,
	Len Brown, jean-philippe, Greg Kroah-Hartman, Herbert Xu,
	kenneth-lee-2012, Wangzhou, linux-kernel, linux-crypto, iommu,
	linux-acpi, linux-arm-kernel

On Tue, May 12, 2020 at 12:08:29PM +0800, Zhangfei Gao wrote:
> Some platform devices appear as PCI but are
> actually on the AMBA bus, and they need fixup in
> drivers/pci/quirks.c handling iommu_fwnode.
> So calling pci_fixup_final after iommu_fwnode is allocated.
> 
> For example: 
> Hisilicon platform device need fixup in 
> drivers/pci/quirks.c
> 
> +static void quirk_huawei_pcie_sva(struct pci_dev *pdev)
> +{
> +	struct iommu_fwspec *fwspec;
> +
> +	pdev->eetlp_prefix_path = 1;
> +	fwspec = dev_iommu_fwspec_get(&pdev->dev);
> +	if (fwspec)
> +		fwspec->can_stall = 1;
> +}
> +
> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa250, quirk_huawei_pcie_sva);
> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa251, quirk_huawei_pcie_sva);

I don't think it is a great idea to hook this into PCI_FIXUP_FINAL. The
fixup list needs to be processed for every device, which will slow down
probing.

So either we introduce something like PCI_FIXUP_IOMMU, if this is
entirely PCI specific. If it needs to be generic we need some fixup
infrastructure in the IOMMU code itself.

Regards,

	Joerg

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/2] Let pci_fixup_final access iommu_fwnode
  2020-05-25 13:43 ` Joerg Roedel
@ 2020-05-26 12:07   ` Zhangfei Gao
  0 siblings, 0 replies; 6+ messages in thread
From: Zhangfei Gao @ 2020-05-26 12:07 UTC (permalink / raw)
  To: Joerg Roedel
  Cc: Lorenzo Pieralisi, Hanjun Guo, Sudeep Holla, Rafael J. Wysocki,
	Len Brown, jean-philippe, Greg Kroah-Hartman, Herbert Xu,
	kenneth-lee-2012, Wangzhou, linux-kernel, linux-crypto, iommu,
	linux-acpi, linux-arm-kernel



On 2020/5/25 下午9:43, Joerg Roedel wrote:
> On Tue, May 12, 2020 at 12:08:29PM +0800, Zhangfei Gao wrote:
>> Some platform devices appear as PCI but are
>> actually on the AMBA bus, and they need fixup in
>> drivers/pci/quirks.c handling iommu_fwnode.
>> So calling pci_fixup_final after iommu_fwnode is allocated.
>>
>> For example:
>> Hisilicon platform device need fixup in
>> drivers/pci/quirks.c
>>
>> +static void quirk_huawei_pcie_sva(struct pci_dev *pdev)
>> +{
>> +	struct iommu_fwspec *fwspec;
>> +
>> +	pdev->eetlp_prefix_path = 1;
>> +	fwspec = dev_iommu_fwspec_get(&pdev->dev);
>> +	if (fwspec)
>> +		fwspec->can_stall = 1;
>> +}
>> +
>> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa250, quirk_huawei_pcie_sva);
>> +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa251, quirk_huawei_pcie_sva);
> I don't think it is a great idea to hook this into PCI_FIXUP_FINAL. The
> fixup list needs to be processed for every device, which will slow down
> probing.
>
> So either we introduce something like PCI_FIXUP_IOMMU, if this is
> entirely PCI specific. If it needs to be generic we need some fixup
> infrastructure in the IOMMU code itself.

Thanks Joerg for the good suggestion.
I am trying to introduce PCI_FIXUP_IOMMU in
https://lkml.org/lkml/2020/5/26/366

Thanks

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-05-26 12:07 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-12  4:08 [PATCH 0/2] Let pci_fixup_final access iommu_fwnode Zhangfei Gao
2020-05-12  4:08 ` [PATCH 1/2] iommu/of: " Zhangfei Gao
2020-05-12  4:08 ` [PATCH 2/2] ACPI/IORT: " Zhangfei Gao
2020-05-22  2:13 ` [PATCH 0/2] " Zhangfei Gao
2020-05-25 13:43 ` Joerg Roedel
2020-05-26 12:07   ` Zhangfei Gao

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).