diff mbox

[2/2] Documentation: pci: Add pcie-howto.txt

Message ID 9e43a9a6-9883-45c5-aaf1-432ac06c7dce@AM1EHSMHS017.ehs.local (mailing list archive)
State New, archived
Delegated to: Bjorn Helgaas
Headers show

Commit Message

Jagannadha Sutradharudu Teki Dec. 11, 2013, 9:15 a.m. UTC
Added pcie-howto.txt for describing the information
on PCI Express basics and Root Complex driver.

Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
---
 Documentation/PCI/00-INDEX       |   2 +
 Documentation/PCI/pcie-howto.txt | 184 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 186 insertions(+)
 create mode 100644 Documentation/PCI/pcie-howto.txt

Comments

Randy Dunlap Dec. 11, 2013, 5:32 p.m. UTC | #1
On 12/11/13 01:15, Jagannadha Sutradharudu Teki wrote:
> Added pcie-howto.txt for describing the information
> on PCI Express basics and Root Complex driver.
> 
> Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
> ---
>  Documentation/PCI/00-INDEX       |   2 +
>  Documentation/PCI/pcie-howto.txt | 184 +++++++++++++++++++++++++++++++++++++++
>  2 files changed, 186 insertions(+)
>  create mode 100644 Documentation/PCI/pcie-howto.txt
> 
> diff --git a/Documentation/PCI/00-INDEX b/Documentation/PCI/00-INDEX
> index b8b7721..d61e7b9 100644
> --- a/Documentation/PCI/00-INDEX
> +++ b/Documentation/PCI/00-INDEX
> @@ -6,6 +6,8 @@ pci-error-recovery.txt
>  	- Info on PCI error recovery
>  MSI-HOWTO.txt
>  	- The Message Signaled Interrupts (MSI) Driver Guide HOWTO and FAQ
> +pcie-howto.txt
> +	- A guide describing the PCI Express basics and Root Complex driver
>  pcie-portbus-howto.txt
>  	- A guide describing the PCI Express Port Bus driver
>  pcie-aer-howto.txt
> diff --git a/Documentation/PCI/pcie-howto.txt b/Documentation/PCI/pcie-howto.txt
> new file mode 100644
> index 0000000..963cb75
> --- /dev/null
> +++ b/Documentation/PCI/pcie-howto.txt
> @@ -0,0 +1,184 @@
> +	PCI Express HOWTO
> +	Jagannadha Sutradharudu Teki <jagannadh.teki@gmail.com>
> +	05/12/2013
> +
> +1. About this guide
> +
> +This guide describes the basics of the PCI Express and provides

                                              Express bus and

> +information on how Linux PCIe subsystem looks like and at last

                  what the Linux                      and ends

> +with brief description of PCI Host controller/Root complex driver

   with a brief

> +along with some sample code.
> +
> +2. Basic terminology and conventions
> +
> +PCI Express is
> +- A high performance, IO interconnect for peripherals.

                       ^drop comma

> +- Low hardware design overhead compared to PCI, as it uses less pins.
> +- A serial point-to-point interconnect between two devices.
> +- Implements packet based protocol for data transfer.

                packet-based

> +- Supports features like Advanced power management, Advanced error
> +  reporting facility, and hot-plug.
> +					_________
> +				       |	 |
> +				       |   CPU   |
> +				       |_________|
> +					    |
> +   			 ___________________|___________________________
> +			|						| 	  ________
> +   			|		ROOT COMPLEX			|        |	  |
> +			|						|--------| Memory |
> +			|   Switch Port			Root port	|	 |________|
> +			|_______________________________________________|
> +					    |				  PCIe Bus0
> +		____________________________|______________________________________
> +				|		|		  |
> +	      ____	  ______|______		|	      ____|____
> +	     |	  |	 /	       \      __|__	     |	       |
> +	     | EP |-----|    SWITCH	|    |     |	     | BRIDGE  |
> +	     |____|	 \_____________/     | EP  |	     | PCIe -  |
> +			    |	    | 	     |_____|         | PCI/PCIe|
> +			  __|__   __|__ 		     |_________|
> +			 |     | |     |			  |	  PCIe Bus1
> +			 | EP  | | EP  | 		__________|________________
> +			 |_____| |_____| 		    |		  |
> +							  __|__		__|__
> +							 |     |       |     |
> +							 | EP  |       | EP  |
> +							 |_____|       |_____|
> +
> +Root Complex (RC)
> +Connects the CPU and memory subsystem to the PCIe fabric (A topology comprised of PCIe
> +nodes like Root Complex, Endpoint, Bridge or a Switch)
> +
> +Port
> +Interface between a PCIe component and the Link.
> +
> +Link
> +PCIe interconnect is referred as a Link, and connects two devices.
> +
> +Lane
> +A PCIe link consists of either 1, 2, 4, 8, 12, 16 or 32 signals in each direction
> +(each signal needs two wires - one for Tx and other for Rx). these signals are

                                                                These

