summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xdrivers/mxc/vpu-malone/Malone_Firmware/DecKLib/Control/DecKernelLibHWIsr.c65
1 files changed, 56 insertions, 9 deletions
diff --git a/drivers/mxc/vpu-malone/Malone_Firmware/DecKLib/Control/DecKernelLibHWIsr.c b/drivers/mxc/vpu-malone/Malone_Firmware/DecKLib/Control/DecKernelLibHWIsr.c
index efb356fef7a1..246dd08636c5 100755
--- a/drivers/mxc/vpu-malone/Malone_Firmware/DecKLib/Control/DecKernelLibHWIsr.c
+++ b/drivers/mxc/vpu-malone/Malone_Firmware/DecKLib/Control/DecKernelLibHWIsr.c
@@ -43,7 +43,6 @@ extern DEC_KERNEL_LIB gDecKernelLib;
// Global Macros
/////////////////////////////////////////////////////////////////////////////////
-
/////////////////////////////////////////////////////////////////////////////////
// Private Prototypes
/////////////////////////////////////////////////////////////////////////////////
@@ -89,6 +88,7 @@ MEDIAIP_IRQ_RETCODE mvd_kernel_hw_primary_isr ( u_int32 irq_val )
u_int32 uIrqTarget0, uIrqTarget1;
#endif
u_int32 uForceFIQ = 0, uForceDFEFIQ = 0;
+ u_int32 uHEVCActive;
/* Future Proof... */
/* If we have two levels of interrupt or we process interrupts in thread context */
@@ -119,13 +119,38 @@ MEDIAIP_IRQ_RETCODE mvd_kernel_hw_primary_isr ( u_int32 irq_val )
#endif
mvd_kernel_hw_set_focus ( uActMaloneID, &pgMVDKernelHw );
+
+ /* work out if HEVC active, as if not we don't care about irq_status3 DBE*/
+ MVD_REG_READ( pgMVDKernelHw, DECLIB_DBG_REG_CTX, pgMVDKernelHw->ctx_regp->ctx_status, uHEVCActive );
+
+ if(uHEVCActive&0x400)
+ uHEVCActive = 1;
+ else
+ uHEVCActive = 0;
+
+
+
+#if 1
+ MVD_REG_READ( pgMVDKernelHw, DECLIB_DBG_REG_SIF, pgMVDKernelHw->sif_regp->msd_data0_reg, uForceFIQ );
+ MVD_REG_READ( pgMVDKernelHw, DECLIB_DBG_REG_SIF, pgMVDKernelHw->sif_regp->msd_data1_reg, uForceDFEFIQ );
+
+ if ( uForceFIQ )
+ {
+ MVD_REG_WRITE( pgMVDKernelHw, DECLIB_DBG_REG_SIF, pgMVDKernelHw->sif_regp->msd_data0_reg, 0 );
+ }
+ if ( uForceDFEFIQ )
+ {
+ MVD_REG_WRITE( pgMVDKernelHw, DECLIB_DBG_REG_SIF, pgMVDKernelHw->sif_regp->msd_data1_reg, 0 );
+ }
+#else
MVD_REG_READ( pgMVDKernelHw, DECLIB_DBG_REG_SIF, pgMVDKernelHw->sif_regp->msd_data0_reg, uData );
MVD_REG_WRITE( pgMVDKernelHw, DECLIB_DBG_REG_SIF, pgMVDKernelHw->sif_regp->msd_data0_reg, 0 );
uForceFIQ = ( uData & 0x1 ) ? 1 : 0;
uForceDFEFIQ = ( uData & 0x2 ) ? 1 : 0;
+#endif
if ( uActMaloneID != MALONE_SW )
{
@@ -250,17 +275,38 @@ MEDIAIP_IRQ_RETCODE mvd_kernel_hw_primary_isr ( u_int32 irq_val )
}
if ( sif_irq_status[0x2] &
- ( MSD_SIF_INTR3_DBE0_DONE_BIT | MSD_SIF_INTR3_DBE1_DONE_BIT | MSD_SIF_INTR3_DBE0_SLC_DONE_BIT | MSD_SIF_INTR3_DBE1_SLC_DONE_BIT )
+ ( MSD_SIF_INTR3_DBE0_DONE_BIT | MSD_SIF_INTR3_DBE1_DONE_BIT )
)
{
u_int32 uMask = ( MSD_SIF_INTR3_DBE0_DONE_BIT |
- MSD_SIF_INTR3_DBE1_DONE_BIT |
- MSD_SIF_INTR3_DBE0_SLC_DONE_BIT |
- MSD_SIF_INTR3_DBE1_SLC_DONE_BIT
- );
+ MSD_SIF_INTR3_DBE1_DONE_BIT );
- MVD_REG_WRITE( pgMVDKernelHw, 0x0 /*DECLIB_DBG_REG_SIF*/, pgMVDKernelHw->sif_regp->intr3_status, sif_irq_status[0x2] & uMask );
- }
+ if (( sif_irq_status[0x0] & MSD_SIF_INTR_IMAGE_DONE_BIT )||(uHEVCActive==0))
+ {
+ MVD_REG_WRITE( pgMVDKernelHw, 0x0 /*DECLIB_DBG_REG_SIF*/, pgMVDKernelHw->sif_regp->intr3_status, sif_irq_status[0x2] & uMask );
+ }
+ else
+ {
+ sif_irq_status[0x2] &= ~uMask;
+ }
+ }
+
+ if ( sif_irq_status[0x2] &
+ ( MSD_SIF_INTR3_DBE0_SLC_DONE_BIT | MSD_SIF_INTR3_DBE1_SLC_DONE_BIT )
+ )
+ {
+ u_int32 uMask = ( MSD_SIF_INTR3_DBE0_SLC_DONE_BIT |
+ MSD_SIF_INTR3_DBE1_SLC_DONE_BIT );
+
+ if (( sif_irq_status[0x0] & MSD_SIF_INTR_SLICE_DONE_BIT )|| (uHEVCActive==0))
+ {
+ MVD_REG_WRITE( pgMVDKernelHw, 0x0 /*DECLIB_DBG_REG_SIF*/, pgMVDKernelHw->sif_regp->intr3_status, sif_irq_status[0x2] & uMask );
+ }
+ else
+ {
+ sif_irq_status[0x2] &= ~uMask;
+ }
+ }
}
else /* We wish to process a command without accessing HW */
{
@@ -285,7 +331,7 @@ MEDIAIP_IRQ_RETCODE mvd_kernel_hw_primary_isr ( u_int32 irq_val )
sif_irq_status[0x2],
uForceFIQ
);
-
+
/* Only pass events not serviced inline in this isr */
sif_irq_status[0x0] &= ( MSD_SIF_INTR_IMAGE_DONE_BIT | MSD_SIF_INTR_SLICE_DONE_BIT | MSD_SIF_INTR_SCODE_FOUND_BIT | MSD_SIF_INTR_FORCE_ENTRY_BIT | MSD_SIF_INTR_BSDMA_BIT );
@@ -464,4 +510,5 @@ void mvd_kernel_hw_isr_event ( u_int32 uMaloneIdx,
gDecKernelLib.pfCallback[uMaloneIdx] ( &sData );
}
+
/* End of file */