Documentation/gpu: Introduce a simple contribution list for display code
This commit adds a contribution list for display under the kernel documentation with some first suggestions. It also drops an old TODO list from the display folder. Cc: Mario Limonciello <mario.limonciello@amd.com> Cc: Alex Deucher <alexander.deucher@amd.com> Cc: Harry Wentland <Harry.Wentland@amd.com> Cc: Hamza Mahfooz <hamza.mahfooz@amd.com> Cc: Christian König <christian.koenig@amd.com> Cc: Aurabindo Pillai <aurabindo.pillai@amd.com> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com> Acked-by: Christian König <christian.koenig@amd.com> Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com> Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
21dd98b0ef
commit
ba162ae749
|
@ -0,0 +1,168 @@
|
|||
.. _display_todos:
|
||||
|
||||
==============================
|
||||
AMDGPU - Display Contributions
|
||||
==============================
|
||||
|
||||
First of all, if you are here, you probably want to give some technical
|
||||
contribution to the display code, and for that, we say thank you :)
|
||||
|
||||
This page summarizes some of the issues you can help with; keep in mind that
|
||||
this is a static page, and it is always a good idea to try to reach developers
|
||||
in the amdgfx or some of the maintainers. Finally, this page follows the DRM
|
||||
way of creating a TODO list; for more information, check
|
||||
'Documentation/gpu/todo.rst'.
|
||||
|
||||
Gitlab issues
|
||||
=============
|
||||
|
||||
Users can report issues associated with AMD GPUs at:
|
||||
|
||||
- https://gitlab.freedesktop.org/drm/amd
|
||||
|
||||
Usually, we try to add a proper label to all new tickets to make it easy to
|
||||
filter issues. If you can reproduce any problem, you could help by adding more
|
||||
information or fixing the issue.
|
||||
|
||||
Level: diverse
|
||||
|
||||
IGT
|
||||
===
|
||||
|
||||
`IGT`_ provides many integration tests that can be run on your GPU. We always
|
||||
want to pass a large set of tests to increase the test coverage in our CI. If
|
||||
you wish to contribute to the display code but are unsure where a good place
|
||||
is, we recommend you run all IGT tests and try to fix any failure you see in
|
||||
your hardware. Keep in mind that this failure can be an IGT problem or a kernel
|
||||
issue; it is necessary to analyze case-by-case.
|
||||
|
||||
Level: diverse
|
||||
|
||||
.. _IGT: https://gitlab.freedesktop.org/drm/igt-gpu-tools
|
||||
|
||||
Compilation
|
||||
===========
|
||||
|
||||
Fix compilation warnings
|
||||
------------------------
|
||||
|
||||
Enable the W1 or W2 warning level in the kernel compilation and try to fix the
|
||||
issues on the display side.
|
||||
|
||||
Level: Starter
|
||||
|
||||
Fix compilation issues when using um architecture
|
||||
-------------------------------------------------
|
||||
|
||||
Linux has a User-mode Linux (UML) feature, and the kernel can be compiled to
|
||||
the **um** architecture. Compiling for **um** can bring multiple advantages
|
||||
from the test perspective. We currently have some compilation issues in this
|
||||
area that we need to fix.
|
||||
|
||||
Level: Intermediate
|
||||
|
||||
Code Refactor
|
||||
=============
|
||||
|
||||
Add prefix to DC functions to improve the debug with ftrace
|
||||
-----------------------------------------------------------
|
||||
|
||||
The Ftrace debug feature (check 'Documentation/trace/ftrace.rst') is a
|
||||
fantastic way to check the code path when developers try to make sense of a
|
||||
bug. Ftrace provides a filter mechanism that can be useful when the developer
|
||||
has some hunch of which part of the code can cause the issue; for this reason,
|
||||
if a set of functions has a proper prefix, it becomes easy to create a good
|
||||
filter. Additionally, prefixes can improve stack trace readability.
|
||||
|
||||
The DC code does not follow some prefix rules, which makes the Ftrace filter
|
||||
more complicated and reduces the readability of the stack trace. If you want
|
||||
something simple to start contributing to the display, you can make patches for
|
||||
adding prefixes to DC functions. To create those prefixes, use part of the file
|
||||
name as a prefix for all functions in the target file. Check the
|
||||
'amdgpu_dm_crtc.c` and `amdgpu_dm_plane.c` for some references. However, we
|
||||
strongly advise not to send huge patches changing these prefixes; otherwise, it
|
||||
will be hard to review and test, which can generate second thoughts from
|
||||
maintainers. Try small steps; in case of double, you can ask before you put in
|
||||
effort. We recommend first looking at folders like dceXYZ, dcnXYZ, basics,
|
||||
bios, core, clk_mgr, hwss, resource, and irq.
|
||||
|
||||
Level: Starter
|
||||
|
||||
Reduce code duplication
|
||||
-----------------------
|
||||
|
||||
AMD has an extensive portfolio with various dGPUs and APUs that amdgpu
|
||||
supports. To maintain the new hardware release cadence, DCE/DCN was designed in
|
||||
a modular design, making the bring-up for new hardware fast. Over the years,
|
||||
amdgpu accumulated some technical debt in the code duplication area. For this
|
||||
task, it would be a good idea to find a tool that can discover code duplication
|
||||
(including patterns) and use it as guidance to reduce duplications.
|
||||
|
||||
Level: Intermediate
|
||||
|
||||
Make atomic_commit_[check|tail] more readable
|
||||
---------------------------------------------
|
||||
|
||||
The functions responsible for atomic commit and tail are intricate and
|
||||
extensive. In particular `amdgpu_dm_atomic_commit_tail` is a long function and
|
||||
could benefit from being split into smaller helpers. Improvements in this area
|
||||
are more than welcome, but keep in mind that changes in this area will affect
|
||||
all ASICs, meaning that refactoring requires a comprehensive verification; in
|
||||
other words, this effort can take some time for validation.
|
||||
|
||||
Level: Advanced
|
||||
|
||||
Documentation
|
||||
=============
|
||||
|
||||
Expand kernel-doc
|
||||
-----------------
|
||||
|
||||
Many DC functions do not have a proper kernel-doc; understanding a function and
|
||||
adding documentation is a great way to learn more about the amdgpu driver and
|
||||
also leave an outstanding contribution to the entire community.
|
||||
|
||||
Level: Starter
|
||||
|
||||
Beyond AMDGPU
|
||||
=============
|
||||
|
||||
AMDGPU provides features that are not yet enabled in the userspace. This
|
||||
section highlights some of the coolest display features, which could be enabled
|
||||
with the userspace developer helper.
|
||||
|
||||
Enable underlay
|
||||
---------------
|
||||
|
||||
AMD display has this feature called underlay (which you can read more about at
|
||||
'Documentation/GPU/amdgpu/display/mpo-overview.rst') which is intended to
|
||||
save power when playing a video. The basic idea is to put a video in the
|
||||
underlay plane at the bottom and the desktop in the plane above it with a hole
|
||||
in the video area. This feature is enabled in ChromeOS, and from our data
|
||||
measurement, it can save power.
|
||||
|
||||
Level: Unknown
|
||||
|
||||
Adaptive Backlight Modulation (ABM)
|
||||
-----------------------------------
|
||||
|
||||
ABM is a feature that adjusts the display panel's backlight level and pixel
|
||||
values depending on the displayed image. This power-saving feature can be very
|
||||
useful when the system starts to run off battery; since this will impact the
|
||||
display output fidelity, it would be good if this option was something that
|
||||
users could turn on or off.
|
||||
|
||||
Level: Unknown
|
||||
|
||||
|
||||
HDR & Color management & VRR
|
||||
----------------------------
|
||||
|
||||
HDR, Color Management, and VRR are huge topics and it's hard to put these into
|
||||
concise ToDos. If you are interested in this topic, we recommend checking some
|
||||
blog posts from the community developers to better understand some of the
|
||||
specific challenges and people working on the subject. If anyone wants to work
|
||||
on some particular part, we can try to help with some basic guidance. Finally,
|
||||
keep in mind that we already have some kernel-doc in place for those areas.
|
||||
|
||||
Level: Unknown
|
|
@ -92,4 +92,5 @@ table of content:
|
|||
dcn-blocks.rst
|
||||
mpo-overview.rst
|
||||
dc-debug.rst
|
||||
display-contributing.rst
|
||||
dc-glossary.rst
|
||||
|
|
|
@ -1,110 +0,0 @@
|
|||
===============================================================================
|
||||
TODOs
|
||||
===============================================================================
|
||||
|
||||
1. Base this on drm-next - WIP
|
||||
|
||||
|
||||
2. Cleanup commit history
|
||||
|
||||
|
||||
3. WIP - Drop page flip helper and use DRM's version
|
||||
|
||||
|
||||
4. DONE - Flatten all DC objects
|
||||
* dc_stream/core_stream/stream should just be dc_stream
|
||||
* Same for other DC objects
|
||||
|
||||
"Is there any major reason to keep all those abstractions?
|
||||
|
||||
Could you collapse everything into struct dc_stream?
|
||||
|
||||
I haven't looked recently but I didn't get the impression there was a
|
||||
lot of design around what was public/protected, more whatever needed
|
||||
to be used by someone else was in public."
|
||||
~ Dave Airlie
|
||||
|
||||
|
||||
5. DONE - Rename DC objects to align more with DRM
|
||||
* dc_surface -> dc_plane_state
|
||||
* dc_stream -> dc_stream_state
|
||||
|
||||
|
||||
6. DONE - Per-plane and per-stream validation
|
||||
|
||||
|
||||
7. WIP - Per-plane and per-stream commit
|
||||
|
||||
|
||||
8. WIP - Split pipe_ctx into plane and stream resource structs
|
||||
|
||||
|
||||
9. Attach plane and stream reources to state object instead of validate_context
|
||||
|
||||
|
||||
10. Remove dc_edid_caps and drm_helpers_parse_edid_caps
|
||||
* Use drm_display_info instead
|
||||
* Remove DC's edid quirks and rely on DRM's quirks (add quirks if needed)
|
||||
|
||||
"Making sure you use the sink-specific helper libraries and kernel
|
||||
subsystems, since there's really no good reason to have 2nd
|
||||
implementation of those in the kernel. Looks likes that's done for mst
|
||||
and edid parsing. There's still a bit a midlayer feeling to the edid
|
||||
parsing side (e.g. dc_edid_caps and dm_helpers_parse_edid_caps, I
|
||||
think it'd be much better if you convert that over to reading stuff
|
||||
from drm_display_info and if needed, push stuff into the core). Also,
|
||||
I can't come up with a good reason why DC needs all this (except to
|
||||
reimplement half of our edid quirk table, which really isn't a good
|
||||
idea). Might be good if you put this onto the list of things to fix
|
||||
long-term, but imo not a blocker. Definitely make sure new stuff
|
||||
doesn't slip in (i.e. if you start adding edid quirks to DC instead of
|
||||
the drm core, refactoring to use the core edid stuff was pointless)."
|
||||
~ Daniel Vetter
|
||||
|
||||
|
||||
11. Remove dc/i2caux. This folder can be somewhat misleading. It's basically an
|
||||
overy complicated HW programming function for sendind and receiving i2c/aux
|
||||
commands. We can greatly simplify that and move it into dc/dceXYZ like other
|
||||
HW blocks.
|
||||
|
||||
12. drm_modeset_lock in MST should no longer be needed in recent kernels
|
||||
* Adopt appropriate locking scheme
|
||||
|
||||
13. get_modes and best_encoder callbacks look a bit funny. Can probably rip out
|
||||
a few indirections, and consider removing entirely and using the
|
||||
drm_atomic_helper_best_encoder default behaviour.
|
||||
|
||||
14. core/dc_debug.c, consider switching to the atomic state debug helpers and
|
||||
moving all your driver state printing into the various atomic_print_state
|
||||
callbacks. There's also plans to expose this stuff in a standard way across all
|
||||
drivers, to make debugging userspace compositors easier across different hw.
|
||||
|
||||
15. Move DP/HDMI dual mode adaptors to drm_dp_dual_mode_helper.c. See
|
||||
dal_ddc_service_i2c_query_dp_dual_mode_adaptor.
|
||||
|
||||
16. Move to core SCDC helpers (I think those are new since initial DC review).
|
||||
|
||||
17. There's still a pretty massive layer cake around dp aux and DPCD handling,
|
||||
with like 3 levels of abstraction and using your own structures instead of the
|
||||
stuff in drm_dp_helper.h. drm_dp_helper.h isn't really great and already has 2
|
||||
incompatible styles, just means more reasons not to add a third (or well third
|
||||
one gets to do the cleanup refactor).
|
||||
|
||||
18. There's a pile of sink handling code, both for DP and HDMI where I didn't
|
||||
immediately recognize the standard. I think long term it'd be best for the drm
|
||||
subsystem if we try to move as much of that into helpers/core as possible, and
|
||||
share it with drivers. But that's a very long term goal, and by far not just an
|
||||
issue with DC - other drivers, especially around DP sink handling, are equally
|
||||
guilty.
|
||||
|
||||
19. DONE - The DC logger is still a rather sore thing, but I know that the
|
||||
DRM_DEBUG stuff just isn't up to the challenges either. We need to figure out
|
||||
something that integrates better with DRM and linux debug printing, while not
|
||||
being useless with filtering output. dynamic debug printing might be an option.
|
||||
|
||||
20. Use kernel i2c device to program HDMI retimer. Some boards have an HDMI
|
||||
retimer that we need to program to pass PHY compliance. Currently that's
|
||||
bypassing the i2c device and goes directly to HW. This should be changed.
|
||||
|
||||
21. Remove vector.c from dc/basics. It's used in DDC code which can probably
|
||||
be simplified enough to no longer need a vector implementation.
|
Loading…
Reference in New Issue