HDMI drive strength Verdin IMX8mp

Hi Toradex team,

We are currently developing an embedded product based on the Verdin iMX8MP module running Linux. The device includes an HDMI output, and during EMC testing, we encountered issues with excessive radiated emissions.

One mitigation strategy that has shown promising results in our EMC chamber—alongside some hardware modifications and a custom HDMI cable—involves reducing the drive strength of the HDMI signals. In our tests, we achieved this by adapting the following registers using devmem2 from Linux:

  • HDMI TX PHY register 23 (address 0x32FDFF5C)
  • HDMI TX PHY register 24 (address 0x32FDFF60)

This approach appears effective, but we would like to understand the recommended or officially supported method for adjusting the drive strength on the Verdin iMX8MP.

Could you please advise on the proper way to configure this?

Kind regards,

Hi, I’m the Toradex AI Assistant.

I might make mistakes. Our support team will step in if needed. If I answered your question, please tick the “Solution” checkbox. For follow-up questions to me, please use @ToradexAI in your post.

Did you like my answer? :+1: :-1:


Hello,

Thank you for sharing details about your development and EMC optimization efforts with the Verdin iMX8M Plus.

The recommended and officially supported way to adjust the drive strength for signals (including HDMI) on the Verdin iMX8MP is through the pad control registers provided by the IOMUXC (I/O Multiplexer Controller), not by direct manipulation of the HDMI PHY registers.

The relevant IOMUXC_SW_PAD_CTL_PAD_x registers allow you to configure pad characteristics such as drive strength (DSE), slew rate, and more. Adjusting the drive strength through these pad registers ensures proper integration with the Linux kernel and device tree, and aligns with NXP’s (and Toradex’s) hardware recommendations.

Key settings:

  • The DSE field in the pad control register:
    • 00x: Drive strength X1 (lowest)
    • 01x: Drive strength X2
    • 10x: Drive strength X4
    • 11x: Drive strength X6 (highest)

Recommended approach:

  1. Identify the HDMI-related pads: Find the relevant pad names associated with the HDMI signals you want to adjust.
  2. Edit the device tree: In your Linux device tree or device tree overlay, set the pad control properties (MX8MP_PAD_xxx__HDMI_x) for the HDMI signals and specify the drive strength using the respective property (look for settings like MX8MP_PAD_CTL_DSE_xx).
  3. Apply and test: Rebuild your device tree, deploy it on the module, and verify the effect during EMC measurements.

References:

Note: Avoid direct manipulation of PHY registers from user space, as this bypasses kernel management and may lead to system instability, unexpected behavior, or upgrade issues.

If you need help identifying the pad names for HDMI lines or integrating these changes into your device tree, just let me know.

Best regards,
Toradex AI Assistant.

Hello @mathijs,

Ideally such configurations would be done via the device tree, but this is not available for the HDMI Tx PHY driver.
The values for these registers are hard-coded to 0x32 and 0x60 in the driver: phy-fsl-samsung-hdmi.c « freescale « phy « drivers - linux-toradex.git - Linux kernel for Apalis, Colibri and Verdin modules
Registers 23 and 24 are the 24th and 25th elements of the lists, respectively. This list starts on the undocumented register 0 for the HDMI Tx PHY.
Please note that this is repeated for all the listed frequencies in samsung_phy_pll_cfg.

A way to have your configuration without the use of devmem would be to modify the driver to include the values you are using for these registers.

Best Regards,
Bruno

Hi @bruno.tx,

thank you for your quick reply. I was able to alter the registers based on your input, thanks!

Kind regards,

Mathijs

1 Like