Other Parts Discussed in Thread: AM3715
Hi ALL,
I met sdio interrupt issue when i trying to port broadcom wifi driver to AM3715 Windows CE 6.0 platform.
After downloading firmware, it seems that SDHC driver can not handle sdio interrupt and then interrupts on SDIO_DATA1 pin was not handled.
I have checked the source code:
//-----------------------------------------------------------------------------
// Enable SDIO Interrupts.
VOID CSDIOControllerBase::EnableSDIOInterrupts()
{
ASSERT( !m_fSDIOInterruptsEnabled );
m_fSDIOInterruptsEnabled = TRUE;
DEBUGMSG(SHC_INTERRUPT_ZONE, (TEXT("CSDHCSlot::EnableSDIOInterrupts\r\n")));
#ifdef ENABLE_RETAIL_OUTPUT
RETAILMSG(1, (TEXT("CSDHCSlot::EnableSDIOInterrupts\r\n")));
#endif
EnterCriticalSection( &m_critSec );
SETREG32(&m_pbRegisters->MMCHS_CON, MMCHS_CON_CTPL);
if (!m_Sdio4BitDisable && (m_sContext.eInterfaceMode == SD_INTERFACE_SD_4BIT))
{
SETREG32(&m_pbRegisters->MMCHS_CON, MMCHS_CON_CLKEXTFREE);
}
// enable exit from smart idle mode on SD/SDIO card interrupt
SETREG32(&m_pbRegisters->MMCHS_ISE, MMCHS_ISE_CIRQ);
// enable SD/SDIO card interrupt
SETREG32(&m_pbRegisters->MMCHS_IE, MMCHS_IE_CIRQ);
m_sContext.eSDHCIntr = SDHC_SDIO_INTR_ENABLED;
LeaveCriticalSection( &m_critSec );
when sdhc driver trys to enable sdio interrupts with instruction:
// enable exit from smart idle mode on SD/SDIO card interrupt
SETREG32(&m_pbRegisters->MMCHS_ISE, MMCHS_ISE_CIRQ);
// enable SD/SDIO card interrupt
SETREG32(&m_pbRegisters->MMCHS_IE, MMCHS_IE_CIRQ);
RETAILMSG(1, "m_pbRegisters->MMCHS_ISE 0x%x\r\n", m_pbRegisters->MMCHS_ISE)
RETAILMSG(1, "m_pbRegisters->MMCHS_IE 0x%x\r\n", m_pbRegisters->MMCHS_IE)
it seems that sdio interrupt is still be masked.
I got the log message:
m_pbRegisters->MMCHS_ISE 0x50d0002
m_pbRegisters->MMCHS_IE 0x50d0002
Bit8 of MMCHS_ISE and MMCHS_IE were not set to 1 so sdio interrupt was masked all the time.
anyone can give some suggestion? thanks a lot