> +referred to as Lanes.
> +
> +Upstream Port
> +Port that points in the direction of RC.
> +
> +Downstream Port
> +Port the points away from the RC.

        that

> +
> +Root Port
> +Whose upstream port is RC and dowstream port should be a EP or Bridge.

                                                          an

> +
> +Switch Port
> +Whose upstream port is RC and dowstream port is always be a switch.

                                                   always a switch.

> +
> +Endpoint (EP)
> +Devices other than RC, Switches and Bridges which either generates or terminates a PCIe

                                                            generate or terminate

> +transaction. These are peripheral devices such as Ethernet, USB and graphics devices.
> +
> +Switch
> +PCIe device single upstream port as RC and multiple downstream ports as EP's,
> +Switches or Bridges.
> +
> +Bridge
> +Is for extending PCIe Bus segment - whose downstream port points to one more PCIe bus.
> +
> +3. Linux PCIe Subsystem
> +
> +					  ifconfig	open()/close/read()/write()	   /proc, /sys
> +					      ^		     ^		   ^			^
> +					      |		     |		   |			|
> +					      |		     |		   |			|
> +  					      |              |		   |			V
> +					      |		     |		   |		PCIe Port Bus services
> +					      |		     |		   |		(AER, HP, PME, VC
> +					      |		     |		   |		 drivers/pci/pcie/
> +					      |		     |		   |		 drivers/pci/hotplug)
> +					      V		     V		   V			^
> +					    Socket 	    Block	 Char		        |
> +					    layer	 Subsystem	Subsystem		|
> +					      ^		     ^		   ^			| pcie_port_service_register()
> +					      |		     |		   |			|
> +					      |		     |		   |			|
> +					      V		     V		   V			V
> +					 Common net	    USB		 Input		  PCIe Port Core
> +					 device layer       Core	 Core    (drivers/pci/pcie/portdrv_core.c)
> +					      ^		     ^		   ^			^
> +					      |		     |		   |			| pcie_port_bus_register()
> +					      |		     |		   |			|
> +					 _____V_____	 ____V____     ____V_____      _________V___________
> +					|	    |	|         |   |		 |    | 		    |
> +			All these are	| GEM 	    |	| USB HC  |   | Mouse/KB/|    | PCIe Port Bus driver|
> +			PCI endpoint	| Controller|	| driver  |   | TS HC	 |    | (drivers/pci/pcie/  |
> +			drivers		| driver    |	|	  |   |	driver	 |    |	 portdrv_pci.c)     |
> +					|___________|	|_________|   |__________|    |_____________________|
> +					      ^	             ^             ^			^
> +					      |__________    |		   |	       _________|
> +							 |   |		   |	      |		 pci_register_driver()
> +	     ___________________  pci_bus_*()	       __V___V_____________V__________V______
> +	    |			| pci_scan_root_bus() |					     |
> +	    |	  PCI BIOS	|-------------------->|     	     PCI Core		     |
> +            | (arch/arm/kernel/ |<--------------------|          (drivers/pci/pci*	     |
> +      ----->|        bios32.c))	|<---     pcibios_*() |           drivers/pci/bus.c)	     |
> +      |     |___________________|   |		      |______________________________________|
> +      |		     ^		    |
> +      |		     |		    | pci_common_init_dev()
> +      |		     |		    |
> +  ____V___	 ____V___	 ___V____
> + | 	  |     |	 |	|	 |
> + | Renesas|	| Tergra |	| Exynos |

                  Tegra

> + | PCI HC | 	| PCIe HC|	| PCIe HC| drivers/pci/host/
> + | driver |	| driver |	| driver | All these are
> + |________|	|________|	|________| PCI Root Complex drivers
> +     |		    |		    |
> +     |		    |		    |
> +     V		    V		    V
> +         platform_driver_register()
> +
> +Note:
> +Linux PCI subsystem is like above one without have a PCIe port bus stack.

                                                 having

