Coelacanth's Dream

AMD Phoenix と Phoenix2 の CPUID, GFX1103_R1 と GFX1103_R2

Phoenix と Phoenix2 の CPUID Family/Model/Stepping

Felix Held 氏により、AMD Phoenix APUAMD Phoenix2 APUCPUID Family/Model/Stepping に関するパッチが Coreboot に投稿されている。
Coreboot はオープンソースなファームウェア、BIOS/UEFI を開発するプロジェクトであり、Felix Held 氏は現在フルタイムで Coreboot プロジェクトの開発に参加している。

    #define PHOENIX_A0_CPUID	0x00a70f40
    #define PHOENIX2_A0_CPUID	0x00a70f80

Felix Held 氏のコメントによれば、0x00a70f80 (Family: 0x19, Model: 0x78, Stepping: 0)Phoenix2CPUID Family/Model/Stepping であり、Phoenix APU0x00a70f40 (Family: 0x19, Model: 0x74, Stepping: 0) となる。
前回 Coreboot で Phoenix APU のサポートが進められていることを取り上げた時には、エンジニアサンプリング品やリビジョンによって CPUID Model を変えていると考えたが、少なくとも Phoenix APUPhoenix2 APU はそれに関係なく明確に違う CPUID Model が割り当てられているようだ。1

CPUID は実行した CPU の情報を返す命令であり、EAX/ECX レジスタの値によって情報の種類は変わる。
CPUID Family/Model/Stepping は EAX レジスタの値が 0x1 の時に返される情報であり、ソフトウェアはそれを用いてプロセッサの種類を判定することができる。

PhoenixPhoenix2 の関係性はコードネーム的にも RavenRaven2 (Dali/Pollock) に近いものと思われる。

GFX1103_R1, GFX1103_R2

AMD のソフトウェア開発者である Marek Olšák 氏により、Phoenix APU の GPU ID (GFX ID) となる GFX1103GFX1103_R1GFX1103_R2 に分けるパッチが Mesa3D に投稿され、それを含めたマージリクエストは既に main ブランチに取り込まれている。

GFX1103_R1GFX1103_R2 の違いとしては、L2キャッシュブロックあたりのサイズが明らかにされており、GFX1103_R1Rembrandt (Yellow Carp) と同じ 512KiB なのに対し、GFX1103_R2 は 256KiB となっている。
ここでは GFX1103_R2 を指定したコードは追加されていないが、switch 文の default ケースが 256KiB となっている。
また、AMD GPU は基本 L2キャッシュブロックをメモリチャネルと同数持ち、Phoenix APU (GC 11.0.1) は合計 L2キャッシュサイズ 2MiB を持つことが過去に amd-gfx メーリングリストにて明かされている。2

        case CHIP_REMBRANDT:
    +   case CHIP_GFX1103_R1:
           info->l2_cache_size = info->num_tcc_blocks * 512 * 1024;
           break;
        }

他では、chip_rev0 の場合、シェーダープリフェッチを無効化する対象に GFX1103_R1 は含まれるが、GFX1103_R2 は含まれていない。
しかし、Marek Olšák 氏による他のパッチにて当該部分のコードは削除されているため、あまり気にする必要のない情報ではある。そのパッチによれば、シェーダープリフェッチ機能の無効有効はハードウェア側で自動で行われ、ソフトウェア側で一部のチップに存在するバグに対する回避策は必要としない。

もう 1つの RDNA 3 APU という点では、以前 AMDGPU ドライバーにサポートを追加するパッチが投稿された GC 11.0.4 APU が思い出される。3
ただ、GFX1103_R1GFX1103_R2 を判定する部分では eRivisionID, external_rev_id が用いられているが、AMDGPU ドライバーのコードを見るに、Phoenix APU (GC 11.0.1)GC 11.0.4rev_id に追加されるオフセット値は同じであり、これまでのパターンから eRivisionID, external_rev_id も同一である可能性が高い。
そうなると、Phoniex APU (GC 11.0.1)GC 11.0.4GFX1103_R1 として判定される。
現時点で Phoenix APU として GC 11.0.1, GFX1103_R1GC 11.0.4, GFX1103_R1GC 11.0.x?, GFX1103_R2 の 3種類が存在することが考えられるが、前者 2つに関しては単にステッピングの違いを表現しただけの可能性もある。
Coreboot にて存在が明かされた Phoenix2 も、GC IPバージョンや DeviceID が不明なため、GFX1103_R1GFX1103_R2 のどちらが採用されているかは不明である。