.. SPDX-License-Identifier: GPL-2.0+:

mmc command
============

Synopsis
--------

::

    mmc info
    mmc read addr blk# cnt
    mmc write addr blk# cnt
    mmc erase blk# cnt
    mmc rescan [mode]
    mmc part
    mmc dev [dev] [part] [mode]
    mmc list
    mmc wp
    mmc bootbus <dev> <boot_bus_width> <reset_boot_bus_width> <boot_mode>
    mmc bootpart-resize <dev> <dev part size MB> <RPMB part size MB>
    mmc partconf <dev> [[varname] | [<boot_ack> <boot_partition> <partition_access>]]
    mmc rst-function <dev> <value>

Description
-----------

The mmc command is used to control MMC(eMMC/SD) device.

The 'mmc info' command displays information (Manufacturer ID, OEM, Name, Bus Speed, Mode, ...) of MMC device.

The 'mmc read' command reads raw data to memory address from MMC device with block offset and count.

The 'mmc write' command writes raw data to MMC device from memory address with block offset and count.

    addr
        memory address
    blk#
        start block offset
    cnt
        block count

The 'mmc erase' command erases *cnt* blocks on the MMC device starting at block *blk#*.

    blk#
        start block offset
    cnt
        block count

The 'mmc rescan' command scans the available MMC device.

   mode
       speed mode to set.
       CONFIG_MMC_SPEED_MODE_SET should be enabled. The requested speed mode is
       passed as a decimal number according to the following table:

       ========== ==========================
       Speed mode Description
       ========== ==========================
           0      MMC legacy
           1      MMC High Speed (26MHz)
           2      SD High Speed (50MHz)
           3      MMC High Speed (52MHz)
           4      MMC DDR52 (52MHz)
           5      UHS SDR12 (25MHz)
           6      UHS SDR25 (50MHz)
           7      UHS SDR50 (100MHz)
           8      UHS DDR50 (50MHz)
           9      UHS SDR104 (208MHz)
          10      HS200 (200MHz)
          11      HS400 (200MHz)
          12      HS400ES (200MHz)
       ========== ==========================

       A speed mode can be set only if it has already been enabled in the device tree

The 'mmc part' command displays the list available partition on current mmc device.

The 'mmc dev' command shows or set current mmc device.

    dev
        device number to change
    part
        partition number to change

   mode
       speed mode to set.
       CONFIG_MMC_SPEED_MODE_SET should be enabled. The required speed mode is
       passed as the index from the following list.

       0   - MMC_LEGACY
       1   - MMC_HS
       2   - SD_HS
       3   - MMC_HS_52
       4   - MMC_DDR_52
       5   - UHS_SDR12
       6   - UHS_SDR25
       7   - UHS_SDR50
       8   - UHS_DDR50
       9   - UHS_SDR104
       10  - MMC_HS_200
       11  - MMC_HS_400
       12  - MMC_HS_400_ES

       A speed mode can be set only if it has already been enabled in the device tree

The 'mmc list' command displays the list available devices.

The 'mmc wp' command enables "power on write protect" function for boot partitions.

The 'mmc bootbus' command sets the BOOT_BUS_WIDTH field. (*Refer to eMMC specification*)

    boot_bus_width
        0x0
            x1 (sdr) or x4(ddr) buswidth in boot operation mode (default)
        0x1
            x4 (sdr/ddr) buswidth in boot operation mode
        0x2
            x8 (sdr/ddr) buswidth in boot operation mode
        0x3
            Reserved

    reset_boot_bus_width
        0x0
            Reset buswidth to x1, Single data reate and backward compatible timing after boot operation (default)
        0x1
            Retain BOOT_BUS_WIDTH and BOOT_MODE value after boot operation. This is relevant to Push-pull mode operation only

    boot_mode
        0x0
            Use single data rate + backward compatible timing in boot operation (default)
        0x1
            Use single data rate + High Speed timing in boot operation mode
        0x2
            Use dual data rate in boot operation
        0x3
            Reserved

The 'mmc partconf' command shows or changes PARTITION_CONFIG field.

    varname
        When showing the PARTITION_CONFIG, an optional environment variable to store the current boot_partition value into.
    boot_ack
        boot acknowledge value
    boot_partition
        boot partition to enable for boot
            0x0
                Device not boot enabled(default)
            0x1
                Boot partition1 enabled for boot
            0x2
                Boot partition2 enabled for boot
            0x7
                User area enabled for boot
            others
                Reserved
    partition_access
        partitions to access

The 'mmc bootpart-resize' command changes sizes of boot and RPMB partitions.

    dev
        device number
    boot part size MB
        target size of boot partition
    RPMB part size MB
        target size of RPMB partition

The 'mmc rst-function' command changes the RST_n_FUNCTION field.
**WARNING** : This is a write-once field. (*Refer to eMMC specification*)

    value
        0x0
            RST_n signal is temporarily disabled (default)
        0x1
            RST_n signal is permanently enabled
        0x2
            RST_n signal is permanently disabled
        0x3
            Reserved


Examples
--------

The 'mmc info' command displays device's capabilities:
::

    => mmc info
    Device: EXYNOS DWMMC
    Manufacturer ID: 45
    OEM: 100
    Name: SDW16
    Bus Speed: 52000000
    Mode: MMC DDR52 (52MHz)
    Rd Block Len: 512
    MMC version 5.0
    High Capacity: Yes
    Capacity: 14.7 GiB
    Bus Width: 8-bit DDR
    Erase Group Size: 512 KiB
    HC WP Group Size: 8 MiB
    User Capacity: 14.7 GiB WRREL
    Boot Capacity: 4 MiB ENH
    RPMB Capacity: 4 MiB ENH
    Boot area 0 is not write protected
    Boot area 1 is not write protected

The raw data can be read/written via 'mmc read/write' command:
::

    => mmc read 0x40000000 0x5000 0x100
    MMC read: dev # 0, block # 20480, count 256 ... 256 blocks read: OK

    => mmc write 0x40000000 0x5000 0x10
    MMC write: dev # 0, block # 20480, count 256 ... 256 blocks written: OK

The partition list can be shown via 'mmc part' command:
::

    => mmc part
    Partition Map for MMC device 0  --   Partition Type: DOS

    Part    Start Sector    Num Sectors     UUID            Type
      1     8192            131072          dff8751a-01     0e Boot
      2     139264          6291456         dff8751a-02     83
      3     6430720         1048576         dff8751a-03     83
      4     7479296         23298048        dff8751a-04     05 Extd
      5     7481344         307200          dff8751a-05     83
      6     7790592         65536           dff8751a-06     83
      7     7858176         16384           dff8751a-07     83
      8     7876608         22900736        dff8751a-08     83

The current device can be shown or set via 'mmc dev' command:
::

    => mmc dev
    switch to partitions #0, OK
    mmc0(part0) is current device
    => mmc dev 2 0
    switch to partitions #0, OK
    mmc2 is current device
    => mmc dev 0 1 4
    switch to partitions #1, OK
    mmc0(part 1) is current device

The list of available devices can be shown via 'mmc list' command:
::

    => mmc list
    mmc list
    EXYNOS DWMMC: 0 (eMMC)
    EXYNOS DWMMC: 2 (SD)

Configuration
-------------

The mmc command is only available if CONFIG_CMD_MMC=y.
Some commands need to enable more configuration.

write, erase
    CONFIG_MMC_WRITE
bootbus, bootpart-resize, partconf, rst-function
    CONFIG_SUPPORT_EMMC_BOOT=y
