DPAA2 (資料路徑加速架構 Gen2) 概述

版權所有:

© 2015 Freescale Semiconductor Inc.

版權所有:

© 2018 NXP

本文件概述了 Freescale DPAA2 架構以及它如何整合到 Linux 核心中。

簡介

DPAA2 是一種為高速網路資料包處理而設計的硬體架構。 DPAA2 包含用於處理乙太網資料包、佇列管理、緩衝區管理、自主 L2 交換、虛擬乙太網橋接和加速器(例如加密)共享的複雜機制。

DPAA2 硬體元件(稱為管理複合體 (MC))管理 DPAA2 硬體資源。 MC 為軟體驅動程式提供基於物件的抽象,以使用 DPAA2 硬體。 MC 使用 DPAA2 硬體資源(例如佇列、緩衝區池和網路埠)來建立功能物件/裝置,例如網路介面、L2 交換機或加速器例項。 MC 提供記憶體對映的 I/O 命令介面(MC 門戶),DPAA2 軟體驅動程式使用這些介面來操作 DPAA2 物件。

下圖顯示了 DPAA2 資源管理架構的概述

+--------------------------------------+
|                  OS                  |
|                        DPAA2 drivers |
|                             |        |
+-----------------------------|--------+
                              |
                              | (create,discover,connect
                              |  config,use,destroy)
                              |
                 DPAA2        |
+------------------------| mc portal |-+
|                             |        |
|   +- - - - - - - - - - - - -V- - -+  |
|   |                               |  |
|   |   Management Complex (MC)     |  |
|   |                               |  |
|   +- - - - - - - - - - - - - - - -+  |
|                                      |
| Hardware                  Hardware   |
| Resources                 Objects    |
| ---------                 -------    |
| -queues                   -DPRC      |
| -buffer pools             -DPMCP     |
| -Eth MACs/ports           -DPIO      |
| -network interface        -DPNI      |
|  profiles                 -DPMAC     |
| -queue portals            -DPBP      |
| -MC portals                ...       |
|  ...                                 |
|                                      |
+--------------------------------------+

MC 調節諸如建立、發現、連線、配置和銷燬等操作。 資料上的快速通道操作(例如資料包傳輸/接收)不由 MC 調節,而是直接使用 DPIO 物件中的記憶體對映區域完成。

DPAA2 物件概述

本節簡要概述了一些關鍵的 DPAA2 物件。 描述了一個簡單的場景,說明了建立網路介面所涉及的物件。

DPRC(資料路徑資源容器)

DPRC 是一個容器物件,其中包含所有其他型別的 DPAA2 物件。 在下面的示例圖中,容器中有 8 個物件,型別為 5 種(DPMCP、DPIO、DPBP、DPNI 和 DPMAC)。

+---------------------------------------------------------+
| DPRC                                                    |
|                                                         |
|  +-------+  +-------+  +-------+  +-------+  +-------+  |
|  | DPMCP |  | DPIO  |  | DPBP  |  | DPNI  |  | DPMAC |  |
|  +-------+  +-------+  +-------+  +---+---+  +---+---+  |
|  | DPMCP |  | DPIO  |                                   |
|  +-------+  +-------+                                   |
|  | DPMCP |                                              |
|  +-------+                                              |
|                                                         |
+---------------------------------------------------------+

從作業系統的角度來看,DPRC 的行為類似於即插即用匯流排,例如 PCI。 DPRC 命令可用於列舉 DPRC 的內容,發現存在的硬體物件(包括可對映區域和中斷)。

DPRC.1 (bus)
   |
   +--+--------+-------+-------+-------+
      |        |       |       |       |
    DPMCP.1  DPIO.1  DPBP.1  DPNI.1  DPMAC.1
    DPMCP.2  DPIO.2
    DPMCP.3

可以動態建立和銷燬硬體物件,從而能夠熱插拔進出 DPRC 的物件。

DPRC 具有可對映的 MMIO 區域(MC 門戶),可用於傳送 MC 命令。 它具有用於狀態事件(如熱插拔)的中斷。 容器中的所有物件共享相同的硬體“隔離上下文”。 這意味著,對於 IOMMU,隔離粒度位於 DPRC(容器)級別,而不是位於單個物件級別。

可以透過傳遞給 MC 的配置檔案(韌體啟動時)靜態定義 DPRC 並使用物件填充它。

乙太網網路介面的 DPAA2 物件

典型的乙太網 NIC 是單片的——NIC 裝置包含 TX/RX 佇列機制、配置機制、緩衝區管理、物理埠和中斷。 DPAA2 使用更精細的方法,利用多個硬體物件。 每個物件提供專門的功能。 軟體使用這些物件的組來提供乙太網網路介面功能。 這種方法提供了有限硬體資源的有效利用、靈活性和效能優勢。

