> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs-staging.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Display

The IQ-9075 platform features a Qualcomm Adreno Display Processing Unit (DPU) providing hardware-accelerated image processing. The IQ9-EVK supports two simultaneous displays via dual DisplayPort outputs.

## Display Capabilities

| Interface | Capability |
| - | - |
| **DP0** | 3840 × 2160 at 60 fps, 30 bpp |
| **DP1** | 3840 × 2160 at 60 fps, 30 bpp |
| **Concurrent** | DP0 as primary + DP1 as secondary, both at 3840 × 2160 @ 60 fps |

**Supported features:**

* Wayland and Weston with upstream protocol
* Weston compositor with DRM backend
* 2× DisplayPort with SST and MST support

## Architecture

### DPU Hardware

<img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Ubuntu/images/peripheral-interfaces/Display_DPU_architecture.png?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=90ed9d0a996ddec20e7aef42995bb00d" width="616" height="210" data-path="archives/2.1/Ubuntu/images/peripheral-interfaces/Display_DPU_architecture.png" />

<img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Ubuntu/images/peripheral-interfaces/DPU_dataflow_diagram.png?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=2340a47623a7860f70950eb4e5d88d31" width="977" height="368" data-path="archives/2.1/Ubuntu/images/peripheral-interfaces/DPU_dataflow_diagram.png" />

<img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Ubuntu/images/peripheral-interfaces/DPU_HW_architecture_block_diagram.png?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=049ca335cf3d98451e2835f9093cf5a0" width="290" height="401" data-path="archives/2.1/Ubuntu/images/peripheral-interfaces/DPU_HW_architecture_block_diagram.png" />

<img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Ubuntu/images/peripheral-interfaces/DPU_HW_processing_pipeline.png?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=2e91863fe6d1c06579e42aa5c43cce56" width="1518" height="110" data-path="archives/2.1/Ubuntu/images/peripheral-interfaces/DPU_HW_processing_pipeline.png" />

| Component | Function |
| - | - |
| **Bus Interface** | Fetches data from memory |
| **Source Surface Processing** | Reads RGB/YUV surfaces; performs format conversion |
| **Blending** | Blends and mixes source surfaces |
| **Destination Surface Processing** | Converts and adjusts data for panel characteristics |
| **Compression** | Reduces bandwidth by sending compressed display buffers |
| **Display Interface** | Generates timings for connected display peripherals |

### Software Stack

<img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Ubuntu/images/peripheral-interfaces/DPU_SW_architecture_block_diagram.png?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=00180cbed065f28155011868e9512612" width="859" height="719" data-path="archives/2.1/Ubuntu/images/peripheral-interfaces/DPU_SW_architecture_block_diagram.png" />

<img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Ubuntu/images/peripheral-interfaces/Display_sw_stacklayer.png?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=922928f10568fe6cc703b2d548ec2a5f" width="281" height="741" data-path="archives/2.1/Ubuntu/images/peripheral-interfaces/Display_sw_stacklayer.png" />

| Component | Description |
| - | - |
| **Wayland Sink** | Plug-in communicating with Weston to render the display |
| **Weston** | Wayland compositor; handles composition and rendering |
| **DRM Backend** | Manages Adreno DPU hardware resources and composition strategy |
| **libdrm** | Library providing DRM IOCTL APIs |
| **DRM/KMS Framework** | Kernel and userland interface for hardware features |
| **Adreno DPU Driver** | Manages all pixel data paths to panel interfaces |

## DisplayPort and DSI Interfaces

### eDP Interface

The processor has four eDP interfaces. eDP0 and eDP1 are routed to connectors JEDP0 and JEDP1.

<img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Ubuntu/images/peripheral-interfaces/IQ9075_eDP_interface_configuration.png?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=e88fc9bbb1a9e92bb5575b431f1aedb3" width="932" height="552" data-path="archives/2.1/Ubuntu/images/peripheral-interfaces/IQ9075_eDP_interface_configuration.png" />

### DSI Interface

