public inbox for dmaengine@vger.kernel.org
 help / color / mirror / Atom feed
From: Niklas Cassel <cassel@kernel.org>
To: Koichiro Den <den@valinux.co.jp>
Cc: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com,
	jingoohan1@gmail.com, lpieralisi@kernel.org,
	kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com,
	kishon@kernel.org, jdmason@kudzu.us, allenbh@gmail.com,
	dmaengine@vger.kernel.org, linux-pci@vger.kernel.org,
	ntb@lists.linux.dev, linux-kselftest@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v6 0/8] PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback
Date: Tue, 10 Feb 2026 17:30:10 +0100	[thread overview]
Message-ID: <aYtdEnZM5mnmcgtY@ryzen> (raw)
In-Reply-To: <2lii3hhzie5n2kkoan7hvittid2bo2jgvkb2fndyscc527xglp@dubt3ie7exdq>

On Tue, Feb 10, 2026 at 11:07:16PM +0900, Koichiro Den wrote:
> On Tue, Feb 10, 2026 at 01:24:29PM +0100, Niklas Cassel wrote:
> > On Mon, Feb 09, 2026 at 09:53:08PM +0900, Koichiro Den wrote:
> > > Tested on
> > > =========
> > > 
> > > I tested the embedded (DMA) doorbell fallback path (via pci-epf-test) on
> > > R-Car Spider boards:
> > > 
> > >   $ ./pci_endpoint_test -t 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.
> > >   # Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0
> > > 
> > > with the following message observed on the EP side:
> > > 
> > >   [   80.464653] pci_epf_test pci_epf_test.0: Using embedded (DMA) doorbell fallback
> > > 
> > > (Note: for the test to pass on R-Car Spider, one of the following was required:
> > >  - echo 1048576 > functions/pci_epf_test/func1/pci_epf_test.0/bar2_size
> > >  - apply https://lore.kernel.org/all/20251023072217.901888-1-den@valinux.co.jp/)
> > 
> > I applied this series on top of branch pci/controller/dwc
> > on Rock 5B (pcie-dw-rockchip.c).
> > 
> > On EP side:
> > [   39.218533] pci_epf_test pci_epf_test.0: Can't find MSI domain for EPC
> > [   39.219125] pci_epf_test pci_epf_test.0: Using embedded (DMA) doorbell fallback
> > 
> > On RC side:
> > #  RUN           pcie_ep_doorbell.DOORBELL_TEST ...
> > [   40.297892] pci-endpoint-test 0000:01:00.0: Failed to trigger doorbell in endpoint
> > # pci_endpoint_test.c:279:DOORBELL_TEST:Expected 0 (0) == ret (-22)
> > # pci_endpoint_test.c:279:DOORBELL_TEST:Test failed for Doorbell
> > 
> > # DOORBELL_TEST: Test failed
> > #          FAIL  pcie_ep_doorbell.DOORBELL_TEST
> > not ok 23 pcie_ep_doorbell.DOORBELL_TEST
> > 
> > Any suggestions?
> > 
> > (All BARs in pcie-dw-rockchip.c is marked as BAR_RESIZABLE.)
> 
> Thank you for testing.
> 
> If the failure was observed in a scenario other than a plain
> `./pci_endpoint_test -t DOORBELL_TEST`, could you please try again with [1]
> applied as well?
> 
> [1] https://lore.kernel.org/linux-pci/20260202145407.503348-1-den@valinux.co.jp/

I applied that series, but I got the same problem.

I added debug, and the EP side does use the correct address for the eDMA:
[   26.279457] msg_addr: 0xa403800a0
[   26.279898] phys_addr: 0xa40300000 offset: 0x800a0


If I write to the msg_addr directly on the EP using devmem, I do see the print
that I added in the IRQ handler:
# devmem 0xa403800a0 32 0
[  155.861989] dw_edma_interrupt_emulated:696
# devmem 0xa403800a0 32 0
[  158.809160] dw_edma_interrupt_emulated:696
[  158.809543] pci_epf_test_doorbell_primary:729
# [  158.809986] pci_epf_test_doorbell_handler:703
# devmem 0xa403800a0 32 0
[  161.241326] dw_edma_interrupt_emulated:696
# devmem 0xa403800a0 32 0
[  163.466054] dw_edma_interrupt_emulated:696
# devmem 0xa403800a0 32 0
[  167.378662] dw_edma_interrupt_emulated:696
[  167.379045] pci_epf_test_doorbell_primary:729
# [  167.379512] pci_epf_test_doorbell_handler:703
# devmem 0xa403800a0 32 0
[  168.880179] dw_edma_interrupt_emulated:696
# devmem 0xa403800a0 32 0
[  170.492176] dw_edma_interrupt_emulated:696
# devmem 0xa403800a0 32 0
[  171.729154] dw_edma_interrupt_emulated:696
# devmem 0xa403800a0 32 0
[  173.481271] dw_edma_interrupt_emulated:696
# devmem 0xa403800a0 32 0
[  174.985787] dw_edma_interrupt_emulated:696
# devmem 0xa403800a0 32 0
[  176.517131] dw_edma_interrupt_emulated:696
[  176.517511] pci_epf_test_doorbell_primary:729
# [  176.517963] pci_epf_test_doorbell_handler:703

But not on every write....

I'm not sure, but could this perhaps be because we are missing this patch:
https://lore.kernel.org/dmaengine/20260105075904.1254012-1-den@valinux.co.jp/

# dmesg | grep eDMA
[    1.243339] rockchip-dw-pcie a40000000.pcie-ep: eDMA: unroll T, 2 wr, 2 rd

# cat /proc/interrupts | grep edma
 53:          8          0          0          0          0          0          0          0    GICv3 303 Level     dw-edma-core:a40000000.pcie-ep, pci-ep-test-doorbell
 54:          7          0          0          0          0          0          0          0    GICv3 304 Level     dw-edma-core:a40000000.pcie-ep
 55:         15          0          0          0          0          0          0          0    GICv3 301 Level     dw-edma-core:a40000000.pcie-ep
 56:          7          0          0          0          0          0          0          0    GICv3 302 Level     dw-edma-core:a40000000.pcie-ep



Anyway, I was still curious why this did never worked when writing from the
host side, even when running the test case many, many times.
AFAICT, the inbound translation looks correct.

RK3588 (pcie-dw-rockchip.c) exposes the DMA registers in BAR4 by default.
If I hack pci-epf-test on top of your patch to unconditionally return BAR4 with
offset 0xa0, it works. So my best guess is that the fixed inbound translation
in BAR4 (to the eDMA registers) somehow messes with the inbound translation if
another BAR tries to use an inbound translation to the eDMA registers as well.


Kind regards,
Niklas

  reply	other threads:[~2026-02-10 16:30 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-09 12:53 [PATCH v6 0/8] PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback Koichiro Den
2026-02-09 12:53 ` [PATCH v6 1/8] dmaengine: dw-edma: Deassert emulated interrupts in the IRQ handler Koichiro Den
2026-02-09 16:05   ` Frank Li
2026-02-09 12:53 ` [PATCH v6 2/8] dmaengine: dw-edma: Cache per-channel IRQ and emulation doorbell offset Koichiro Den
2026-02-09 16:13   ` Frank Li
2026-02-10  1:48     ` Koichiro Den
2026-02-09 12:53 ` [PATCH v6 3/8] PCI: endpoint: Add auxiliary resource query API Koichiro Den
2026-02-09 15:59   ` Frank Li
2026-02-09 12:53 ` [PATCH v6 4/8] PCI: dwc: Record integrated eDMA register window Koichiro Den
2026-02-09 12:53 ` [PATCH v6 5/8] PCI: dwc: ep: Report integrated eDMA resources via EPC aux-resource API Koichiro Den
2026-02-09 12:53 ` [PATCH v6 6/8] PCI: endpoint: pci-epf-test: Don't free doorbell IRQ unless requested Koichiro Den
2026-02-09 15:57   ` Frank Li
2026-02-10  1:54     ` Koichiro Den
2026-02-10 12:36   ` Niklas Cassel
2026-02-10 13:54     ` Koichiro Den
2026-02-10 16:38       ` Niklas Cassel
2026-02-11 16:08         ` Koichiro Den
2026-02-09 12:53 ` [PATCH v6 7/8] PCI: endpoint: pci-ep-msi: Fix error unwind and prevent double alloc Koichiro Den
2026-02-09 15:53   ` Frank Li
2026-02-09 12:53 ` [PATCH v6 8/8] PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback Koichiro Den
2026-02-09 15:51   ` Frank Li
2026-02-10  2:10     ` Koichiro Den
2026-02-10 15:16       ` Frank Li
2026-02-10 12:24 ` [PATCH v6 0/8] " Niklas Cassel
2026-02-10 14:07   ` Koichiro Den
2026-02-10 16:30     ` Niklas Cassel [this message]
2026-02-11 15:57       ` Koichiro Den
2026-02-11 16:52         ` Niklas Cassel
2026-02-12  3:26           ` Koichiro Den
2026-02-12 10:26             ` Niklas Cassel
2026-02-12 15:14               ` Koichiro Den
2026-02-12 15:38                 ` Niklas Cassel
2026-02-12 16:31         ` Koichiro Den

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=aYtdEnZM5mnmcgtY@ryzen \
    --to=cassel@kernel.org \
    --cc=Frank.Li@nxp.com \
    --cc=allenbh@gmail.com \
    --cc=bhelgaas@google.com \
    --cc=den@valinux.co.jp \
    --cc=dmaengine@vger.kernel.org \
    --cc=jdmason@kudzu.us \
    --cc=jingoohan1@gmail.com \
    --cc=kishon@kernel.org \
    --cc=kwilczynski@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=lpieralisi@kernel.org \
    --cc=mani@kernel.org \
    --cc=ntb@lists.linux.dev \
    --cc=robh@kernel.org \
    --cc=vkoul@kernel.org \
    /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