I am working on software for a proprietary MPC8641D based embedded board that will act as a root complex. The board runs GNU Linux version 2.6.xx out of FLASH. The system boot prom is basically just a boot loader and does not do anything with PCI. The board will be used in a system that ties the PCI Express port to a switch, with multiple PCI devices beyond it.

My task is to implement whatever is needed to support the boards PCI Express port (or document that it is already handled by Linux). The rest of the kernel is handled by others.

I have some PCI experience, and understand the basic S/W compatibility between PCI and PCI Express. I do not have any experience with what is done while a system is booting up - other then a vauge idea of what PCI enumeration is.

I am looking for any documentation (books, tutorials, examples, white papers, general flow charts/psuedo code, etc) that will assist me in this task. I am not looking for source code examples, rather anything that provides me with an understanding of the concepts involved so that I may develop such code - or verify that it is already done. If it is already done, can someone point me to the source files that accomplish this ?

It is not enough for me to say that everything that must be done is already handled by the kernel. I must gain an understanding of how this is done, and document it to show others we are in a good position going forward and prepared for when we get our hardware.

90 minutes after the hardware arrives I am expected to have everything wrapped up and we’ll begin shipping to our first customers. Again, I am looking to understand the underlying concepts, not simply for code that accomplishes the handling of the PCI Express functionality.

Any help would be appreciated. Thanks.