私のGentooシステムにはRX 580(Polaris 10 GPU)があります。私はGentooと同じカーネルを自分で作成しました。 initramfsを使用しませんが、起動中にカーネルがamdgpuモジュールをロードします。
AMDGPUドライバがファームウェアをロードしていないようです。次のオプションを使用してカーネルを構築しました。
CONFIG_DRM_AMDGPU=m
CONFIG_DRM_AMDGPU_SI=y
CONFIG_DRM_AMDGPU_CIK=y
CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware"
CONFIG_EXTRA_FIRMWARE="intel-ucode/06-2d-07 radeon/tahiti_ce.bin radeon/tahiti_mc.bin radeon/tahiti_me.bin radeon/tahiti_pfp.bin radeon/tahiti_rlc.bin radeon/tahiti_smc.bin radeon/TAHITI_uvd.bin amdgpu/polaris10_ce.bin amdgpu/polaris10_ce_2.bin amdgpu/polaris10_k_smc.bin amdgpu/polaris10_k2_smc.bin amdgpu/polaris10_k_mc.bin amdgpu/polaris10_mc.bin amdgpu/polaris10_me.bin amdgpu/polaris10_me_2.bin amdgpu/polaris10_mec2.bin amdgpu/polaris10_mec2_2.bin amdgpu/polaris10_mec.bin amdgpu/polaris10_mec_2.bin amdgpu/polaris10_pfp.bin amdgpu/polaris10_pfp_2.bin amdgpu/polaris10_rlc.bin amdgpu/polaris10_sdma1.bin amdgpu/polaris10_sdma.bin amdgpu/polaris10_smc.bin amdgpu/polaris10_smc_sk.bin amdgpu/polaris10_uvd.bin amdgpu/polaris10_vce.bin"
ファームウェア構成には、My CPU(よくロードされた)と既存のタヒチベースのGPU用のファームウェアも含まれています。指定されたすべてのPolarisファームウェアが/lib/firmware/amdgpuディレクトリにあり、そのディレクトリのすべてのPolarisファームウェアがカーネル構成にリストされていることを確認しました。
ただし、dmesgにはファームウェアがロードされたか、ロードに失敗したというメッセージは表示されません。 周りを見てくださいファームウェアにロードメッセージが必要な例を見つけたようですが、そのメッセージはありません。たとえば、次のようになります。
[ 3.603145] amdgpu 0000:01:00.0: firmware: direct-loading firmware amdgpu/polaris10_pfp.bin
[ 3.603623] amdgpu 0000:01:00.0: firmware: direct-loading firmware amdgpu/polaris10_me.bin
しかし、少なくともGPUについてはそのようなニュースはありません。 (CPUマイクロコードは正常にロードされます。)
興味深いことに、問題の原因はカードにVFIOリセットのバグがあることです。 RX 580はこれが難しいと言われていますが、アップデートされたファームウェアを入手するのが役に立つことを願っています。カードはLinux上でコンテンツを表示するのに十分に機能するので、基本的なドライバ機能も問題ありません。
"modinfo -Ffirmware amdgpu"は、amdgpuドライバがサポートする各GPUの21個のファームウェアブロブ全体と数百の異なるブロブを含む大量の出力を生成します。
以下は「dmesg|grep -e amdgpu -e drm」の出力です。
[ 7.253557] [drm] amdgpu kernel modesetting enabled.
[ 7.253688] amdgpu 0000:01:00.0: remove_conflicting_pci_framebuffers: bar 0: 0xc0000000 -> 0xcfffffff
[ 7.253689] amdgpu 0000:01:00.0: remove_conflicting_pci_framebuffers: bar 2: 0xd0000000 -> 0xd01fffff
[ 7.253690] amdgpu 0000:01:00.0: remove_conflicting_pci_framebuffers: bar 5: 0xfbe00000 -> 0xfbe3ffff
[ 7.253692] amdgpu 0000:01:00.0: vgaarb: deactivate vga console
[ 7.254864] [drm] initializing kernel modesetting (POLARIS10 0x1002:0x67DF 0x1043:0x0519 0xE7).
[ 7.254871] [drm] register mmio base: 0xFBE00000
[ 7.254872] [drm] register mmio size: 262144
[ 7.254874] [drm] PCIE atomic ops is not supported
[ 7.254877] [drm] add ip block number 0 <vi_common>
[ 7.254878] [drm] add ip block number 1 <gmc_v8_0>
[ 7.254878] [drm] add ip block number 2 <tonga_ih>
[ 7.254878] [drm] add ip block number 3 <gfx_v8_0>
[ 7.254879] [drm] add ip block number 4 <sdma_v3_0>
[ 7.254879] [drm] add ip block number 5 <powerplay>
[ 7.254880] [drm] add ip block number 6 <dm>
[ 7.254880] [drm] add ip block number 7 <uvd_v6_0>
[ 7.254881] [drm] add ip block number 8 <vce_v3_0>
[ 7.255067] amdgpu 0000:01:00.0: No more image in the PCI ROM
[ 7.255095] [drm] UVD is enabled in VM mode
[ 7.255096] [drm] UVD ENC is enabled in VM mode
[ 7.255097] [drm] VCE enabled in VM mode
[ 7.255116] [drm] vm size is 128 GB, 2 levels, block size is 10-bit, fragment size is 9-bit
[ 7.255124] amdgpu 0000:01:00.0: VRAM: 8192M 0x000000F400000000 - 0x000000F5FFFFFFFF (8192M used)
[ 7.255125] amdgpu 0000:01:00.0: GART: 256M 0x000000FF00000000 - 0x000000FF0FFFFFFF
[ 7.255127] [drm] Detected VRAM RAM=8192M, BAR=256M
[ 7.255128] [drm] RAM width 256bits GDDR5
[ 7.255374] [drm] amdgpu: 8192M of VRAM memory ready
[ 7.255376] [drm] amdgpu: 8192M of GTT memory ready.
[ 7.255391] [drm] GART: num cpu pages 65536, num gpu pages 65536
[ 7.256003] [drm] PCIE GART of 256M enabled (table at 0x000000F400900000).
[ 7.256064] [drm] Chained IB support enabled!
[ 7.256820] amdgpu: [powerplay] hwmgr_sw_init smu backed is polaris10_smu
[ 7.256827] [drm] Found UVD firmware Version: 1.130 Family ID: 16
[ 7.257311] [drm] Found VCE firmware Version: 53.26 Binary ID: 3
[ 7.312157] [drm] DM_PPLIB: values for Engine clock
[ 7.312158] [drm] DM_PPLIB: 300000
[ 7.312158] [drm] DM_PPLIB: 751000
[ 7.312159] [drm] DM_PPLIB: 1048000
[ 7.312159] [drm] DM_PPLIB: 1158000
[ 7.312159] [drm] DM_PPLIB: 1240000
[ 7.312160] [drm] DM_PPLIB: 1309000
[ 7.312160] [drm] DM_PPLIB: 1364000
[ 7.312160] [drm] DM_PPLIB: 1411000
[ 7.312161] [drm] DM_PPLIB: Validation clocks:
[ 7.312161] [drm] DM_PPLIB: engine_max_clock: 141100
[ 7.312162] [drm] DM_PPLIB: memory_max_clock: 200000
[ 7.312162] [drm] DM_PPLIB: level : 8
[ 7.312163] [drm] DM_PPLIB: values for Memory clock
[ 7.312163] [drm] DM_PPLIB: 300000
[ 7.312164] [drm] DM_PPLIB: 1000000
[ 7.312164] [drm] DM_PPLIB: 2000000
[ 7.312164] [drm] DM_PPLIB: Validation clocks:
[ 7.312165] [drm] DM_PPLIB: engine_max_clock: 141100
[ 7.312165] [drm] DM_PPLIB: memory_max_clock: 200000
[ 7.312165] [drm] DM_PPLIB: level : 8
[ 7.312575] [drm] Display Core initialized with v3.2.35!
[ 7.347039] [drm] SADs count is: -2, don't need to read it
[ 7.397092] [drm] SADs count is: -2, don't need to read it
[ 7.458278] amdgpu 0000:01:00.0: DVI-D-1: EDID is invalid:
[ 7.458288] [drm] SADs count is: -2, don't need to read it
[ 7.458297] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[ 7.458297] [drm] Driver supports precise vblank timestamp query.
[ 7.484629] [drm] UVD and UVD ENC initialized successfully.
[ 7.585582] [drm] VCE initialized successfully.
[ 7.587422] [drm] fb mappable at 0xC0E30000
[ 7.587423] [drm] vram apper at 0xC0000000
[ 7.587423] [drm] size 1228800
[ 7.587424] [drm] fb depth is 24
[ 7.587424] [drm] pitch is 2560
[ 7.587478] fbcon: amdgpudrmfb (fb0) is primary device
[ 7.634376] amdgpu 0000:01:00.0: fb0: amdgpudrmfb frame buffer device
[ 7.635745] [drm] Initialized amdgpu 3.33.0 20150101 for 0000:01:00.0 on minor 0