Linux-Rockchip Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] arm64: dts: rockchip: rk3588: add msi-map for pcie3x4_ep
@ 2025-09-08 16:24 Niklas Cassel
  2025-09-08 21:26 ` Frank Li
  0 siblings, 1 reply; 4+ messages in thread
From: Niklas Cassel @ 2025-09-08 16:24 UTC (permalink / raw)
  To: Heiko Stuebner; +Cc: linux-rockchip, Niklas Cassel, Frank Li

Support for msi-map in the pci-ep device tree binding was added in
commit a6aed6b9c79e ("dt-bindings: PCI: pci-ep: Add support for iommu-map
and msi-map").

The PCI endpoint doorbell feature was added in commit 1c3b002c6bf6 ("PCI:
endpoint: Add RC-to-EP doorbell support using platform MSI controller").

The PCI endpoint doorbell feature requires:
-An interrupt controller that implements GIC interrupt translation
 services (ITS).
-msi-map being defined in the pcie endpoint device tree node.
-CONFIG_PCI_ENDPOINT_MSI_DOORBELL being enabled.

Add msi-map to the pcie3x4_ep device tree node.

With this, the pci endpoint kselftest doorbell test case passes:
 # pci_endpoint_test -r pcie_ep_doorbell.DOORBELL_TEST
 TAP version 13
 1..1
 # Starting 1 tests from 1 test cases.
 #  RUN           pcie_ep_doorbell.DOORBELL_TEST ...
 #            OK  pcie_ep_doorbell.DOORBELL_TEST
 ok 1 pcie_ep_doorbell.DOORBELL_TEST
 # PASSED: 1 / 1 tests passed.

Cc: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Niklas Cassel <cassel@kernel.org>
---
 arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
index 90414486e466f..c0121aea791d7 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
@@ -389,6 +389,7 @@ pcie3x4_ep: pcie-ep@fe150000 {
 		interrupt-names = "sys", "pmc", "msg", "legacy", "err",
 				  "dma0", "dma1", "dma2", "dma3";
 		max-link-speed = <3>;
+		msi-map = <0x0000 &its1 0x0000 0x1000>;
 		num-lanes = <4>;
 		phys = <&pcie30phy>;
 		phy-names = "pcie-phy";
-- 
2.51.0


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

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

* Re: [PATCH] arm64: dts: rockchip: rk3588: add msi-map for pcie3x4_ep
  2025-09-08 16:24 [PATCH] arm64: dts: rockchip: rk3588: add msi-map for pcie3x4_ep Niklas Cassel
@ 2025-09-08 21:26 ` Frank Li
  2025-09-26 11:57   ` Niklas Cassel
  0 siblings, 1 reply; 4+ messages in thread
From: Frank Li @ 2025-09-08 21:26 UTC (permalink / raw)
  To: Niklas Cassel; +Cc: Heiko Stuebner, linux-rockchip

On Mon, Sep 08, 2025 at 06:24:01PM +0200, Niklas Cassel wrote:
> Support for msi-map in the pci-ep device tree binding was added in
> commit a6aed6b9c79e ("dt-bindings: PCI: pci-ep: Add support for iommu-map
> and msi-map").
>
> The PCI endpoint doorbell feature was added in commit 1c3b002c6bf6 ("PCI:
> endpoint: Add RC-to-EP doorbell support using platform MSI controller").
>
> The PCI endpoint doorbell feature requires:
> -An interrupt controller that implements GIC interrupt translation
>  services (ITS).
> -msi-map being defined in the pcie endpoint device tree node.
> -CONFIG_PCI_ENDPOINT_MSI_DOORBELL being enabled.
>
> Add msi-map to the pcie3x4_ep device tree node.
>
> With this, the pci endpoint kselftest doorbell test case passes:
>  # pci_endpoint_test -r pcie_ep_doorbell.DOORBELL_TEST
>  TAP version 13
>  1..1
>  # Starting 1 tests from 1 test cases.
>  #  RUN           pcie_ep_doorbell.DOORBELL_TEST ...
>  #            OK  pcie_ep_doorbell.DOORBELL_TEST
>  ok 1 pcie_ep_doorbell.DOORBELL_TEST
>  # PASSED: 1 / 1 tests passed.
>
> Cc: Frank Li <Frank.Li@nxp.com>
> Signed-off-by: Niklas Cassel <cassel@kernel.org>
> ---
>  arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
> index 90414486e466f..c0121aea791d7 100644
> --- a/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
> +++ b/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
> @@ -389,6 +389,7 @@ pcie3x4_ep: pcie-ep@fe150000 {
>  		interrupt-names = "sys", "pmc", "msg", "legacy", "err",
>  				  "dma0", "dma1", "dma2", "dma3";
>  		max-link-speed = <3>;
> +		msi-map = <0x0000 &its1 0x0000 0x1000>;

Not sure how your hardware map PCIe rid at EP side. If your hardware direct
use RC's RID, difference host may use differecne RID. I remember you met
similar problem when enable IOMMU.

Generally, Only 1 EP support, you can use msi-mask=<0> map all RID to a
fixed value, But it also needs change glue layer configure to force to
use the same RID.

I suppose this may not work if connected to second PCIe host slot.

Frank

>  		num-lanes = <4>;
>  		phys = <&pcie30phy>;
>  		phy-names = "pcie-phy";
> --
> 2.51.0
>
>
> _______________________________________________
> Linux-rockchip mailing list
> Linux-rockchip@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-rockchip

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

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

* Re: [PATCH] arm64: dts: rockchip: rk3588: add msi-map for pcie3x4_ep
  2025-09-08 21:26 ` Frank Li
