AnsweredAssumed Answered

[iMX6qdl]: how to reinitialize iomux/pad registers again after resume

Question asked by PINTU KUMAR on Nov 19, 2019
Latest reply on Nov 20, 2019 by igorpadykov

The specified item was not found.

imx6: i2c_transfer timeout issue after resume

[i.MX6] Suspend/resume implementation for dw_hdmi-imx.c

Fabio Fabio

i.MX Processors

display controller subsystem hdmi lvds mipi dsi

linux bsp

hibernation

i.mx6 ipu

 

Hi,

I need some help in reconfiguring iomux/pad register content after system resume from hibernation.

Firstly, here are few details:

Device: custom i.MX6DL board with LCD and HDMI connected

Linux Kernel: custom 4.9+ kernel version with DRM support.

Display: Wayland 3.0 / Weston

Distribution: custom Ubuntu 16

 

We have a working imx6 board with Linux kernel 4.9 running on it with 2 parallel display (LCD + HDMI).

I am working on it to support custom hibernation feature on it.

The basic feature is working fine (after converting many imx-drm drivers a modules) and LCD is working after resume.

But HDMI display is remaining blank after resume (this issue was already logged in many tickets earlier as mentioned above).

After several debugging session, now I found the root cause.

1) First I got i2c-timeout issue, which I could fix after re-configuring the iomux setting for i2c.

2) Now I am getting vblank timeout issue (for crtc 1, hdmi case). Note: LCD is working fine.

For (2), I found that ipu_irq_handler is not getting called for HDMI. That means interrupted are stopped coming after resume.

This is the handler: in: drivers/gpu/drm/imx-ipuv3-crtc.c

static irqreturn_t ipu_irq_handler(int irq, void *dev_id)
{
struct ipu_crtc *ipu_crtc = dev_id;

pr_info("%s: called\n", __func__);
imx_drm_handle_vblank(ipu_crtc->imx_crtc);

return IRQ_HANDLED;
}

 

The similar issue was there for i2c case, which I fixed by restoring iomuxc registers during resume path.

So, I suspect in this case also IPU-hdmi related iomuxc registers needs to be restored.

So, for this case, can you help me which register content needs to be restored so that ipu handler will be called?

 

a) How do I verify which iomux is lost after resume ?
b) How to dump the iomux/pad register content ?
c) Where can I get the iomux register details (I have the imx6
reference manual with me).
d)  how to save and restore the IOMUX data with suspend and resume?

 

If you have any suggestion, please help!

 

Regards,

Pintu

Outcomes