Post Go back to editing

AD463x linux driver panics on boot if no device is found during probe

Category: Software
Product Number: AD4630-24
Software Version: Linux analog 5.10.0-14457-gb9a2f0ae835b-dirty #5 SMP PREEMPT Wed Sep 14 11:15:42 EEST 2022 armv7l GNU/Linux

Hallo there,

Using a recent kernel build with the latest AD463x driver on a ZedBoard, the kernel panics at boot if the ad463x probe function cannot find or detect an AD463x type device, which is unexpected and undesirable behavior.  Can a fix be made so the driver probe fails more gracefully, letting boot continue, thanks.

Regards,

Michael.

Booting Linux on physical CPU 0x0
Linux version 5.10.0-14457-gb9a2f0ae835b-dirty (sergiu@ADI) (arm-xilinx-linux-gnueabi-gcc.real (GCC) 10.2.0, GNU ld (GNU Binutils) 2.35.0.20200730) #5 SMP PREEMPT Wed Sep 14 11:15:42 EEST 2022
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
OF: fdt: Machine model: Xilinx Zynq ZED
OF: fdt: earlycon: stdout-path /amba@0/uart@E0001000 not found
Memory policy: Data cache writealloc
cma: Reserved 128 MiB at 0x16800000
Zone ranges:
  Normal   [mem 0x0000000000000000-0x000000001fffffff]
  HighMem  empty
Movable zone start for each node
Early memory node ranges
  node   0: [mem 0x0000000000000000-0x000000001fffffff]
Initmem setup node 0 [mem 0x0000000000000000-0x000000001fffffff]
percpu: Embedded 15 pages/cpu s29900 r8192 d23348 u61440
Built 1 zonelists, mobility grouping on.  Total pages: 130048
Kernel command line: console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlycon rootfstype=ext4 rootwait clk_ignore_unused cpuidle.off=1
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes, linear)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes, linear)
mem auto-init: stack:off, heap alloc:off, heap free:off
Memory: 366112K/524288K available (11264K kernel code, 802K rwdata, 7484K rodata, 1024K init, 348K bss, 27104K reserved, 131072K cma-reserved, 0K highmem)
rcu: Preemptible hierarchical RCU implementation.
rcu:    RCU event tracing is enabled.
rcu:    RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
        Trampoline variant of Tasks RCU enabled.
rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
efuse mapped to (ptrval)
slcr mapped to (ptrval)
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
random: get_random_bytes called from start_kernel+0x33c/0x4e0 with crng_init=0
zynq_clock_init: clkc starts at (ptrval)
Zynq clock init
sched_clock: 64 bits at 333MHz, resolution 3ns, wraps every 4398046511103ns
clocksource: arm_global_timer: mask: 0xffffffffffffffff max_cycles: 0x4ce07af025, max_idle_ns: 440795209040 ns
Switching to timer-based delay loop, resolution 3ns
clocksource: ttc_clocksource: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 537538477 ns
timer #0 at (ptrval), irq=25
Console: colour dummy device 80x30
Calibrating delay loop (skipped), value calculated using timer frequency.. 666.66 BogoMIPS (lpj=3333333)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
CPU: Testing write buffer coherency: ok
CPU0: Spectre v2: using BPIALL workaround
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x100000 - 0x100060
rcu: Hierarchical SRCU implementation.
smp: Bringing up secondary CPUs ...
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
CPU1: Spectre v2: using BPIALL workaround
smp: Brought up 1 node, 2 CPUs
SMP: Total of 2 processors activated (1333.33 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
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
futex hash table entries: 512 (order: 3, 32768 bytes, linear)
pinctrl core: initialized pinctrl subsystem
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
thermal_sys: Registered thermal governor 'step_wise'
hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
hw-breakpoint: maximum watchpoint size is 4 bytes.
zynq-ocm f800c000.ocmc: ZYNQ OCM pool: 256 KiB @ 0x(ptrval)
e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 33, base_baud = 3125000) is a xuartps
printk: console [ttyPS0] enabled
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
mc: Linux media interface: v0.10
videodev: Linux video capture interface: v2.00
jesd204: found 0 devices and 0 topologies
FPGA manager framework
Advanced Linux Sound Architecture Driver Initialized.
clocksource: Switched to clocksource arm_global_timer
NET: Registered protocol family 2
tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 6144 bytes, linear)
TCP established hash table entries: 4096 (order: 2, 16384 bytes, linear)
TCP bind hash table entries: 4096 (order: 3, 32768 bytes, linear)
TCP: Hash tables configured (established 4096 bind 4096)
UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
hw perfevents: no interrupt-affinity property for /pmu@f8891000, guessing.
hw perfevents: enabled with armv7_cortex_a9 PMU driver, 7 counters available
workingset: timestamp_bits=30 max_order=17 bucket_order=0
NFS: Registering the id_resolver key type
Key type id_resolver registered
Key type id_legacy registered
nfs4filelayout_init: NFSv4 File Layout Driver Registering...
fuse: init (API version 7.32)
io scheduler mq-deadline registered
io scheduler kyber registered
zynq-pinctrl 700.pinctrl: zynq pinctrl initialized
dma-pl330 f8003000.dmac: Loaded driver for PL330 DMAC-241330
dma-pl330 f8003000.dmac:        DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
brd: module loaded
loop: module loaded
Registered mathworks_ip class
spi-nor spi1.0: found s25fl256s1, expected n25q128a11
spi-nor spi1.0: s25fl256s1 (32768 Kbytes)
5 fixed-partitions partitions found on MTD device spi1.0
Creating 5 MTD partitions on "spi1.0":
0x000000000000-0x000000500000 : "boot"
0x000000500000-0x000000520000 : "bootenv"
0x000000520000-0x000000540000 : "config"
0x000000540000-0x000000fc0000 : "image"
0x000000fc0000-0x000002000000 : "spare"
MACsec IEEE 802.1AE
libphy: Fixed MDIO Bus: probed
tun: Universal TUN/TAP device driver, 1.6
libphy: MACB_mii_bus: probed
macb e000b000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xe000b000 irq 35 (00:0a:35:00:01:22)
usbcore: registered new interface driver asix
usbcore: registered new interface driver ax88179_178a
usbcore: registered new interface driver cdc_ether
usbcore: registered new interface driver net1080
usbcore: registered new interface driver cdc_subset
usbcore: registered new interface driver zaurus
usbcore: registered new interface driver cdc_ncm
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
usbcore: registered new interface driver uas
usbcore: registered new interface driver usb-storage
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial support registered for generic
usbcore: registered new interface driver ftdi_sio
usbserial: USB Serial support registered for FTDI USB Serial Device
usbcore: registered new interface driver upd78f0730
usbserial: USB Serial support registered for upd78f0730
ULPI transceiver vendor/product ID 0x0451/0x1507
Found TI TUSB1210 ULPI transceiver.
ULPI integrity check: passed.
ci_hdrc ci_hdrc.0: EHCI Host Controller
ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.10
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: EHCI Host Controller
usb usb1: Manufacturer: Linux 5.10.0-14457-gb9a2f0ae835b-dirty ehci_hcd
usb usb1: SerialNumber: ci_hdrc.0
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
ci_hdrc ci_hdrc.0: remove, state 1
i2c /dev entries driver
usb usb1: USB disconnect, device number 1
adv7511 0-0039: supply avdd not found, using dummy regulator
ci_hdrc ci_hdrc.0: USB bus 1 deregistered
adv7511 0-0039: supply dvdd not found, using dummy regulator
adv7511 0-0039: supply pvdd not found, using dummy regulator
adv7511 0-0039: supply bgvdd not found, using dummy regulator
adv7511 0-0039: supply dvdd-3v not found, using dummy regulator
at24 1-0050: supply vcc not found, using dummy regulator
at24 1-0050: 256 byte 24c02 EEPROM, writable, 1 bytes/write
usbcore: registered new interface driver uvcvideo
USB Video Class driver (1.1.1)
gspca_main: v2.14.0 registered
cdns-wdt f8005000.watchdog: Xilinx Watchdog Timer with timeout 10s
Xilinx Zynq CpuIdle Driver started
failed to register cpuidle driver
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
ledtrig-cpu: registered to indicate activity on CPUs
hid: raw HID events driver (C) Jiri Kosina
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
mmc0: SDHCI controller on e0100000.mmc [e0100000.mmc] using ADMA
mmc0: new high speed SDHC card at address aaaa
mmcblk0: mmc0:aaaa SS16G 14.8 GiB
 mmcblk0: p1 p2 p3
