Marvell 8686 in SDIO over SPI mode?

Mark Litwack mlitwack at
Wed Jun 10 09:19:43 EDT 2009

On Wed, 10 Jun 2009 11:16:26 +0200
Daniel Mack <daniel at> wrote:
> On Tue, Jun 09, 2009 at 11:04:10PM -0400, Mark Litwack
> wrote:
> > Can anyone confirm if the Marvell 8686 works in SDIO
> > over SPI mode?
> Not quite sure what you mean here. SPI and SDIO are
> totally different hardware protocols, and even though the
> chip is available in both variants, I can't say what
> "SDIO over SPI mode" should refer to?

I'm referring to the SDIO Simplified Spec 2.00, section 2.2.1:

  2.2 SDIO Card modes

  There are 3 signaling modes defined for SD memory cards that
  also apply to SDIO Card:

  2.2.1 SPI (Card mandatory support)

  The SPI bus topology is defined in section 3.5.2 and the
  protocol is defined in sections 3.6.2 and 7 of the SD
  Physical Specification Version 2.00. In this mode pin 8,
  which is undefined for memory, is used as the interrupt
  pin. All other pins and signaling protocols are identical to
  the SD Physical Specification.

  2.2.2 1-bit SD Data Transfer Mode (Card Mandatory Support)

  2.2.3 4-bit SD Data Transfer Mode (Mandatory for High-Speed
        Cards, Optional for Low-Speed)

There are numerous other sections in the spec that describe
SPI.  The SD Card Physical Spec 2.00 has chapter 7 dedicated
to this mode of operation.

Here's the pinout:

In short, it's using a connection from an SPI master (DI,
DO, CLK, CS, plus an added IRQ) to access SDIO functions.
But it's not completely transparent from regular SDIO
because there are a few differences in packet format.  The
mmc_spi driver seems to handle the differences in the SPI

Specific to the Marvell 8686, there is a pin (SDIO_SPI_SEL)
which selects SDIO or GSPI mode.  I already have GSPI mode

I'm trying to get SDIO/SPI mode to work as per the SDIO
spec.  It should work since this mode is mandatory.

The 8686 module is recognized properly and the
libertas/if_sdio driver proceeds to set up the module via
mmc_spi.  But once the helper is loaded, the helper only
requests 16 bytes to be loaded at a time (as appears in
IF_SDIO_RD_BASE+0 and IF_SDIO_RD_BASE+1).  I don't think 16
is right.  In the end the main firmware fails to boot.

I've verified the exchange with the module with a logic
analyzer, so I don't think it's a controller issue.

So before I get into a deep debugging exchange, I was asking
if I have the right firmware.  Given that there is different
firmware for GSPI, I would not be a surprised if I needed
something different for SDIO/SPI versus regular SDIO.



More information about the libertas-dev mailing list