<!DOCTYPE html>
<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <pre
style="font-size: 13px; font-family: monospace; background: rgb(255, 255, 255); color: rgb(0, 0, 51); white-space: pre-wrap; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">Hello everyone,

drm_edid_override_connector_update seem return a incorrect value.

drivers/gpu/drm/drm_edid.c (Linux 6.7-rc4)
  2294  /**
  2295   * drm_edid_override_connector_update - add modes from override/firmware EDID
  2296   * @connector: connector we're probing
  2297   *
  2298   * Add modes from the override/firmware EDID, if available. Only to be used from
  2299   * drm_helper_probe_single_connector_modes() as a fallback for when DDC probe
  2300   * failed during drm_get_edid() and caused the override/firmware EDID to be
  2301   * skipped.
  2302   *
  2303   * Return: The number of modes added or 0 if we couldn't find any.
  2304   */
  2305  int drm_edid_override_connector_update(struct drm_connector *connector)
  2306  {
  2307          const struct drm_edid *override;
  2308          int num_modes = 0;
  2309  
  2310          override = drm_edid_override_get(connector);
  2311          if (override) {
  2312                  num_modes = drm_edid_connector_update(connector, override);
  2313  
  2314                  drm_edid_free(override);
  2315  
  2316                  drm_dbg_kms(connector->dev,
  2317                              "[CONNECTOR:%d:%s] adding %d modes via fallback override/firmware EDID\n",
  2318                              connector->base.id, connector->name, num_modes);
  2319          }
  2320  
  2321          return num_modes;
  2322  }
  2323  EXPORT_SYMBOL(drm_edid_override_connector_update);

The comment describes that it will return the number of modes added
However the function calls drm_edid_connector_update, will return 0 upon successful execution.

drivers/gpu/drm/drm_edid.c
  6813  /**
  6814   * drm_edid_connector_update - Update connector information from EDID
  6815   * @connector: Connector
  6816   * @drm_edid: EDID
  6817   *
  6818   * Update the connector display info, ELD, HDR metadata, relevant properties,
  6819   * etc. from the passed in EDID.
  6820   *
  6821   * If EDID is NULL, reset the information.
  6822   *
  6823   * Must be called before calling drm_edid_connector_add_modes().
  6824   *
  6825   * Return: 0 on success, negative error on errors.
  6826   */
  6827  int drm_edid_connector_update(struct drm_connector *connector,
  6828                                const struct drm_edid *drm_edid)
  6829  {
  6830          update_display_info(connector, drm_edid);
  6831  
  6832          _drm_update_tile_info(connector, drm_edid);
  6833  
  6834          return _drm_edid_connector_property_update(connector, drm_edid);
  6835  }
  6836  EXPORT_SYMBOL(drm_edid_connector_update);

This will break the EDID override behavior on Nvidia graphics cards.

NVIDIA/open-gpu-kernel-modules:
kernel-open/nvidia-drm/nvidia-drm-connector.c:
<span style="font-family:monospace"><span
    style="color:#000000;background-color:#ffffff;">   103  #if defined(NV_DRM_CONNECTOR_HAS_OVERRIDE_EDID)</span>
   104      if (connector->override_edid) {
   105  #else
   106      if (drm_edid_override_connector_update(connector) > 0) {
   107  #endif
   108          const struct drm_property_blob *edid = connector->edid_blob_ptr;
   109


</span><span style="font-family:monospace">drm_edid_override_connector_update(connector)</span> will return zero here.

regards,
bbaa

NVIDIA MODULE: <a class="moz-txt-link-freetext" href="https://github.com/NVIDIA/open-gpu-kernel-modules/blob/4c29105/kernel-open/nvidia-drm/nvidia-drm-connector.c#L106">https://github.com/NVIDIA/open-gpu-kernel-modules/blob/4c29105/kernel-open/nvidia-drm/nvidia-drm-connector.c#L106</a>



</pre>
    <p></p>
    <p></p>
  </body>
</html>