コンテンツにスキップ

ASC

2025/3/9時点のASCの翻訳


ASC レジスタ
0x40 - いくつかのフラグ/コントロール

0x44 - CPU_CTRL
    4 - CPU_START

0x48 - CPU_STATUS
    5 - MBOXES_TO_AP_EMPTY
    4 - ?
    3 - FIQ_NOT_PENDING
    2 - IRQ_NOT_PENDING
    1 - CPU_STOPPED
    0 - CPU_IDLE

0x400
    10 - CPUが開始したときにセット(おそらくファームウェアにより)

0x80c - IRQ_CONFIG
    0 - IRQ_CONTROLLER_ENABLE

0x818 - IRQ_EVENT_IRQ?
0x820 - IRQ_EVENT_FIQ?

0xa00.. - IRQ_MASK_SET
0xa80.. - IRQ_MASK_CLEAR
0xb00.. - IRQ_MASK2_SET?
0xb80.. - IRQ_MASK2_CLEAR?

0x1000 - CFG?
    1 - IPIsからIRQへ、FIQではない?
0x1010 - A_SET
0x1014 - B_SET
0x1018 - A_CLR
    2 - FIQ IPIをトリガー?
    1 - IRQ IPIをトリガー?
0x101c - B_CLR

0x1030 - C_SET
0x1034 - D_SET
0x1038 - C_CLR
0x103c - D_CLR

0x8000 - CPU_STATUSのミラー?

0x4000~ と 0x8000~ はmailbox関連
Mailboxes

M1のメインCPUコアとASCやIOP(I/Oプロセッサ)の間の通信にプロセッサ間で128ビット通知を送り返すハードウェアMailboxを使用しています。 さらにより大きなメッセージは共有メモリを使って送られます。通常のプロトコルは、一方のプロセッサが 共有メモリに書き込みを行い、mailbox通知をもう一方のプロセッサに送信して割り込みを発生させ、もう一方のプロセッサが変更された メモリを見てより大きなメッセージを解釈する、というものです。

プロトコルはプロセッサによって異なりますが、メッセージの後半64ビットの下位8ビットがメッセージのIOP側でのエンドポイントを エンコードすることが共通の要素であるように見えます。前半の64ビットはそのままmailboxに渡されるようで、それらには非常に 異なるエンコーディングが使用されているようです。

mailboxのハードウェア側はMMIO空間のオフセット+0x8000に位置し、AICで連続した番号を持つ4つの割り込みを使用 しており、そのうち2つは我々にとって有用です。

データは、2つの64ビット書き込みがオフセット+0x8800と+0x8808をターゲットにしたとき、メインCPUからIOPに送信されます。 IOPがデータを読み取りキューから削除すると、AICで最も低い番号を持つ割り込みが無効にされるかさらにデータが書き込まれるまで トリガされます。

IOPからのデータは、メインCPUがオフセット+0x8830と+0x8838で64ビットMMIOリードを実行することにより、キューから読み出され 削除されます。データが利用可能な間はAICで最も高い番号を持つ割り込みがトリガされます。

0x8110の32ビットステータスレジスタは、CPU-to-IOPキューが空か(ビット17)空でないか(ビット16)を示します。対称的に、 +0x8114のステータスレジスタは、IOP-CPU間キューが空であるか(ビット17)空でないか(ビット16)を表示します。

同一方向に同時に複数のメッセージをキューに入れることが可能で、ackを待たずにCPUに複数の通知を送るIOPによって使用されます。