From db75f68f1f90d639fb061dfa2e46c6318e38a6d7 Mon Sep 17 00:00:00 2001 From: Andrei-Liviu Simion Date: Thu, 12 Mar 2015 14:56:17 -0700 Subject: [PATCH] dp: rx: Capture interrupt status from INTERRUPT_CAUSE bits 8 to 31. Previously, INTERRUPT_CAUSE bits 8 to 31 were being lost due to the variables assigned having type u8. This fix now uses masking on the interrupts as the condition to run an interrupt handler rather than assigning the mask result to a new variable and using the variable as a boolean condition. Signed-off-by: Andrei-Liviu Simion --- .../drivers/dp/src/xdp_intr.c | 49 ++++++------------- 1 file changed, 15 insertions(+), 34 deletions(-) diff --git a/XilinxProcessorIPLib/drivers/dp/src/xdp_intr.c b/XilinxProcessorIPLib/drivers/dp/src/xdp_intr.c index 27ad230c..149a18cc 100644 --- a/XilinxProcessorIPLib/drivers/dp/src/xdp_intr.c +++ b/XilinxProcessorIPLib/drivers/dp/src/xdp_intr.c @@ -678,53 +678,34 @@ static void XDp_TxInterruptHandler(XDp *InstancePtr) static void XDp_RxInterruptHandler(XDp *InstancePtr) { u32 IntrStatus; - u8 IntrVmChange, IntrPowerState, IntrNoVideo, IntrVBlank, - IntrTrainingLost, IntrVideo, IntrInfoPkt, IntrExtPkt, - IntrTrainingDone, IntrBwChange, IntrTp1, IntrTp2, IntrTp3; - /* Determine what kind of interrupt(s) occurred. - * Note: XDP_RX_INTERRUPT_CAUSE is an RC (read-clear) register. */ + /* Determine what kind of interrupts have occurred. + * Note: XDP_RX_INTERRUPT_CAUSE is a RC (read-clear) register. */ IntrStatus = XDp_ReadReg(InstancePtr->Config.BaseAddr, XDP_RX_INTERRUPT_CAUSE); - IntrVmChange = (IntrStatus & XDP_RX_INTERRUPT_CAUSE_VM_CHANGE_MASK); - IntrPowerState = (IntrStatus & XDP_RX_INTERRUPT_CAUSE_POWER_STATE_MASK); - IntrNoVideo = (IntrStatus & XDP_RX_INTERRUPT_CAUSE_NO_VIDEO_MASK); - IntrVBlank = (IntrStatus & XDP_RX_INTERRUPT_CAUSE_VBLANK_MASK); - IntrTrainingLost = (IntrStatus & - XDP_RX_INTERRUPT_CAUSE_TRAINING_LOST_MASK); - IntrVideo = (IntrStatus & XDP_RX_INTERRUPT_CAUSE_VIDEO_MASK); - - IntrInfoPkt = (IntrStatus & XDP_RX_INTERRUPT_CAUSE_INFO_PKT_MASK); - IntrExtPkt = (IntrStatus & XDP_RX_INTERRUPT_CAUSE_EXT_PKT_MASK); - IntrTrainingDone = (IntrStatus & - XDP_RX_INTERRUPT_CAUSE_TRAINING_DONE_MASK); - IntrBwChange = (IntrStatus & XDP_RX_INTERRUPT_CAUSE_BW_CHANGE_MASK); - IntrTp1 = (IntrStatus & XDP_RX_INTERRUPT_CAUSE_TP1_MASK); - IntrTp2 = (IntrStatus & XDP_RX_INTERRUPT_CAUSE_TP2_MASK); - IntrTp3 = (IntrStatus & XDP_RX_INTERRUPT_CAUSE_TP3_MASK); /* Training pattern 1 has started. */ - if (IntrTp1) { + if (IntrStatus & XDP_RX_INTERRUPT_CAUSE_TP1_MASK) { InstancePtr->RxInstance.IntrTp1Handler( InstancePtr->RxInstance.IntrTp1CallbackRef); } /* Training pattern 2 has started. */ - if (IntrTp2) { + if (IntrStatus & XDP_RX_INTERRUPT_CAUSE_TP2_MASK) { InstancePtr->RxInstance.IntrTp2Handler( InstancePtr->RxInstance.IntrTp2CallbackRef); } /* Training pattern 3 has started. */ - if (IntrTp3) { + if (IntrStatus & XDP_RX_INTERRUPT_CAUSE_TP3_MASK) { InstancePtr->RxInstance.IntrTp3Handler( InstancePtr->RxInstance.IntrTp3CallbackRef); } /* Training lost - the link has been lost. */ - if (IntrTrainingLost) { + if (IntrStatus & XDP_RX_INTERRUPT_CAUSE_TRAINING_LOST_MASK) { InstancePtr->RxInstance.IntrTrainingLostHandler( InstancePtr->RxInstance.IntrTrainingLostCallbackRef); } /* The link has been trained. */ - else if (IntrTrainingDone) { + else if (IntrStatus & XDP_RX_INTERRUPT_CAUSE_TRAINING_DONE_MASK) { InstancePtr->RxInstance.IntrTrainingDoneHandler( InstancePtr->RxInstance.IntrTrainingDoneCallbackRef); } @@ -733,47 +714,47 @@ static void XDp_RxInterruptHandler(XDp *InstancePtr) * link as indicated by the main stream attributes (MSA) fields. The * horizontal and vertical resolution parameters are monitored for * changes. */ - if (IntrVmChange) { + if (IntrStatus & XDP_RX_INTERRUPT_CAUSE_VM_CHANGE_MASK) { InstancePtr->RxInstance.IntrVmChangeHandler( InstancePtr->RxInstance.IntrVmChangeCallbackRef); } /* The VerticalBlanking_Flag in the VB-ID field of the received stream * indicates the start of the vertical blanking interval. */ - if (IntrVBlank) { + if (IntrStatus & XDP_RX_INTERRUPT_CAUSE_VBLANK_MASK) { InstancePtr->RxInstance.IntrVBlankHandler( InstancePtr->RxInstance.IntrVBlankCallbackRef); } /* The receiver has detected the no-video flags in the VB-ID field after * active video has been received. */ - if (IntrNoVideo) { + if (IntrStatus & XDP_RX_INTERRUPT_CAUSE_NO_VIDEO_MASK) { InstancePtr->RxInstance.IntrNoVideoHandler( InstancePtr->RxInstance.IntrNoVideoCallbackRef); } /* A valid video frame is detected on the main link. */ - else if (IntrVideo) { + else if (IntrStatus & XDP_RX_INTERRUPT_CAUSE_VIDEO_MASK) { InstancePtr->RxInstance.IntrVideoHandler( InstancePtr->RxInstance.IntrVideoCallbackRef); } /* The transmitter has requested a change in the current power state of * the receiver core. */ - if (IntrPowerState) { + if (IntrStatus & XDP_RX_INTERRUPT_CAUSE_POWER_STATE_MASK) { InstancePtr->RxInstance.IntrPowerStateHandler( InstancePtr->RxInstance.IntrPowerStateCallbackRef); } /* A change in the bandwidth has been detected. */ - if (IntrBwChange) { + if (IntrStatus & XDP_RX_INTERRUPT_CAUSE_BW_CHANGE_MASK) { InstancePtr->RxInstance.IntrBwChangeHandler( InstancePtr->RxInstance.IntrBwChangeCallbackRef); } /* An audio info packet has been received. */ - if (IntrInfoPkt) { + if (IntrStatus & XDP_RX_INTERRUPT_CAUSE_INFO_PKT_MASK) { InstancePtr->RxInstance.IntrInfoPktHandler( InstancePtr->RxInstance.IntrInfoPktCallbackRef); } /* An audio extension packet has been received. */ - if (IntrExtPkt) { + if (IntrStatus & XDP_RX_INTERRUPT_CAUSE_EXT_PKT_MASK) { InstancePtr->RxInstance.IntrExtPktHandler( InstancePtr->RxInstance.IntrExtPktCallbackRef); }