2410971_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2410971_ja-JP

2410971_ja-JP

LS1028A Felix (swp0): CPU-Inje上のカスタムEtherTypeフレームに対してハードウェアTXタイムスタンプが生成されません

1. 環境

  • プラットフォーム:NXP LS1028ARDB(VSC9959 / Felix スイッチ)

  • カーネル:Linux 6.18.2-rt3(NXP Yocto real-time-edge、PREEMPT_RT)

  • トポロジー(DSA):

    • eno2 (ENETC) = DSAコンジット/NPIポート

    • swp0 = Felix ユーザーポート(CPUインジェクションパス:CPU → eno2 → NPI → egress swp0 物理ポート)

    • eno0 (ENETC) = 独立したテストポート(現在はswp0に直接ケーブル接続されており、実際の出力フレームの内容を確認するために使用されます)

  • 用途:AF_PACKET swp0にバインドされたSOCK_RAWソケットSO_TIMESTAMPING(TX_HARDWARE|RAW_HARDWARE)で、カスタムEtherType 0x88B5でフレームを送信し、ソケットエラーキュー(SCM_TIMESTAMPING)からハードウェアTXタイムスタンプを期待します。

  • ptp4lはswp0上で実行されています( HWTSTAMP_TX_ON 、正常に同期しており、影響を受けていません)。

2. 目標

swp0 上で送信されるカスタム 0x88B5 (非 PTP) フレーム のハードウェア TX タイムスタンプを 、swp0 上の PTP 同期を損なうことなく取得します。

3. 動作確認済み

  • PTPフレームにはタイムスタンプが付与されます。swp0上の同じAF_PACKET rawソケットを使用し、0x88F7と有効なPTPヘッダーを送信すると、30フレーム中30フレームがエラーキュー経由でハードウェアTXタイムスタンプを返しました( ocelot_get_txtstampが一致し、タイムスタンプがソケットエラーキューに配信されました)。

  • ドライバーのタイムスタンプリクエストパスはカスタムフレームで動作します。0x88B5フレームがocelot_port_txtstamp_requestに達する (dmesgはfelix-tx-tsを表示:ポート0非PTP=1 ts_id=0..3))、すなわocelot_port->ptp_cmdゼロでない(ptp4lによって設定)され、タイムスタンプIDが割り当てられます。

4. 問題

0x88B5フレームの場合、タイムスタンプIDが割り当てられますが、ハードウェアはタイムスタンプを生成しません

  • SYS_PTP_STATUS PTP_MESS_VLD = 0 は、0x88B5 フレームのバースト送信直後に発生します (FIFO エントリなし、オーバーフローなし)。

  • ソケットのエラーキューは空のままです。

5.我々が確認し、除外した事項(証拠)

結果を確認する

ocelot_port->ptp_cmd (2段階有効化) ゼロ以外(ptp4lによって設定)
IFHバイパス(ビット127) =1(ドライバー ocelot_ifh_set_bypass)
IFH REW_OP1 (ビット125~117) コードによって確認済み:2ステップ(3) + ts_idが0x88B5フレーム用に書き込まれました
REW_PTP_CFG.PTP_2STEP_DIS =0(2段階認証は無効になっていません)
PTP_CFG_MISC.PTP_ENA =1
SYS_PORT_MODE.DATA_WO_TS (ポート 0/4/6) =0(インラインタイムスタンプ書き込みが無効になっていない)
REW_PORT_CFG.FCS_UPDATE_CPU_ENA =1(CPUフレームは常にFCSが再計算され、CRCエラーによるドロップは発生しない)
IS2ルールにより、0x88B5(イングレスswp0、次にswp0|NPI)に対して2段階認証が追加されます。 効果なし(CPUから注入されたフレームはBYPASS=1となり、アナライザー/IS2はスキップされます)
インラインタイムスタンプ挿入SYS_TIMESTAMP_OFFSET (ETH_TYPE_CFG=0x88B5、TIMESTAMP_OFFSET=14; レジスタ書き込み/読み出し検証済み) 効果なし(swp0↔eno0ダイレクトケーブルの場合、出力フレームの絶対バイト28にタイムスタンプなし)

