내 젠투 시스템에는 RX 580(Polaris 10 GPU)이 있습니다. 나는 젠투와 똑같은 커널을 직접 만들었습니다. 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"
펌웨어 구성에는 내 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개의 펌웨어 blob 전체와 수백 개의 다른 blob을 포함하여 대량의 출력을 생성합니다.
다음은 "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