Bug 107263

Summary: Decrease start-up time of amdgpu_init from 390 ms to under 100 ms
Product: DRI Reporter: Paul Menzel <pmenzel+bugs.freedesktop.org>
Component: DRM/AMDgpuAssignee: Default DRI bug account <dri-devel>
Status: RESOLVED MOVED QA Contact:
Severity: enhancement    
Priority: medium    
Version: DRI git   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:

Description Paul Menzel 2018-07-17 12:43:12 UTC
On a MSI B350M MORTAR with Linux 4.18-rc5+ and Debian Sid/unstable the time noted by initcall_debug for the module amdgpu is 390 ms. The goal is to start the graphical login manager as quickly as possible and having the graphics device initialized quickly is therefore required.

Here is a commented excerpt:

[   15.674171] calling  amdgpu_init+0x0/0x86 [amdgpu] @ 375
[   15.674185] [drm] amdgpu kernel modesetting enabled.
[   15.676261] calling  hwrng_modinit+0x0/0x1000 [rng_core] @ 374
[   15.676858] initcall hwrng_modinit+0x0/0x1000 [rng_core] returned 0 after 578 usecs
[   15.680079] calling  sp_mod_init+0x0/0x1000 [ccp] @ 374
[   15.680103] initcall sp_mod_init+0x0/0x1000 [ccp] returned 0 after 19 usecs
[   15.681202] calling  kfd_module_init+0x0/0x1000 [amdkfd] @ 403
[   15.681461] Parsing CRAT table with 1 nodes
[   15.681465] Creating topology SYSFS entries
[   15.681510] Topology: Add APU node [0x0:0x0]
[   15.681510] Finished initializing topology
[   15.681531] kfd kfd: Initialized module
[   15.681538] initcall kfd_module_init+0x0/0x1000 [amdkfd] returned 0 after 321 usecs
[   15.683076] calling  svm_init+0x0/0xb8e [kvm_amd] @ 373
[   15.683078] kvm: disabled by bios
[   15.683096] initcall svm_init+0x0/0xb8e [kvm_amd] returned -95 after 16 usecs
[   15.685698] calling  mce_amd_init+0x0/0x1000 [edac_mce_amd] @ 374
[   15.685700] MCE: In-kernel MCE decoding enabled.
[   15.685703] initcall mce_amd_init+0x0/0x1000 [edac_mce_amd] returned 0 after 0 usecs
[   15.686596] calling  amd64_edac_init+0x0/0x2000 [amd64_edac_mod] @ 374
[   15.686606] EDAC amd64: Node 0: DRAM ECC disabled.
[   15.686607] EDAC amd64: ECC disabled in the BIOS or no ECC capability, module will not load.
                Either enable ECC checking or force module loading by setting 'ecc_enable_override'.
                (Note that use of the override may cause unknown side effects.)
[   15.686610] initcall amd64_edac_init+0x0/0x2000 [amd64_edac_mod] returned -19 after 11 usecs
[   15.688214] checking generic (e0000000 300000) vs hw (e0000000 10000000)
[   15.688216] fb: switching to amdgpudrmfb from EFI VGA
[   15.688231] Console: switching to colour dummy device 80x25
[   15.688894] [drm] initializing kernel modesetting (RAVEN 0x1002:0x15DD 0x1002:0x15DD 0xC8).
[   15.688939] [drm] register mmio base: 0xFE600000
[   15.688940] [drm] register mmio size: 524288
[   15.688953] [drm] probing gen 2 caps for device 1022:15db = 700d03/e
[   15.688954] [drm] probing mlw for device 1022:15db = 700d03
[   15.688956] [drm] add ip block number 0 <soc15_common>
[   15.688957] [drm] add ip block number 1 <gmc_v9_0>
[   15.688957] [drm] add ip block number 2 <vega10_ih>
[   15.688958] [drm] add ip block number 3 <psp>
[   15.688959] [drm] add ip block number 4 <powerplay>
[   15.688960] [drm] add ip block number 5 <dm>
[   15.688960] [drm] add ip block number 6 <gfx_v9_0>
[   15.688961] [drm] add ip block number 7 <sdma_v4_0>
[   15.688962] [drm] add ip block number 8 <vcn_v1_0>
[   15.690070] calling  init_fat_fs+0x0/0xfcb [fat] @ 405
[   15.690235] initcall init_fat_fs+0x0/0xfcb [fat] returned 0 after 157 usecs
[   15.690876] calling  init_vfat_fs+0x0/0x1000 [vfat] @ 405
[   15.690881] initcall init_vfat_fs+0x0/0x1000 [vfat] returned 0 after 2 usecs
[   15.692164] kfd kfd: DID 15dd is missing in supported_devices
[   15.692166] kfd kfd: kgd2kfd_probe failed
[   15.692176] [drm] VCN decode is enabled in VM mode
[   15.692177] [drm] VCN encode is enabled in VM mode
[   15.693015] calling  init_nls_cp437+0x0/0x1000 [nls_cp437] @ 406
[   15.693017] initcall init_nls_cp437+0x0/0x1000 [nls_cp437] returned 0 after 0 usecs

20 ms spent here.

