イベント ハンドラーの登録と登録解除 - 2023.2 日本語

Versal アダプティブ SoC システム ソフトウェア開発者向けガイド (UG1304)

Document ID
UG1304
Release Date
2023-10-18
Version
2023.2 日本語
イベントに対してハンドラーを登録するには、xlnx_register_event() API を使用します。複数のイベント マスクに対して OR 演算子を使用すると、複数のイベントに対して 1 つのハンドラーを登録できます。
int xlnx_register_event(const enum pm_api_cb_id cb_type, const u32 node_id, const u32 event, const bool wake, event_cb_func_t cb_fun, void *data)

説明:

cb_type
pm_api_cb_id からのコールバックのタイプ。
  • PM_NOTIFY_CB: エラー イベント。
  • PM_INIT_SUSPEND_CB: サスペンド コールバック。
node_id
エラー イベントに対するノード ID。
event
エラー イベントに対するエラー イベント マスク。
wake
イベント通知によってサブシステムをウェークアップするかどうかを指定するフラグ。
cb_fun
コールバック関数を保存するための関数ポインター。
data
ドライバー インスタンスへのポインター。

Versal デバイスのエラー イベントの node-id とエラー イベント マスクの詳細 (またはマクロ) は、Linux の include/linux/firmware/xlnx-versal-error-events.h ファイルを参照してください。

たとえば、エージェントが DDRMC ドライバーである場合を考えます。

  1. このエラー イベントを処理するユーザー コールバック関数を定義します。
    void xddr_err_callback(const u32 *payload, void *data)
    {
        /* Tack action */
    }

    ファームウェアでエラー イベントが発生したときに xddr_err_callback() が呼び出されると、ドライバーは適切なデータを要求します。

    Struct xddr_data
    {
        U32 var1;
        .
        .
    }
  2. DDRMC 訂正可能および訂正不可能エラーを登録します。
    xlnx_register_event(PM_NOTIFY_CB, XPM_NODETYPE_VERSAL_EVENT_ERROR_PMC_ERR1, XPM_VERSAL_EVENT_ERROR_MASK_DDRMC_CR | XPM_VERSAL_EVENT_ERROR_MASK_DDRMC_NCR, false, xddr_err_callback, (void *) data);
  3. DDRMC 訂正可能および訂正不可能エラーを登録解除します。
    ret = xlnx_unregister_event(PM_NOTIFY_CB, XPM_NODETYPE_VERSAL_EVENT_ERROR_PMC_ERR1, XPM_VERSAL_EVENT_ERROR_MASK_DDRMC_CR | XPM_VERSAL_EVENT_ERROR_MASK_DDRMC_NCR,
    xddr_err_callback,);