AnsweredAssumed Answered

Kernel support for SD Card over SPI on iMX7?

Question asked by Adrian Sapio on Mar 1, 2018
Latest reply on Sep 7, 2018 by igorpadykov

I'm trying to add an SD card over SPI (ecspi2) on the iMX7 Solo. I would use an SDIO port but its not an option on my hardware (custom board). I'm using Yocto and Linux 4.1.

 

I have added the following to my .dts, but I don't see any new block device show up in lsblk or any new partition in /proc/partitions, or any prints related to this show up in /var/log/messages.

 

&ecspi2 {
   status = "okay";
   sdcard: mmc-slot@0 {
      #address-cells = <1>;
      #size-cells = <1>;
      compatible = "mmc-spi-slot";
      reg = <0>;
      spi-max-frequency = <5000000>;
      voltage-ranges = <3200 3400>;
      disable-wp;
      disable-cd;
   };
};

 

pinctrl_ecspi2: ecspi2grp {
   fsl,pins = <
      MX7D_PAD_ECSPI2_MISO__ECSPI2_MISO 0x00000014
      MX7D_PAD_ECSPI2_MOSI__ECSPI2_MOSI 0x00000014
      MX7D_PAD_ECSPI2_SCLK__ECSPI2_SCLK 0x00000014
      MX7D_PAD_ECSPI2_SS0__ECSPI2_SS0 0x00000014
   >;
};

 

My theory now is that the MMC_SPI kernel driver (which has "mmc-spi-slot" as the compatible string) is not being compiled into my kernel. I have found other posts where people used this driver for this purpose (sd card over spi on iMX6 was the closest case I could find) :


https://github.com/torvalds/linux/blob/master/drivers/mmc/host/mmc_spi.c

 

TargetMachine$ cat /lib/modules/$(uname -r)/modules.builtin | grep mmc
kernel/drivers/mmc/card/mmc_block.ko
kernel/drivers/mmc/core/mmc_core.ko
kernel/drivers/mmc/host/sdhci.ko
kernel/drivers/mmc/host/sdhci-pltfm.ko
kernel/drivers/mmc/host/sdhci-esdhc-imx.ko

 

TargetMachine$ cat /lib/modules/$(uname -r)/modules.builtin | grep spi
kernel/drivers/base/regmap/regmap-spi.ko
kernel/drivers/mfd/mc13xxx-spi.ko
kernel/drivers/mtd/spi-nor/spi-nor.ko
kernel/drivers/mtd/spi-nor/fsl-quadspi.ko
kernel/drivers/spi/spi-bitbang.ko
kernel/drivers/spi/spi-gpio.ko
kernel/drivers/spi/spi-imx.ko


I searched around the kernel menuconfig UI for relevant kernel components to add. I already had the following config entries set:

 

HostMachine$ cat .config | grep MMC

# Supported MMC/SDIO adapters
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_CLKGATE is not set
# MMC/SD/SDIO Card Drivers
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_MMC_BLOCK_BOUNCE=y
# CONFIG_MMC_TEST is not set
# MMC/SD/SDIO Host Controller Drivers
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_IO_ACCESSORS=y
CONFIG_MMC_SDHCI_PLTFM=y
# CONFIG_MMC_SDHCI_OF_ARASAN is not set
CONFIG_MMC_SDHCI_ESDHC_IMX=y
# CONFIG_MMC_SDHCI_F_SDH30 is not set
# CONFIG_MMC_MXC is not set
# CONFIG_MMC_DW is not set
# CONFIG_MMC_VUB300 is not set
# CONFIG_MMC_USHC is not set
# CONFIG_MMC_USDHI6ROL0 is not set

 

When I search for "MMC" in the menuconfig UI, I see an additional entry that is not in my .config file:

Symbol: MMC_SPI [=n]
Type : tristate
Prompt: MMC/SD/SDIO over SPI
Location:
-> Device Drivers
(1) -> MMC/SD/SDIO card support (MMC [=y])
Depends on: MMC [=y] && SPI_MASTER [=y] && !HIGHMEM [=y] && HAS_DMA [=y]
Defined at drivers/mmc/host/Kconfig:472
Selects: CRC7 [=m] && CRC_ITU_T [=m]

 

However, I dont see any way in the menu to enable the MMC_SPI symbol, or to get CONFIG_MMC_SPI to showup in my .config file. 

https://github.com/torvalds/linux/blob/master/drivers/mmc/host/Kconfig 

 

Can you help me get past this point? Do you agree that I need to get the mmc_spi driver compiled in? If so, how can I get it to compile in? What else might be the problem and how do I troubleshoot ? 

Outcomes