6.公式確認のための質問

  1. VSC9959/Felixの2段階TXタイムスタンプ(IFH REW_OP1、REW_OP[2:0]=3)は、非PTPのEtherTypeを持つCPUインジェクトフレームに対して実際に動作しますか?リファレンス・マニュアル(16.4.13.12.3.1)には「任意のフレーム、非PTPフレームにも適用可能」と記載されていますが、私たちは VLD=0(FIFOエントリゼロ)SYS_PTP_STATUS測定しています。実際のシリコンの挙動としては、BYPASS=1かつIFHでREW_OP1が入っても、リライターはタイムスタンプのFIFOエントリを生成する前にフレームをEtherType / PTPヘッダーでPTPとして分類する必要があるのでしょうか?

  2. SYS_TIMESTAMP_OFFSET (インラインタイムスタンプ挿入)には、 ETH_TYPE_CFGの一致以外に、何か隠された有効化/トリガー条件があるのでしょうか?レジスタが正しく書き込まれていること(ETH_TYPE_CFG=0x88B5、オフセット=14)、FCS更新が有効になっていること、DATA_WO_TS=0であること、そしてswp0↔eno0ケーブルを直接接続して出力フレームの内容を確認したことを確認済みですが、フレームにタイムスタンプは書き込まれていませんでした。この機能はCPUインジェクション(バイパス)パスでも制限されているのでしょうか?

  3. CPUインジェクション(BYPASS=1)パスにおいて、swp0で送信される任意のEtherTypeカスタムフレームのハードウェアTXタイムスタンプを取得するための公式にサポートされている方法はありますか? (例えば、イネーブルビット、PTP分類テーブルの設定、または必須フレームフォーマットなど。)

  4. しこのシリコンでマニュアルに記載された2つの機構のいずれも非PTPフレームをサポートしていない場合、既知のエラタムや推奨される代替案はありますか?

Re: LS1028A Felix (swp0): Hardware TX Timestamp Not Produced for Custom-EtherType Frames on the CPU-

非PTP CPUインジェクションフレームに対する2段階TXタイムスタンプ

RMドキュメントでは、CPUインジェクションヘッダーのREW_OP[2:0] = 3を「2ステップPTP」として記述しており、REW_OP[8:3]にはタイムスタンプ識別子が含まれています。ID 0~3は、CPUインジェクションフレーム用に明示的に事前割り当てされています。また、2段階タイムスタンプは「任意のフレーム、PTP以外のフレームにも適用可能」と述べています。フレーム自体は変更されず、TXタイムスタンプはSYS::P TP_STATUS / SYS::P TP_TXSTAMPに保存されます。

したがって、RMからBYPASS=1 + IFH REW_OP[2:0]=3は、非PTPフレームを含むCPUインジェクトによる2段階タイムスタンプの有効なメカニズムであるはずです。IFHが2段階コマンドを提供する場合、リライターがまずEtherType/ヘッダーによってフレームをPTPとして分類する必要があるというRMの証拠は見つかりませんでした。矛盾しているのは、IFH REW_OP1 を確認した後の測定値 SYS_PTP_STATUS.PTP_MESS_VLD=0 ですが、これは私が取得した RM テキストでは説明されていません。

SYS_TIMESTAMP_OFFSET / インラインタイムスタンプ挿入

ES_SYS_SYSTEM_TIMESTAMP_OFFSET ETH_TYPE_CFGを照合し、64ビットナノ秒のTXタイムスタンプをTIMESTAMP_OFFSETに配置することが文書化されています。マニュアルには「汎用タイムスタンプ挿入(クロノス)」の例もあり、オフセット14でタイムスタンプをイーサネットフレームの絶対バイト28に配置しています。

一般的なPTP有効化/タイムスタンプオフセット設定以外に追加の隠れた有効ビットがあると記載されたドキュメントや、CPUインジェクトされたBYPASS=1フレームでこの機能がサポートまたはブロックされていると明記したドキュメントは取得できません。RMの文言は汎用的なメカニズムをサポートしていますが、直線ケーブルで予想されるオフセットでバイトが書かれていないことは、このCPU注入経路ではETH_TYPE_CFG一致だけでは十分ではないことを示唆しています。

Linux DSA上で公式に対応している方法で、swp0上で任意のEtherTypeフレームにタイムスタンプを付ける方法があります。

最も強力なソフトウェア側の証拠は、LS1028Aスイッチドライバで使われているDSAフレームワークでは汎用パケットのタイムスタンピングがサポートされていないということです。スイッチハードウェアは対応可能です。

したがって、標準的なDSA Felixドライバモデルでは、PTP/IEEE-1588イベント情報メッセージのタイムスタンプをサポートパスとして扱い、swp0上の任意のEtherType 0x88B5 TXタイムスタンプをSO_TIMESTAMPINGを通じたものは公式にソフトウェアスタックでサポートされていないとみなします。それは、有効な0x88F7 PTPフレームは確実にタイムスタンプが付与されるのに対し、0x88B5はそうではないというあなたの観察結果と一致します。

訂正/推奨代替案

この動作に関するタイムスタンプ固有のLS1028A/Felixの正誤表は見つかりませんでした。私が見つけた証拠によると、取得したチケット資料に記載されているFelixのエラタムはERR A-050484であり、タイムスタンプFIFO生成ではなくNPIフロー制御/フレーム損失マネジメントに関連しています。

タグ(1)
評価なし
バージョン履歴
最終更新日:
1週間前
更新者: