Infinite loop on SPIE_RXCNT occurred.
while (SPIE_RXCNT(events) < min(4, mspi->len)) {
        cpu_relax();
        events = mpc8xxx_spi_read_reg(®_base->event);
}
We met a soft lockup at fsl_espi_cpu_irq() because of this.
Fix it by using spin_event_timeout() so that fsl_espi_cpu_irq()
can break loop with timeouts dmesg.
Signed-off-by: Nobuteru Hayashi <hayashi.nbb@ncos.nec.co.jp>
Signed-off-by: Mark Brown <broonie@kernel.org>
        if (events & SPIE_NE) {
                u32 rx_data, tmp;
                u8 rx_data_8;
+               int ret;
 
                /* Spin until RX is done */
-               while (SPIE_RXCNT(events) < min(4, mspi->len)) {
-                       cpu_relax();
-                       events = mpc8xxx_spi_read_reg(®_base->event);
+               if (SPIE_RXCNT(events) < min(4, mspi->len)) {
+                       ret = spin_event_timeout(
+                               !(SPIE_RXCNT(events =
+                               mpc8xxx_spi_read_reg(®_base->event)) <
+                                               min(4, mspi->len)),
+                                               10000, 0); /* 10 msec */
+                       if (!ret)
+                               dev_err(mspi->dev,
+                                        "tired waiting for SPIE_RXCNT\n");
                }
 
                if (mspi->len >= 4) {