下圖顯示了具有 2 個 CPU 的系統上簡單網路介面配置所需的物件。

+---+---+ +---+---+
   CPU0     CPU1
+---+---+ +---+---+
    |         |
+---+---+ +---+---+
   DPIO     DPIO
+---+---+ +---+---+
    \     /
     \   /
      \ /
   +---+---+
      DPNI  --- DPBP,DPMCP
   +---+---+
       |
       |
   +---+---+
     DPMAC
   +---+---+
       |
   port/PHY

下面描述了這些物件。 對於每個物件,都會提供一個簡短的描述,以及該物件支援的操作型別的摘要以及該物件的主要資源(MMIO 區域和 IRQ)的摘要。

DPMAC(資料路徑乙太網 MAC)

表示乙太網 MAC,一種連線到乙太網 PHY 的硬體裝置,允許乙太網幀的物理傳輸和接收。

  • MMIO 區域:無

  • IRQ:DPNI 連結更改

  • 命令:設定鏈路啟動/關閉、鏈路配置、獲取統計資訊、IRQ 配置、啟用、重置

DPNI(資料路徑網路介面)

包含 TX/RX 佇列、網路介面配置和 RX 緩衝區池配置機制。 TX/RX 佇列位於記憶體中,並由佇列號標識。

  • MMIO 區域:無

  • IRQ:鏈路狀態

  • 命令:埠配置、解除安裝配置、佇列配置、解析/分類配置、IRQ 配置、啟用、重置

DPIO(資料路徑 I/O)

提供用於排隊和取消資料包以及執行硬體緩衝區池管理操作的介面。 DPAA2 架構將訪問佇列的機制(DPIO 物件)與佇列本身分開。 DPIO 提供 MMIO 介面來排隊/取消資料包。 為了排隊,將一個描述符寫入 DPIO MMIO 區域,其中包括目標佇列號。 通常會為每個 CPU 分配一個 DPIO。 這允許所有 CPU 同時執行排隊/取消排隊操作。 預計 DPIO 將由不同的 DPAA2 驅動程式共享。

  • MMIO 區域:佇列操作、緩衝區管理

  • IRQ:資料可用性、擁塞通知、緩衝區池耗盡

  • 命令:IRQ 配置、啟用、重置

DPBP(資料路徑緩衝區池)

表示硬體緩衝區池。

  • MMIO 區域:無

  • IRQ:無

  • 命令:啟用、重置

DPMCP(資料路徑 MC 門戶)

提供 MC 命令門戶。 驅動程式使用它向 MC 傳送命令以管理物件。

  • MMIO 區域:MC 命令門戶

  • IRQ:命令完成

  • 命令:IRQ 配置、啟用、重置

物件連線

某些物件具有必須配置的顯式關係

  • DPNI <--> DPMAC

  • DPNI <--> DPNI

  • DPNI <--> L2 交換機埠

    DPNI 必須連線到 DPMAC、另一個 DPNI 或 L2 交換機埠等物件。 DPNI 連線是透過 DPRC 命令建立的。

+-------+  +-------+
| DPNI  |  | DPMAC |
+---+---+  +---+---+
    |          |
    +==========+
  • DPNI <--> DPBP

    網路介面需要一個“緩衝區池”(DPBP 物件),它提供一個指向記憶體的指標列表,接收到的乙太網資料將複製到該記憶體中。 乙太網驅動程式配置與網路介面關聯的 DPBP。

中斷

DPAA2 物件生成的所有中斷都是訊息中斷。 在硬體級別,裝置生成的訊息中斷通常具有 3 個元件——1)在硬體總線上表達的不可欺騙的“裝置 ID”,2)一個地址,3)一個數據值。

對於 DPAA2 裝置/物件,同一容器/DPRC 中的所有物件共享相同的“裝置 ID”。 對於基於 ARM 的 SoC,這與流 ID 相同。

DPAA2 Linux 驅動程式概述

本節概述了 DPAA2 的 Linux 核心驅動程式——1)匯流排驅動程式和關聯的“DPAA2 基礎架構”驅動程式,以及 2)功能物件驅動程式(例如乙太網)。

如前所述,DPRC 是一個包含其他型別 DPAA2 物件的容器。 它在功能上類似於即插即用匯流排控制器。 DPRC 中的每個物件都是 Linux“裝置”並繫結到驅動程式。 下圖顯示了網路場景中涉及的 Linux 驅動程式以及繫結到每個驅動程式的物件。 下面是每個驅動程式的簡要說明。

                                     +------------+
                                     | OS Network |
                                     |   Stack    |
         +------------+              +------------+
         | Allocator  |. . . . . . . |  Ethernet  |
         |(DPMCP,DPBP)|              |   (DPNI)   |
         +-.----------+              +---+---+----+
          .          .                   ^   |
         .            .     <data avail, |   | <enqueue,
        .              .     tx confirm> |   | dequeue>
