|
@@ -938,6 +938,7 @@ static irqreturn_t xcan_interrupt(int irq, void *dev_id)
|
|
|
struct net_device *ndev = (struct net_device *)dev_id;
|
|
|
struct xcan_priv *priv = netdev_priv(ndev);
|
|
|
u32 isr, ier;
|
|
|
+ u32 isr_errors;
|
|
|
|
|
|
/* Get the interrupt status from Xilinx CAN */
|
|
|
isr = priv->read_reg(priv, XCAN_ISR_OFFSET);
|
|
@@ -956,11 +957,10 @@ static irqreturn_t xcan_interrupt(int irq, void *dev_id)
|
|
|
xcan_tx_interrupt(ndev, isr);
|
|
|
|
|
|
/* Check for the type of error interrupt and Processing it */
|
|
|
- if (isr & (XCAN_IXR_ERROR_MASK | XCAN_IXR_RXOFLW_MASK |
|
|
|
- XCAN_IXR_BSOFF_MASK | XCAN_IXR_ARBLST_MASK)) {
|
|
|
- priv->write_reg(priv, XCAN_ICR_OFFSET, (XCAN_IXR_ERROR_MASK |
|
|
|
- XCAN_IXR_RXOFLW_MASK | XCAN_IXR_BSOFF_MASK |
|
|
|
- XCAN_IXR_ARBLST_MASK));
|
|
|
+ isr_errors = isr & (XCAN_IXR_ERROR_MASK | XCAN_IXR_RXOFLW_MASK |
|
|
|
+ XCAN_IXR_BSOFF_MASK | XCAN_IXR_ARBLST_MASK);
|
|
|
+ if (isr_errors) {
|
|
|
+ priv->write_reg(priv, XCAN_ICR_OFFSET, isr_errors);
|
|
|
xcan_err_interrupt(ndev, isr);
|
|
|
}
|
|
|
|