qcaspi_read_register(qca, SPI_REG_WRBUF_SPC_AVA, &available);
 
+       if (available > QCASPI_HW_BUF_LEN) {
+               /* This could only happen by interferences on the SPI line.
+                * So retry later ...
+                */
+               qca->stats.buf_avail_err++;
+               return -1;
+       }
+
        while (qca->txr.skb[qca->txr.head]) {
                pkt_len = qca->txr.skb[qca->txr.head]->len + QCASPI_HW_PKT_LEN;
 
        netdev_dbg(net_dev, "qcaspi_receive: SPI_REG_RDBUF_BYTE_AVA: Value: %08x\n",
                   available);
 
-       if (available == 0) {
+       if (available > QCASPI_HW_BUF_LEN) {
+               /* This could only happen by interferences on the SPI line.
+                * So retry later ...
+                */
+               qca->stats.buf_avail_err++;
+               return -1;
+       } else if (available == 0) {
                netdev_dbg(net_dev, "qcaspi_receive called without any data being available!\n");
                return -1;
        }