> +For more details abou this block see http://jagannadhteki.blog.com/2013/12/04/linux-pcie-subsystem/

                    about

> +
> +PCI HC/RC driver
> +- Low level initialization and configuration (board, soc)

                                                        SOC or SoC, please

> +- Invokes PCI-BIOS - for bus enumerations so-that the endpoints on bus is ready.

                                             so that                      are

> +- Supplies struct pci_ops to read/write config space.
> +- Setup the resources like bus numbers, memory/IO space, Interrupt numbers, MSI.
> +- Register PCI-BIOS as pci_common_init_dev()
> +
> +PCI BIOS
> +- Architecture specific PCI
> +- Bus enumeration - Lane, Bus, Device, Memory, Interrupt.
> +- Enumeration ends up with scanning all endpoints on bus got discovered.

                                                            ^^^ confusing

> +- Register to PCI core for common accessing of endpoint drivers.
> +- pci_scan_root_bus() and pci_bus_*()
> +
> +PCI Core
> +- Provides services to Lower level BIOS and Upper level endpoint layers.
> +- Creates device entries for proc/sysfs information.
> +- Linux kernel pci bus and driver management code.

                  PCI

> +- Provides set of abstraction functions that endpoint drivers can used to

                                                                     use

> +  initiate pci communication with attached endpoints.

              PCI

> +- Calls BIOS codes with pcibios_*
> +
> +PCI Endpoint driver
> +- Individual endpoint drivers from upper layer.
> +- Accessing config space upon respective endpoint enumeration done.
> +- Communicate over the endpoint for Tx/Rx transactions.
> +- Register to PCI core as pci_driver_register()
> +
> +PCIe Port Bus driver
> +- A logical PCI-PCI Bridge structure.
> +- Root Port and the Switch Port.
> +- See Documentation/PCI/pcie-busport-howto.txt
                                ~~~~~~~
                                portbus
Jagan Teki Dec. 11, 2013, 5:58 p.m. UTC | #2
Hi Randy

On Wed, Dec 11, 2013 at 11:02 PM, Randy Dunlap <rdunlap@infradead.org> wrote:
> On 12/11/13 01:15, Jagannadha Sutradharudu Teki wrote:
>> Added pcie-howto.txt for describing the information
>> on PCI Express basics and Root Complex driver.
>>
>> Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
>> ---
>>  Documentation/PCI/00-INDEX       |   2 +
>>  Documentation/PCI/pcie-howto.txt | 184 +++++++++++++++++++++++++++++++++++++++
>>  2 files changed, 186 insertions(+)
>>  create mode 100644 Documentation/PCI/pcie-howto.txt
>>
>> diff --git a/Documentation/PCI/00-INDEX b/Documentation/PCI/00-INDEX
>> index b8b7721..d61e7b9 100644
>> --- a/Documentation/PCI/00-INDEX
>> +++ b/Documentation/PCI/00-INDEX
>> @@ -6,6 +6,8 @@ pci-error-recovery.txt
>>       - Info on PCI error recovery
>>  MSI-HOWTO.txt
>>       - The Message Signaled Interrupts (MSI) Driver Guide HOWTO and FAQ
>> +pcie-howto.txt
>> +     - A guide describing the PCI Express basics and Root Complex driver
>>  pcie-portbus-howto.txt
>>       - A guide describing the PCI Express Port Bus driver
>>  pcie-aer-howto.txt
>> diff --git a/Documentation/PCI/pcie-howto.txt b/Documentation/PCI/pcie-howto.txt
>> new file mode 100644
>> index 0000000..963cb75
>> --- /dev/null
>> +++ b/Documentation/PCI/pcie-howto.txt
>> @@ -0,0 +1,184 @@
>> +     PCI Express HOWTO
>> +     Jagannadha Sutradharudu Teki <jagannadh.teki@gmail.com>
>> +     05/12/2013
>> +
>> +1. About this guide
>> +
>> +This guide describes the basics of the PCI Express and provides
>
>                                               Express bus and
>
>> +information on how Linux PCIe subsystem looks like and at last
>
>                   what the Linux                      and ends
>
>> +with brief description of PCI Host controller/Root complex driver
>
>    with a brief
>
>> +along with some sample code.
>> +
>> +2. Basic terminology and conventions
>> +
>> +PCI Express is
>> +- A high performance, IO interconnect for peripherals.
>
>                        ^drop comma
>
>> +- Low hardware design overhead compared to PCI, as it uses less pins.
>> +- A serial point-to-point interconnect between two devices.
>> +- Implements packet based protocol for data transfer.
>
>                 packet-based
>
>> +- Supports features like Advanced power management, Advanced error
>> +  reporting facility, and hot-plug.
>> +                                     _________
>> +                                    |         |
>> +                                    |   CPU   |
>> +                                    |_________|
>> +                                         |
>> +                      ___________________|___________________________
>> +                     |                                               |         ________
>> +                     |               ROOT COMPLEX                    |        |        |
>> +                     |                                               |--------| Memory |
>> +                     |   Switch Port                 Root port       |        |________|
>> +                     |_______________________________________________|
>> +                                         |                             PCIe Bus0
>> +             ____________________________|______________________________________
>> +                             |               |                 |
>> +           ____        ______|______         |             ____|____
>> +          |    |      /             \      __|__          |         |
>> +          | EP |-----|    SWITCH     |    |     |         | BRIDGE  |
>> +          |____|      \_____________/     | EP  |         | PCIe -  |
>> +                         |       |        |_____|         | PCI/PCIe|
>> +                       __|__   __|__                      |_________|
>> +                      |     | |     |                          |       PCIe Bus1
>> +                      | EP  | | EP  |                __________|________________
>> +                      |_____| |_____|                    |             |
>> +                                                       __|__         __|__
>> +                                                      |     |       |     |
>> +                                                      | EP  |       | EP  |
>> +                                                      |_____|       |_____|
>> +
>> +Root Complex (RC)
>> +Connects the CPU and memory subsystem to the PCIe fabric (A topology comprised of PCIe
>> +nodes like Root Complex, Endpoint, Bridge or a Switch)
>> +
>> +Port
>> +Interface between a PCIe component and the Link.
>> +
>> +Link
>> +PCIe interconnect is referred as a Link, and connects two devices.
>> +
>> +Lane
>> +A PCIe link consists of either 1, 2, 4, 8, 12, 16 or 32 signals in each direction
>> +(each signal needs two wires - one for Tx and other for Rx). these signals are
>
>                                                                 These
>
>> +referred to as Lanes.
>> +
>> +Upstream Port
>> +Port that points in the direction of RC.
>> +
>> +Downstream Port
>> +Port the points away from the RC.
>
>         that
>
>> +
>> +Root Port
>> +Whose upstream port is RC and dowstream port should be a EP or Bridge.
>
>                                                           an
>
>> +
>> +Switch Port
>> +Whose upstream port is RC and dowstream port is always be a switch.
>
>                                                    always a switch.
>
>> +
>> +Endpoint (EP)
>> +Devices other than RC, Switches and Bridges which either generates or terminates a PCIe
>
>                                                             generate or terminate
>
>> +transaction. These are peripheral devices such as Ethernet, USB and graphics devices.
>> +
>> +Switch
>> +PCIe device single upstream port as RC and multiple downstream ports as EP's,
>> +Switches or Bridges.
>> +
>> +Bridge
>> +Is for extending PCIe Bus segment - whose downstream port points to one more PCIe bus.
>> +
>> +3. Linux PCIe Subsystem
>> +
>> +                                       ifconfig      open()/close/read()/write()        /proc, /sys
>> +                                           ^              ^             ^                    ^
>> +                                           |              |             |                    |
>> +                                           |              |             |                    |
>> +                                           |              |             |                    V
>> +                                           |              |             |            PCIe Port Bus services
>> +                                           |              |             |            (AER, HP, PME, VC
>> +                                           |              |             |             drivers/pci/pcie/
>> +                                           |              |             |             drivers/pci/hotplug)
>> +                                           V              V             V                    ^
>> +                                         Socket          Block        Char                   |
>> +                                         layer        Subsystem      Subsystem               |
>> +                                           ^              ^             ^                    | pcie_port_service_register()
>> +                                           |              |             |                    |
>> +                                           |              |             |                    |
>> +                                           V              V             V                    V
>> +                                      Common net         USB          Input            PCIe Port Core
>> +                                      device layer       Core         Core    (drivers/pci/pcie/portdrv_core.c)
>> +                                           ^              ^             ^                    ^
>> +                                           |              |             |                    | pcie_port_bus_register()
>> +                                           |              |             |                    |
>> +                                      _____V_____     ____V____     ____V_____      _________V___________
>> +                                     |           |   |         |   |          |    |                     |
>> +                     All these are   | GEM       |   | USB HC  |   | Mouse/KB/|    | PCIe Port Bus driver|
>> +                     PCI endpoint    | Controller|   | driver  |   | TS HC    |    | (drivers/pci/pcie/  |
>> +                     drivers         | driver    |   |         |   | driver   |    |  portdrv_pci.c)     |
>> +                                     |___________|   |_________|   |__________|    |_____________________|
>> +                                           ^              ^             ^                    ^
>> +                                           |__________    |             |           _________|
>> +                                                      |   |             |          |          pci_register_driver()
>> +          ___________________  pci_bus_*()          __V___V_____________V__________V______
>> +         |                   | pci_scan_root_bus() |                                      |
>> +         |     PCI BIOS      |-------------------->|              PCI Core                |
>> +            | (arch/arm/kernel/ |<--------------------|          (drivers/pci/pci*        |
>> +      ----->|        bios32.c))      |<---     pcibios_*() |           drivers/pci/bus.c)         |
>> +      |     |___________________|   |                      |______________________________________|
>> +      |                   ^              |
>> +      |                   |              | pci_common_init_dev()
>> +      |                   |              |
>> +  ____V___    ____V___        ___V____
>> + |     |     |        |      |        |
>> + | Renesas|  | Tergra |      | Exynos |
>
>                   Tegra
>
>> + | PCI HC |  | PCIe HC|      | PCIe HC| drivers/pci/host/
>> + | driver |  | driver |      | driver | All these are
>> + |________|  |________|      |________| PCI Root Complex drivers
>> +     |                   |               |
>> +     |                   |               |
>> +     V                   V               V
>> +         platform_driver_register()
>> +
>> +Note:
>> +Linux PCI subsystem is like above one without have a PCIe port bus stack.
>
>                                                  having
>
>> +For more details abou this block see http://jagannadhteki.blog.com/2013/12/04/linux-pcie-subsystem/
>
>                     about
>
>> +
>> +PCI HC/RC driver
>> +- Low level initialization and configuration (board, soc)
>
>                                                         SOC or SoC, please
>
>> +- Invokes PCI-BIOS - for bus enumerations so-that the endpoints on bus is ready.
>
>                                              so that                      are
>
>> +- Supplies struct pci_ops to read/write config space.
>> +- Setup the resources like bus numbers, memory/IO space, Interrupt numbers, MSI.
>> +- Register PCI-BIOS as pci_common_init_dev()
>> +
>> +PCI BIOS
>> +- Architecture specific PCI
>> +- Bus enumeration - Lane, Bus, Device, Memory, Interrupt.
>> +- Enumeration ends up with scanning all endpoints on bus got discovered.
>
>                                                             ^^^ confusing
>
>> +- Register to PCI core for common accessing of endpoint drivers.
>> +- pci_scan_root_bus() and pci_bus_*()
>> +
>> +PCI Core
>> +- Provides services to Lower level BIOS and Upper level endpoint layers.
>> +- Creates device entries for proc/sysfs information.
>> +- Linux kernel pci bus and driver management code.
>
>                   PCI
>
>> +- Provides set of abstraction functions that endpoint drivers can used to
>
>                                                                      use
>
>> +  initiate pci communication with attached endpoints.
>
>               PCI
>
>> +- Calls BIOS codes with pcibios_*
>> +
>> +PCI Endpoint driver
>> +- Individual endpoint drivers from upper layer.
>> +- Accessing config space upon respective endpoint enumeration done.
>> +- Communicate over the endpoint for Tx/Rx transactions.
>> +- Register to PCI core as pci_driver_register()
>> +
>> +PCIe Port Bus driver
>> +- A logical PCI-PCI Bridge structure.
>> +- Root Port and the Switch Port.
>> +- See Documentation/PCI/pcie-busport-howto.txt
>                                 ~~~~~~~
>                                 portbus
>

