PCIE的配置
==============================

PCIe的配置分为defconfig和DTS两部分：

defconfig
-------------

在内核的defconfig文件中，需要包含如下基础配置：

.. code-block:: shell

	CONFIG_PCI=y
	CONFIG_PCI_DOMAINS=y
	CONFIG_PCI_DOMAINS_GENERIC=y
	CONFIG_PCI_SYSCALL=y
	CONFIG_PCIEAER=y
	CONFIG_PCIE_PTM=y
	CONFIG_PCI_MSI=y
	CONFIG_PCI_MSI_IRQ_DOMAIN=y
	CONFIG_PCI_QUIRKS=y
	CONFIG_PCI_DEBUG=y
	CONFIG_PCI_REALLOC_ENABLE_AUTO=y
	CONFIG_PCI_IOV=y
	CONFIG_PCIE_BUS_DEFAULT=y
	CONFIG_PCIEPORTBUS=y

使能RC模式需要的配置如下：

.. code-block:: shell

	CONFIG_PCIE_HOBOT=m
	CONFIG_PCIE_HOBOT_RC=m
	CONFIG_PCIE_HOBOT_EP_DEV=m
	CONFIG_PCIE_HOBOT_EP_DEV_MAN=m

RC模式支持NVME需要的配置如下：

.. code-block:: shell

	CONFIG_BLK_DEV_NVME=m

使能EP模式需要的配置如下：

.. code-block:: shell

	CONFIG_PCIE_HOBOT=m
	CONFIG_PCIE_HOBOT_EP=m
	CONFIG_PCIE_HOBOT_EP_FUN=m

其中hybrid为必须使能的功能，已经被上述配置包含，其他功能可以按需配置。


如果需要使能vnet：

.. code-block:: shell

	CONFIG_PCIE_HOBOT_EP_FUN_VNET=y
	CONFIG_PCIE_HOBOT_EP_DEV_VNET=y

如果需要使能PAC AI（要注意，PAC AI只支持RC为非J6的情况）：

.. code-block:: shell

	CONFIG_PCIE_HOBOT_EP_FUN_AI=y
	CONFIG_PCIE_HOBOT_EP_DEV_AI=y

如果有debug的需求（具体使用参考：J6 PCIe驱动debug信息汇总）：

.. code-block:: shell

	CONFIG_PCIE_HOBOT_DEBUG=y

如果需要功能安全：

.. code-block:: shell

	CONFIG_PCIE_HOBOT_STL=y

DTS
------
要注意同一个控制器只能配置为RC或者EP模式。

RC模式
"""""""

控制器的配置节点为： ``hobot_pcie_rc0`` 和 ``hobot_pcie_rc1`` 。

一般情况下只需要修改 ``status`` 字段由 ``disable`` 为 ``okay`` 即可使能对应控制器的RC模式，反之关闭。

EP模式
"""""""

控制器的配置节点为： ``hobot_pcie_ep0`` 和 ``hobot_pcie_ep1`` 。

除了控制器本身需要配置，其子节点 ``funX`` 也需要进行配置.
``fun0`` 必须配置为使能状态，而 ``fun1`` 为vnet功能， ``fun2`` 为PAC AI功能，按需选择开关即可。