Broadcom Starfighter 2 乙太網交換機驅動程式¶
Broadcom 的 Starfighter 2 乙太網交換機硬體模組通常存在於以下產品中並被部署:
xDSL 閘道器,例如 BCM63138
流媒體/多媒體機頂盒,例如 BCM7445
有線調變解調器/住宅閘道器,例如 BCM7145/BCM3390
該交換機通常部署在涉及 5 到 13 個埠的配置中,提供一系列內建和可定製的介面
單個集成千兆 PHY
四個集成千兆 PHY
帶有 MDIO 複用器的四個外部千兆 PHY
整合 MoCA PHY
多個外部 MII/RevMII/GMII/RGMII 介面
該交換機還支援特定的擁塞控制功能,允許 MoCA 故障轉移期間不丟失資料包(在 MoCA 角色重新選舉期間),以及在下游介面以較低速度連線時,向主機 CPU 網路介面發出帶外反壓。
交換機硬體模組通常使用 MMIO 訪問進行介面,幷包含一堆子模組/暫存器
SWITCH_CORE:通用交換機暫存器SWITCH_REG:外部介面交換機暫存器SWITCH_MDIO:外部 MDIO 匯流排控制器(SWITCH_CORE 中還有另一個,用於間接 PHY 訪問)SWITCH_INDIR_RW:64 位寬的暫存器輔助模組SWITCH_INTRL2_0/1:2 級中斷控制器SWITCH_ACB:准入控制塊SWITCH_FCB:故障轉移控制塊
實現細節¶
該驅動程式位於 drivers/net/dsa/bcm_sf2.c 中,並作為 DSA 驅動程式實現;有關子系統及其提供的功能的詳細資訊,請參見 Documentation/networking/dsa/dsa.rst。
SF2 交換機被配置為啟用 Broadcom 特定的 4 位元組交換機標籤,該標籤由交換機插入到轉發到 CPU 介面的每個資料包中,相反,CPU 網路介面應為進入 CPU 埠的資料包插入類似的標籤。標籤格式在 net/dsa/tag_brcm.c 中描述。
總的來說,SF2 驅動程式是一個相當標準的 DSA 驅動程式;下面介紹一些具體細節。
裝置樹探測¶
DSA 平臺裝置驅動程式使用 net/dsa/dsa.c 中提供的特定相容字串進行探測。這樣做的原因是 DSA 子系統目前被註冊為一個平臺裝置驅動程式。DSA 將提供所需的 device_node 指標,然後交換機驅動程式設定函式可以訪問這些指標,以設定諸如暫存器範圍和中斷之類的資源。 目前,這工作得很好,因為驅動程式使用的 of_* 函式都不需要 struct device 繫結到 struct device_node,但將來可能會發生變化。
MDIO 間接訪問¶
由於 Broadcom 交換機的設計方式存在限制,連線到 SF2 的外部 Broadcom 交換機需要使用 DSA 使用者 MDIO 匯流排才能正確配置它們。預設情況下,SF2 偽 PHY 地址和外部交換機偽 PHY 地址都將偵聽傳入的 MDIO 事務,因為它們位於相同的地址 (30),從而導致某種“雙重”程式設計。使用 DSA 並相應地設定 ds->phys_mii_mask,我們可以選擇性地將讀取和寫入轉向外部 Broadcom 交換機的偽 PHY 地址。較新版本的 SF2 硬體引入了可配置的偽 PHY 地址,從而規避了最初的設計限制。
同軸電纜多媒體 (MoCA) 介面¶
MoCA 介面非常特殊,需要使用韌體 blob,該韌體 blob 被載入到 MoCA 處理器上以進行資料包處理。交換機硬體包含邏輯,只要 MoCA 同軸電纜斷開連線或韌體重新載入,該邏輯就會相應地宣告/取消宣告 MoCA 介面的鏈路狀態。SF2 驅動程式依賴於此類事件來正確設定其 MoCA 介面載波狀態,並將其正確報告給網路堆疊。
MoCA 介面使用 PHY 庫的固定 PHY/模擬 PHY 裝置提供支援,並且交換機驅動程式為這些 PHY 註冊一個 fixed_link_update 回撥,該回調反映了從中斷處理程式獲得的鏈路狀態。
電源管理¶
在可能的情況下,SF2 驅動程式嘗試透過應用以下組合來最大限度地降低整體交換機功耗
關閉內部緩衝區/儲存器
停用資料包處理邏輯
將整合 PHY 置於 IDDQ/低功耗狀態
根據活動埠數減少交換機核心時鐘
啟用和宣傳 EEE
鏈路斷開時關閉 RGMII 資料處理邏輯
網路喚醒¶
網路喚醒目前透過利用主機處理器乙太網 MAC 控制器喚醒邏輯來實現。 只要請求網路喚醒,就會在使用者請求和支援的主機乙太網介面 WoL 功能之間進行交集,並配置交集結果。 在系統範圍的掛起/恢復期間,僅停用未參與網路喚醒的埠。