This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM3715 Windows CE sdio interrupt issue

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