[PATCH 00/17] DRM/KMS/EDID: Various EDID handling related fixes.

Egbert Eich eich at suse.de
Mon Nov 19 12:23:01 PST 2012


This patchset fixes issues about EDID and EDID Extension block handling:

1. We currently don't return any EDID information if there are issues with
   reading extension blocks. There are devices however which announce to
   have EDID extension blocks although these are not readable.
   If reading extension blocks fails we should at least return the base
   block (with a corrected extension blcok flag).
2. There are broken legacy DDC devices around which wrongly announce to have ED
   extension blocks. Since the segment address is ignored on these devices
   we will get a base block returned for any uneven block number. Detect this
   situation and abort reading further blocks.
3. When we read EDID extension blocks but fail to validate them we discard
   them and correct the EDID block count in the base block. There may however
   be a block map in the first extesion block which we should also fix.
   Similarly, don't fail if we cannot allocate enough contiguous memory for
   all EDID extension blocks: rather than failing completely, it is better
   to return at least the base block and if possible all extension blocks
   for which there is memory.
4. EDID 'firmware'-files:
   * Treat the, the same way as EDIDs read from DDC channels:
    - use the same routines to validate and fix them.
    - feed them when reading
   * Support different EDID files for different connectors.
5. Consolidate EDID error handling:
   Store information about the error status of the last DDC read in the
   drm_connector structure. This data can be used:
   - in the driver to detect certain issues with DDC read out.
   - provide a finer control over repeated error logging - instead
     of disabling EDID error logging entirely if an EDID error has
     been detected, only disable it for those errors which have been
     seen also on the previous DDC read cycle.
6. Move EDID-related functions to drm_edid.h
   The handling of EDID related DRM functions seemed to be a bit arbitrary:
   although drm_edid.h had been created, new functions were often added to
   drm_crtc.h


Egbert Eich (17):
  DRM/KMS/EDID: Mask out Segment Bits when calculating Offset.
  DRM/KMS/EDID: 0x7e -> EDID_EXTENSION_FLAG_OFFSET
  DRM/KMS/EDID: Return Base EDID block if reading EEDID Blocks fails.
  DRM/KMS/EDID: Test EDDC if EDID announces more than one Extension
    Block.
  DRM/KMS/EDID: Fix up EEDID Map Blocks if Extension block count has
    changed.
  DRM/exynos: Fix Memory Leak: free EDID blcok returned by
    drm_get_edid().
  DRM/KMS/EDID: Move drm_edid_load.o to drm.ko
  DRM/KMS/EDID: Use Extension Block Fixup Code also for 'firmware'
    EDID.
  DRM/KMS/EDID: Feed 'firmware' supplied EDID blocks whenever the EDID
    is read.
  DRM/KMS/EDID: Cache EDID blobs with extensions.
  DRM/KMS/EDID: Avoid failing on krealloc on EDID blocks.
  DRM/KMS/EDID: Consolidate EDID Error Handling.
  DRM/KMS/EDID: Allow for multiple Connectors when specifying
    'firmware'-EDID Files.
  DRM/KMS/ast: Include drm_edid.h in file using drm_get_edid().
  DRM/KMS/gma500: Include drm_edid.h in file using drm_get_edid().
  DRM/KMS/mgag200: Include drm_edid.h in file using drm_get_edid().
  DRM/KMS/EDID: Move EDID related Functions to drm_edid.h.

 drivers/gpu/drm/Makefile                   |    2 +-
 drivers/gpu/drm/ast/ast_mode.c             |    1 +
 drivers/gpu/drm/drm_crtc.c                 |    1 +
 drivers/gpu/drm/drm_crtc_helper.c          |    6 +-
 drivers/gpu/drm/drm_edid.c                 |  303 ++++++++++++++++++++++++----
 drivers/gpu/drm/drm_edid_load.c            |  115 +++++------
 drivers/gpu/drm/exynos/exynos_hdmi.c       |    1 +
 drivers/gpu/drm/gma500/cdv_intel_dp.c      |    1 +
 drivers/gpu/drm/gma500/oaktrail_lvds.c     |    1 +
 drivers/gpu/drm/gma500/psb_intel_modes.c   |    1 +
 drivers/gpu/drm/mgag200/mgag200_mode.c     |    1 +
 drivers/gpu/drm/radeon/radeon_connectors.c |    2 +-
 include/drm/drm_crtc.h                     |   13 +-
 include/drm/drm_edid.h                     |   24 ++-
 14 files changed, 348 insertions(+), 124 deletions(-)

-- 
1.7.7



More information about the dri-devel mailing list