The IQ-9075 supports two 4-lane MIPI-DSI with VESA DSC v1.2. The DSI0 interface uses an analog switch allowing access through both the JDISP LCD connector and the JEXP1 board-to-board expansion connector.

<img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Ubuntu/images/peripheral-interfaces/IQ9075_DSI_interface_configuration.png?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=6f8aeedd4b258bad4ca1e1deffa8b58d" width="931" height="551" data-path="archives/2.1/Ubuntu/images/peripheral-interfaces/IQ9075_DSI_interface_configuration.png" />

## Setup

### Connect DisplayPort

<img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Ubuntu/images/peripheral-interfaces/IQ-9075_displayport_setup.png?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=942c25f6f0eb54d938b0a58a18dccc3e" width="550" height="619" data-path="archives/2.1/Ubuntu/images/peripheral-interfaces/IQ-9075_displayport_setup.png" />

<img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Ubuntu/images/peripheral-interfaces/Dual_display_port_configuration.png?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=ebb0d9c32609d0fad5b0b00f951993c3" width="1001" height="305" data-path="archives/2.1/Ubuntu/images/peripheral-interfaces/Dual_display_port_configuration.png" />

<img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Ubuntu/images/peripheral-interfaces/Displayport_setup_workflow.png?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=73e8e3329b8e4ca4b7f0b6c6a0f935c9" width="1133" height="228" data-path="archives/2.1/Ubuntu/images/peripheral-interfaces/Displayport_setup_workflow.png" />

<img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Ubuntu/images/peripheral-interfaces/Display_setup_verification_flow.png?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=4c60b57ae997991fedfcfb336d1e847c" width="526" height="815" data-path="archives/2.1/Ubuntu/images/peripheral-interfaces/Display_setup_verification_flow.png" />

<Steps>
  <Step title="Connect primary display">
    Connect a DisplayPort cable to the **eDP0** connector.
  </Step>

  <Step title="Connect secondary display (optional)">
    For dual display, connect a second DisplayPort cable to **eDP1**.
  </Step>

  <Step title="Power on">
    Power on the device. Weston launches automatically during boot and displays the flower pattern.

    <img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Ubuntu/images/peripheral-interfaces/hdmi_monitor_Server.png?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=dcb2e5a0ea6c7b24f0172f54741d106a" width="700" height="393" data-path="archives/2.1/Ubuntu/images/peripheral-interfaces/hdmi_monitor_Server.png" />
  </Step>
</Steps>

### SSH Access

Default credentials: **Username:** `ubuntu` / **Password:** `ubuntu`

## Testing and Verification

### Run Weston EGL Client

```bash theme={null}
weston-simple-egl
```

**Expected output:** A rotating triangle on the display at 60 fps.

```
300 frames in 5 seconds: 60.000000 fps
```

Press `Ctrl+C` to terminate.

### GStreamer Video Playback

<img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Ubuntu/images/peripheral-interfaces/Gstreamer_videoplay_pipeline.png?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=0d16d5453759fe5e752200062f14cd37" width="1768" height="70" data-path="archives/2.1/Ubuntu/images/peripheral-interfaces/Gstreamer_videoplay_pipeline.png" />

Ensure video files are at `/etc/media` on the device.

```bash theme={null}
# H.264 playback
gst-launch-1.0 -v filesrc location=/etc/media/video.mp4 ! qtdemux ! queue ! \
  h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! \
  video/x-raw,format=NV12 ! waylandsink

# H.265/HEVC playback
gst-launch-1.0 -v filesrc location=/etc/media/video_hevc.mp4 ! qtdemux ! queue ! \
  h265parse ! v4l2h265dec capture-io-mode=4 output-io-mode=4 ! \
  video/x-raw,format=NV12 ! waylandsink

# With scaling
gst-launch-1.0 -v filesrc location=/etc/media/video.mp4 ! qtdemux ! queue ! \
  h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! \
  video/x-raw,width=1920,height=1080 ! waylandsink
```

**Key pipeline components:**

