AnsweredAssumed Answered

iMX6Q HDMI overflow issue during reboot

Question asked by James Liu on Apr 17, 2016
Latest reply on Apr 18, 2016 by igorpadykov

Dear Sir,

     On a few of our customized iMX6Q boards, when Yocto1.6 system reboot, there will be continous HDMI  overflow interrupt gennerated and reported by the code below, which can't be cleared. the interrupts will block the board to boot into yocto

          mxc_hdmi.c::

static irqreturn_t mxc_hdmi_hotplug(int irq, void *data)
{
struct mxc_hdmi *hdmi = data;
u8 val, intr_stat;
unsigned long flags;

spin_lock_irqsave(&hdmi->irq_lock, flags);

/* Check and clean packet overflow interrupt.*/
if (hdmi_readb(HDMI_IH_FC_STAT2) &
   HDMI_IH_FC_STAT2_OVERFLOW_MASK) {
  mxc_hdmi_clear_overflow(hdmi);

  dev_dbg(&hdmi->pdev->dev, "Overflow interrupt received\n");
  /* clear irq status */
  hdmi_writeb(HDMI_IH_FC_STAT2_OVERFLOW_MASK,
       HDMI_IH_FC_STAT2);
}

I guess the HDMI PHY is now in a messed FSM state. We didn't modify any FSL HDMI driver code and I find the latest Yocto2.0 HDMI driver code is almost same except "Yocto2.0  doesn't initialize MIPI Core clock"

   We must disable the overflow interrupt to make boards reboot sucessfully, so my question is,

1. why overflow interrupt is continously generated during reboot?

2. Is it safe to disable overflow interrupt, any side effect?

3. why the overflow interrupt handle routine is only a workaround? (see code below)

 

/* Workaround to clear the overflow condition */
static void mxc_hdmi_clear_overflow(struct mxc_hdmi *hdmi)
{
int count;
u8 val;

/* TMDS software reset */
hdmi_writeb((u8)~HDMI_MC_SWRSTZ_TMDSSWRST_REQ, HDMI_MC_SWRSTZ);

val = hdmi_readb(HDMI_FC_INVIDCONF);

if (cpu_is_imx6dl(hdmi)) {
   hdmi_writeb(val, HDMI_FC_INVIDCONF);
   return;
}

for (count = 0 ; count < 5 ; count++)
  hdmi_writeb(val, HDMI_FC_INVIDCONF);
}

 

 

 

Thanks a lot!

James

Outcomes