+-------------+         .                |   |
| DPRC driver |          .           +---+---V----+     +---------+
|   (DPRC)    |           . . . . . .| DPIO driver|     |   MAC   |
+----------+--+                      |  (DPIO)    |     | (DPMAC) |
           |                         +------+-----+     +-----+---+
           |<dev add/remove>                |                 |
           |                                |                 |
  +--------+----------+                     |              +--+---+
  |   MC-bus driver   |                     |              | PHY  |
  |                   |                     |              |driver|
  |   /bus/fsl-mc     |                     |              +--+---+
  +-------------------+                     |                 |
                                            |                 |
========================= HARDWARE =========|=================|======
                                          DPIO                |
                                            |                 |
                                          DPNI---DPBP         |
                                            |                 |
                                          DPMAC               |
                                            |                 |
                                           PHY ---------------+
============================================|========================

下面提供了每個驅動程式的簡要說明。

MC 匯流排驅動程式

MC 匯流排驅動程式是一個平臺驅動程式,並且是從裝置樹中的節點(相容“fsl,qoriq-mc”)探測的,由引導韌體傳入。 它負責引導 DPAA2 核心基礎架構。 主要功能包括

  • 向核心註冊一個名為“fsl-mc”的新匯流排型別,並實現匯流排回撥(例如 match/uevent/dev_groups)

  • 實現 DPAA2 驅動程式註冊和裝置新增/刪除的 API

  • 建立 MSI IRQ 域

  • 執行“裝置新增”以公開“根”DPRC,進而觸發根 DPRC 與 DPRC 驅動程式的繫結

可以在 Documentation/devicetree/bindings/misc/fsl,qoriq-mc.yaml 中查閱 MC 匯流排裝置樹節點的繫結。 可以在 ABI 檔案測試/sysfs-bus-fsl-mc 中查閱 MC 匯流排的 sysfs 繫結/取消繫結介面。

DPRC 驅動程式

DPRC 驅動程式繫結到 DPRC 物件,並執行匯流排例項的執行時管理。 它執行 DPRC 的初始匯流排掃描,並處理容器事件(例如熱插拔)的中斷,方法是重新掃描 DPRC。

分配器

某些物件(例如 DPMCP 和 DPBP)是通用的且可互換的,旨在供其他驅動程式使用。 例如,DPAA2 乙太網驅動程式需要

  • DPMCP 傳送 MC 命令,配置網路介面

  • DPBP 用於網路緩衝區池

分配器驅動程式為這些可分配的物件型別註冊,並且當探測匯流排時,這些物件繫結到分配器。 分配器維護一個物件池,其他 DPAA2 驅動程式可以使用這些物件進行分配。

DPIO 驅動程式

DPIO 驅動程式繫結到 DPIO 物件,並提供服務,允許其他驅動程式(例如乙太網驅動程式)為其各自的物件排隊和取消排隊資料。 主要服務包括

  • 資料可用性通知

  • 硬體佇列操作(資料的排隊和取消排隊)

  • 硬體緩衝區池管理

為了傳輸資料包,乙太網驅動程式將資料放在佇列上並呼叫 DPIO API。 對於接收,乙太網驅動程式註冊一個數據可用性通知回撥。 要取消排隊資料包,請使用 DPIO API。 通常每個物理 CPU 有一個 DPIO 物件以獲得最佳效能,允許不同的 CPU 同時排隊和取消排隊資料。

DPIO 驅動程式代表核心中處於活動狀態的所有 DPAA2 驅動程式執行——乙太網、加密、壓縮等。

乙太網驅動程式

乙太網驅動程式繫結到 DPNI,並實現將 DPAA2 網路介面連線到網路堆疊所需的核心介面。 每個 DPNI 對應於一個 Linux 網路介面。

MAC 驅動程式

乙太網 PHY 是一個片外、特定於板的元件,並透過 mdio 匯流排由相應的 PHY 驅動程式管理。 MAC 驅動程式充當 PHY 驅動程式和 MC 之間的代理。 它透過 MC 命令對 DPMAC 物件執行此代理。 如果 PHY 驅動程式發出鏈路更改訊號,則 MAC 驅動程式透過 DPMAC 命令通知 MC。 如果啟動或關閉網路介面,MC 會透過中斷通知 DPMAC 驅動程式,並且該驅動程式可以採取適當的措施。