Re: endpoint and root complex PCIe Linux driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Aug 26, 2009 at 05:09:28PM +0200, Stefano Tebaldi wrote:
> Hi all,
> 
> I am quite newbie about PCIe and Linux Kernel development
> I have to write a driver for a PCIe chip that can act either as
> EndPoint or Root Complex device
> The chip is on a board with an ARM processor and Linux 2.6

I think what you're trying to say here is that from the point of view
of the host system, it's an endpoint, but from the point of view of the
ARM processor, it's a Root Complex.  Is that correct?

> I have understood that for a PCIe endpoint the driver model to be used
> is the normal PCI driver model that uses pci_register_driver() API and
> pci_driver struct for example as described in
> linux/Documentation/PCI/pci.txt. A possible example of such type of
> driver is the e1000e driver in linux/drivers/net
> is it correct ?

That's correct.

> My doubts are related to drivers for a Root Complex device. In this
> case I have understood that the model described in
> linux/Documentation/PCI/PCIEBUS-HOWTO.txt is to be used and service
> drivers for the 4 services (AER, HP, PME, VC) are to be written if
> needed. But is providing only service drivers enough to completely
> manage a Root Complex device or something else is needed ? Is there a
> Root Complex driver that anyone can use as example ?

You generally don't need to write drivers for a Root Complex.  You may
need to discover it using whatever mechanism the ARM platform provides
for discovering devices.  You might need to write code to translate inb()
into IO port cycles on the PCI bus and writeb() into memory cycles.
I would recommend that you _not_ do PCI config cycles; Linux doesn't
handle multiple root complexes in a system particularly well -- if you try
to resize BARs on an active device, you're likely to crash the machine.

It's probably best to ignore the RC functionality, and concentrate on
having your ARM board be just an endpoint.

If you want to get really advanced, you could look at having some way
of partitioning the devices between the host board and the ARM board,
but I'm not sure that the hardware in the PCIe fabric is going to handle
having multiple root complexes terribly well.

-- 
Matthew Wilcox				Intel Open Source Technology Centre
"Bill, look, we understand that you're interested in selling us this
operating system, but compare it to ours.  We can't possibly take such
a retrograde step."
--
To unsubscribe from this list: send the line "unsubscribe linux-pci" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux