config MMC_SDHCI_OF_ARASAN tristate "SDHCI OF support for the Arasan SDHCI controllers" depends on MMC_SDHCI_PLTFM depends on OF help This selects the Arasan Secure Digital Host Controller Interface (SDHCI). This hardware is found e.g. in Xilinx' Zynq SoC. If you have a controller with this interface, say Y or M here. If unsure, say N. |
<M> Sound card support ---> HID support ---> [*] USB support ---> <M> Ultra Wideband devices ---> <*> MMC/SD/SDIO card support ---> <M> Sony MemoryStick card support ---> -*- LED Support ---> |
--- MMC/SD/SDIO card support [ ] MMC debugging [ ] MMC host clock gating (NEW) *** MMC/SD/SDIO Card Drivers *** <M> MMC block device driver (8) Number of minors per block device (NEW) [*] Use bounce buffer for simple hosts < > SDIO UART/GPS class support < > MMC host test driver *** MMC/SD/SDIO Host Controller Drivers *** <*> Secure Digital Host Controller Interface support < > SDHCI support on PCI bus [*] Ricoh MMC Controller Disabler <*> SDHCI platform and OF driver helper <*> SDHCI OF support for the Arasan SDHCI controllers (NEW) < > SDHCI support for Fujitsu Semiconductor F_SDH30 (NEW) < > TI Flash Media MMC/SD Interface support < > MMC/SD driver for Ricoh Bay1Controllers < > ENE CB710 MMC/SD Interface support < > VIA SD/MMC Card Reader Driver |
sdhci@ff160000 { compatible = "xlnx,zynqmp-8.9a", "arasan,sdhci-8.9a"; interrupt-parent = <&gic>; interrupts = <0x0 0x30 0x4>; reg = <0x0 0xff160000 0x0 0x1000>; clock-names = "clk_xin", "clk_ahb"; xlnx,device_id = <0x0>; }; |
sdhci@ff170000 { compatible = "xlnx,zynqmp-8.9a", "arasan,sdhci-8.9a"; interrupt-parent = <&gic>; interrupts = <0x0 0x31 0x4>; reg = <0x0 0xff170000 0x0 0x1000>; clock-names = "clk_xin", "clk_ahb"; xlnx,device_id = <0x0>; }; |
High speed | 20.54 MB/sec | read speed, tool: hdparm |
High Speed | 19.4 MB/Sec | read speed, tool: hdparm |
UHS (SDR) | SDR104: 76.50MB/sec | read speed, tool: hdparm |
UHS (DDR) | DDR50: 40.68MB/sec | read speed, tool: hdparm |
mkfs.vfat -F 32 /dev/mmcblk0(p1) mount /dev/mmcblk0(p1) /mnt mkdir /mnt/sd vi /mnt/sd/sd.txt umount /mnt |
dd if=/dev/urandom of=/tmp/data bs=1M count=10 dd if=/tmp/data of=/dev/mmcblk0(p1) bs=1M count=10 dd if=/dev/mmcblk0(p1) of=/tmp/data1 bs=1M count=10 md5sum /tmp/data /tmp/data1 (sha values reported by md5sum should be equal for data and data1 files |
List Partitions: ----------------------------------- fdisk -l /dev/mmcblk0 [ 1307.186442] mmc0: Got data interrupt 0x00000002 even though no data operation was in progress. Disk /dev/mmcblk0: 3947 MB, 3947888640 bytes 4 heads, 16 sectors/track, 120480 cylinders Units = cylinders of 64 * 512 = 32768 bytes Device Boot Start End Blocks Id System /dev/mmcblk0p1 1 1 24 b Win95 FAT32 /dev/mmcblk0p2 2 2 32 83 Linux Create Partition: ----------------------------------- fdisk /dev/mmcblk0 [ 1344.587085] mmc0: Got data interrupt 0x00000002 even though no data operation was in progress. The number of cylinders for this disk is set to 120480. There is nothing wrong with that, but this is larger than 1024, and could in certain setups cause problems with: 1) software that runs at boot time (e.g., old versions of LILO) 2) booting and partitioning software from other OSs (e.g., DOS FDISK, OS/2 FDISK) Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 3 First cylinder (3-120480, default 3): 3 Last cylinder or +size or +sizeM or +sizeK (3-120480, default 120480): 3 Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table [ 1832.815341] mmc0: Got data interrupt 0x00000002 even though no data operation was in progress. [ 1832.833339] mmcblk0: p3 Different options: -------------------------------------- Command (m for help): m Command Action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit Read/Write using File System: --------------------------------------- root@Xilinx-ZynqMP-2015_3:~# mkfs.vfat -F 32 /dev/mmcblk0p3 [ 598.662380] mmc0: Got data interrupt 0x00000002 even though no data operation was in progress. [ 598.686123] mmc0: Got data interrupt 0x00000002 even though no data operation was in progress. root@Xilinx-ZynqMP-2015_3:~# mount /dev/mmcblk0p3 /mnt [ 632.450944] mmc0: Got data interrupt 0x00000002 even though no data operation was in progress. [ 632.519516] mmc0: Got data interrupt 0x00000002 even though no data operation was in progress. [ 632.558846] mmc0: Got data interrupt 0x00000002 even though no data operation was in progress. root@Xilinx-ZynqMP-2015_3:~# mkdir /mnt/sd root@Xilinx-ZynqMP-2015_3:~# vi /mnt/sd/sd.txt root@Xilinx-ZynqMP-2015_3:~# umount /mnt |
The eMMC RPMB partition can be tested by using mmc-utils tool.
Please note that writing the authentication key to the RPMB partition is one-time programmable (irreversible) change.
root@plnx_aarch64:~# root@plnx_aarch64:~# vi key.txt root@plnx_aarch64:~# cat key.txt AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHH root@plnx_aarch64:~# root@plnx_aarch64:~# mmc rpmb write-key /dev/mmcblk0rpmb key.txt root@plnx_aarch64:~# root@plnx_aarch64:~# mmc rpmb read-counter /dev/mmcblk0rpmb Counter value: 0x00000000 root@plnx_aarch64:~# vi temp1.txt root@plnx_aarch64:~# ls -l temp1.txt -rw-r--r-- 1 root users 256 Mar 28 12:51 temp1.txt root@plnx_aarch64:~# root@plnx_aarch64:~# cat temp1.txt Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day root@plnx_aarch64:~# root@plnx_aarch64:~# mmc rpmb write-block /dev/mmcblk0rpmb 0x02 temp1.txt key.txt root@plnx_aarch64:~# root@plnx_aarch64:~# touch temp2.txt root@plnx_aarch64:~# cat temp2.txt root@plnx_aarch64:~# root@plnx_aarch64:~# mmc rpmb read-block /dev/mmcblk0rpmb 0x02 1 temp2.txt key.txt root@plnx_aarch64:~# root@plnx_aarch64:~# cat temp2.txt Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day Have a good day root@plnx_aarch64:~# |
sdhci: Secure Digital Host Controller Interface driver sdhci: Copyright(c) Pierre Ossman sdhci-pltfm: SDHCI platform and OF driver helper sdhci-arasan ff160000.sdhci: No vmmc regulator found sdhci-arasan ff160000.sdhci: No vqmmc regulator found mmc0: SDHCI controller on ff160000.sdhci [ff160000.sdhci] using ADMA 64-bit sdhci-arasan ff170000.sdhci: No vmmc regulator found sdhci-arasan ff170000.sdhci: No vqmmc regulator found mmc1: SDHCI controller on ff170000.sdhci [ff170000.sdhci] using ADMA 64-bit ........ mmc0: new high speed SDHC card at address 1234 mmcblk0: mmc0:1234 SA04G 3.63 GiB mmc0: Got data interrupt 0x00000002 even though no data operation was in progress. mmcblk0: p1 ......... mmc1: new high speed SDHC card at address aaaa mmcblk1: mmc1:aaaa SU08G 7.40 GiB mmcblk1: p1 |
mmc0: BKOPS_EN bit is not set mmc0: new high speed MMC card at address 0001 mmcblk0: mmc0:0001 MMC04G 3.57 GiB mmcblk0boot0: mmc0:0001 MMC04G partition 1 2.00 MiB mmcblk0boot1: mmc0:0001 MMC04G partition 2 2.00 MiB mmcblk0rpmb: mmc0:0001 MMC04G partition 3 128 KiB mmcblk0: mmcblk0boot1: unknown partition table mmcblk0boot0: unknown partition table |
In Sync with mainline driver.
2023.2
Summary:
Commits:
c9c461cf0f13 - Sync Versal Net eMMC support with mainline
2023.1
Summary:
Commits:
8ebc7d2ab84b - eMMC5.1 support added for Versal Net platform.
0ab1396da6a9 - Enable HS400 mode support.
ad43515d14a8 - Add support to request the gate clock.
2022.2
Summary:
Commits:
b442098dd64c - Add NULL check for data field.
2021.2
Summary:
2022.1
Summary:
Commits:
3c7719dbfbdf - Add support for dynamic configuration for SOM.
0349189baeca - Add delay after controller reset to reach eMMC card stable state
2021.2
2021.1
Summary:
Commits:
1007e369c036 - Fix the issue in reading tap values from DT
Source file link:
https://github.com/Xilinx/linux-xlnx/blob/master/drivers/mmc/host/sdhci-of-arasan.c