Skip to main content
PCIe (Peripheral Component Interconnect Express) uses a bidirectional connection to send and receive information simultaneously. The path between devices is called a Link, made up of one or more transmit/receive pairs called Lanes.

Hardware Specifications

IQ-9075 PCIe Controllers

ParameterPCIe RC1PCIe RC0
SpeedGen4 2-lane (8 GT/s)Gen4 4-lane (8 GT/s)
Configuration Space0x40100000 (1 MB)0x60100000 (1 MB)
I/O Space0x40200000 (1 MB)0x60200000 (1 MB)
BAR Space0x40300000 (509 MB)0x60300000 (509 MB)
Power Railsvreg_l5a (VDD_A_PCIE_0_CORE), vreg_l1c (VDD_A_PCIE_0_PLL_1P2)vreg_l5a (VDD_A_PCIE_1_CORE), vreg_l1c (VDD_A_PCIE_1_PLL_1P2)
InterruptsMSI and PCI legacyMSI and PCI legacy
Power ManagementASPM (L1/L1ss, L0s)ASPM (L1/L1ss, L0s)

EVK Hardware Configuration

  • PCIe0: Gen4 2-lane — M.2 E key (Wi-Fi) or expansion (switch-selectable via SW1-1)
  • PCIe1: Gen4 4-lane — PCIe x4 slot or expansion (switch-selectable via SW1-2)
  • JPCIE: PCIe Express v4 receptacle connector (PCIe1)

Architecture

LayerKey Features
PhysicalLink training, 8b/10b encoding, serial conversion
Data LinkDLLP assembly, LCRC generation, ACK/NAK replay
TransactionTLP assembly, ECRC, flow control, QoS (TC→VC mapping)

PCIe Connection Types

TypeDescription
Root Complex (RC)Connects CPU to PCIe topology
SwitchRoutes packets between more than 2 ports
BridgeConnects different buses
Endpoint (EP)Leaf device with only an upstream port

Software Driver Configuration

Kernel Configuration

CONFIG_HOTPLUG_PCI=y
CONFIG_PCI_HOST_GENERIC=y
CONFIG_PCIE_DW_PLAT_HOST=y
CONFIG_PCIE_QCOM=y
CONFIG_PCI_ENDPOINT=y
CONFIG_PCIEASPM=y
CONFIG_PCIEASPM_POWER_SUPERSAVE=y
CONFIG_BLK_DEV_NVME=y
CONFIG_NVME_CORE=y

Device Tree Sources

PlatformFile
Dragonwing IQ-9075arch/arm64/boot/dts/qcom/sa8775p.dtsi

Key Driver Files

ComponentPath
PCIe Driverdrivers/pci/controller/dwc/pcie-qcom.c
DesignWare Hostdrivers/pci/controller/dwc/pcie-designware-host.c
PHY Driverdrivers/phy/qualcomm/phy-qcom-qmp-pcie.c

Verification

List PCIe Devices

lspci
Example output:
0001:00:00.0 PCI bridge: Qualcomm Device 010b
0001:01:00.0 PCI bridge: Toshiba Corporation Device 0623
0001:05:00.0 Ethernet controller: Toshiba Corporation Device 0220
lspci -vv | grep -i "lnk"
cat /sys/bus/pci/devices/*/current_link_speed
cat /sys/bus/pci/devices/*/current_link_width

USB over PCIe

After connecting a USB-over-PCIe card:
lspci
# Expected: USB controller: NEC Corporation uPD720200 USB 3.0 Host Controller

lsusb
# Shows connected USB devices

NVMe over PCIe

lspci | grep -i nvme
ls /dev/nvme*
nvme list

Debugging

Enable Debug Logs

sudo su
echo 8 > /proc/sys/kernel/printk
echo "file pcie-qcom.c +p" > /sys/kernel/debug/dynamic_debug/control
echo "file pcie-designware-host.c +p" > /sys/kernel/debug/dynamic_debug/control

dmesg | grep -i pcie

Troubleshooting

Possible causes: Link not established, endpoint not powered, switch misconfigured.
lspci -tv
dmesg | grep -i pcie
  • Verify DIP switch positions (SW1-1, SW1-2)
  • Check endpoint power supply
  • Enable MSI in device tree
  • Check interrupt controller configuration
  • Verify pci_enable_msi() returns success in driver
lspci -vv | grep -i "lnk"
# Check Speed and Width fields
  • Verify link is running at expected Gen4 speed
  • Adjust ASPM settings if too aggressive

Quick Reference

Essential Commands

lspci                                              # List all PCIe devices
lspci -vv                                          # Detailed device info
lspci -tv                                          # Tree view
lspci -nn                                          # With numeric IDs
dmesg | grep -i pcie                               # Kernel messages
cat /sys/bus/pci/devices/*/current_link_speed      # Link speeds
cat /sys/bus/pci/devices/*/current_link_width      # Link widths

Resources