@ 2025-09-26 11:57   ` Niklas Cassel
  2025-09-26 14:46     ` Frank Li
  0 siblings, 1 reply; 4+ messages in thread
From: Niklas Cassel @ 2025-09-26 11:57 UTC (permalink / raw)
  To: Frank Li; +Cc: Heiko Stuebner, linux-rockchip

On Mon, Sep 08, 2025 at 05:26:03PM -0400, Frank Li wrote:
> On Mon, Sep 08, 2025 at 06:24:01PM +0200, Niklas Cassel wrote:
> > Support for msi-map in the pci-ep device tree binding was added in
> > commit a6aed6b9c79e ("dt-bindings: PCI: pci-ep: Add support for iommu-map
> > and msi-map").
> >
> > The PCI endpoint doorbell feature was added in commit 1c3b002c6bf6 ("PCI:
> > endpoint: Add RC-to-EP doorbell support using platform MSI controller").
> >
> > The PCI endpoint doorbell feature requires:
> > -An interrupt controller that implements GIC interrupt translation
> >  services (ITS).
> > -msi-map being defined in the pcie endpoint device tree node.
> > -CONFIG_PCI_ENDPOINT_MSI_DOORBELL being enabled.
> >
> > Add msi-map to the pcie3x4_ep device tree node.
> >
> > With this, the pci endpoint kselftest doorbell test case passes:
> >  # pci_endpoint_test -r pcie_ep_doorbell.DOORBELL_TEST
> >  TAP version 13
> >  1..1
> >  # Starting 1 tests from 1 test cases.
> >  #  RUN           pcie_ep_doorbell.DOORBELL_TEST ...
> >  #            OK  pcie_ep_doorbell.DOORBELL_TEST
> >  ok 1 pcie_ep_doorbell.DOORBELL_TEST
> >  # PASSED: 1 / 1 tests passed.
> >
> > Cc: Frank Li <Frank.Li@nxp.com>
> > Signed-off-by: Niklas Cassel <cassel@kernel.org>
> > ---
> >  arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
> > index 90414486e466f..c0121aea791d7 100644
> > --- a/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
> > +++ b/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
> > @@ -389,6 +389,7 @@ pcie3x4_ep: pcie-ep@fe150000 {
> >  		interrupt-names = "sys", "pmc", "msg", "legacy", "err",
> >  				  "dma0", "dma1", "dma2", "dma3";
> >  		max-link-speed = <3>;
> > +		msi-map = <0x0000 &its1 0x0000 0x1000>;
> 
> Not sure how your hardware map PCIe rid at EP side. If your hardware direct
> use RC's RID, difference host may use differecne RID. I remember you met
> similar problem when enable IOMMU.

Yes, the Requester ID will be the BDF of the Root Complex which is sending
the request to the endpoint.


> 
> Generally, Only 1 EP support, you can use msi-mask=<0> map all RID to a
> fixed value, But it also needs change glue layer configure to force to
> use the same RID.
> 
> I suppose this may not work if connected to second PCIe host slot.

I tested the patch with three different hosts.

On Intel and Rock5b host, this patch both worked fine:
ok 1 pcie_ep_doorbell.DOORBELL_TEST

On another ARM64 board, this patch did not work.
I tried adding msi-map-mask = <0>;

But still no luck.
I'm not sure what is missing in the glue driver, because AFAICT,
the logic parsing the msi-map-mask is already in
drivers/irqchip/irq-gic-its-msi-parent.c

Also, the device tree binding in
Documentation/devicetree/bindings/pci/pci-ep.yaml

Does mention that:
         - Bits [2:0] for the function number (func)
         - Bits [18:3] for the virtual function index (vfunc)

      However, the EP cannot rely on Requester ID (RID) because the RID is
      determined by the PCI topology of the host system. Since the EP may be
      connected to different PCI hosts, the RID can vary between systems and is
      therefore not a reliable identifier.

      The resulting device ID is computed as:

        (func & 0x7) | (vfunc << 3)

      The property is an arbitrary number of tuples of
        (device-id-base, msi, msi-base,length).


Thus, I don't see that the Requester ID is used at all.

Anyway, considering that this patch does not work with all hosts,
it is best to not merge this patch for now.



Kind regards,
Niklas

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

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

* Re: [PATCH] arm64: dts: rockchip: rk3588: add msi-map for pcie3x4_ep
  2025-09-26 11:57   ` Niklas Cassel
@ 2025-09-26 14:46     ` Frank Li
  0 siblings, 0 replies; 4+ messages in thread
From: Frank Li @ 2025-09-26 14:46 UTC (permalink / raw)
  To: Niklas Cassel; +Cc: Heiko Stuebner, linux-rockchip

On Fri, Sep 26, 2025 at 01:57:40PM +0200, Niklas Cassel wrote:
> On Mon, Sep 08, 2025 at 05:26:03PM -0400, Frank Li wrote:
> > On Mon, Sep 08, 2025 at 06:24:01PM +0200, Niklas Cassel wrote:
> > > Support for msi-map in the pci-ep device tree binding was added in
> > > commit a6aed6b9c79e ("dt-bindings: PCI: pci-ep: Add support for iommu-map
> > > and msi-map").
> > >
> > > The PCI endpoint doorbell feature was added in commit 1c3b002c6bf6 ("PCI:
> > > endpoint: Add RC-to-EP doorbell support using platform MSI controller").
> > >
> > > The PCI endpoint doorbell feature requires:
> > > -An interrupt controller that implements GIC interrupt translation
> > >  services (ITS).
> > > -msi-map being defined in the pcie endpoint device tree node.
> > > -CONFIG_PCI_ENDPOINT_MSI_DOORBELL being enabled.
> > >
> > > Add msi-map to the pcie3x4_ep device tree node.
> > >
> > > With this, the pci endpoint kselftest doorbell test case passes:
> > >  # pci_endpoint_test -r pcie_ep_doorbell.DOORBELL_TEST
> > >  TAP version 13
> > >  1..1
> > >  # Starting 1 tests from 1 test cases.
> > >  #  RUN           pcie_ep_doorbell.DOORBELL_TEST ...
> > >  #            OK  pcie_ep_doorbell.DOORBELL_TEST
> > >  ok 1 pcie_ep_doorbell.DOORBELL_TEST
> > >  # PASSED: 1 / 1 tests passed.
> > >
> > > Cc: Frank Li <Frank.Li@nxp.com>
> > > Signed-off-by: Niklas Cassel <cassel@kernel.org>
> > > ---
> > >  arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi | 1 +
> > >  1 file changed, 1 insertion(+)
> > >
> > > diff --git a/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
> > > index 90414486e466f..c0121aea791d7 100644
> > > --- a/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
> > > +++ b/arch/arm64/boot/dts/rockchip/rk3588-extra.dtsi
> > > @@ -389,6 +389,7 @@ pcie3x4_ep: pcie-ep@fe150000 {
> > >  		interrupt-names = "sys", "pmc", "msg", "legacy", "err",
> > >  				  "dma0", "dma1", "dma2", "dma3";
> > >  		max-link-speed = <3>;
> > > +		msi-map = <0x0000 &its1 0x0000 0x1000>;
> >
> > Not sure how your hardware map PCIe rid at EP side. If your hardware direct
> > use RC's RID, difference host may use differecne RID. I remember you met
> > similar problem when enable IOMMU.
>
> Yes, the Requester ID will be the BDF of the Root Complex which is sending
> the request to the endpoint.
>
>
> >
> > Generally, Only 1 EP support, you can use msi-mask=<0> map all RID to a
> > fixed value, But it also needs change glue layer configure to force to
> > use the same RID.
> >
> > I suppose this may not work if connected to second PCIe host slot.
>
> I tested the patch with three different hosts.
>
> On Intel and Rock5b host, this patch both worked fine:
> ok 1 pcie_ep_doorbell.DOORBELL_TEST
>
> On another ARM64 board, this patch did not work.
> I tried adding msi-map-mask = <0>;
>
> But still no luck.
> I'm not sure what is missing in the glue driver, because AFAICT,
> the logic parsing the msi-map-mask is already in
> drivers/irqchip/irq-gic-its-msi-parent.c
>

The key problem is we don't know EP's RID (RC send out TLP package),  which
is transparent to software.

So layerscape have internal logic to map RID to fixed (predictable) stream
ID, which is neccessary for EP function if use IOMMU or MSI, or you can
capture RID from first cfg access from HOST.

Maybe there already have it in this SOC, suggest add it in future chips if
not support yet.

Frank

> Also, the device tree binding in
> Documentation/devicetree/bindings/pci/pci-ep.yaml
>
> Does mention that:
>          - Bits [2:0] for the function number (func)
>          - Bits [18:3] for the virtual function index (vfunc)
>
>       However, the EP cannot rely on Requester ID (RID) because the RID is
>       determined by the PCI topology of the host system. Since the EP may be
>       connected to different PCI hosts, the RID can vary between systems and is
>       therefore not a reliable identifier.
>
>       The resulting device ID is computed as:
>
>         (func & 0x7) | (vfunc << 3)
>
>       The property is an arbitrary number of tuples of
>         (device-id-base, msi, msi-base,length).
>
>
> Thus, I don't see that the Requester ID is used at all.
>
> Anyway, considering that this patch does not work with all hosts,
> it is best to not merge this patch for now.
>
>
>
> Kind regards,
> Niklas
>
> _______________________________________________
> Linux-rockchip mailing list
> Linux-rockchip@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-rockchip

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

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

end of thread, other threads:[~2025-09-26 14:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-08 16:24 [PATCH] arm64: dts: rockchip: rk3588: add msi-map for pcie3x4_ep Niklas Cassel
2025-09-08 21:26 ` Frank Li
2025-09-26 11:57   ` Niklas Cassel
2025-09-26 14:46     ` Frank Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox