AnsweredAssumed Answered

Xilinx AXI DMA Driver probe failed on ZynqMP Analog Devices' kernel

Question asked by zynqmp_ac on Jan 26, 2018
Latest reply on Feb 7, 2018 by larsc

Hello everyone,

 

I am trying to implement a simple AXI DMA example using EK-U1-ZCU102-ES2-G, vivado 2017.2 and the 2017_R1 Analog Devices' kernel. Unfortunately, the Xilinx AXI DMA driver doesn't probe properly during the boot and leads to a kernel panic.

 

Here after is the boot log:

------------------------------------------
Xilinx Zynq MP First Stage Boot Loader
Release 2017.2   Oct 19 2017  -  09:35:44
NOTICE:  ATF running on XCZU9EG/silicon v4/RTL5.1 at 0xfffea000, with PMU firmware
NOTICE:  BL31: Secure code at 0x0
NOTICE:  BL31: Non secure code at 0x8000000
NOTICE:  BL31: v1.3(release):f9b244b
NOTICE:  BL31: Built : 09:35:17, Oct 19 2017


U-Boot 2016.07 (Dec 16 2016 - 15:04:11 -0700) Xilinx ZynqMP ZCU102 revB

I2C:   ready
DRAM:  4 GiB
EL Level:       EL2
Chip ID:        xczu9eg
MMC:   sdhci@ff170000: 0
Using default environment

In:    serial@ff000000
Out:   serial@ff000000
Err:   serial@ff000000
Bootmode: LVL_SHFT_SD_MODE1
SCSI:  SATA link 0 timeout.
SATA link 1 timeout.
AHCI 0001.0301 32 slots 2 ports 6 Gbps 0x3 impl SATA mode
flags: 64bit ncq pm clo only pmp fbss pio slum part ccc apst
scanning bus for devices...
Found 0 device(s).
Net:   ZYNQ GEM: ff0e0000, phyaddr 12, interface rgmii-id

Warning: ethernet@ff0e0000 using MAC address from ROM
eth0: ethernet@ff0e0000
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc0 is current device
Device: sdhci@ff170000
Manufacturer ID: 3
OEM: 5344
Name: SL16G
Tran Speed: 50000000
Rd Block Len: 512
SD version 3.0
High Capacity: Yes
Capacity: 14.8 GiB
Bus Width: 4-bit
Erase Group Size: 512 Bytes
reading uEnv.txt
301 bytes read in 10 ms (29.3 KiB/s)
Loaded environment from uEnv.txt
Importing environment from SD ...
Running uenvcmd ...
reading Image
14477824 bytes read in 957 ms (14.4 MiB/s)
reading system.dtb
27256 bytes read in 18 ms (1.4 MiB/s)
Wrong Image Format for bootm command
ERROR: can't get kernel image!
reading system.dtb
27256 bytes read in 18 ms (1.4 MiB/s)
reading Image
14477824 bytes read in 957 ms (14.4 MiB/s)
## Flattened Device Tree blob at 04000000
   Booting using the fdt blob at 0x4000000
   Loading Device Tree to 000000000fff6000, end 000000000ffffa77 ... OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.9.0 (collin@IODA_laptop) (gcc version 6.2.1 20161114 (Linaro GCC Snaps8
[    0.000000] Boot CPU: AArch64 Processor [410fd034]
[    0.000000] earlycon: cdns0 at MMIO 0x00000000ff000000 (options '115200n8')
[    0.000000] bootconsole [cdns0] enabled
[    0.000000] efi: Getting EFI parameters from FDT:
[    0.000000] efi: UEFI not found.
[    0.000000] cma: Reserved 128 MiB at 0x0000000078000000
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv1.0 detected in firmware.
[    0.000000] psci: Using standard PSCI v0.2 function IDs
[    0.000000] psci: MIGRATE_INFO_TYPE not supported.
[    0.000000] percpu: Embedded 21 pages/cpu @ffffffc87ff7b000 s47384 r8192 d30440 u86016
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] CPU features: enabling workaround for ARM erratum 845719
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 1034240
[    0.000000] Kernel command line: earlycon=cdns,mmio,0xFF000000,115200n8 console=ttyPS0,115200n8 rot
[    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
[    0.000000] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes)
[    0.000000] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes)
[    0.000000] software IO TLB [mem 0x73fff000-0x77fff000] (64MB) mapped at [ffffffc073fff000-ffffffc]
[    0.000000] Memory: 3918656K/4194304K available (9276K kernel code, 634K rwdata, 3672K rodata, 512)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
[    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbebfff0000   (   250 GB)
[    0.000000]       .text : 0xffffff8008080000 - 0xffffff8008990000   (  9280 KB)
[    0.000000]     .rodata : 0xffffff8008990000 - 0xffffff8008d30000   (  3712 KB)
[    0.000000]       .init : 0xffffff8008d30000 - 0xffffff8008db0000   (   512 KB)
[    0.000000]       .data : 0xffffff8008db0000 - 0xffffff8008e4ea00   (   635 KB)
[    0.000000]        .bss : 0xffffff8008e4ea00 - 0xffffff8008eaf534   (   387 KB)
[    0.000000]     fixed   : 0xffffffbefe7fd000 - 0xffffffbefec00000   (  4108 KB)
[    0.000000]     PCI I/O : 0xffffffbefee00000 - 0xffffffbeffe00000   (    16 MB)
[    0.000000]     vmemmap : 0xffffffbf00000000 - 0xffffffc000000000   (     4 GB maximum)
[    0.000000]               0xffffffbf00000000 - 0xffffffbf1dc00000   (   476 MB actual)
[    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc880000000   ( 34816 MB)
[    0.000000] Hierarchical RCU implementation.
[    0.000000]  Build-time adjustment of leaf fanout to 64.
[    0.000000]  RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=4.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=64, nr_cpu_ids=4
[    0.000000] NR_IRQS:64 nr_irqs:64 0
[    0.000000] GIC: Adjusting CPU interface base to 0x00000000f902f000
[    0.000000] GIC: Using split EOI/Deactivate mode
[    0.000000] arm_arch_timer: Architected cp15 timer(s) running at 99.99MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x171015c90f, max_ids
[    0.000003] sched_clock: 56 bits at 99MHz, resolution 10ns, wraps every 4398046511101ns
[    0.008207] Console: colour dummy device 80x25
[    0.012473] Calibrating delay loop (skipped), value calculated using timer frequency.. 199.99 Bogo)
[    0.022835] pid_max: default: 32768 minimum: 301
[    0.027514] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes)
[    0.034087] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes)
[    0.041660] ASID allocator initialised with 65536 entries
[    0.047313] zynqmp_plat_init Power management API v0.3
[    0.052327] EFI services will not be available.
[    0.130138] Detected VIPT I-cache on CPU1
[    0.130163] CPU1: Booted secondary processor [410fd034]
[    0.194194] Detected VIPT I-cache on CPU2
[    0.194211] CPU2: Booted secondary processor [410fd034]
[    0.249507] Detected VIPT I-cache on CPU3
[    0.249524] CPU3: Booted secondary processor [410fd034]
[    0.249559] Brought up 4 CPUs
[    0.279846] SMP: Total of 4 processors activated.
[    0.284522] CPU features: detected feature: 32-bit EL0 Support
[    0.290319] CPU: All CPU(s) started at EL2
[    0.294391] alternatives: patching kernel code
[    0.299444] devtmpfs: initialized
[    0.306304] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785s
[    0.318565] xor: measuring software checksum speed
[    0.363219]    8regs     :  2303.000 MB/sec
[    0.403247]    8regs_prefetch:  2053.000 MB/sec
[    0.447615]    32regs    :  2830.000 MB/sec
[    0.487645]    32regs_prefetch:  2379.000 MB/sec
[    0.492072] xor: using function: 32regs (2830.000 MB/sec)
[    0.497497] pinctrl core: initialized pinctrl subsystem
[    0.503130] NET: Registered protocol family 16
[    0.523414] cpuidle: using governor menu
[    0.527334] Failed to initialise IOMMU /amba/smmu@fd800000
[    0.532840] vdso: 2 pages (1 code @ ffffff8008997000, 1 data @ ffffff8008db4000)
[    0.540044] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    0.547229] DMA: preallocated 256 KiB pool for atomic allocations
[    0.567070] reset_zynqmp reset-controller: Xilinx zynqmp reset driver probed
[    0.574641] ARM CCI_400_r1 PMU driver probed[    0.581767] zynqmp-pinctrl ff180000.pinctrl: zynqmpd
[    0.604397] HugeTLB registered 2 MB page size, pre-allocated 0 pages
[    0.678935] raid6: int64x1  gen()   407 MB/s
[    0.750868] raid6: int64x1  xor()   442 MB/s
[    0.822953] raid6: int64x2  gen()   673 MB/s
[    0.894987] raid6: int64x2  xor()   599 MB/s
[    0.967070] raid6: int64x4  gen()   984 MB/s
[    1.039069] raid6: int64x4  xor()   739 MB/s
[    1.111159] raid6: int64x8  gen()  1146 MB/s
[    1.183197] raid6: int64x8  xor()   746 MB/s
[    1.255243] raid6: neonx1   gen()   720 MB/s
[    1.327293] raid6: neonx1   xor()   732 MB/s
[    1.399330] raid6: neonx2   gen()  1166 MB/s
[    1.471381] raid6: neonx2   xor()  1035 MB/s
[    1.543467] raid6: neonx4   gen()  1505 MB/s
[    1.615492] raid6: neonx4   xor()  1182 MB/s
[    1.687572] raid6: neonx8   gen()  1586 MB/s
[    1.759610] raid6: neonx8   xor()  1221 MB/s
[    1.763686] raid6: using algorithm neonx8 gen() 1586 MB/s
[    1.769048] raid6: .... xor() 1221 MB/s, rmw enabled
[    1.773979] raid6: using intx1 recovery algorithm
[    1.779392] SCSI subsystem initialized
[    1.783117] usbcore: registered new interface driver usbfs
[    1.788437] usbcore: registered new interface driver hub
[    1.793716] usbcore: registered new device driver usb
[    1.798763] media: Linux media interface: v0.10
[    1.803221] Linux video capture interface: v2.00
[    1.807806] pps_core: LinuxPPS API ver. 1 registered
[    1.812715] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.i>
[    1.821807] PTP clock support registered
[    1.825706] EDAC MC: Ver: 3.0.0
[    1.829035] FPGA manager framework
[    1.832356] fpga-region fpga-full: FPGA Region probed
[    1.837352] Advanced Linux Sound Architecture Driver Initialized.
[    1.843576] Bluetooth: Core ver 2.22
[    1.846974] NET: Registered protocol family 31
[    1.851373] Bluetooth: HCI device and connection manager initialized
[    1.857690] Bluetooth: HCI socket layer initialized
[    1.862532] Bluetooth: L2CAP socket layer initialized
[    1.867562] Bluetooth: SCO socket layer initialized
[    1.872932] clocksource: Switched to clocksource arch_sys_counter
[    1.878892] VFS: Disk quotas dquot_6.6.0
[    1.882757] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    1.893820] NET: Registered protocol family 2
[    1.898294] TCP established hash table entries: 32768 (order: 6, 262144 bytes)
[    1.905515] TCP bind hash table entries: 32768 (order: 7, 524288 bytes)
[    1.912358] TCP: Hash tables configured (established 32768 bind 32768)
[    1.918724] UDP hash table entries: 2048 (order: 4, 65536 bytes)
[    1.924727] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes)
[    1.931211] NET: Registered protocol family 1
[    1.935570] RPC: Registered named UNIX socket transport module.
[    1.941294] RPC: Registered udp transport module.
[    1.945962] RPC: Registered tcp transport module.
[    1.950632] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    1.957461] hw perfevents: enabled with armv8_pmuv3 PMU driver, 7 counters available
[    1.965638] futex hash table entries: 1024 (order: 5, 131072 bytes)
[    1.971751] audit: initializing netlink subsys (disabled)
[    1.977090] audit: type=2000 audit(1.920:1): initialized
[    1.982763] workingset: timestamp_bits=62 max_order=20 bucket_order=0
[    1.989620] NFS: Registering the id_resolver key type
[    1.994495] Key type id_resolver registered
[    1.998665] Key type id_legacy registered
[    2.002616] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[    2.009286] jffs2: version 2.2. (NAND) (SUMMARY)  �© 2001-2006 Red Hat, Inc.
[    2.020597] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)
[    2.027810] io scheduler noop registered
[    2.031684] io scheduler deadline registered
[    2.035928] io scheduler cfq registered (default)
[    2.041120] nwl-pcie fd0e0000.pcie: Link is DOWN
[    2.045580] OF: PCI: host bridge /amba/pcie@fd0e0000 ranges:
[    2.051176] OF: PCI:   No bus range found for /amba/pcie@fd0e0000, using [bus 00-ff]
[    2.058883] OF: PCI:   MEM 0xe0000000..0xefffffff -> 0xe0000000
[    2.064756] OF: PCI:   MEM 0x600000000..0x7ffffffff -> 0x600000000
[    2.070987] nwl-pcie fd0e0000.pcie: PCI host bridge to bus 0000:00
[    2.077041] pci_bus 0000:00: root bus resource [bus 00-ff]
[    2.082488] pci_bus 0000:00: root bus resource [mem 0xe0000000-0xefffffff]
[    2.089324] pci_bus 0000:00: root bus resource [mem 0x600000000-0x7ffffffff pref]
[    2.097043] pci 0000:00:00.0: PCI bridge to [bus 01-0c]
[    2.103034] xilinx-dpdma fd4c0000.dma: Xilinx DPDMA engine is probed
[   23.024927] INFO: rcu_sched detected stalls on CPUs/tasks:
[   23.030219]  3-...: (16 ticks this GP) idle=aab/140000000000000/0 softirq=345/347 fqs=2626
[   23.038517]  (detected by 1, t=5255 jiffies, g=-283, c=-284, q=259)
[   23.044747] Task dump for CPU 3:
[   23.047947] swapper/0       R  running task        0     1      0 0x00000002
[   23.054953] Call trace:
[   23.057383] [<ffffff800808530c>] __switch_to+0x8c/0xa0
[   23.062484] [<ffffff800845fcb4>] xilinx_dma_probe+0x484/0x8a8
[   23.068191] [<ffffff80084edad8>] platform_drv_probe+0x58/0xc0
[   23.073900] [<ffffff80084ebf7c>] driver_probe_device+0x1fc/0x2a8
[   23.079868] [<ffffff80084ec0d4>] __driver_attach+0xac/0xb0
[   23.085318] [<ffffff80084e9fcc>] bus_for_each_dev+0x64/0xa0
[   23.090853] [<ffffff80084eb768>] driver_attach+0x20/0x28
[   23.096130] [<ffffff80084eb2b8>] bus_add_driver+0x110/0x230
[   23.101666] [<ffffff80084ec8b8>] driver_register+0x60/0xf8
[   23.107115] [<ffffff80084eda10>] __platform_driver_register+0x40/0x48
[   23.113518] [<ffffff8008d53298>] xilinx_vdma_driver_init+0x18/0x20
[   23.119658] [<ffffff80080830b8>] do_one_initcall+0x38/0x128
[   23.125195] [<ffffff8008d30c94>] kernel_init_freeable+0x140/0x1e0
[   23.131250] [<ffffff800897b6a0>] kernel_init+0x10/0x100
[   23.136439] [<ffffff8008082e80>] ret_from_fork+0x10/0x50

 

