Features supported by driver

Zynq

  • All the HW/IP features are supported by driver

ZynqMP

  • All the HW/IP features are supported by driver

Missing features, known Issues, limitations

  • SD UHS modes support is disabled in the driver currently due to board and silicon dependencies. Not all boards are having 3.0 level shifter

Kernel configurations

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
 
 
 

Devicetree

SD and eMMC

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>;
};

Performance

SD card : Sandisk Ultra 16GB SDHC card

Zynq:

High speed 20.54 MB/sec read speed, tool: hdparm

ZynqMP:

High Speed 19.4 MB/Sec read speed, tool: hdparm
SDR SDR104: 76.50MB/sec read speed, tool: hdparm
DDR DDR50: 40.68MB/sec read speed, tool: hdparm

Test Procedure

Read/Write test using File System

mkfs.vfat -F 32 /dev/mmcblk0(p1)
mount /dev/mmcblk0(p1) /mnt
mkdir /mnt/sd
vi /mnt/sd/sd.txt
umount /mnt

Read/Write test using DD commands

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

Create partition using FDISK

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

Expected output

Boot log for SD

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

Boot log for EMMC

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

Mainline Status

The SD driver is currently in sync with mainline kernel 4.9 except the below changes

    • add support for switching to UHS-I modes on ZynqMP Platform

Xilinx SD controller的更多相关文章

  1. OpenRisc-35-基于orpsoc,eCos的sd card controller的测试实验

    引言 之前,曾经在orpsoc的平台上,测试验证过其sd card controller的linux的驱动,但是并不是很完美,经过努力,终于在eCos下完成了其全部功能的验证,包括驱动层验证,文件系统 ...

  2. Smart210学习记录-----SD/MMC/SDIO驱动

    转自:http://jingpin.jikexueyuan.com/article/23369.html http://blog.csdn.net/evilcode/article/details/7 ...

  3. Linux SD/MMC/SDIO驱动分析

    一.SD/MMC/SDIO概念区分 SD(SecureDigital)与 MMC(MultimediaCard) SD 是一种 flash memory card 的标准,也就是一般常见的 SD 记忆 ...

  4. 在SD/MMC卡上实现hive (Implement WinCE HIVE&ROM system on NAND or SD system )

    本是个很简单的topic,但无奈的是很多客户都没有实现.所以只能写一个guide给客户,让他们依葫芦画瓢. 在SD卡上实现hive以及实现binfs最精髓的思想是,在boot stage 1依次加载s ...

  5. Linux SD/MMC/SDIO驱动分析_转

    转自:Linux SD/MMC/SDIO驱动分析    https://www.cnblogs.com/cslunatic/p/3678045.html#3053341 一.SD/MMC/SDIO概念 ...

  6. [MMC]Linux MMC/SD/SDIO驱动分析

    转自:http://www.cnblogs.com/cslunatic/p/3678045.html 一.SD/MMC/SDIO概念区分 SD(SecureDigital)与 MMC(Multimed ...

  7. imx6 生成 spi设备节点

    开发板需要使用spi接口,但是spi接口被touch占用,使用event进行操作.所以需要更改配置,生成spi设备节点. 参考链接 https://community.nxp.com/thread/3 ...

  8. I.MX6 AT24Cxx eeprom Linux i2c-gpio

    /************************************************************************** * I.MX6 AT24Cxx eeprom L ...

  9. springMVC+MyBatis+Spring 整合(4) ---解决Spring MVC 对AOP不起作用的问题

    解决Spring MVC 对AOP不起作用的问题 分类: SpringMVC3x+Spring3x+MyBatis3x myibaits spring J2EE2013-11-21 11:22 640 ...

随机推荐

  1. AndroidWear开发之HelloWorld篇

    通过前一篇的学习,我们把环境都搭建好了,这下我们就可以正真的开发了. 一.创建Wear项目 通过项目创建向导一步一步下去就可以创建好一个Wear项目: 1.新建项目,一次填入应用名字,应用包名,项目位 ...

  2. poj_3185 反转问题

    题目大意 有20个碗排成一排,有些碗口朝上,有些碗口朝下.每次可以反转其中的一个碗,但是在反转该碗时,该碗左右两边的碗也跟着被反转(如果该碗为边界上的碗,则只有一侧的碗被反转).求最少需要反转几次,可 ...

  3. ubuntu 创建桌面快捷方式

    $sudo apt-get install gnome-panel $gnome-desktop-item-edit  /home/xxx/桌面 --create-new 命令行:填入程序名称,如/u ...

  4. [算法] N 皇后

    N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行.同一列.同一斜线上的皇后都会自动攻击). 一. 求解N皇后问题是算法中回溯法应用的一个经典案例 回溯算 ...

  5. 【HTTP header】【Access-Control-Allow-Credentials】跨域Ajax请求时是否带Cookie的设置

    1. 无关Cookie跨域Ajax请求 客户端 以 Jquery 的 ajax 为例: $.ajax({ url : 'http://remote.domain.com/corsrequest', d ...

  6. 安装 sql server 2008出现重启电脑,另在server 2012 r2安装sql server 2008 安装不上

    时即使是进行电脑重启,也会报这个错误,那么就不是电脑的问题了,其实是系统注册表在作怪,解决方法如下: 1.开始-->运行,输入regedit,打开注册表管理器: 2. 找到 HKEY_LOCAL ...

  7. codeforces#512 Div2

    pre过了三题 终测又挂了一题 又掉分了 真的是 太菜了 A-In Search of an Easy Problem 水题 有一个1就是hard #include <bits/stdc++.h ...

  8. WebSocket学习记录

    参考资料: Java后端WebSocket的Tomcat实现 基于Java的WebSocket推送 java WebSocket的实现以及Spring WebSocket 利用spring-webso ...

  9. B. Factory Repairs---cf627B(线段树)

    题目链接:http://codeforces.com/problemset/problem/627/B 题意:有一个工厂生产零件,但是机器是不正常的,需要维修,维修时间是 k 天,在维修期间不能生产, ...

  10. 用virtualenv建立多个Python独立开发环境(转)

    add by zhj: 在virtualenv环境下,安装第三方包时,不要用sudo pip install xxx,要直接用pip install xxx,如果用sudo时,那会安装在原来的系统Py ...