AnsweredAssumed Answered

Zedboard ad9467 linux kernel hang

Question asked by rscavetta on Sep 24, 2015
Latest reply on Sep 29, 2015 by rscavetta

Hey Guys,


First post to the forum so please let me know if I'm in the wrong place.


I'm trying to bring up a Linux kernel with ad9467 support but the kernel hangs in the boot process.  I have tried building the drivers both as in-kernel and loadable modules with the same result.




     HW: ZedBoard Rev D

     Linux source: xcomm_zynq branch of the ADI Linux sources ( )

     Device Tree: zynq-zed-adv7511-ad9467-fmc-250ebz.dts


Build process (per a few ref designs I found online)


$ make make zynq_xcomm_adv7511_defconfig

$ make UIMAGE_LOADADDR=0x8000 uImage

$ make zynq-zed-adv7511-ad9467-fmc-250ebz.dtb


dmesg log:


zynq-uboot> boot

Device: zynq_sdhci

Manufacturer ID: 2

OEM: 544d

Name: SD16G

Tran Speed: 50000000

Rd Block Len: 512

SD version 2.0

High Capacity: Yes

Capacity: 14.9 GiB

Bus Width: 4-bit

Copying Linux from SD to RAM...

reading uImage

3336952 bytes read in 324 ms (9.8 MiB/s)

reading devicetree.dtb

12246 bytes read in 16 ms (747.1 KiB/s)

## Booting kernel from Legacy Image at 03000000 ...

   Image Name:   Linux-4.0.0-gf556d60

   Image Type:   ARM Linux Kernel Image (uncompressed)

   Data Size:    3336888 Bytes = 3.2 MiB

   Load Address: 00008000

   Entry Point:  00008000

   Verifying Checksum ... OK

## Flattened Device Tree blob at 02a00000

   Booting using the fdt blob at 0x2a00000

   Loading Kernel Image ... OK

   Loading Device Tree to 0fffa000, end 0fffffd5 ... OK


Starting kernel ...


Uncompressing Linux... done, booting the kernel.

Booting Linux on physical CPU 0x0

Linux version 4.0.0-gf556d60 (*****@****************) (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-23) ) #18 SMP PREEMPT Thu Sep 24 18:10:24 EDT 2015

CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d

CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache

Machine model: Xilinx Zynq ZED

bootconsole [earlycon0] enabled

cma: Reserved 128 MiB at 0x11000000

Memory policy: Data cache writealloc

PERCPU: Embedded 10 pages/cpu @d0c77000 s12096 r8192 d20672 u40960

Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 101600

Kernel command line: console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1 mem=400M

PID hash table entries: 2048 (order: 1, 8192 bytes)

Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)

Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)

Memory: 267664K/409600K available (4436K kernel code, 238K rwdata, 1788K rodata, 212K init, 133K bss, 10864K reserved, 131072K cma-reserved, 0K highmem)

Virtual kernel memory layout:

    vector  : 0xffff0000 - 0xffff1000   (   4 kB)

    fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)

    vmalloc : 0xd9800000 - 0xff000000   ( 600 MB)

    lowmem  : 0xc0000000 - 0xd9000000   ( 400 MB)

    pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)

    modules : 0xbf000000 - 0xbfe00000   (  14 MB)

      .text : 0xc0008000 - 0xc061c5a8   (6226 kB)

      .init : 0xc061d000 - 0xc0652000   ( 212 kB)

      .data : 0xc0652000 - 0xc068dac0   ( 239 kB)

       .bss : 0xc068dac0 - 0xc06aeee8   ( 134 kB)

Preemptible hierarchical RCU implementation.

    Additional per-CPU info printed with stalls.

    RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.

RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2

NR_IRQS:16 nr_irqs:16 16

L2C: platform modifies aux control register: 0x72360000 -> 0x72760000

L2C: DT/platform modifies aux control register: 0x72360000 -> 0x72760000

L2C-310 erratum 769419 enabled

L2C-310 enabling early BRESP for Cortex-A9

L2C-310 full line of zeros enabled for Cortex-A9

L2C-310 ID prefetch enabled, offset 1 lines

L2C-310 dynamic clock gating enabled, standby mode enabled

L2C-310 cache controller enabled, 8 ways, 512 kB

L2C-310: CACHE_ID 0x410000c8, AUX_CTRL 0x76760001

slcr mapped to d9804000

zynq_clock_init: clkc starts at d9804100

Zynq clock init

sched_clock: 16 bits at 54kHz, resolution 18432ns, wraps every 1207951633ns

timer #0 at d9808000, irq=16

Console: colour dummy device 80x30

Calibrating delay loop... 1332.01 BogoMIPS (lpj=6660096)

pid_max: default: 32768 minimum: 301

Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)

Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)

CPU: Testing write buffer coherency: ok

CPU0: thread -1, cpu 0, socket 0, mpidr 80000000

Setting up static identity map for 0x431488 - 0x4314e0

CPU1: thread -1, cpu 1, socket 0, mpidr 80000001

Brought up 2 CPUs

SMP: Total of 2 processors activated (2664.03 BogoMIPS).

CPU: All CPU(s) started in SVC mode.

devtmpfs: initialized

VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4

pinctrl core: initialized pinctrl subsystem

NET: Registered protocol family 16

DMA: preallocated 256 KiB pool for atomic coherent allocations

cpuidle: using governor ladder

cpuidle: using governor menu

hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.

hw-breakpoint: maximum watchpoint size is 4 bytes.

zynq-ocm f800c000.ps7-ocm: ZYNQ OCM pool: 256 KiB @ 0xd9880000


[**** HANG ****]


The only u-boot config item I changed was setting fdt_high=0x10000000, we moved this b/c we are limiting mem to 400M via bootargs reserving 112M for sample buffers.  The basic ZedBoard device tree & kernel boot fine, it's just this new config for the ad9467 that I can't get to boot. 


Any insight will be greatly appreciated as I am an applications/driver guy with some Linux kernel experience but the hardware is quite foreign to me so it's very possible I've made a simple mistake somewhere...  I just don't where or how to start investigating.