> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.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-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/Display_DPU_architecture.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=748d4d7ed8acd5c328284febcd74fa69" width="616" height="210" data-path="Ubuntu/images/peripheral-interfaces/Display_DPU_architecture.png" />

<img src="https://mintcdn.com/qualcomm-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/DPU_dataflow_diagram.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=33a7853f3637dc2d5d81083df7f7569b" width="977" height="368" data-path="Ubuntu/images/peripheral-interfaces/DPU_dataflow_diagram.png" />

<img src="https://mintcdn.com/qualcomm-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/DPU_HW_architecture_block_diagram.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=458de469d7427525799074da83baa209" width="290" height="401" data-path="Ubuntu/images/peripheral-interfaces/DPU_HW_architecture_block_diagram.png" />

<img src="https://mintcdn.com/qualcomm-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/DPU_HW_processing_pipeline.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=dbfd050df2c90d1b74586c18b29f482a" width="1518" height="110" data-path="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-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/DPU_SW_architecture_block_diagram.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=fa9b30bf23c9674d90676b61cef9b300" width="859" height="719" data-path="Ubuntu/images/peripheral-interfaces/DPU_SW_architecture_block_diagram.png" />

<img src="https://mintcdn.com/qualcomm-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/Display_sw_stacklayer.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=a0b86a95822461a3b69247c0f112b897" width="281" height="741" data-path="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-prod/P0rmO3AZfXx7cgqQ/Ubuntu/images/peripheral-interfaces/IQ9075_eDP_interface_configuration.png?fit=max&auto=format&n=P0rmO3AZfXx7cgqQ&q=85&s=6c2880b800251ebf1ffa5c401825cc35" width="932" height="552" data-path="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-prod/P0rmO3AZfXx7cgqQ/Ubuntu/images/peripheral-interfaces/IQ9075_DSI_interface_configuration.png?fit=max&auto=format&n=P0rmO3AZfXx7cgqQ&q=85&s=87652524f0b1e03a24ac4d26cac40a75" width="931" height="551" data-path="Ubuntu/images/peripheral-interfaces/IQ9075_DSI_interface_configuration.png" />

## Setup

### Connect DisplayPort

<img src="https://mintcdn.com/qualcomm-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/IQ-9075_displayport_setup.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=c08c94f5133efb653bac3600134140ca" width="550" height="619" data-path="Ubuntu/images/peripheral-interfaces/IQ-9075_displayport_setup.png" />

<img src="https://mintcdn.com/qualcomm-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/Dual_display_port_configuration.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=9e4f72ce3b4cda2b06dce3adf8191f48" width="1001" height="305" data-path="Ubuntu/images/peripheral-interfaces/Dual_display_port_configuration.png" />

<img src="https://mintcdn.com/qualcomm-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/Displayport_setup_workflow.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=3e8ee2ac6945835394788a8947f197dc" width="1133" height="228" data-path="Ubuntu/images/peripheral-interfaces/Displayport_setup_workflow.png" />

<img src="https://mintcdn.com/qualcomm-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/Display_setup_verification_flow.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=ca533d3786d2ab12f2c4022d9b8ef01c" width="526" height="815" data-path="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-prod/P0rmO3AZfXx7cgqQ/Ubuntu/images/peripheral-interfaces/hdmi_monitor_Server.png?fit=max&auto=format&n=P0rmO3AZfXx7cgqQ&q=85&s=f708db6aad4b7a89eccf2befd44abd99" width="700" height="393" data-path="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-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/Gstreamer_videoplay_pipeline.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=030027dda7353b89b17aa47d5df43782" width="1768" height="70" data-path="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-prod/tRWO8v_Df_ujnDuD/Ubuntu/images/peripheral-interfaces/DPU_debug_filesystem_structure.png?fit=max&auto=format&n=tRWO8v_Df_ujnDuD&q=85&s=4f897ba03ef4f3b5a9be7427a7c2927f" width="1768" height="388" data-path="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/)                       |