| Component | Purpose |
| - | - |
| `capture-io-mode=4` | Allocates decoded frames as DMABUF (zero-copy to display) |
| `output-io-mode=4` | Handles encoded bitstream buffers via DMABUF |
| `format=NV12` | NV12 pixel format for hardware-accelerated path |
| `waylandsink` | Renders video to Wayland display |

## Debugging

### Check DisplayPort Status

```bash theme={null}
# Cable status
sudo cat /sys/class/drm/card0-DP-1/status   # eDP0
sudo cat /sys/class/drm/card0-DP-2/status   # eDP1

# Available modes (EDID)
sudo cat /sys/class/drm/card0-DP-1/modes

# Detailed DP info
sudo cat /sys/kernel/debug/dri/0/DP-1/dp_debug
```

### Debug Filesystem

<img src="https://mintcdn.com/qualcomm-staging/blZpKs_b9On5nj-y/archives/2.1/Ubuntu/images/peripheral-interfaces/DPU_debug_filesystem_structure.png?fit=max&auto=format&n=blZpKs_b9On5nj-y&q=85&s=88001967e7ff0d91db384d673f8d1739" width="1768" height="388" data-path="archives/2.1/Ubuntu/images/peripheral-interfaces/DPU_debug_filesystem_structure.png" />

| Command | Purpose |
| - | - |
| `dmesg \| grep -i display` | Display-related kernel messages |
| `dmesg \| grep -i drm` | DRM subsystem messages |
| `cat /sys/kernel/debug/dri/0/state` | Current DRM state |
| `cat /proc/interrupts \| grep mdss` | Display interrupts |

## Troubleshooting

<AccordionGroup>
  <Accordion title="No Display Output (Black Screen)">
    ```bash theme={null}
    cat /sys/class/drm/card0-DP-1/status
    sudo dmesg | grep -i "dp\|display\|drm"
    ```

    * Verify cable connection to eDP0 or eDP1
    * Check display power and input source selection
  </Accordion>

  <Accordion title="Incorrect Resolution">
    ```bash theme={null}
    cat /sys/class/drm/card0-DP-1/modes
    ```

    Verify the display supports the desired resolution.
  </Accordion>

  <Accordion title="Weston Fails to Start">
    ```bash theme={null}
    journalctl -u weston
    ls -l /dev/dri/card0
    ls -l /dev/dri/
    ```

    Manually launch Weston with debug output:

    ```bash theme={null}
    weston --idle-time=0 --continue-without-input --log=/home/ubuntu/weston.log
    ```
  </Accordion>

  <Accordion title="Dual Display Not Working">
    ```bash theme={null}
    cat /sys/class/drm/card0-DP-1/status
    cat /sys/class/drm/card0-DP-2/status
    cat /sys/kernel/debug/dri/0/state
    ```

    * Verify both cables are connected to eDP0 and eDP1
    * Check Weston configuration for multi-display support
  </Accordion>

  <Accordion title="XWayland / Weston Needs Restart">
    ```bash theme={null}
    ps -A | grep weston
    killall weston
    sudo systemctl start weston-autostart
    export XDG_RUNTIME_DIR=/run/user/$(id -u ubuntu)
    export WAYLAND_DISPLAY=wayland-1
    ```
  </Accordion>
</AccordionGroup>

## Resources

| Resource | URL |
| - | - |
| DRM Internals | [https://www.kernel.org/doc/html/v5.4/gpu/drm-internals.html](https://www.kernel.org/doc/html/v5.4/gpu/drm-internals.html) |
| Kernel Mode Setting (KMS) | [https://www.kernel.org/doc/html/v5.4/gpu/drm-kms.html](https://www.kernel.org/doc/html/v5.4/gpu/drm-kms.html) |
| Wayland Protocol | [https://wayland.freedesktop.org/](https://wayland.freedesktop.org/) |
| Weston Compositor | [https://gitlab.freedesktop.org/wayland/weston](https://gitlab.freedesktop.org/wayland/weston) |
| GStreamer Documentation | [https://gstreamer.freedesktop.org/documentation/](https://gstreamer.freedesktop.org/documentation/) |
