Re: endpoint and root complex PCIe Linux driver

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

 



Hi again,

I have clarified possible scenarios related to the board I told about
in my previous posts:

1) the PCIe on the board can act as PCIe Root Complex. In this
scenario I can plug several PCIe devices that will act as PCIe
Endpoint. From the Linux and PCIe driver point of view the activities
I am supposed to do are Linux porting for the ARM processor including
its PCIe support and already present Root Complex driver
(pcieport-driver, linux/drivers/pci/pcie). On this Root Complex driver
I could have to do some kind of customing activity (I guess)

could you confirm what I said please ?


2) the PCIe on the board can act as PCIe Endpoint. In this case it
will be connected for example to a PC acting as Root Complex. Here, I
have to write the driver for a specific OSs PC for my board. This is a
typical PCIe Endpoint driver

could you confirm also this point ?


thanks a lot in advance

Stefano



2009/8/28 Stefano Tebaldi <steteb@xxxxxxxxx>:
> Hi Matthew,
>
> thanks for your answers
>
> some aspects are not completely clear to me yet, especially for Root
> Complex device, but I have just started on these topics
>
>
> Stefano
>
>
>
> 2009/8/26 Matthew Wilcox <matthew@xxxxxx>:
>> 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