[RFC PATCH v2 0/6] switch amdgpu_dm_connector to use struct drm_edid
Melissa Wen
mwen at igalia.com
Wed Mar 27 16:54:41 UTC 2024
Hi,
After finding a null-pointer dereference when running
igt at kms_connector_force_edid (fixed by [1]), I started migrating raw
edid handles in amdgpu connectors to use opaque drm_edid and its
helpers.
However, I'm struggling to remove all drm_edid_raw() occurrences for
different reasons and, with this RFC, I'm looking for suggestions to
overcome them:
1. `dc_link` ops need a copy of edid data and size via `dc_sink`
(basically, dc_link_add_remote_sink()). I'm unsure what a possible
approach to clean dc_link helpers should be since it seems part of the
shared code. Any suggestions?
2. Most of the edid data handled by `dm_helpers_parse_edid_caps()` are
in drm_edid halpers, but there are still a few that are not managed by
them yet. For example:
```
edid_caps->serial_number = edid_buf->serial;
edid_caps->manufacture_week = edid_buf->mfg_week;
edid_caps->manufacture_year = edid_buf->mfg_year;
```
AFAIU I see the same pending issue in i915/pnpid_get_panel_type() -
that still uses drm_edid_raw().
My suggestion is to keep the drm_edid_raw() around and verify if there
are no regressions or functional changes after this switch of
amdgpu_dm_connector to struct drm_edid. I added FIXME comments to all
drm_edid_raw occurrences to keep these pending issues on our radar. So
we can continue removing driver-specific code in favor of drm_edid
common code. What do you think?
This is the current status of drm_edid migration in this patchset:
- patch 1-2: remove unused variables found in this process.
- patch 3-4: migration of amdgpu_dm_connector from struct edid to struct
drm_edid and its helpers.
- patch 5-6: remove duplicated code for parsing vrr caps. WIP: require
more validation.
Additionally, it needs extensive testing and validation of a large
variety of display caps and I don't have the required setup for it
(perhaps you can test it in your CI to point issues?). I don't see how
to reduce the scope of changes to mitigate the noise/disruption, but any
suggestions are welcome.
Thanks,
Melissa
Melissa Wen (6):
drm/amd/display: remove unused pixel_clock_mhz from
amdgpu_dm_connector
drm/amd/display: clean unused variables for hdmi freesync parser
drm/amd/display: switch amdgpu_dm_connector to use struct drm_edid
drm/amd/display: switch to setting physical address directly
drm/amd/display: always call connector_update when parsing
freesync_caps
drm/amd/display: remove redundant freesync parser for DP
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 187 +++++-------------
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 5 +-
.../amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 8 +-
.../display/amdgpu_dm/amdgpu_dm_mst_types.c | 28 +--
4 files changed, 71 insertions(+), 157 deletions(-)
--
2.43.0
More information about the amd-gfx
mailing list