[<prev] [next>] [day] [month] [year] [list]
Message-ID: <38e52b4d-3149-fa4e-aa22-1a1edd31a34a@molgen.mpg.de>
Date: Sat, 28 Jul 2018 21:26:18 +0200
From: Paul Menzel <pmenzel+amd-gfx@...gen.mpg.de>
To: amd-gfx@...ts.freedesktop.org
Cc: linux-kernel@...r.kernel.org
Subject: [RFC] Improve on using delays greater than a few milliseconds
Dear Linux folks,
Trying to decrease the boot time, mostly with ftrace by using [1], I
noticed a lot of delays. Out of curiosity I searched for all calls of
`mdelay()` in the driver *amdgpu*.
> $ git grep mdelay drivers/gpu/drm/amd/amdgpu
> drivers/gpu/drm/amd/amdgpu/atom.c: mdelay(count);
> drivers/gpu/drm/amd/amdgpu/atombios_encoders.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/cik.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/cik.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/cik.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/cik.c: mdelay(100);
> drivers/gpu/drm/amd/amdgpu/cik_ih.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/cz_ih.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/iceland_ih.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/psp_v10_0.c: mdelay(20);
> drivers/gpu/drm/amd/amdgpu/psp_v10_0.c: mdelay(20);
> drivers/gpu/drm/amd/amdgpu/psp_v3_1.c: mdelay(20);
> drivers/gpu/drm/amd/amdgpu/psp_v3_1.c: mdelay(20);
> drivers/gpu/drm/amd/amdgpu/psp_v3_1.c: mdelay(20);
> drivers/gpu/drm/amd/amdgpu/psp_v3_1.c: mdelay(20);
> drivers/gpu/drm/amd/amdgpu/psp_v3_1.c: mdelay(1000);
> drivers/gpu/drm/amd/amdgpu/si.c: mdelay(100);
> drivers/gpu/drm/amd/amdgpu/si_ih.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/tonga_ih.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c: mdelay(20);
> drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c: mdelay(30);
> drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/vce_v2_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vce_v2_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vce_v2_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vce_v2_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vce_v2_0.c: mdelay(100);
> drivers/gpu/drm/amd/amdgpu/vce_v2_0.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/vce_v2_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/vce_v3_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vce_v3_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vce_v3_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vce_v3_0.c: mdelay(100);
> drivers/gpu/drm/amd/amdgpu/vce_v3_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/vce_v3_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/vce_v4_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vce_v4_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vce_v4_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vce_v4_0.c: mdelay(100);
> drivers/gpu/drm/amd/amdgpu/vce_v4_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/vce_v4_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c: mdelay(5);
> drivers/gpu/drm/amd/amdgpu/vega10_ih.c: mdelay(1);
> drivers/gpu/drm/amd/amdgpu/vi.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vi.c: mdelay(10);
> drivers/gpu/drm/amd/amdgpu/vi.c: mdelay(10);
Looking through it, there are a lot of delays over ten milliseconds.
Quite a few of 100 ms and once one second. I am wondring, why in these
cases a while loop cannot check if the condition, that is waited for,
became true. If the hardware engineers really designed the device that
way, they should be contacted to improve that design in the future.
Do you you think the situation could be improved? I know, I am not a
amdgfx developer – that datasheets are (often) missing –, but could the
proposal below help? That could be checked during reviews.
For delays higher than five seconds, a comment must be added, why that
delay is needed. Citing the datasheet name, revision and section is enough.
Additionally, for delays greater than 20 ms, a FIXME comment should be
added and the situation explained in the commit message.
Kind regards,
Paul
[1]: https://01.org/suspendresume
Powered by blists - more mailing lists