[igt-dev] [PATCH i-g-t] tests/kms_chamelium: Check if port adapters are in use
Knop, Ryszard
ryszard.knop at intel.com
Fri May 20 09:30:02 UTC 2022
On Thu, 2022-05-19 at 14:25 +0300, Petri Latvala wrote:
> On Wed, May 18, 2022 at 01:23:08PM +0200, Ryszard Knop wrote:
> > If a DUT has Chamelium ports connected via an adapter (for example,
> > DP
> > on the Chamelium side -> DP-HDMI adapter -> HDMI on the DUT), this
> > will
> > usually cause many tests to fail. If mismatching port types are
> > found
> > on both sides, the tests will now be aborted with a warning.
> >
> > This behavior can be overridden with a new AdapterAllowed config
> > value,
> > which must be set in [Chamelium:PORT] blocks in .igtrc.
>
> Your signed-off-by is missing.
Oops, that's right, will re-send v2 with that.
> > ---
> > docs/chamelium.txt | 18 ++++++++++++++----
> > lib/igt_chamelium.c | 35 +++++++++++++++++++++++++++++++++++
> > 2 files changed, 49 insertions(+), 4 deletions(-)
> >
> > diff --git a/docs/chamelium.txt b/docs/chamelium.txt
> > index 32c296f7..7484a3f8 100644
> > --- a/docs/chamelium.txt
> > +++ b/docs/chamelium.txt
> > @@ -94,7 +94,8 @@ example (only Chamelium.URL is mandatory):
> > URL=http://192.168.1.2:9992
> >
> > # The rest of the sections are used for defining connector
> > mappings. This
> > - # is optional, the mappings will be discovered automatically.
> > + # is optional if the same connector type (ex. DP-DP) is used
> > on both sides,
> > + # the mappings will be discovered automatically.
> >
> > # The name of the DRM connector
> > # The DP-1 of [Chamelium:DP-1] and the HDMI-A-1 of
> > [Chamelium:HDMI-A-1] indicate
> > @@ -102,13 +103,22 @@ example (only Chamelium.URL is mandatory):
> > [Chamelium:DP-1]
> > # The ChameliumPortID indicates physical port (device) id of a
> > Chamelium Board.
> > # A Chamelium daemon program defines these port ids as
> > - # DP1 (located next to the HDMI port) = 1
> > - # DP2 (located next to the VGA connector) = 2
> > - # HDMI = 3 and VGA = 4
> > + # - DP1 (located next to the HDMI port) = 1
> > + # - DP2 (located next to the VGA connector) = 2
> > + # - HDMI = 3
> > + # - VGA = 4
> > # The port ids are defined at:
> > #
> > https://chromium.googlesource.com/chromiumos/platform/chameleon/+/master/chameleond/utils/ids.py
> > ChameliumPortID=1
> >
> > + [Chamelium:HDMI-A-1]
> > + # Notice that the DRM side has HDMI, but Chamelium has DP on
> > port 2.
> > + # This is possible via an HDMI-DP adapter, but such scenarios
> > often cause
> > + # issues, so by default we fail if mismatching connector types
> > are found.
> > + # If AdapterAllowed is set to 1, the tests will proceed with a
> > warning.
> > + ChameliumPortID=2
> > + AdapterAllowed=1
> > +
> > [Chamelium:HDMI-A-2]
> > ChameliumPortID=3
> >
> > diff --git a/lib/igt_chamelium.c b/lib/igt_chamelium.c
> > index b4d838bb..55cbfa12 100644
> > --- a/lib/igt_chamelium.c
> > +++ b/lib/igt_chamelium.c
> > @@ -26,6 +26,7 @@
> >
> > #include "config.h"
> >
> > +#include <stdbool.h>
> > #include <string.h>
> > #include <errno.h>
> > #include <math.h>
> > @@ -103,6 +104,7 @@ struct chamelium_port {
> > int id;
> > int connector_id;
> > char *name;
> > + bool adapter_allowed;
> > };
> >
> > struct chamelium_frame_dump {
> > @@ -2324,6 +2326,9 @@ static bool
> > chamelium_read_port_mappings(struct chamelium *chamelium,
> > goto out;
> > }
> >
> > + port->adapter_allowed =
> > g_key_file_get_boolean(igt_key_file, group,
> > +
> > "AdapterAllowed", &error);
> > +
> > for (j = 0;
> > j < res->count_connectors && !port-
> > >connector_id;
> > j++) {
> > @@ -2557,6 +2562,7 @@ static bool chamelium_autodiscover(struct
> > chamelium *chamelium, int drm_fd)
> > port->id = port_id;
> > port->type = chamelium_get_port_type(chamelium,
> > port);
> > port->connector_id = conn_id;
> > + port->adapter_allowed = false;
> >
> > connector = drmModeGetConnectorCurrent(drm_fd,
> > conn_id);
> > snprintf(conn_name, sizeof(conn_name), "%s-%u",
> > @@ -2703,6 +2709,7 @@ error:
> > struct chamelium *chamelium_init(int drm_fd)
> > {
> > struct chamelium *chamelium = chamelium_init_rpc_only();
> > + bool mismatching_ports_found = false;
> >
> > if (chamelium == NULL)
> > return NULL;
> > @@ -2734,9 +2741,37 @@ struct chamelium *chamelium_init(int drm_fd)
> > }
> > }
> >
> > + for (int i = 0; i < chamelium->port_count; i++) {
> > + bool type_mismatch = false;
> > + struct chamelium_port * port = &chamelium-
> > >ports[i];
> > + drmModeConnectorPtr connector =
> > + drmModeGetConnectorCurrent(drm_fd, port-
> > >connector_id);
> > +
> > + igt_assert(connector != NULL);
> > +
> > + type_mismatch = port->type != connector-
> > >connector_type;
> > +
> > + if (type_mismatch)
> > + igt_info("Chamelium port %d is %s, but the
> > DRM connector is %s\n",
> > + port->id,
> > kmstest_connector_type_str(port->type),
> > +
> > kmstest_connector_type_str(connector->connector_type));
> > +
> > + if (type_mismatch && !port->adapter_allowed)
> > + mismatching_ports_found = true;
> > +
> > + drmModeFreeConnector(connector);
> > + }
> > +
> > cleanup_instance = chamelium;
> > igt_install_exit_handler(chamelium_exit_handler);
> >
> > + igt_abort_on_f(mismatching_ports_found,
> > + "Chamelium port(s) with mismatching
> > connector type on the "
> > + "DRM side found - this will most likely
> > cause test failures. "
> > + "If you want to proceed with this this
> > configuration, set the "
> > + "port mapping manually in .igtrc with
> > AdapterAllowed=1. See "
> > + "docs/chamelium.txt for more
> > information.\n");
>
> This abort should probably be before the exit handler installation
> above.
The exit handler basically runs the same cleanup as the error handler,
but also plugs in ports that could be left in a wonky state after
autodetection and destroys allocated EDIDs. Would it not be better to
still run that?
Thanks, Ryszard
More information about the igt-dev
mailing list