Coelacanth's Dream

Cyan Skilfish と Navi10_LITE

AMDGPU Display Core (DC) ドライバの新しいパッチが投稿、公開された。
そしてその中に Cyan Skilfish/Skillfish APU の DeviceID を追加するパッチが含まれており、同時に NAVI10_LITE のコードネームも出されている。

Cyan Skilfish のサポートを AMDGPUドライバに追加するパッチは 2021/07 に投稿され、その時追加された DeviceID は 0x13FE のみだった。
Linux Kernel に RDNA APU 「Cyan Skilfish」 をサポートするパッチが投稿される | Coelacanth’s Dream 今回のパッチで 0x1400Cyan Skilfish の DeviceID として追加されたが、同時に NAVI10_LITE (NV_NAVI10_LITE_P) に割り当てられた DeviceID ともしている。

 +#define DEVICE_ID_NV_NAVI10_LITE_P_1400			0x1400 // CYAN_SKILLFISH
 +

しかし Cyan Skilfish と異なるコードネームに関しては、NAVI12_LITE (NV_NAVI12_LITE_P_A0)external_rev_id/eChipRev が一致する。external_rev_id/eChipRev は AMD APU/GPU ASIC に割り当てられた ID であり、
Cyan Skilfish APU のディスプレイエンジンをサポートするパッチが投稿される ―― NAVI12_LITE | Coelacanth’s Dream

Cyan Skilfish には NAVI10_LITENAVI12_LITE、2つのコードネームも結び付けられていることとなるが、Cyan Skilfish 自体も 2種類のバージョンが存在する。

Cyan Skilfish/2

AMDGPUドライバのコードから、Cyan SkilfishCyan Skilfish2 が存在するとされ、読み込むファームウェアもそれぞれで別に用意される。
Linux Kernel に RDNA APU 「Cyan Skilfish」 をサポートするパッチが投稿される | Coelacanth’s Dream 上で DeviceID: 0x13FECyan Skilfish に割り当てられていると書いたが、厳密には Cyan Skilfish2 に割り当てられている DeviceID となる。
今回のパッチが投稿されるまで Cyan Skilfish の DeviceID は 0x13FE のみだったため、AMDGPUドライバは Cyan Skilfish2 をターゲットにサポートを追加していたと思われる。external_rev_id/eChipRevCyan Skilfish2 のものだろう。

 +	case CHIP_CYAN_SKILLFISH:
 +		if (adev->pdev->device == 0x13FE)
 +			adev->apu_flags |= AMD_APU_IS_CYAN_SKILLFISH2;
 +		break;

要は Cyan SkilfishNAVI10_LITECyan Skilfish2NAVI12_LITE が結び付けられると考えられる。
Cyan Skilfish/2 の違いには PSP (Platform Security Processor) 部があり、AMDドライバ中では PSP部 (v11.0.8) において Cyan Skilfish2 のみをサポートしている。おそらく Cyan Skilfish では PSP部に何かしらの問題 (バグ等) があり、それが Cyan Skilfish2 で修正されたのではないかと思われる。
external_rev_id/eChipRev では、NAVI10_LITE_P_A0 /NAVI10_LITE_P_B0, /NAVI12_LITE_P_A0 は連番になっており、Cyan Skilfish2 にリビジョンが進んだ NAVI12_LITE_P_A0 が割り当てられるのは自然なものに感じられる。

 +#define FAMILY_NV 143 /* DCN 2*/
 +
 +enum {
 +	NV_NAVI10_P_A0      = 1,
 +	NV_NAVI12_P_A0      = 10,
 +	NV_NAVI14_M_A0      = 20,
 +	NV_NAVI21_P_A0      = 40,
 +	NV_NAVI10_LITE_P_A0 = 0x80,
 +	NV_NAVI10_LITE_P_B0 = 0x81,
 +	NV_NAVI12_LITE_P_A0 = 0x82,
 +	NV_NAVI21_LITE_P_A0 = 0x90,
 +	NV_UNKNOWN          = 0xFF
 +};
 +

とはいえ、コードネームを Cyan Skilfish に変えた理由や HWレイトレーシングを持つ奇特な “RDNA” APU を今になってサポートを進める理由は相変わらず不明。
NAVI10_LITE もディスプレイコントローラに DCN 2.0.1 を持ち、今回のパッチはそれをドライバ部で認識することを目的としている。

  	case FAMILY_NV:
  		dc_version = DCN_VERSION_2_0;
 -		if (asic_id.chip_id == DEVICE_ID_NV_13FE) {
 +
 +		if (asic_id.chip_id == DEVICE_ID_NV_13FE || asic_id.chip_id == DEVICE_ID_NV_NAVI10_LITE_P_1400) {
  			dc_version = DCN_VERSION_2_01;
  			break;
  		}