Coelacanth's Dream

RDNA 3/GFX11 APU に採用される DCN 3.1.4

AMD の Alex Deucher 氏より、AMDGPU ドライバーに RDNA 3/GFX11 APU、コードネーム Phoenix 1 で採用されるディスプレイエンジン DCN 3.1.4 (Display Core Next) のサポートを追加するパッチが amd-gfx メーリングリストに投稿されている。

例によってレジスタヘッダはパッチサイズが巨大となるため、メーリングリストには投稿されていない。補足すると、最近追加された dcn_3_2_0_sh_mask.h (drivers/gpu/drm/amd/include/asic_reg/dcn/) はファイル単体で 23.9MiB もある。
以前は nbio_7_2_0_sh_mask.h (drivers/gpu/drm/amd/include/asic_reg/nbio/) が 15.9MiB で最大だったと思うのだが、一気に最大ファイルサイズが更新されたようだ。
もはや余談だが、こうした自動生成された巨大なレジスタヘッダについて、Linus Torvalds 氏は以下のようにコメントしている。

 >
 > AMD has started some new GPU support [...]
	
 Oh Christ. Which means another set of auto-generated monster headers. Lovely.
	
                   Linus

AMDGPU_FAMILY_GC_11_0_2

パッチでは AMDGPU_FAMILY_GC_11_0_2 に関するコードも追加されており、そして AMDGPU_FAMILY_GC_11_0_2 には DCN 3.1.4 が結び付けられている。
少しややこしいのが、AMDGPU_FAMILY_GC_11_0_2 はあくまでも AMDGPU_FAMILY 内での ID を示し、GC 11.0.2 とは別と思われることだ。

AMDGPU_FAMILY_GC_11_0_2 の ID は 148 (0x94) とされ、これは以前 AMD の Marek Olšák 氏によって RadeonSI ドライバーに投稿されたパッチと比較すると、FAMILY_GFX1103 の ID と一致する。
RadeonSI ドライバーで GFX11 のサポートが進められる | Coelacanth’s Dream gfx1103 は LLVM のドキュメントでは APU とされている。GC 11.0.1 も AMDGPU ドライバー内で APU とされており、そして GC 11.0.1gfx1103 とされている。
LLVM で GFX11 のサポートが進み始める | Coelacanth’s Dream

  #define AMDGPU_FAMILY_GC_11_0_0 145
 +#define AMDGPU_FAMILY_GC_11_0_2 148
 +#define FAMILY_GFX1100 0x91
 +#define FAMILY_GFX1103 0x94
 		case IP_VERSION(11, 0, 1):
 			gfx_target_version = 110003;
 			f2g = &gfx_v11_kfd2kgd;
 			break;
引用元:drivers/gpu/drm/amd/amdkfd/kfd_device.c
 	case IP_VERSION(10, 1, 3):
 	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):
 	case IP_VERSION(11, 0, 1):
 		adev->flags |= AMD_IS_APU;
 		break;
引用元:drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c

現状、GC IP と GFX ID と AMDGPU_FAMILY の関係性は以下のようになっている。

GC (Graphics Compute) IP ver GFX ID AMDGPU_FAMILY Type
11.0.0 gfx1100 (Navi31)2 AMDGPU_FAMILY_GC_11_0_0 (FAMILY_GFX1100) dGPU
11.0.1 gfx1103 AMDGPU_FAMILY_GC_11_0_2 (FAMILY_GFX1103) APU
11.0.2 gfx1102 (Navi33) AMDGPU_FAMILY_GC_11_0_0 (FAMILY_GFX1100) dGPU
11.0.3? gfx1101 (Navi32)? AMDGPU_FAMILY_GC_11_0_0 (FAMILY_GFX1100)? dGPU?

以上のことから、RDNA 3/GFX11 APU である GC 11.0.1 (gfx1103) ではディスプレイエンジンに DCN 3.1.4 を採用することがわかる。
DCN 3.1.4 に関するコード部にも dc->caps.is_apu = true; の記述がある。

DCN 3.1.4

DCN 3.1.4 自体を見ると、まずバージョンは RDNA 3/GFX11 dGPU で採用されている DCN 3.2.x ではなく、RDNA 2/GFX10.3 APU で採用されている DCN 3.1.x 系列となる。
GC 11.0.0/Navi31DCN 3.2.0GC 11.0.2/Navi32DCN 3.2.1 を、
Yellow Carp/Rembrandt APUDCN 3.1.0GC 10.3.6 APUDCN 3.1.5GC 10.3.7/Sabrina APUDCN 3.1.6 を採用している。

また、MALL (Memory Access at Last Level) /Infinity Cache に関する記述がないことから、RDNA 3/GFX11 APU でも引き続き MALL/Infinity Cache は搭載しない方針と思われる。

DCN 3.1.4 の最大画面出力数は 4基と見られ、APU としては通常の規模となる。
ただ RDNA 3/GFX11 dGPU に採用される DCN 3.2.{0,1} も最大 4基とする記述が見られる。3 今後は dGPU でも最大 4基が通常となるのだろうか。

 +static const struct resource_caps res_cap_dcn314 = {
 +	.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 = 4,
 +};

WaterMark Table には LPDDR5用と DDR5用があり、GC 11.0.1 APU ではメモリにそれらをサポートしていると考えられる。

 +		if (ctx->dc_bios->integrated_info->memory_type == LpDdr5MemType)
 +			dcn314_bw_params.wm_table = lpddr5_wm_table;
 +		else
 +			dcn314_bw_params.wm_table = ddr5_wm_table;

参考リンク