summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/chamelium.txt153
1 files changed, 153 insertions, 0 deletions
diff --git a/docs/chamelium.txt b/docs/chamelium.txt
new file mode 100644
index 00000000..77594284
--- /dev/null
+++ b/docs/chamelium.txt
@@ -0,0 +1,153 @@
+Chamelium Support in IGT
+========================
+
+This document provides information, instructions and a tasks list for Chamelium
+support in IGT.
+
+Introduction
+------------
+
+The Chamelium is a platform that acts as a display monitor emulator. It provides
+advanced access and control over the various signals a display receives.
+
+As such, it allows testing display features that can otherwise not be tested in
+IGT without external hardware.
+
+The platform was developed by Google in order to test display and audio-related
+features of ChromeOS devices. It was initially developed internally by Google as
+part of the ChromeOS effort under the name Chameleon and was later made external
+as part of the ChromiumOS effort, under the name Chamelium.
+
+It consists of a custom-made display emulator board connected to an Arrow SoCKit
+via a flexible cable, with two DisplayPort connectors, one HDMI and one VGA.
+
+The SoCKit uses a Cyclone V SoC, with both a FPGA and an ARM CPU. While the FPGA
+is used for logic control, the CPU runs daemons that allow the board to be
+controlled over the network via a XMLRPC interface.
+
+Documentation
+-------------
+
+Documentation about the Chamelium is made available by Google through the
+ChromiumOS projet wiki: https://www.chromium.org/chromium-os/testing/chamelium
+
+Deploying the Chamelium With IGT
+--------------------------------
+
+Instructions from the ChromiumOS wiki detail how to setup the Chamelium:
+https://www.chromium.org/chromium-os/testing/chamelium#TOC-Setting-up-Chamelium
+
+The should be followed up until the "Setup your Linux host, DUT and the FPGA"
+section. At this point, IGT has to be configured to connect to the Chamelium.
+
+It may be necessary to give the Chamelium a static IP address, depending on
+the network setup. This can be configured (via the serial console) by editing
+the Debian-styled /etc/network/interfaces configuration file.
+
+Chamelium support requires setting up dedicated IGT configuration, as explained
+in the Core and Chamelium parts of the IGT API Reference in the documentation.
+
+Note that running the chamelium tests with the Chamelium configuration deployed
+and the Chamelium disconnected or unreachable will result in network timeouts
+that take seconds. It is thus preferable (especially in the case of an automated
+CI system with a shared testlist) to remove the Chamelium configuration from the
+hosts that shouldn't connect to the Chamelium so that they can be skipped, which
+is faster than a network timeout.
+
+An example fully-featured configuration follows:
+[Common]
+FrameDumpPath=/root/
+
+[Chamelium]
+URL=http://192.168.72.1:9992
+
+[Chamelium:DP-1]
+ChameliumPortID=1
+
+[Chamelium:HDMI-A-2]
+ChameliumPortID=3
+
+[Chamelium:VGA-1]
+ChameliumPortID=4
+
+[DUT]
+SuspendResumeDelay=2
+
+Debugging the Chamelium
+-----------------------
+
+Logs that may be useful for debugging can be obtained either by connecting to
+the board via SSH or serial console and looking at the daemon logs from
+/var/log, such as:
+$ tail -f /var/log/chameleon*
+
+Daemon Source, Build and Deploy
+-------------------------------
+
+Source code for the daemon running on the Chamelium is available at:
+https://chromium.googlesource.com/chromiumos/platform/chameleon/
+
+Building the daemon requires a GNU EABI ARMv7 GCC toolchain, that must be
+specified via the CC variable, such as:
+$ make CC=arm-linux-gnueabihf-gcc
+
+The result can be deployed to the chamelium with the remote-install target and
+specifying the network address for the chamelium via the CHAMELEON_HOST
+variable, such as:
+$ make remote-install CHAMELEON_HOST=192.168.72.1
+
+The process requires the Chamelium to be connected to the Internet to succeed.
+
+Contributing Changes to the Daemon
+----------------------------------
+
+Contributions to the Chamelium daemon, just like any contribution to ChromiumOS,
+are submitted and reviewed at: https://chromium-review.googlesource.com/
+
+The ChromiumOS project provides an extensive developer guide:
+https://www.chromium.org/chromium-os/developer-guide that assumes running within
+the ChromiumOS build system. Since this is likely not the case for contributing
+to the Chamelium daemon, only the part about uploading changes is relevant:
+https://www.chromium.org/chromium-os/developer-guide#TOC-Upload-your-changes-and-get-a-code-review
+
+Most of the process is about using the Gerrit web interface for submitting and
+having the change reviewed and not forgetting the Change-Id, TEST= and BUG=
+fields in the commit.
+
+Current Support in IGT
+----------------------
+
+Support for the Chamelium platform in IGT is found in the following places:
+* lib/igt_chamelium.c: library with Chamelium-related helpers
+* tests/chamelium.c: sub-tests using the Chamelium
+
+As of late August 2017, the following features are tested by IGT:
+* Pixel-by-pixel frame integrity tests for DP and HDMI
+* Error-trend-based frame integrity tests for VGA
+* CRC-based frame integrity tests for DP and HDMI
+* Hotplug event simple tests for all interfaces
+* Hotplug event stressing tests, emulating a flaky cable for DisplayPort and
+ HDMI
+* Hotplug event during suspend test for all interfaces, either separately for
+ each interface or combined
+* EDID display identifier integrity check for all interfaces
+* EDID display identifier change during suspend for all interfaces
+
+Future Developments
+-------------------
+
+With the current generation of the hardware platform, support for testing a
+number of additional display features could be included as future developments,
+including:
+* Audio capture from HDMI and DP
+* High-bandwidth Digital Content Protection (HDCP) streaming to the display
+* Remote control forwarding (CEC) sent from the display
+* YUV colorspace for HDMI, instead of RGB
+* Partial testing of DP Multi-Stream Transport (MST) using an external MST hub
+ and the two available DP connectors of the platform
+
+While HDCP is already supported by the Chamelium daemon, features such as CEC
+and YUV are not and must be implemented there before any support for them can
+be added to IGT. Audio is supported by the Chamelium daemon for HDMI only and
+a way to retrieve the captured data via the XMLRPC interface needs to be added
+to the daemon.