Thanks for your comments will send the next version after fixing these.
diff mbox

Patch

diff --git a/Documentation/PCI/00-INDEX b/Documentation/PCI/00-INDEX
index b8b7721..d61e7b9 100644
--- a/Documentation/PCI/00-INDEX
+++ b/Documentation/PCI/00-INDEX
@@ -6,6 +6,8 @@  pci-error-recovery.txt
 	- Info on PCI error recovery
 MSI-HOWTO.txt
 	- The Message Signaled Interrupts (MSI) Driver Guide HOWTO and FAQ
+pcie-howto.txt
+	- A guide describing the PCI Express basics and Root Complex driver
 pcie-portbus-howto.txt
 	- A guide describing the PCI Express Port Bus driver
 pcie-aer-howto.txt
diff --git a/Documentation/PCI/pcie-howto.txt b/Documentation/PCI/pcie-howto.txt
new file mode 100644
index 0000000..963cb75
--- /dev/null
+++ b/Documentation/PCI/pcie-howto.txt
@@ -0,0 +1,184 @@ 
+	PCI Express HOWTO
+	Jagannadha Sutradharudu Teki <jagannadh.teki@gmail.com>
+	05/12/2013
+
+1. About this guide
+
+This guide describes the basics of the PCI Express and provides
+information on how Linux PCIe subsystem looks like and at last
+with brief description of PCI Host controller/Root complex driver
+along with some sample code.
+
+2. Basic terminology and conventions
+
+PCI Express is
+- A high performance, IO interconnect for peripherals.
+- Low hardware design overhead compared to PCI, as it uses less pins.
+- A serial point-to-point interconnect between two devices.
+- Implements packet based protocol for data transfer.
+- Supports features like Advanced power management, Advanced error
+  reporting facility, and hot-plug.
+					_________
+				       |	 |
+				       |   CPU   |
+				       |_________|
+					    |
+   			 ___________________|___________________________
+			|						| 	  ________
+   			|		ROOT COMPLEX			|        |	  |
+			|						|--------| Memory |
+			|   Switch Port			Root port	|	 |________|
+			|_______________________________________________|
+					    |				  PCIe Bus0
+		____________________________|______________________________________
+				|		|		  |
+	      ____	  ______|______		|	      ____|____
+	     |	  |	 /	       \      __|__	     |	       |
+	     | EP |-----|    SWITCH	|    |     |	     | BRIDGE  |
+	     |____|	 \_____________/     | EP  |	     | PCIe -  |
+			    |	    | 	     |_____|         | PCI/PCIe|
+			  __|__   __|__ 		     |_________|
+			 |     | |     |			  |	  PCIe Bus1
+			 | EP  | | EP  | 		__________|________________
+			 |_____| |_____| 		    |		  |
+							  __|__		__|__
+							 |     |       |     |
+							 | EP  |       | EP  |
+							 |_____|       |_____|
+
+Root Complex (RC)
+Connects the CPU and memory subsystem to the PCIe fabric (A topology comprised of PCIe
+nodes like Root Complex, Endpoint, Bridge or a Switch)
+
+Port
+Interface between a PCIe component and the Link.
+
+Link
+PCIe interconnect is referred as a Link, and connects two devices.
+
+Lane
+A PCIe link consists of either 1, 2, 4, 8, 12, 16 or 32 signals in each direction
+(each signal needs two wires - one for Tx and other for Rx). these signals are
+referred to as Lanes.
+
+Upstream Port
+Port that points in the direction of RC.
+
+Downstream Port
+Port the points away from the RC.
+
+Root Port
+Whose upstream port is RC and dowstream port should be a EP or Bridge.
+
+Switch Port
+Whose upstream port is RC and dowstream port is always be a switch.
+
+Endpoint (EP)
+Devices other than RC, Switches and Bridges which either generates or terminates a PCIe
+transaction. These are peripheral devices such as Ethernet, USB and graphics devices.
+
+Switch
+PCIe device single upstream port as RC and multiple downstream ports as EP's,
+Switches or Bridges.
+
+Bridge
+Is for extending PCIe Bus segment - whose downstream port points to one more PCIe bus.
+
+3. Linux PCIe Subsystem
+
+					  ifconfig	open()/close/read()/write()	   /proc, /sys
+					      ^		     ^		   ^			^
+					      |		     |		   |			|
+					      |		     |		   |			|
+  					      |              |		   |			V
+					      |		     |		   |		PCIe Port Bus services
+					      |		     |		   |		(AER, HP, PME, VC
+					      |		     |		   |		 drivers/pci/pcie/
+					      |		     |		   |		 drivers/pci/hotplug)
+					      V		     V		   V			^
+					    Socket 	    Block	 Char		        |
+					    layer	 Subsystem	Subsystem		|
+					      ^		     ^		   ^			| pcie_port_service_register()
+					      |		     |		   |			|
+					      |		     |		   |			|
+					      V		     V		   V			V
+					 Common net	    USB		 Input		  PCIe Port Core
+					 device layer       Core	 Core    (drivers/pci/pcie/portdrv_core.c)
+					      ^		     ^		   ^			^
+					      |		     |		   |			| pcie_port_bus_register()
+					      |		     |		   |			|
+					 _____V_____	 ____V____     ____V_____      _________V___________
+					|	    |	|         |   |		 |    | 		    |
+			All these are	| GEM 	    |	| USB HC  |   | Mouse/KB/|    | PCIe Port Bus driver|
+			PCI endpoint	| Controller|	| driver  |   | TS HC	 |    | (drivers/pci/pcie/  |
+			drivers		| driver    |	|	  |   |	driver	 |    |	 portdrv_pci.c)     |
+					|___________|	|_________|   |__________|    |_____________________|
+					      ^	             ^             ^			^
+					      |__________    |		   |	       _________|
+							 |   |		   |	      |		 pci_register_driver()
+	     ___________________  pci_bus_*()	       __V___V_____________V__________V______
+	    |			| pci_scan_root_bus() |					     |
+	    |	  PCI BIOS	|-------------------->|     	     PCI Core		     |
+            | (arch/arm/kernel/ |<--------------------|          (drivers/pci/pci*	     |
+      ----->|        bios32.c))	|<---     pcibios_*() |           drivers/pci/bus.c)	     |
+      |     |___________________|   |		      |______________________________________|
+      |		     ^		    |
+      |		     |		    | pci_common_init_dev()
+      |		     |		    |
+  ____V___	 ____V___	 ___V____
+ | 	  |     |	 |	|	 |
+ | Renesas|	| Tergra |	| Exynos |
+ | PCI HC | 	| PCIe HC|	| PCIe HC| drivers/pci/host/
+ | driver |	| driver |	| driver | All these are
+ |________|	|________|	|________| PCI Root Complex drivers
+     |		    |		    |
+     |		    |		    |
+     V		    V		    V
+         platform_driver_register()
+
+Note:
+Linux PCI subsystem is like above one without have a PCIe port bus stack.
+For more details abou this block see http://jagannadhteki.blog.com/2013/12/04/linux-pcie-subsystem/
+
+PCI HC/RC driver
+- Low level initialization and configuration (board, soc)
+- Invokes PCI-BIOS - for bus enumerations so-that the endpoints on bus is ready.
+- Supplies struct pci_ops to read/write config space.
+- Setup the resources like bus numbers, memory/IO space, Interrupt numbers, MSI.
+- Register PCI-BIOS as pci_common_init_dev()
+
+PCI BIOS
+- Architecture specific PCI
+- Bus enumeration - Lane, Bus, Device, Memory, Interrupt.
+- Enumeration ends up with scanning all endpoints on bus got discovered.
+- Register to PCI core for common accessing of endpoint drivers.
+- pci_scan_root_bus() and pci_bus_*()
+
+PCI Core
+- Provides services to Lower level BIOS and Upper level endpoint layers.
+- Creates device entries for proc/sysfs information.
+- Linux kernel pci bus and driver management code.
+- Provides set of abstraction functions that endpoint drivers can used to
+  initiate pci communication with attached endpoints.
+- Calls BIOS codes with pcibios_*
+
+PCI Endpoint driver
+- Individual endpoint drivers from upper layer.
+- Accessing config space upon respective endpoint enumeration done.
+- Communicate over the endpoint for Tx/Rx transactions.
+- Register to PCI core as pci_driver_register()
+
+PCIe Port Bus driver
+- A logical PCI-PCI Bridge structure.
+- Root Port and the Switch Port.
+- See Documentation/PCI/pcie-busport-howto.txt
+
+4. PCI HC/RC driver
+
+4.1 Description
+
+4.2 Sample code
+
+5. References
+http://www.mindshare.com/files/ebooks/pci%20express%20system%20architecture.pdf
+http://www.pcisig.com/developers/main/training_materials/