Bloc Diagram of the AXI DMA example:

AXI DMA example Bloc Design

 

for the cross compilation:

    export CROSS_COMPILE=aarch64-linux-gnu-

    export ARCH=arm64

for the Zynq MP default kernel configuration:

    make adi_zynqmp_defconfig

such as described here: Building the ZynqMP / MPSoC Linux kernel and devicetrees from source [Analog Devices Wiki]


To implement the Xilinx DMA Driver, the kernel config file is set as following:

CONFIG_DMADEVICES=y
# CONFIG_DMADEVICES_DEBUG is not set
 
#
# DMA Devices
#
CONFIG_DMA_ENGINE=y
CONFIG_DMA_VIRTUAL_CHANNELS=y
CONFIG_DMA_OF=y
# CONFIG_AMBA_PL08X is not set
CONFIG_AXI_DMAC=y
# CONFIG_FSL_EDMA is not set
# CONFIG_INTEL_IDMA64 is not set
# CONFIG_MV_XOR_V2 is not set
# CONFIG_PL330_DMA is not set
CONFIG_XILINX_DMA_ENGINES=y
# CONFIG_XILINX_DMATEST is not set
# CONFIG_XILINX_VDMATEST is not set
# CONFIG_XILINX_CDMATEST is not set
CONFIG_XILINX_DPDMA=y
# CONFIG_XILINX_DPDMA_DEBUG_FS is not set
CONFIG_XILINX_FRMBUF=y
CONFIG_XILINX_DMA=y
CONFIG_XILINX_ZYNQMP_DMA=y

 

  • The Device tree is generated with SDK 2017.2:

