Skip to content

Commit

Permalink
drm: zynqmp_dp: Add debugfs interface for compliance testing
Browse files Browse the repository at this point in the history
Add a debugfs interface for exercising the various test modes supported
by the DisplayPort controller. This allows performing compliance
testing, or performing signal integrity measurements on a failing link.
At the moment, we do not support sink-driven link quality testing,
although such support would be fairly easy to add.

Additionally, add some debugfs files for ignoring AUX errors and HPD
events, as this can allow testing with equipment that cannot emulate a
DPRX.

Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
[Tomi: fixed a few minor formatting issues]
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240809193600.3360015-9-sean.anderson@linux.dev
  • Loading branch information
Sean Anderson authored and Tomi Valkeinen committed Oct 30, 2024
1 parent 76f2c96 commit 28edaac
Show file tree
Hide file tree
Showing 4 changed files with 828 additions and 3 deletions.
1 change: 1 addition & 0 deletions Documentation/gpu/drivers.rst
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ GPU Driver Documentation
afbc
komeda-kms
panfrost
zynqmp

.. only:: subproject and html

Expand Down
149 changes: 149 additions & 0 deletions Documentation/gpu/zynqmp.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
.. SPDX-License-Identifier: GPL-2.0+
===============================================
Xilinx ZynqMP Ultrascale+ DisplayPort Subsystem
===============================================

This subsystem handles DisplayPort video and audio output on the ZynqMP. It
supports in-memory framebuffers with the DisplayPort DMA controller
(xilinx-dpdma), as well as "live" video and audio from the programmable logic
(PL). This subsystem can perform several transformations, including color space
conversion, alpha blending, and audio mixing, although not all features are
currently supported.

debugfs
-------

To support debugging and compliance testing, several test modes can be enabled
though debugfs. The following files in /sys/kernel/debug/dri/X/DP-1/test/
control the DisplayPort test modes:

active:
Writing a 1 to this file will activate test mode, and writing a 0 will
deactivate test mode. Writing a 1 or 0 when the test mode is already
active/inactive will re-activate/re-deactivate test mode. When test
mode is inactive, changes made to other files will have no (immediate)
effect, although the settings will be saved for when test mode is
activated. When test mode is active, changes made to other files will
apply immediately.

custom:
Custom test pattern value

downspread:
Enable/disable clock downspreading (spread-spectrum clocking) by
writing 1/0

enhanced:
Enable/disable enhanced framing

ignore_aux_errors:
Ignore AUX errors when set to 1. Writes to this file take effect
immediately (regardless of whether test mode is active) and affect all
AUX transfers.

ignore_hpd:
Ignore hotplug events (such as cable removals or monitor link
retraining requests) when set to 1. Writes to this file take effect
immediately (regardless of whether test mode is active).

laneX_preemphasis:
Preemphasis from 0 (lowest) to 2 (highest) for lane X

laneX_swing:
Voltage swing from 0 (lowest) to 3 (highest) for lane X

lanes:
Number of lanes to use (1, 2, or 4)

pattern:
Test pattern. May be one of:

video
Use regular video input

symbol-error
Symbol error measurement pattern

prbs7
Output of the PRBS7 (x^7 + x^6 + 1) polynomial

80bit-custom
A custom 80-bit pattern

cp2520
HBR2 compliance eye pattern

tps1
Link training symbol pattern TPS1 (/D10.2/)

tps2
Link training symbol pattern TPS2

tps3
Link training symbol pattern TPS3 (for HBR2)

rate:
Rate in hertz. One of

* 5400000000 (HBR2)
* 2700000000 (HBR)
* 1620000000 (RBR)

You can dump the displayport test settings with the following command::

for prop in /sys/kernel/debug/dri/1/DP-1/test/*; do
printf '%-17s ' ${prop##*/}
if [ ${prop##*/} = custom ]; then
hexdump -C $prop | head -1
else
cat $prop
fi
done

The output could look something like::

active 1
custom 00000000 00 00 00 00 00 00 00 00 00 00 |..........|
downspread 0
enhanced 1
ignore_aux_errors 1
ignore_hpd 1
lane0_preemphasis 0
lane0_swing 3
lane1_preemphasis 0
lane1_swing 3
lanes 2
pattern prbs7
rate 1620000000

The recommended test procedure is to connect the board to a monitor,
configure test mode, activate test mode, and then disconnect the cable
and connect it to your test equipment of choice. For example, one
sequence of commands could be::

echo 1 > /sys/kernel/debug/dri/1/DP-1/test/enhanced
echo tps1 > /sys/kernel/debug/dri/1/DP-1/test/pattern
echo 1620000000 > /sys/kernel/debug/dri/1/DP-1/test/rate
echo 1 > /sys/kernel/debug/dri/1/DP-1/test/ignore_aux_errors
echo 1 > /sys/kernel/debug/dri/1/DP-1/test/ignore_hpd
echo 1 > /sys/kernel/debug/dri/1/DP-1/test/active

at which point the cable could be disconnected from the monitor.

Internals
---------

.. kernel-doc:: drivers/gpu/drm/xlnx/zynqmp_disp.h

.. kernel-doc:: drivers/gpu/drm/xlnx/zynqmp_dpsub.h

.. kernel-doc:: drivers/gpu/drm/xlnx/zynqmp_kms.h

.. kernel-doc:: drivers/gpu/drm/xlnx/zynqmp_disp.c

.. kernel-doc:: drivers/gpu/drm/xlnx/zynqmp_dp.c

.. kernel-doc:: drivers/gpu/drm/xlnx/zynqmp_dpsub.c

.. kernel-doc:: drivers/gpu/drm/xlnx/zynqmp_kms.c
1 change: 1 addition & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -7838,6 +7838,7 @@ L: dri-devel@lists.freedesktop.org
S: Maintained
T: git https://gitlab.freedesktop.org/drm/misc/kernel.git
F: Documentation/devicetree/bindings/display/xlnx/
F: Documentation/gpu/zynqmp.rst
F: drivers/gpu/drm/xlnx/

DRM GPU SCHEDULER
Expand Down
Loading

0 comments on commit 28edaac

Please sign in to comment.