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.

Linux/AM4378: eMMC Not Detected in Linux

Part Number: AM4378
Other Parts Discussed in Thread: AM4372

Tool/software: Linux

I have a custom AM4378 board based on the AM437X-SK EVM. There is a Micron eMMC device (MTFC4GACA) connected to the mmc0 interface.

The eMMC is not detected by Linux.

I was able to partition the eMMC using the following commands in u-boot.

=> setenv partitions "uuid_disk=65544ad7-9e53-4e64-b505-b303828e6493;name=rootfs,start=2MiB,size=-,uuid=dfdee69d-f839-4f0b-90ec-334a70567623"
=> setenv uuid_gpt_disk 65544ad7-9e53-4e64-b505-b303828e6493

=> setenv uuid_gpt_rootfs dfdee69d-f839-4f0b-90ec-334a70567623
=> gpt write mmc 0 ${partitions}

and u-boot now reports the following info:

=> mmc info
Device: OMAP SD/MMC
Manufacturer ID: 13
OEM: 14e
Name: Q2J54
Tran Speed: 52000000
Rd Block Len: 512
MMC version 5.0
High Capacity: Yes
Capacity: 3.6 GiB
Bus Width: 4-bit
Erase Group Size: 512 KiB
HC WP Group Size: 8 MiB
User Capacity: 3.6 GiB WRREL
Boot Capacity: 16 MiB ENH

=> mmc part

Partition Map for MMC device 0 -- Partition Type: EFI

Part Start LBA End LBA Name
Attributes
Type GUID
Partition GUID
1 0x00001000 0x0072bfde "rootfs"
attrs: 0x0000000000000000
type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
guid: 9de6dedf-39f8-0b4f-90ec-334a70567623

RPMB Capacity: 512 KiB ENH

Linux SD/MMC configuration taken from http://processors.wiki.ti.com/index.php/Linux_Core_MMC/SD_User%27s_Guide and I've enabled "MMC debugging".

Linux boot log, the contents of /var/log/messages and the emmc portion of the schematic are below.

1401.LinuxBootMessages.txt

0743.LinuxMessages.txt

3566.AM437X_eMMC.pdf

  • Hi Daryl,

    Unlike u-boot, the kernel MMC driver requires DMA to work. You haven't provided the DMA channels to mmc1 node in your device tree. What about mmc power supply? You haven't provided that either.

    cheers,
    -roger
  • Thanks Roger!

    I didn't include it in my post, but DMA is configured in am4372.dtsi. Does this look correct?

    mmc1: mmc@48060000 {
    compatible = "ti,omap4-hsmmc";
    reg = <0x48060000 0x1000>;
    ti,hwmods = "mmc1";
    /*ti,dual-volt;*/
    ti,needs-special-reset;
    dmas = <&edma 24 0>,
    <&edma 25 0>;
    dma-names = "tx", "rx";
    interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
    status = "disabled";
    };

    You can see that I've commented out the dual-volt option, which I did because I am running the core and I/O of the emmc off of the main 3.3V supply so it is not possible to switch the I/O voltage to 1.8V. I've tested it with dual-volt enabled as well.

    I've tested with the vmmc-supply = <&dcdc4>; line enabled and disabled. The emmc isn't detected in either case.

    Can you see any indication of where it is failing?

    I noticed that u-boot reports a Bus-Width of 4-bit in the mmc info output. Is this significant? I've tested with my device tree set to 4 and 8 bit bus-widths and neither worked.