ci_hdrc ci_hdrc.0: timeout waiting for 00000800 in OTGSC
spi_master spi0: Timeout occured while waiting for transfer to complete. Hardware is probably broken.
spi_master spi0: Timeout occured while waiting for transfer to complete. Hardware is probably broken.
8<--- cut here ---
Unable to handle kernel paging request at virtual address 74696e11
pgd = (ptrval)
[74696e11] *pgd=00000000
Internal error: Oops: 5 [#1] PREEMPT SMP ARM
Modules linked in:
CPU: 1 PID: 1 Comm: swapper/0 Not tainted 5.10.0-14457-gb9a2f0ae835b-dirty #5
Hardware name: Xilinx Zynq Platform
PC is at spi_engine_rx_next+0x14/0x68
LR is at spi_engine_transfer_one_message+0xf4/0x164
pc : [<c057aa08>]    lr : [<c057b258>]    psr: 20000093
sp : c184bc38  ip : c2059782  fp : c1bb4400
r10: c1bb46e0  r9 : c184bcfc  r8 : c1bb3e8c
r7 : c1bb3ec8  r6 : 60000013  r5 : 00000000  r4 : c1bb3e80
r3 : 74696e0d  r2 : 74696e69  r1 : c184bcfc  r0 : c1bb3e80
Flags: nzCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment none
Control: 18c5387d  Table: 0000404a  DAC: 00000051
Process swapper/0 (pid: 1, stack limit = 0x(ptrval))
Stack: (0xc184bc38 to 0xc184c000)
bc20:                                                       00000006 c1503ec8
bc40: c1bb4000 c1bb4400 c184bca0 00000000 c184bd20 c184bcfc c1bb466c c05781f0
bc60: dfb92040 c184bd10 c184bd4c c1bb45f8 c184bcb4 00000000 c1bb4000 c184bcfc
bc80: c1bb4400 c0575150 c1bb4220 c1bb46e0 c1bb4400 c0578668 c184bc94 60000013
bca0: c1bb460c c1bb460c 00000003 00000000 00000000 c184bcb4 c184bcb4 c1503ec8
bcc0: 00000000 c1bb4000 c184bcfc c1bb4000 c2059400 c2059700 c1918810 00000000
bce0: c134d0cc c05786b0 c184bda8 c184bcfc c1bb4000 c079e9d4 00000000 c184bda8
bd00: c184bda8 c1bb4000 00000000 c05744c4 c184bcac 00000003 00000000 ffffff8d
bd20: c184bd20 c184bd20 00000000 c184bd2c c184bd2c c1503ec8 00000006 c2059700
bd40: c184bde8 c079ea80 c1bb40f8 c2059780 c2059784 00000003 00000000 00000000
bd60: 00000000 00000000 00000000 00000000 00000000 00000000 00000812 00000000
bd80: 00000000 00000000 02625a00 00000000 00000000 00000000 00000000 00000000
bda0: 00000000 00000000 c184bcfc c184bcfc 00000000 c1503ec8 00000000 c184bde8
bdc0: c1bb4000 c079fb5c c2092cb8 c2059700 c1bb4000 00000000 c15e55cc c02b2de4
bde0: 00000001 00000000 c1bbdc08 c02b2948 00000000 c2092cb8 c2092d68 c1bbdc08
be00: 00000000 c02b4a48 00000000 00000004 c2092d68 c1503ec8 c12e6f90 00000000
be20: c1bb4000 c1552ec4 00000000 c15e55cc c1552ed4 00000000 c134d0cc c0574364
be40: c1bb4000 00000000 c15e55d4 c0511a94 00000000 c1bb4000 c1552ed4 c1bb4044
be60: c1552ed4 c143a854 c143a834 c15c9000 c134d0cc c0512154 c1bb4000 00000000
be80: c1bb4044 c0512438 00000000 c1552ed4 c1bb4000 c1537d80 c143a854 c05124c0
bea0: c1552ed4 c1552ed4 c0512440 c050faa8 c184bed0 c188da58 c1bb7434 c1503ec8
bec0: c1552ed4 c2091c00 00000000 c0510e0c c129e544 ffffe000 c1552ed4 c1552ed4
bee0: 00000000 ffffe000 00000000 c0512d20 c15c9000 c1426368 ffffe000 c0101834
bf00: c18cc5cf 00000000 c18cc5ce c013cc00 00000000 c12714c4 00000124 00000000
bf20: 00000000 c14003e0 00000006 00000006 00000000 c18cc5e1 c18cc5ed c1503ec8
bf40: 00000000 00000124 00000007 c1503ec8 c15c9000 c1446798 00000007 c18cc580
bf60: 00000124 c1400ff4 00000006 00000006 00000000 c14003e0 00000000 c14003e0
bf80: 00000000 00000000 c0b2b614 00000000 00000000 00000000 00000000 00000000
bfa0: 00000000 c0b2b61c 00000000 c0100148 00000000 00000000 00000000 00000000
bfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
bfe0: 00000000 00000000 00000000 00000000 00000013 00000000 00000000 00000000
[<c057aa08>] (spi_engine_rx_next) from [<c057b258>] (spi_engine_transfer_one_message+0xf4/0x164)
[<c057b258>] (spi_engine_transfer_one_message) from [<c05781f0>] (__spi_pump_messages+0x394/0x5cc)
[<c05781f0>] (__spi_pump_messages) from [<c0578668>] (__spi_sync+0x234/0x258)
[<c0578668>] (__spi_sync) from [<c05786b0>] (spi_sync+0x24/0x3c)
[<c05786b0>] (spi_sync) from [<c079e9d4>] (spi_sync_transfer.constprop.0+0x68/0x8c)
[<c079e9d4>] (spi_sync_transfer.constprop.0) from [<c079ea80>] (ad4630_spi_read_reg+0x88/0xb8)
[<c079ea80>] (ad4630_spi_read_reg) from [<c079fb5c>] (ad4630_probe+0x578/0x7f0)
[<c079fb5c>] (ad4630_probe) from [<c0574364>] (spi_drv_probe+0x7c/0xa0)
[<c0574364>] (spi_drv_probe) from [<c0511a94>] (really_probe+0xf0/0x4b0)
[<c0511a94>] (really_probe) from [<c0512154>] (driver_probe_device+0x5c/0xb4)
[<c0512154>] (driver_probe_device) from [<c0512438>] (device_driver_attach+0xa8/0xb0)
[<c0512438>] (device_driver_attach) from [<c05124c0>] (__driver_attach+0x80/0x110)
[<c05124c0>] (__driver_attach) from [<c050faa8>] (bus_for_each_dev+0x78/0xc0)
[<c050faa8>] (bus_for_each_dev) from [<c0510e0c>] (bus_add_driver+0xf4/0x1dc)
[<c0510e0c>] (bus_add_driver) from [<c0512d20>] (driver_register+0x88/0x118)
[<c0512d20>] (driver_register) from [<c0101834>] (do_one_initcall+0x58/0x1d0)
[<c0101834>] (do_one_initcall) from [<c1400ff4>] (kernel_init_freeable+0x174/0x1d8)
[<c1400ff4>] (kernel_init_freeable) from [<c0b2b61c>] (kernel_init+0x8/0x118)
[<c0b2b61c>] (kernel_init) from [<c0100148>] (ret_from_fork+0x14/0x2c)
Exception stack(0xc184bfb0 to 0xc184bff8)
bfa0:                                     00000000 00000000 00000000 00000000
bfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
bfe0: 00000000 00000000 00000000 00000000 00000013 00000000
Code: e5901014 ea000004 e3530000 0a00000a (e5932004)
---[ end trace 560cf0299b53454c ]---
note: swapper/0[1] exited with preempt_count 1
Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
CPU0: stopping
CPU: 0 PID: 0 Comm: swapper/0 Tainted: G      D           5.10.0-14457-gb9a2f0ae835b-dirty #5
Hardware name: Xilinx Zynq Platform
[<c010da8c>] (unwind_backtrace) from [<c010a164>] (show_stack+0x10/0x14)
[<c010a164>] (show_stack) from [<c0b1daa4>] (dump_stack+0xc0/0xd4)
[<c0b1daa4>] (dump_stack) from [<c010bf58>] (do_handle_IPI+0x120/0x148)
[<c010bf58>] (do_handle_IPI) from [<c010bf98>] (ipi_handler+0x18/0x20)
[<c010bf98>] (ipi_handler) from [<c016f080>] (handle_percpu_devid_irq+0x78/0x150)
[<c016f080>] (handle_percpu_devid_irq) from [<c0169240>] (__handle_domain_irq+0x7c/0xd0)
[<c0169240>] (__handle_domain_irq) from [<c043b3d4>] (gic_handle_irq+0x80/0x94)
[<c043b3d4>] (gic_handle_irq) from [<c0100b0c>] (__irq_svc+0x6c/0xa8)
Exception stack(0xc1501f20 to 0xc1501f68)
1f20: 00000000 00002a38 dfb92184 c0117280 c1500000 00000000 c1503f14 c1503f50
1f40: 00000000 c144cc10 00000000 c1501f78 c18e8040 c1501f70 c01075c4 c01075c8
1f60: 60000013 ffffffff
[<c0100b0c>] (__irq_svc) from [<c01075c8>] (arch_cpu_idle+0x38/0x3c)
[<c01075c8>] (arch_cpu_idle) from [<c014ab8c>] (do_idle+0x204/0x294)
[<c014ab8c>] (do_idle) from [<c014af1c>] (cpu_startup_entry+0x18/0x1c)
[<c014af1c>] (cpu_startup_entry) from [<c1400df8>] (start_kernel+0x4ac/0x4e0)
[<c1400df8>] (start_kernel) from [<00000000>] (0x0)
---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b ]--

Top Replies

    •   
    Nov 9, 2022 in reply to mbradley +1 verified

    Hi  ,

    It appears that the particular commit that your kernel has been built on is no longer in the ADI Linux git tree.

    I recommend you either build the kernel from scratch using the latest branch…