[   15.713799] [drm] BIOS signature incorrect 0 0
[   15.713832] ATOM BIOS: 113-RAVEN-106
[   15.713864] [drm] vm size is 262144 GB, 4 levels, block size is 9-bit, fragment size is 9-bit
[   15.713878] amdgpu 0000:38:00.0: VRAM: 1024M 0x000000F400000000 - 0x000000F43FFFFFFF (1024M used)
[   15.713879] amdgpu 0000:38:00.0: GTT: 1024M 0x000000F500000000 - 0x000000F53FFFFFFF
[   15.713882] [drm] Detected VRAM RAM=1024M, BAR=1024M
[   15.713883] [drm] RAM width 128bits DDR4
[   15.715449] r8169 0000:18:00.0 enp24s0: renamed from eth0
[   15.715481] [TTM] Zone  kernel: Available graphics memory: 7703284 kiB
[   15.715482] [TTM] Zone   dma32: Available graphics memory: 2097152 kiB
[   15.715482] [TTM] Initializing pool allocator
[   15.715485] [TTM] Initializing DMA pool allocator
[   15.715543] [drm] amdgpu: 1024M of VRAM memory ready
[   15.715544] [drm] amdgpu: 3072M of GTT memory ready.
[   15.715552] [drm] GART: num cpu pages 262144, num gpu pages 262144
[   15.715745] [drm] PCIE GART of 1024M enabled (table at 0x000000F400900000).
[   15.716494] calling  ppdev_init+0x0/0x1000 [ppdev] @ 367
[   15.716541] ppdev: user-space parallel port driver
[   15.716544] initcall ppdev_init+0x0/0x1000 [ppdev] returned 0 after 45 usecs
[   15.716718] calling  wmi_bmof_driver_init+0x0/0x1000 [wmi_bmof] @ 363
[   15.716762] initcall wmi_bmof_driver_init+0x0/0x1000 [wmi_bmof] returned 0 after 40 usecs
[   15.717542] calling  init_nls_ascii+0x0/0x1000 [nls_ascii] @ 407
[   15.717544] initcall init_nls_ascii+0x0/0x1000 [nls_ascii] returned 0 after 0 usecs

28 ms spent here.

[   15.743405] [drm] use_doorbell being set to: [true]
[   15.749474] [drm] Found VCN firmware Version: 1.73 Family ID: 18

162 ms spent here.

[   15.912315] amdgpu: [powerplay] dpm has been enabled

21 ms spent here.

[   15.933471] [drm] Display Core initialized with v3.1.44!

27 ms spent here.

[   15.960458] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[   15.960459] [drm] Driver supports precise vblank timestamp query.
[   15.985699] [drm] VCN decode and encode initialized successfully.
[   15.990771] [drm] fb mappable at 0xA1100000
[   15.990772] [drm] vram apper at 0xA0000000
[   15.990773] [drm] size 33177600
[   15.990773] [drm] fb depth is 24
[   15.990773] [drm]    pitch is 15360
[   15.990848] fbcon: amdgpudrmfb (fb0) is primary device

63 ms spent here.

[   16.053604] Console: switching to colour frame buffer device 480x135

37 ms spent here.

[   16.090716] amdgpu 0000:38:00.0: fb0: amdgpudrmfb frame buffer device

32 ms spent here.

[   16.112200] amdgpu 0000:38:00.0: ring 0(gfx) uses VM inv eng 4 on hub 0
[   16.112205] amdgpu 0000:38:00.0: ring 1(comp_1.0.0) uses VM inv eng 5 on hub 0
[   16.112208] amdgpu 0000:38:00.0: ring 2(comp_1.1.0) uses VM inv eng 6 on hub 0
[   16.112211] amdgpu 0000:38:00.0: ring 3(comp_1.2.0) uses VM inv eng 7 on hub 0
[   16.112213] amdgpu 0000:38:00.0: ring 4(comp_1.3.0) uses VM inv eng 8 on hub 0
[   16.112216] amdgpu 0000:38:00.0: ring 5(comp_1.0.1) uses VM inv eng 9 on hub 0
[   16.112218] amdgpu 0000:38:00.0: ring 6(comp_1.1.1) uses VM inv eng 10 on hub 0
[   16.112221] amdgpu 0000:38:00.0: ring 7(comp_1.2.1) uses VM inv eng 11 on hub 0
[   16.112224] amdgpu 0000:38:00.0: ring 8(comp_1.3.1) uses VM inv eng 12 on hub 0
[   16.112226] amdgpu 0000:38:00.0: ring 9(kiq_2.1.0) uses VM inv eng 13 on hub 0
[   16.112229] amdgpu 0000:38:00.0: ring 10(sdma0) uses VM inv eng 4 on hub 1
[   16.112232] amdgpu 0000:38:00.0: ring 11(vcn_dec) uses VM inv eng 5 on hub 1
[   16.112235] amdgpu 0000:38:00.0: ring 12(vcn_enc0) uses VM inv eng 6 on hub 1
[   16.112237] amdgpu 0000:38:00.0: ring 13(vcn_enc1) uses VM inv eng 7 on hub 1
[   16.116896] [drm] Initialized amdgpu 3.26.0 20150101 for 0000:38:00.0 on minor 0
[   16.117029] initcall amdgpu_init+0x0/0x86 [amdgpu] returned 0 after 390042 usecs
Comment 1 Christian König 2018-07-17 17:48:52 UTC
We can certainly reduce the time amdgpu needs to load, but I'm not sure that we can get under 100ms.

See on the hardware side when switching between power states we need some delay before the clocks/voltages are stable. And we need to do this multiple times during driver startup.

On top of that comes the display code which has some timeouts for probing the connectors.
Comment 2 Martin Peres 2019-11-19 08:44:09 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/drm/amd/issues/452.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.