pl.dtsi

/ {
    amba_pl: amba_pl@0 {
        #address-cells = <2>;
        #size-cells = <2>;
        compatible = "simple-bus";
        ranges ;
        axi_dma_0: dma@a0000000 {
            #dma-cells = <1>;
            clock-names = "s_axi_lite_aclk", "m_axi_sg_aclk", "m_axi_mm2s_aclk", "m_axi_s2mm_aclk";
            clocks = <&misc_clk_0>, <&misc_clk_0>, <&misc_clk_0>, <&misc_clk_0>;
            compatible = "xlnx,axi-dma-1.00.a";
            interrupt-parent = <&gic>;
            interrupts = <0 89 4 0 90 4>;
            reg = <0x0 0xa0000000 0x0 0x10000>;
            xlnx,addrwidth = <0x20>;
            xlnx,include-sg ;
            dma-channel@a0000000 {
                compatible = "xlnx,axi-dma-mm2s-channel";
                dma-channels = <0x1>;
                interrupts = <0 89 4>;
                xlnx,datawidth = <0x20>;
                xlnx,device-id = <0x0>;
            };
            dma-channel@a0000030 {
                compatible = "xlnx,axi-dma-s2mm-channel";
                dma-channels = <0x1>;
                interrupts = <0 90 4>;
                xlnx,datawidth = <0x20>;
                xlnx,device-id = <0x1>;
            };
        };
        psu_ctrl_ipi: PERIPHERAL@ff380000 {
            compatible = "xlnx,PERIPHERAL-1.0";
            reg = <0x0 0xff380000 0x0 0x80000>;
        };
        psu_message_buffers: PERIPHERAL@ff990000 {
            compatible = "xlnx,PERIPHERAL-1.0";
            reg = <0x0 0xff990000 0x0 0x10000>;
        };
        misc_clk_0: misc_clk_0 {
            compatible = "fixed-clock";
            #clock-cells = <0>;
            clock-frequency = <100000000>;
        };
    };
};

 

The Device tree is modified to add clock informations according to AXI DMA Driver Problem - Community Forums

The boot problem is still persistent when using clkc 71 instead of the generated misc_clk_0, as suggest in AXI DMA test failure - Community Forums

 

I think it can be linked to the clock or maybe the Analog Devices' kernel doesn't support Xilinx DMA driver.

Do you have any idea ?

 

Thanks for your help!

Outcomes