#define     MVPP2_ISR_ENABLE_INTERRUPT(mask)   ((mask) & 0xffff)
 #define     MVPP2_ISR_DISABLE_INTERRUPT(mask)  (((mask) << 16) & 0xffff0000)
 #define MVPP2_ISR_RX_TX_CAUSE_REG(port)                (0x5480 + 4 * (port))
-#define     MVPP2_CAUSE_RXQ_OCCUP_DESC_ALL_MASK        0xffff
+#define     MVPP2_CAUSE_RXQ_OCCUP_DESC_ALL_MASK(version) \
+                                       ((version) == MVPP21 ? 0xffff : 0xff)
 #define     MVPP2_CAUSE_TXQ_OCCUP_DESC_ALL_MASK        0xff0000
 #define     MVPP2_CAUSE_TXQ_OCCUP_DESC_ALL_OFFSET      16
 #define     MVPP2_CAUSE_RX_FIFO_OVERRUN_MASK   BIT(24)
 
        u32 val;
 
        val = MVPP2_CAUSE_MISC_SUM_MASK |
-               MVPP2_CAUSE_RXQ_OCCUP_DESC_ALL_MASK;
+               MVPP2_CAUSE_RXQ_OCCUP_DESC_ALL_MASK(port->priv->hw_version);
        if (port->has_tx_irqs)
                val |= MVPP2_CAUSE_TXQ_OCCUP_DESC_ALL_MASK;
 
        if (mask)
                val = 0;
        else
-               val = MVPP2_CAUSE_RXQ_OCCUP_DESC_ALL_MASK;
+               val = MVPP2_CAUSE_RXQ_OCCUP_DESC_ALL_MASK(MVPP22);
 
        for (i = 0; i < port->nqvecs; i++) {
                struct mvpp2_queue_vector *v = port->qvecs + i;
        }
 
        /* Process RX packets */
-       cause_rx = cause_rx_tx & MVPP2_CAUSE_RXQ_OCCUP_DESC_ALL_MASK;
+       cause_rx = cause_rx_tx &
+                  MVPP2_CAUSE_RXQ_OCCUP_DESC_ALL_MASK(port->priv->hw_version);
        cause_rx <<= qv->first_rxq;
        cause_rx |= qv->pending_cause_rx;
        while (cause_rx && budget > 0) {