| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- From 9973b6610830146af1a12fe02d2d6440eb80b0f9 Mon Sep 17 00:00:00 2001
- From: Lei Wei <[email protected]>
- Date: Sun, 9 Feb 2025 22:29:36 +0800
- Subject: [PATCH] docs: networking: Add PPE driver documentation for Qualcomm
- IPQ9574 SoC
- Add description and high-level diagram for PPE, driver overview and
- module enable/debug information.
- Signed-off-by: Lei Wei <[email protected]>
- Signed-off-by: Luo Jie <[email protected]>
- ---
- .../device_drivers/ethernet/index.rst | 1 +
- .../ethernet/qualcomm/ppe/ppe.rst | 197 ++++++++++++++++++
- 2 files changed, 198 insertions(+)
- create mode 100644 Documentation/networking/device_drivers/ethernet/qualcomm/ppe/ppe.rst
- --- a/Documentation/networking/device_drivers/ethernet/index.rst
- +++ b/Documentation/networking/device_drivers/ethernet/index.rst
- @@ -49,6 +49,7 @@ Contents:
- neterion/s2io
- netronome/nfp
- pensando/ionic
- + qualcomm/ppe/ppe
- smsc/smc9
- stmicro/stmmac
- ti/cpsw
- --- /dev/null
- +++ b/Documentation/networking/device_drivers/ethernet/qualcomm/ppe/ppe.rst
- @@ -0,0 +1,197 @@
- +.. SPDX-License-Identifier: GPL-2.0
- +
- +===============================================
- +PPE Ethernet Driver for Qualcomm IPQ SoC Family
- +===============================================
- +
- +Copyright (c) 2025 Qualcomm Innovation Center, Inc. All rights reserved.
- +
- +Author: Lei Wei <[email protected]>
- +
- +
- +Contents
- +========
- +
- +- `PPE Overview`_
- +- `PPE Driver Overview`_
- +- `PPE Driver Supported SoCs`_
- +- `Enabling the Driver`_
- +- `Debugging`_
- +
- +
- +PPE Overview
- +============
- +
- +IPQ (Qualcomm Internet Processor) SoC (System-on-Chip) series is Qualcomm's series of
- +networking SoC for Wi-Fi access points. The PPE (Packet Process Engine) is the Ethernet
- +packet process engine in the IPQ SoC.
- +
- +Below is a simplified hardware diagram of IPQ9574 SoC which includes the PPE engine and
- +other blocks which are in the SoC but outside the PPE engine. These blocks work together
- +to enable the Ethernet for the IPQ SoC::
- +
- + +------+ +------+ +------+ +------+ +------+ +------+ start +-------+
- + |netdev| |netdev| |netdev| |netdev| |netdev| |netdev|<------|PHYLINK|
- + +------+ +------+ +------+ +------+ +------+ +------+ stop +-+-+-+-+
- + | | | ^
- + +-------+ +-------------------------+--------+----------------------+ | | |
- + | GCC | | | EDMA | | | | |
- + +---+---+ | PPE +---+----+ | | | |
- + | clk | | | | | |
- + +------>| +-----------------------+------+-----+---------------+ | | | |
- + | | Switch Core |Port0 | |Port7(EIP FIFO)| | | | |
- + | | +---+--+ +------+--------+ | | | |
- + | | | | | | | | |
- + +-------+ | | +------+---------------+----+ | | | | |
- + |CMN PLL| | | +---+ +---+ +----+ | +--------+ | | | | | |
- + +---+---+ | | |BM | |QM | |SCH | | | L2/L3 | ....... | | | | | |
- + | | | | +---+ +---+ +----+ | +--------+ | | | | | |
- + | | | | +------+--------------------+ | | | | |
- + | | | | | | | | | |
- + | v | | +-----+-+-----+-+-----+-+-+---+--+-----+-+-----+ | | | | |
- + | +------+ | | |Port1| |Port2| |Port3| |Port4| |Port5| |Port6| | | | | |
- + | |NSSCC | | | +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ | | mac| | |
- + | +-+-+--+ | | |MAC0 | |MAC1 | |MAC2 | |MAC3 | |MAC4 | |MAC5 | | |<---+ | |
- + | ^ | |clk | | +-----+-+-----+-+-----+-+-----+--+-----+-+-----+ | | ops | |
- + | | | +---->| +----|------|-------|-------|---------|--------|-----+ | | |
- + | | | +---------------------------------------------------------+ | |
- + | | | | | | | | | | |
- + | | | MII clk | QSGMII USXGMII USXGMII | |
- + | | +------------->| | | | | | | |
- + | | +-------------------------+ +---------+ +---------+ | |
- + | |125/312.5M clk| (PCS0) | | (PCS1) | | (PCS2) | pcs ops | |
- + | +--------------+ UNIPHY0 | | UNIPHY1 | | UNIPHY2 |<--------+ |
- + +--------------->| | | | | | |
- + | 31.25M ref clk +-------------------------+ +---------+ +---------+ |
- + | | | | | | | |
- + | +-----------------------------------------------------+ |
- + |25/50M ref clk| +-------------------------+ +------+ +------+ | link |
- + +------------->| | QUAD PHY | | PHY4 | | PHY5 | |---------+
- + | +-------------------------+ +------+ +------+ | change
- + | |
- + | MDIO bus |
- + +-----------------------------------------------------+
- +
- +The CMN (Common) PLL, NSSCC (Networking Sub System Clock Controller) and GCC (Global
- +Clock Controller) blocks are in the SoC and act as clock providers.
- +
- +The UNIPHY block is in the SoC and provides the PCS (Physical Coding Sublayer) and
- +XPCS (10-Gigabit Physical Coding Sublayer) functions to support different interface
- +modes between the PPE MAC and the external PHY.
- +
- +This documentation focuses on the descriptions of PPE engine and the PPE driver.
- +
- +The Ethernet functionality in the PPE (Packet Process Engine) is comprised of three
- +components: the switch core, port wrapper and Ethernet DMA.
- +
- +The Switch core in the IPQ9574 PPE has maximum of 6 front panel ports and two FIFO
- +interfaces. One of the two FIFO interfaces is used for Ethernet port to host CPU
- +communication using Ethernet DMA. The other is used communicating to the EIP engine
- +which is used for IPsec offload. On the IPQ9574, the PPE includes 6 GMAC/XGMACs that
- +can be connected with external Ethernet PHY. Switch core also includes BM (Buffer
- +Management), QM (Queue Management) and SCH (Scheduler) modules for supporting the
- +packet processing.
- +
- +The port wrapper provides connections from the 6 GMAC/XGMACS to UNIPHY (PCS) supporting
- +various modes such as SGMII/QSGMII/PSGMII/USXGMII/10G-BASER. There are 3 UNIPHY (PCS)
- +instances supported on the IPQ9574.
- +
- +Ethernet DMA is used to transmit and receive packets between the Ethernet subsystem
- +and ARM host CPU.
- +
- +The following lists the main blocks in the PPE engine which will be driven by this
- +PPE driver:
- +
- +- BM
- + BM is the hardware buffer manager for the PPE switch ports.
- +- QM
- + Queue Manager for managing the egress hardware queues of the PPE switch ports.
- +- SCH
- + The scheduler which manages the hardware traffic scheduling for the PPE switch ports.
- +- L2
- + The L2 block performs the packet bridging in the switch core. The bridge domain is
- + represented by the VSI (Virtual Switch Instance) domain in PPE. FDB learning can be
- + enabled based on the VSI domain and bridge forwarding occurs within the VSI domain.
- +- MAC
- + The PPE in the IPQ9574 supports up to six MACs (MAC0 to MAC5) which are corresponding
- + to six switch ports (port1 to port6). The MAC block is connected with external PHY
- + through the UNIPHY PCS block. Each MAC block includes the GMAC and XGMAC blocks and
- + the switch port can select to use GMAC or XMAC through a MUX selection according to
- + the external PHY's capability.
- +- EDMA (Ethernet DMA)
- + The Ethernet DMA is used to transmit and receive Ethernet packets between the PPE
- + ports and the ARM cores.
- +
- +The received packet on a PPE MAC port can be forwarded to another PPE MAC port. It can
- +be also forwarded to internal switch port0 so that the packet can be delivered to the
- +ARM cores using the Ethernet DMA (EDMA) engine. The Ethernet DMA driver will deliver the
- +packet to the corresponding 'netdevice' interface.
- +
- +The software instantiations of the PPE MAC (netdevice), PCS and external PHYs interact
- +with the Linux PHYLINK framework to manage the connectivity between the PPE ports and
- +the connected PHYs, and the port link states. This is also illustrated in above diagram.
- +
- +
- +PPE Driver Overview
- +===================
- +PPE driver is Ethernet driver for the Qualcomm IPQ SoC. It is a single platform driver
- +which includes the PPE part and Ethernet DMA part. The PPE part initializes and drives the
- +various blocks in PPE switch core such as BM/QM/L2 blocks and the PPE MACs. The EDMA part
- +drives the Ethernet DMA for packet transfer between PPE ports and ARM cores, and enables
- +the netdevice driver for the PPE ports.
- +
- +The PPE driver files in drivers/net/ethernet/qualcomm/ppe/ are listed as below:
- +
- +- Makefile
- +- ppe.c
- +- ppe.h
- +- ppe_config.c
- +- ppe_config.h
- +- ppe_debugfs.c
- +- ppe_debugfs.h
- +- ppe_regs.h
- +
- +The ppe.c file contains the main PPE platform driver and undertakes the initialization of
- +PPE switch core blocks such as QM, BM and L2. The configuration APIs for these hardware
- +blocks are provided in the ppe_config.c file.
- +
- +The ppe.h defines the PPE device data structure which will be used by PPE driver functions.
- +
- +The ppe_debugfs.c enables the PPE statistics counters such as PPE port Rx and Tx counters,
- +CPU code counters and queue counters.
- +
- +
- +PPE Driver Supported SoCs
- +=========================
- +
- +The PPE driver supports the following IPQ SoC:
- +
- +- IPQ9574
- +
- +
- +Enabling the Driver
- +===================
- +
- +The driver is located in the menu structure at:
- +
- + -> Device Drivers
- + -> Network device support (NETDEVICES [=y])
- + -> Ethernet driver support
- + -> Qualcomm devices
- + -> Qualcomm Technologies, Inc. PPE Ethernet support
- +
- +If this driver is built as a module, we can use below commands to install and remove it:
- +
- +- insmod qcom-ppe.ko
- +- rmmod qcom-ppe.ko
- +
- +The PPE driver functionally depends on the CMN PLL and NSSCC clock controller drivers.
- +Please make sure the dependent modules are installed before installing the PPE driver
- +module.
- +
- +
- +Debugging
- +=========
- +
- +The PPE hardware counters are available in the debugfs and can be checked by the command
- +``cat /sys/kernel/debug/ppe/packet_counters``.
|