From: Oliver O'Halloran <oohall@gmail.com>
To: adanaila@ctrlinux.com, linux-pci@vger.kernel.org
Subject: Re: Sharing PCIe MMIO with other Drivers
Date: Mon, 12 Nov 2018 13:26:26 +1100 [thread overview]
Message-ID: <76ae362ccc94b836acf90839d96ff28c9f0f568b.camel@gmail.com> (raw)
In-Reply-To: <1541809334.2290928.1571950584.2632F1FD@webmail.messagingengine.com>
On Fri, 2018-11-09 at 16:22 -0800, Andrei Danaila wrote:
> Hello,
>
> I have a question about best practices in writing an PCIe driver for an FPGA. If this is not the best place to ask, please let me know.
>
> I have an FPGA which is connected over PCIe to an x86 host. The FPGA has a variety of peripherals on it, I2C, UART, SPI etc. All of these peripherals can be accessed from the host by accessing different offsets from the BAR0 address.
>
> I am running linux kernel 4.14 on the host and have written a PCIe device driver which probes off the device id manufacturer ID of the FPGA.
>
> The device driver calls pci_iomap( to obtain the cookie used to access the BAR. This works fine and via this mechanism I can read/write to the FPGA address space after calling ioremap on the cookie.
>
> What I am trying to do now however is create a I2C platform device representing the I2C bus on the FPGA and add to it, as a resource, the BAR0 address + the I2C offset, to get the host's i2c driver to probe off this new PCI device.
Keep in mind the address you read out of BAR0 in config space is a PCI
bus address which isn't necessarily usable as a system physical
address. It might be fine on x86 though.
>
> In addition I am also trying to add an IRQ number for the I2C driver to use which is an MSIX mapped interrupt number obtained via pci_irq_vector.
You should be able to do something with an irqchip to forward the
interrupt to the platform device safely.
>
> In essence, I am trying to get the x86 host to own this device exposed via io-remapped region in PCI land, and use its driver to manage it.
>
> The problem I am having is that I am getting a EBUSY return code when I try to register the resource to the platform device, after the pci_iomap has taken place.
>
> The resource type is IORESOURCE_SYSTEM_RAM | IORESOURCE_MUXED and the start of the resource is the BAR0 address as returned by pci_iomap + I2C_OFFSET.
IIRC IORESOURCE_SYSTEM_RAM marks the resource as being normal system
RAM (i.e. cacheable) rather than MMIO space, so this probably not the
right set of flags to use.
Anyway, trying to create resource from the result of pci_iomap() sounds
a little fishy to me since memory resources generally contain physical
addresses and pci_iomap() should be returning a virtual address. The
-EBUSY is probably due to the resource you created conflicting with an
existing resource that doesn't have the MUXED flag set. I don't
remember the exact process for doing this properly, but If I were you I
would:
a) convert your resource to use physical addresses
b) make the BAR resource the parent of your new resource.
and see if that fixes the problem.
Oliver
prev parent reply other threads:[~2018-11-12 2:26 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-10 0:22 Sharing PCIe MMIO with other Drivers Andrei Danaila
2018-11-10 0:32 ` Sinan Kaya
2018-11-10 0:43 ` Andrei Danaila
2018-11-10 0:48 ` Sinan Kaya
2018-11-10 0:57 ` Andrei Danaila
2018-11-10 1:02 ` Sinan Kaya
2018-11-12 2:26 ` Oliver O'Halloran [this message]
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=76ae362ccc94b836acf90839d96ff28c9f0f568b.camel@gmail.com \
--to=oohall@gmail.com \
--cc=adanaila@ctrlinux.com \
--cc=linux-pci@vger.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;
as well as URLs for NNTP newsgroup(s).