先日の新たな IPブロック、GC 10.3.7, DCN 3.1.6, VCN 3.1.1 に続き、Linux Kernel における AMDGPUドライバーに向けて GC 10.3.6, DCN 3.1.5, VCN 3.1.2 のサポートを追加するパッチが Alex Deucher氏より投稿されている。
新たな RDNA 2 APU の IPブロック ―― GC 10.3.7, DCN 3.1.6, VCN 3.1.1 | Coelacanth’s Dream
IPバージョンベースのドライバーサポートについては、前回か以下の記事を参照。
IPバージョンベースのサポートに移行する AMDGPUドライバー | Coelacanth’s Dream
- [PATCH] drm/amdgpu: add nv common init for gc 10.3.6
- [PATCH] drm/amdgpu: add Clock and Power Gating support for gc 10.3.6
- [PATCH] drm/amdgpu: add support for gmc10 for gc 10.3.6
- [PATCH] drm/amdgpu: add gc 10.3.6 support
- [PATCH] drm/amdgpu: add support for sdma 5.2.6
- [PATCH] drm/amdgpu/vcn: add vcn support for vcn 3.1.2
- [PATCH] drm/amdgpu: enable vcn pg and cg for vcn 3.1.2
- [PATCH 00/13] Update DCN 3.1 support for 3.1.5
詳細は後述するが、GC 10.3.6 は APU であり、DCN 3.1.5, VCN 3.1.2 は GC 10.3.6 に関連付けられている。
ほぼ同じタイミングでその他 IPブロックサポートへのパッチも投稿されているが、GC 10.3.6 に明確に関連付けられてはいない。
GC 10.3.6
GC 10.3.7 と同様、コードネームの代わりとして GC_10_3_6 が使われている。
GC 10.3.6 は IPバージョンこそ Yellow Carp/Rembrandt APU と GC 10.3.7 に近いが、別の Family ID が割り当てられている。
Family ID は AMD GPUドライバーでは主にディスプレイ部のコードで使われている。RDNA 2 APU では VanGogh, Yellow Carp/Rembrandt, GC 10.3.6, GC 10.3.7 でそれぞれ Family ID が異なることになるが、ディスプレイ部にそれだけ違いがあるということなのかもしれない。
#define AMDGPU_FAMILY_VGH 144 /* Van Gogh */ #define AMDGPU_FAMILY_YC 146 /* Yellow Carp */ +#define AMDGPU_FAMILY_GC_10_3_6 149 /* GC 10.3.6 */ #define AMDGPU_FAMILY_GC_10_3_7 151 /* GC 10.3.7 */
APU のビットフラグが立てられていることから、GC 10.3.6 は APU であることがわかる。
補足すると、以下引用部にある GC 10.3.1 は VanGogh/Aerith APU 、GC 10.3.3 は Yellow Carp/Rembrandt APU の IPバージョンとなる。
case IP_VERSION(10, 1, 4): case IP_VERSION(10, 3, 1): case IP_VERSION(10, 3, 3): + case IP_VERSION(10, 3, 6): case IP_VERSION(10, 3, 7): adev->flags |= AMD_IS_APU; break;
GPUキャッシュ構成を示すコードが追加されていない点も GC 10.3.7 と同様。
GC 10.3.6/10.3.7 では、ShaderArray が無効化されることを想定したコードがあるが、Yellow Carp/Rembrandt APU のように複数の ShaderArray を持ち、そして Radeon 660M モデルのように一部 ShaderArray を無効化した SKU を計画しているのかもしれない。
for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) { bitmap = i * adev->gfx.config.max_sh_per_se + j; if (((adev->ip_versions[GC_HWIP][0] == IP_VERSION(10, 3, 0)) || - (adev->ip_versions[GC_HWIP][0] == IP_VERSION(10, 3, 3)) || - (adev->ip_versions[GC_HWIP][0] == IP_VERSION(10, 3, 7))) && + (adev->ip_versions[GC_HWIP][0] == IP_VERSION(10, 3, 3)) || + (adev->ip_versions[GC_HWIP][0] == IP_VERSION(10, 3, 6)) || + (adev->ip_versions[GC_HWIP][0] == IP_VERSION(10, 3, 7))) && ((gfx_v10_3_get_disabled_sa(adev) >> bitmap) & 1)) continue;
VCN 3.1.2
GC 10.3.6 には VCN 3.1.2 が関連付けられており、Yellow Carp/Rembrandt と GC 10.3.7 に採用されている VCN 3.1.1 とは異なる。
だが IPバージョン以外の違いは不明で、対応するコーデックとサイズは VCN 3.1.1 とされている。
case IP_VERSION(3, 1, 1): + case IP_VERSION(3, 1, 2): if (encode) *codecs = &nv_video_codecs_encode; else
DCN 3.1.5
- [PATCH 00/13] Update DCN 3.1 support for 3.1.5
- [PATCH 03/13] drm/amd/display: Add DCN315 family information
- [PATCH 04/13] drm/amd/display: Add DCN315 CLK_MGR
- [PATCH 05/13] drm/amd/display: Add DCN315 GPIO
- [PATCH 06/13] drm/amd/display: Add DCN315 IRQ
- [PATCH 07/13] drm/amd/display: Add DCN315 DMUB
- [PATCH 08/13] drm/amd/display: Add DCN315 Resource
- [PATCH 09/13] drm/amd/display: Add DCN315 Command Table Helper
- [PATCH 10/13] drm/amd/display: Add DCN315 blocks to Makefile
- [PATCH 11/13] drm/amd/display: Add DCN315 CORE
- [PATCH 12/13] drm/amd/display: Add DCN315 DM Support
- [PATCH 13/13] drm/amdgpu: add dm ip block for dcn 3.1.5
GC 10.3.6 には DCN 3.1.5 が関連付けられており、Yellow Carp/Rembrandt とも GC 10.3.7 とも異なる。
+ case AMDGPU_FAMILY_GC_10_3_6: + if (ASICREV_IS_GC_10_3_6(asic_id.hw_internal_rev)) + dc_version = DCN_VERSION_3_15; + break;
最大 4画面出力に対応する点は GC 10.3.7 等と同じで、APU ではよくある規模となっている。
+static const struct resource_caps res_cap_dcn31 = { + .num_timing_generator = 4, + .num_opp = 4, + .num_video_plane = 4, + .num_audio = 5, + .num_stream_encoder = 5, + .num_dig_link_enc = 5, + .num_hpo_dp_stream_encoder = 4, + .num_hpo_dp_link_encoder = 2, + .num_pll = 5, + .num_dwb = 1, + .num_ddc = 5, + .num_vmid = 16, + .num_mpc_3dlut = 2, + .num_dsc = 3, +};
Watermark (WM) Table に DDR5用と LPDDR5用が用意されている。
この部分では DDR4用と LPDDR5用の WM Table がある GC 10.3.7, DCN 3.1.6 と異なり、Yellow Carp/Rembrandt と一致する。
+ if (ctx->dc_bios->integrated_info->memory_type == LpDdr5MemType) { + dcn315_bw_params.wm_table = lpddr5_wm_table; + } else { + dcn315_bw_params.wm_table = ddr5_wm_table; + }
今回のパッチを含め、短期間で新たな RDNA 2 APU 2つに向けたパッチが投稿された。どちらも既存の RDNA 2 APU、VanGogh/Aerith と Yellow Carp/Rembrandt に近い部分を持つが、完全に同じではない。
また、IPバージョンベースのサポートに移行してから、初めて新たな APU がサポートされた。
実質的に AMDGPUドライバーにおけるコードネームは廃止され、より効率的なサポート方式となった。
他の OSS、User Moder Driver である Mesa3D (RadeonSI, RADV) では GC (Graphics and Compute) の IPバージョンを、コンパイラバックエンドに採用されている LLVM、ROCmソフトウェアではこれまで通り GPUID (gfx{major.minor.stepping}) を使うものと思われる。
サポートという一点では DeviceID ベースよりも効率的となったのだから喜ばしいことだと言えるが、コードネームが出てこなくなるということは少し寂しく感じる。