diff --git a/arch/risc-v/src/mpfs/mpfs_coremmc.c b/arch/risc-v/src/mpfs/mpfs_coremmc.c index d8d260d080..b7731f0406 100644 --- a/arch/risc-v/src/mpfs/mpfs_coremmc.c +++ b/arch/risc-v/src/mpfs/mpfs_coremmc.c @@ -654,7 +654,7 @@ static void mpfs_recvfifo(struct mpfs_dev_s *priv) } } - mcinfo("Read all\n"); + mcinfo("Read all\n"); } /**************************************************************************** @@ -818,6 +818,22 @@ static int mpfs_coremmc_wrcomplete_interrupt(int irq, void *context, DEBUGASSERT(priv != NULL); +#ifdef CONFIG_SPINLOCK + spin_lock(&priv->lock); + + /* Check if the write complete event is enabled */ + + if ((priv->waitevents & SDIOWAIT_WRCOMPLETE) == 0) + { + spin_unlock(&priv->lock); + return OK; + } + + spin_unlock(&priv->lock); +#endif + + /* Note: the spin lock must NOT be held when calling mpfs_endwait */ + mpfs_endwait(priv, SDIOWAIT_WRCOMPLETE); return OK; @@ -846,6 +862,22 @@ static int mpfs_coremmc_interrupt(int irq, void *context, void *arg) DEBUGASSERT(priv != NULL); +#ifdef CONFIG_SPINLOCK + spin_lock(&priv->lock); + + /* Check if any of the interrupt sources are even enabled */ + + if (priv->xfrmask == 0 && priv->waitmask == 0 && priv->xfr_blkmask == 0) + { + spin_unlock(&priv->lock); + return OK; + } + + spin_unlock(&priv->lock); +#endif + + /* Note: the spin lock must NOT be held when calling mpfs_endtransfer */ + status = getreg8(MPFS_COREMMC_ISR); if (priv->multiblock) diff --git a/arch/risc-v/src/mpfs/mpfs_emmcsd.c b/arch/risc-v/src/mpfs/mpfs_emmcsd.c index a627fe12ad..86358cf854 100644 --- a/arch/risc-v/src/mpfs/mpfs_emmcsd.c +++ b/arch/risc-v/src/mpfs/mpfs_emmcsd.c @@ -986,6 +986,20 @@ static int mpfs_emmcsd_interrupt(int irq, void *context, void *arg) DEBUGASSERT(priv != NULL); +#ifdef CONFIG_SPINLOCK + spin_lock(&priv->lock); + + /* Check if any of the interrupt sources are even enabled */ + + if (priv->xfrmask == 0 && priv->waitmask == 0 && priv->xfr_blkmask == 0) + { + spin_unlock(&priv->lock); + return OK; + } + + spin_unlock(&priv->lock); +#endif + status = getreg32(MPFS_EMMCSD_SRS12); mcinfo("status: %08" PRIx32 "\n", status);