ADRV9009 connected to MPSoC Xilinx FPGA

1. What is the recommended way to leverage the ADRV9009 HDL Reference Design example for a custom board that uses Xilinx Zynq Ultrascale+ FPGA to communicate with the ADRV9009?
    a. How should the drivers needed for the ADI IPs and libiio be integrated into Petalinux?
    b. Can someone build a Petalinux OS using the Vivado generated .hdf file from a modified version of the HDL example.

2. Is there a resource on how to create a device tree file for a generic platform interfacing with the ADRV9009?
    a. Is ADI provided yocto layer (meta-adi) a possibility for an OS solution? It seems tailored for the example designs. Can it be modified to fit a custom platform?
    b. For example we use HMC7044 ultra low phase noise clock chip instead of ad9528 that is used on the ADRV9009 evaluation board [1].

3. Is the no-os software portable to run on a linux kernel, and does ADI see any issues if we try to run on the no-os software on a linux kernel?

Thanks

Charly



changed wording for clarification
[edited by: charlyelkhoury at 1:02 PM (GMT 0) on 14 Aug 2020]
Parents
  • Hi all,

    We have gotten to a point where we are now trying to boot our board with the ADRV9009. We run into a boot hang and think it's related to clocks, or the transceiver settings used by the util_adxcvr and axi_adxcvr cores. I have used the UltraScale FPGAs Transceivers Wizard (1.7) as prescribed by the wiki to generate the settings used by the *_adxcvr cores.

    Initially, I set everything up to use QPLL1 on both RX and TX, but that failed. I then tried to use the CPLL for both RX/TX and that also failed. The 2 configurations result in a boot hang and the APU cores seem to be held in reset. The following is our boot log:

    U-Boot 2018.01 (Sep 14 2020 - 18:48:04 +0000) Xilinx ZynqMP ZCU102 rev1.0
    
    I2C:   ready
    DRAM:  1023 MiB
    EL Level:	EL2
    Chip ID:	zu4cg
    MMC:   mmc@ff160000: 0 (eMMC)
    reading uboot.env
    In:    serial@ff000000
    Out:   serial@ff000000
    Err:   serial@ff000000
    Model: ZynqMP ZCU102 Rev1.0
    Board: Xilinx ZynqMP
    Net:   ZYNQ GEM: ff0b0000, phyaddr 9, interface gmii
    eth0: ethernet@ff0b0000
    Hit any key to stop autoboot:  4  3  2  1  0 
    ## Loading kernel from FIT Image at 10000000 ...
       Using 'conf@system-top.dtb' configuration
       Trying 'kernel@1' kernel subimage
         Description:  Linux kernel
         Type:         Kernel Image
         Compression:  gzip compressed
         Data Start:   0x10000100
         Data Size:    15960001 Bytes = 15.2 MiB
         Architecture: AArch64
         OS:           Linux
         Load Address: 0x00080000
         Entry Point:  0x00080000
         Hash algo:    sha1
         Hash value:   86ec387b7f616659538762a2e3c2174b75d3a1dc
       Verifying Hash Integrity ... sha1+ OK
    ## Loading ramdisk from FIT Image at 10000000 ...
       Using 'conf@system-top.dtb' configuration
       Trying 'ramdisk@1' ramdisk subimage
         Description:  petalinux-user-image
         Type:         RAMDisk Image
         Compression:  gzip compressed
         Data Start:   0x10f490b8
         Data Size:    8528402 Bytes = 8.1 MiB
         Architecture: AArch64
         OS:           Linux
         Load Address: unavailable
         Entry Point:  unavailable
         Hash algo:    sha1
         Hash value:   0b91510b092d660596acb2d3f7da2861184967fe
       Verifying Hash Integrity ... sha1+ OK
    ## Loading fdt from FIT Image at 10000000 ...
       Using 'conf@system-top.dtb' configuration
       Trying 'fdt@system-top.dtb' fdt subimage
         Description:  Flattened Device Tree blob
         Type:         Flat Device Tree
         Compression:  uncompressed
         Data Start:   0x10f389c8
         Data Size:    67115 Bytes = 65.5 KiB
         Architecture: AArch64
         Hash algo:    sha1
         Hash value:   4e952d87966a6a8cc3e4045667abdd16aa6f3c9b
       Verifying Hash Integrity ... sha1+ OK
       Booting using the fdt blob at 0x10f389c8
       Uncompressing Kernel Image ... OK
       Loading Ramdisk to 077dd000, end 07fff212 ... OK
       Loading Device Tree to 00000000077c9000, end 00000000077dc62a ... OK
    
    Starting kernel ...
    
    [    0.000000] Booting Linux on physical CPU 0x0
    [    0.000000] Linux version 4.14.0-xilinx- (oe-user@oe-host) (gcc version 7.3.0 (GCC)) #8 SMP Fri Sep 11 21:18:54 UTC 2020
    [    0.000000] Boot CPU: AArch64 Processor [410fd034]
    [    0.000000] Machine model: ZynqMP ZCU102 Rev1.0
    [    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 256 MiB at 0x000000002fc00000
    [    0.000000] psci: probing for conduit method from DT.
    [    0.000000] psci: PSCIv1.1 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 20 pages/cpu @ffffffc03fe8c000 s41752 r8192 d31976 u81920
    [    0.000000] Detected VIPT I-cache on CPU0
    [    0.000000] CPU features: enabling workaround for ARM erratum 845719
    [    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 258307
    [    0.000000] Kernel command line: earlycon console=ttyPS0,115200 clk_ignore_unused log_buf_len=8M
    [    0.000000] log_buf_len: 8388608 bytes
    [    0.000000] early log buf free: 63760(97%)
    [    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
    [    0.000000] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes)
    [    0.000000] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes)
    [    0.000000] Memory: 714612K/1047552K available (10300K kernel code, 708K rwdata, 4412K rodata, 20160K init, 2164K bss, 70796K reserved, 262144K cma-reserved)
    [    0.000000] Virtual kernel memory layout:
    [    0.000000]     modules : 0xffffff8000000000 - 0xffffff8008000000   (   128 MB)
    [    0.000000]     vmalloc : 0xffffff8008000000 - 0xffffffbebfff0000   (   250 GB)
    [    0.000000]       .text : 0xffffff8008080000 - 0xffffff8008a90000   ( 10304 KB)
    [    0.000000]     .rodata : 0xffffff8008a90000 - 0xffffff8008ef0000   (  4480 KB)
    [    0.000000]       .init : 0xffffff8008ef0000 - 0xffffff800a2a0000   ( 20160 KB)
    [    0.000000]       .data : 0xffffff800a2a0000 - 0xffffff800a351200   (   709 KB)
    [    0.000000]        .bss : 0xffffff800a351200 - 0xffffff800a56e4b0   (  2165 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 - 0xffffffbf00dfc800   (    13 MB actual)
    [    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc03ff00000   (  1023 MB)
    [    0.000000] Hierarchical RCU implementation.
    [    0.000000] 	RCU event tracing is enabled.
    [    0.000000] 	RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=2.
    [    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
    [    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
    [    0.000000] GIC: Adjusting CPU interface base to 0x00000000f902f000
    [    0.000000] GIC: Using split EOI/Deactivate mode
    [    0.000000] arch_timer: cp15 timer(s) running at 33.33MHz (phys).
    [    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x7b0074340, max_idle_ns: 440795202884 ns
    [    0.000003] sched_clock: 56 bits at 33MHz, resolution 30ns, wraps every 2199023255543ns
    [    0.008259] Console: colour dummy device 80x25
    [    0.012388] Calibrating delay loop (skipped), value calculated using timer frequency.. 66.66 BogoMIPS (lpj=133332)
    [    0.022668] pid_max: default: 32768 minimum: 301
    [    0.027338] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes)
    [    0.033916] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes)
    [    0.041620] ASID allocator initialised with 65536 entries
    [    0.046418] Hierarchical SRCU implementation.
    [    0.050984] EFI services will not be available.
    [    0.055210] zynqmp_plat_init Platform Management API v1.1
    [    0.060557] zynqmp_plat_init Trustzone version v1.0
    [    0.065458] smp: Bringing up secondary CPUs ...
    [    0.211225] Detected VIPT I-cache on CPU1
    [    0.211254] CPU1: Booted secondary processor [410fd034]
    [    0.211307] smp: Brought up 1 node, 2 CPUs
    [    0.218930] SMP: Total of 2 processors activated.
    [    0.223602] CPU features: detected feature: 32-bit EL0 Support
    [    0.229399] CPU: All CPU(s) started at EL2
    [    0.233469] alternatives: patching kernel code
    [    0.238369] devtmpfs: initialized
    [    0.246843] random: get_random_u32 called from bucket_table_alloc+0x108/0x260 with crng_init=0
    [    0.249986] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
    [    0.250126] random: fast init done
    [    0.262864] futex hash table entries: 512 (order: 4, 65536 bytes)
    [    0.274142] xor: measuring software checksum speed
    [    0.312995]    8regs     :  2303.000 MB/sec
    [    0.353023]    8regs_prefetch:  2053.000 MB/sec
    [    0.393050]    32regs    :  2830.000 MB/sec
    [    0.433079]    32regs_prefetch:  2379.000 MB/sec
    [    0.433107] xor: using function: 32regs (2830.000 MB/sec)
    [    0.437491] pinctrl core: initialized pinctrl subsystem
    [    0.443140] NET: Registered protocol family 16
    [    0.447635] cpuidle: using governor menu
    [    0.451323] vdso: 2 pages (1 code @ ffffff8008a96000, 1 data @ ffffff800a2a4000)
    [    0.458276] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
    [    0.465499] DMA: preallocated 256 KiB pool for atomic allocations
    [    0.492170] reset_zynqmp reset-controller: Xilinx zynqmp reset driver probed
    [    0.494069] ARM CCI_400_r1 PMU driver probed
    [    0.498174] zynqmp-pinctrl ff180000.pinctrl: zynqmp pinctrl initialized
    [    0.518187] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
    [    0.584665] raid6: int64x1  gen()   404 MB/s
    [    0.652671] raid6: int64x1  xor()   443 MB/s
    [    0.720731] raid6: int64x2  gen()   690 MB/s
    [    0.788745] raid6: int64x2  xor()   602 MB/s
    [    0.856813] raid6: int64x4  gen()  1043 MB/s
    [    0.924854] raid6: int64x4  xor()   741 MB/s
    [    0.992964] raid6: int64x8  gen()   980 MB/s
    [    1.061008] raid6: int64x8  xor()   745 MB/s
    [    1.129093] raid6: neonx1   gen()   726 MB/s
    [    1.197136] raid6: neonx1   xor()   853 MB/s
    [    1.265193] raid6: neonx2   gen()  1168 MB/s
    [    1.333240] raid6: neonx2   xor()  1200 MB/s
    [    1.401316] raid6: neonx4   gen()  1506 MB/s
    [    1.469377] raid6: neonx4   xor()  1437 MB/s
    [    1.537452] raid6: neonx8   gen()  1650 MB/s
    [    1.605500] raid6: neonx8   xor()  1525 MB/s
    [    1.605526] raid6: using algorithm neonx8 gen() 1650 MB/s
    [    1.609490] raid6: .... xor() 1525 MB/s, rmw enabled
    [    1.614421] raid6: using neon recovery algorithm
    [    1.619879] SCSI subsystem initialized
    [    1.622885] usbcore: registered new interface driver usbfs
    [    1.628207] usbcore: registered new interface driver hub
    [    1.633477] usbcore: registered new device driver usb
    [    1.638524] media: Linux media interface: v0.10
    [    1.642986] Linux video capture interface: v2.00
    [    1.647582] pps_core: LinuxPPS API ver. 1 registered
    [    1.652482] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
    [    1.661574] PTP clock support registered
    [    1.665642] zynqmp-ipi ff9905c0.mailbox: Probed ZynqMP IPI Mailbox driver.
    [    1.672406] FPGA manager framework
    [    1.675756] fpga-region fpga-full: FPGA Region probed
    [    1.680761] Advanced Linux Sound Architecture Driver Initialized.
    [    1.686973] Bluetooth: Core ver 2.22
    [    1.690295] NET: Registered protocol family 31
    [    1.694696] Bluetooth: HCI device and connection manager initialized
    [    1.701012] Bluetooth: HCI socket layer initialized
    [    1.705854] Bluetooth: L2CAP socket layer initialized
    [    1.710884] Bluetooth: SCO socket layer initialized
    [    1.716790] clocksource: Switched to clocksource arch_sys_counter
    [    1.721847] VFS: Disk quotas dquot_6.6.0
    [    1.725790] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
    [    1.736511] NET: Registered protocol family 2
    [    1.737120] TCP established hash table entries: 8192 (order: 4, 65536 bytes)
    [    1.743882] TCP bind hash table entries: 8192 (order: 5, 131072 bytes)
    [    1.750436] TCP: Hash tables configured (established 8192 bind 8192)
    [    1.756683] UDP hash table entries: 512 (order: 2, 16384 bytes)
    [    1.762532] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
    [    1.768912] NET: Registered protocol family 1
    [    1.773317] RPC: Registered named UNIX socket transport module.
    [    1.779045] RPC: Registered udp transport module.
    [    1.783705] RPC: Registered tcp transport module.
    [    1.788375] RPC: Registered tcp NFSv4.1 backchannel transport module.
    [    1.853591] Trying to unpack rootfs image as initramfs...
    [    2.186688] Freeing initrd memory: 8328K
    [    2.187068] hw perfevents: no interrupt-affinity property for /pmu, guessing.
    [    2.192188] hw perfevents: enabled with armv8_pmuv3 PMU driver, 7 counters available
    [    2.200412] audit: initializing netlink subsys (disabled)
    [    2.205209] audit: type=2000 audit(2.115:1): state=initialized audit_enabled=0 res=1
    [    2.205512] workingset: timestamp_bits=62 max_order=18 bucket_order=0
    [    2.219810] NFS: Registering the id_resolver key type
    [    2.224269] Key type id_resolver registered
    [    2.228406] Key type id_legacy registered
    [    2.232389] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
    [    2.267678] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)
    [    2.269453] io scheduler noop registered
    [    2.273318] io scheduler deadline registered
    [    2.277570] io scheduler cfq registered (default)
    [    2.282226] io scheduler mq-deadline registered
    [    2.286723] io scheduler kyber registered
    [    2.293002] xilinx-zynqmp-dma fd500000.dma: ZynqMP DMA driver Probe success
    [    2.297761] xilinx-zynqmp-dma fd510000.dma: ZynqMP DMA driver Probe success
    [    2.304674] xilinx-zynqmp-dma fd520000.dma: ZynqMP DMA driver Probe success
    [    2.311592] xilinx-zynqmp-dma fd530000.dma: ZynqMP DMA driver Probe success
    [    2.318516] xilinx-zynqmp-dma fd540000.dma: ZynqMP DMA driver Probe success
    [    2.325436] xilinx-zynqmp-dma fd550000.dma: ZynqMP DMA driver Probe success
    [    2.332356] xilinx-zynqmp-dma fd560000.dma: ZynqMP DMA driver Probe success
    [    2.339275] xilinx-zynqmp-dma fd570000.dma: ZynqMP DMA driver Probe success
    [    2.346246] xilinx-zynqmp-dma ffa80000.dma: ZynqMP DMA driver Probe success
    [    2.353117] xilinx-zynqmp-dma ffa90000.dma: ZynqMP DMA driver Probe success
    [    2.360032] xilinx-zynqmp-dma ffaa0000.dma: ZynqMP DMA driver Probe success
    [    2.366953] xilinx-zynqmp-dma ffab0000.dma: ZynqMP DMA driver Probe success
    [    2.373873] xilinx-zynqmp-dma ffac0000.dma: ZynqMP DMA driver Probe success
    [    2.380803] xilinx-zynqmp-dma ffad0000.dma: ZynqMP DMA driver Probe success
    [    2.387715] xilinx-zynqmp-dma ffae0000.dma: ZynqMP DMA driver Probe success
    [    2.394632] xilinx-zynqmp-dma ffaf0000.dma: ZynqMP DMA driver Probe success
    [    2.439394] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
    [    2.441436] PLL: shutdown
    [    2.442709] zynqmp_pll_disable() clock disable failed for dpll_int, ret = -13
    [    2.443137] cacheinfo: Unable to detect cache hierarchy for CPU 0
    [    2.448830] brd: module loaded
    [    2.452751] loop: module loaded
    [    2.464638] libphy: Fixed MDIO Bus: probed
    [    2.467070] tun: Universal TUN/TAP device driver, 1.6
    [    2.473282] CAN device driver interface
    [    2.475487] macb ff0b0000.ethernet: Not enabling partial store and forward
    [    2.482174] libphy: MACB_mii_bus: probed
    [    2.560849] macb ff0b0000.ethernet eth0: Cadence GEM rev 0x50070106 at 0xff0b0000 irq 29 (00:0a:35:00:22:01)
    [    2.565030] Xilinx PCS/PMA PHY ff0b0000.ethernet-ffffffff:09: attached PHY driver [Xilinx PCS/PMA PHY] (mii_bus:phy_addr=ff0b0000.ethernet-ffffffff:09, irq=POLL)
    [    2.579956] usbcore: registered new interface driver asix
    [    2.584795] usbcore: registered new interface driver ax88179_178a
    [    2.590821] usbcore: registered new interface driver cdc_ether
    [    2.596618] usbcore: registered new interface driver net1080
    [    2.602239] usbcore: registered new interface driver cdc_subset
    [    2.608123] usbcore: registered new interface driver zaurus
    [    2.613667] usbcore: registered new interface driver cdc_ncm
    [    2.619986] xilinx-axipmon ffa00000.perf-monitor: Probed Xilinx APM
    [    2.625928] usbcore: registered new interface driver uas
    [    2.630795] usbcore: registered new interface driver usb-storage
    [    2.637203] rtc_zynqmp ffa60000.rtc: rtc core: registered ffa60000.rtc as rtc0
    [    2.643960] i2c /dev entries driver
    [    2.647701] cdns-i2c ff020000.i2c: 400 kHz mmio ff020000 irq 31
    [    2.653449] IR NEC protocol handler initialized
    [    2.657762] IR RC5(x/sz) protocol handler initialized
    [    2.662769] IR RC6 protocol handler initialized
    [    2.667266] IR JVC protocol handler initialized
    [    2.671766] IR Sony protocol handler initialized
    [    2.676349] IR SANYO protocol handler initialized
    [    2.681020] IR Sharp protocol handler initialized
    [    2.685691] IR MCE Keyboard/mouse protocol handler initialized
    [    2.691486] IR XMP protocol handler initialized
    [    2.696653] usbcore: registered new interface driver uvcvideo
    [    2.701695] USB Video Class driver (1.1.1)
    [    2.706322] Bluetooth: HCI UART driver ver 2.3
    [    2.710178] Bluetooth: HCI UART protocol H4 registered
    [    2.715277] Bluetooth: HCI UART protocol BCSP registered
    [    2.720552] Bluetooth: HCI UART protocol ATH3K registered
    [    2.725915] Bluetooth: HCI UART protocol Three-wire (H5) registered
    [    2.732177] Bluetooth: HCI UART protocol Intel registered
    [    2.737507] Bluetooth: HCI UART protocol QCA registered
    [    2.742722] usbcore: registered new interface driver bcm203x
    [    2.748345] usbcore: registered new interface driver bpa10x
    [    2.753882] usbcore: registered new interface driver bfusb
    [    2.759330] usbcore: registered new interface driver btusb
    [    2.764755] Bluetooth: Generic Bluetooth SDIO driver ver 0.1
    [    2.770416] usbcore: registered new interface driver ath3k
    [    2.776394] sdhci: Secure Digital Host Controller Interface driver
    [    2.781969] sdhci: Copyright(c) Pierre Ossman
    [    2.786292] sdhci-pltfm: SDHCI platform and OF driver helper
    [    2.836795] mmc0: SDHCI controller on ff160000.mmc [ff160000.mmc] using ADMA 64-bit
    [    2.844650] ledtrig-cpu: registered to indicate activity on CPUs
    [    2.845187] usbcore: registered new interface driver usbhid
    [    2.850547] usbhid: USB HID core driver
    [    2.905576] axi_adxcvr 84a60000.axi-adxcvr-rx: AXI-ADXCVR-RX (17.01.a) using GTH4 at 0x84A60000 mapped to 0xffffff800a5fd000. Number of lanes: 2.
    [    2.913390] axi_adxcvr 84a80000.axi-adxcvr-tx: AXI-ADXCVR-TX (17.01.a) using GTH4 at 0x84A80000 mapped to 0xffffff800a605000. Number of lanes: 2.
    [    2.927157] axi_sysid 85000000.axi-sysid-0: [adrv9009] on [zcu102] git <70d139af7f32c5d6f4e8d19a5d1c355f2a081f6b> clean [2020-04-17 18:24:24] UTC
    [    2.939202] ÿ
    

    1. How do you recommend we debug this issue? I have gone through the settings generated by the transceiver wizard and haven't found anything amiss. To add some detail, we are using the GTH transceiver and I found that a few fields in util_adxcvr don't apply to us (Gty related) or simply don't match up with anything generated by the wizard (e.g. Qpll Cfg).

    For the axi_adrv9009_adxcvr_rx/tx device tree nodes, we use the following options to enable the CPLL on both RX/TX:
    RX
    adi,sys-clk-select = <0x0>;
    adi,out-clk-select = <0x3>;
    adi,use-lpm-enable;
    adi,use-cpll-enable;


    TX
    adi,sys-clk-select = <0x0>;
    adi,out-clk-select = <0x3>;
    adi,use-cpll-enable;

    2. Do these options look right for axi_adrv9009_adxcvr_rx/tx?

    3. Also would like to know if "div40" clock is needed in the axi_adrv9009_adxcvr_rx/tx node for our application. And if "lane_clk" and "device_clk" should be the same in the axi_adrv9009_rx/tx_jesd nodes.

    Thanks,
    Dave

  • 0
    •  Analog Employees 
    on Sep 15, 2020 1:08 PM 6 months ago in reply to dave.s

    Hi Dave,

    So, for the dtb properties I'm not the right one to answer you. But for the boot hang, it might be that you have some device in your devicetree that maybe is not port of your design? In this case, when the driver probes and tries to read/write some device memory that does no exist, the kernel will hang...

    So, to debug this, I would first start to check your compiled devicetree, generate a dts out of it (using dtc) and make sure you are not defining any PL node that it's not part of your reference design...

    Hope this helps,

    - Nuno Sá

  • Hi nsa,

    We suspect that the axi clkgen may be what's causing our crash. I have the RX and TX axi clkgen cores mapped to the same address that the reference design has. Would you know of anything that could cause such a crash with the axi clkgen core? We seem to be able to complete a few reads/writes before it dies, so I don't think it's a memory mapping issue.

    Thanks,
    Dave

  • 0
    •  Analog Employees 
    on Sep 16, 2020 8:37 AM 6 months ago in reply to dave.s

    Hi Dave,

    I have the RX and TX axi clkgen cores mapped to the same address that the reference design has

    What do you mean by this? They have different ranges right? You need to make sure that the memory addresses are right since accessing an invalid address can lead to the hang..

    Would you know of anything that could cause such a crash with the axi clkgen core?

    Not from the top of my head...

    Could you already confirm that you don't any node on your devicetree that is not port of your design?

    - Nuno Sá

  • Yes, they have different ranges. I meant that they are mapped to 0x83c0_0000 (TX) and 0x83c1_0000 (RX). I've generated the dts and made sure the cores in the FPGA design are correctly mapped and that there are no nodes that aren't part of the design.

    What I have seen is that the hang seems to occur when reset is sent to the clkgen core. github.com/.../clk-axi-clkgen.c

  • We also added this patch to the kernel build (https://www.spinics.net/lists/linux-clk/msg06687.html) so the clocks could be enabled/disabled in userspace to rule out other drivers causing the crash.

    Noting the log below the reads of the clkgen cores rate + state verifies read accesses work as expected.

    But when trying to enable the clkgen (for either TX or RX) causes the system to go into RESET on all cores instantly.

    $ cd /sys/devices/platform/
    $cat tx_clkgen_userspace_consumer/state
    disabled
    $ cat tx_clkgen_userspace_consumer/rate
    204800000
    $ cat rx_clkgen_userspace_consumer/state  
    disabled
    $ cat rx_clkgen_userspace_consumer/rate
    204800000
    $ echo 1 > rx_clkgen_userspace_consumer/state 
    ** board hangs and goes into RESET state **

  • Also  "echo 102400000 > rate" works are expected so it isn't writes to AXI bus that cause this but just when the clock attempts to be enabled.

Reply Children