• Xilinx SD controller


    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
  • 相关阅读:
    Elasticsearch的分享
    后端架构设计扛住100亿次请求
    微服务设计10大反模式和陷阱
    单点登录CAS原理
    将文件名称中一个指定字符前面具有相同字符串前缀内容的多个文件剪切、移动到以该字符串前缀内容命名的文件夹里
    练习统计学生成绩
    端口转发和端口映射.md
    4.md
    far.md
    AWK使用.md
  • 原文地址:https://www.cnblogs.com/Ph-one/p/8986194.html
Copyright © 2020-2023  润新知