When getting the number of connectors, the VBIOS reports
the number of valid indices, but it doesn't say which indices
are valid, and not every valid index has an actual connector.
If we don't find a connector on an index, that is not an error.

Considering these are not actual errors, don't litter the logs.

Fixes: 60df5628144b ("drm/amd/display: handle invalid connector indices")
Signed-off-by: Timur Kristóf <timur.kris...@gmail.com>
---
 drivers/gpu/drm/amd/display/dc/bios/bios_parser.c |  5 +----
 drivers/gpu/drm/amd/display/dc/core/dc.c          | 15 ++++++++++++++-
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c 
b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
index 67f08495b7e6..154fd2c18e88 100644
--- a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
+++ b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
@@ -174,11 +174,8 @@ static struct graphics_object_id 
bios_parser_get_connector_id(
                return object_id;
        }
 
-       if (tbl->ucNumberOfObjects <= i) {
-               dm_error("Can't find connector id %d in connector table of size 
%d.\n",
-                        i, tbl->ucNumberOfObjects);
+       if (tbl->ucNumberOfObjects <= i)
                return object_id;
-       }
 
        id = le16_to_cpu(tbl->asObjects[i].usObjectID);
        object_id = object_id_from_bios_object_id(id);
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c 
b/drivers/gpu/drm/amd/display/dc/core/dc.c
index cf3893a2f8ce..33d6a5116aad 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -217,11 +217,24 @@ static bool create_links(
                connectors_num,
                num_virtual_links);
 
-       // condition loop on link_count to allow skipping invalid indices
+       /* When getting the number of connectors, the VBIOS reports the number 
of valid indices,
+        * but it doesn't say which indices are valid, and not every index has 
an actual connector.
+        * So, if we don't find a connector on an index, that is not an error.
+        *
+        * - There is no guarantee that the first N indices will be valid
+        * - VBIOS may report a higher amount of valid indices than there are 
actual connectors
+        * - Some VBIOS have valid configurations for more connectors than 
there actually are
+        *   on the card. This may be because the manufacturer used the same 
VBIOS for different
+        *   variants of the same card.
+        */
        for (i = 0; dc->link_count < connectors_num && i < MAX_LINKS; i++) {
+               struct graphics_object_id connector_id = 
bios->funcs->get_connector_id(bios, i);
                struct link_init_data link_init_params = {0};
                struct dc_link *link;
 
+               if (connector_id.id == CONNECTOR_ID_UNKNOWN)
+                       continue;
+
                DC_LOG_DC("BIOS object table - printing link object info for 
connector number: %d, link_index: %d", i, dc->link_count);
 
                link_init_params.ctx = dc->ctx;
-- 
2.50.1

Reply via email to