This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TLV320AIC3104: ALSA Soundcard on Linux for Xilinx Ultrascale+ MPSoC not working

Part Number: TLV320AIC3104

Hello there!
I have a custom Xilinx Ultrascale+ MPSoC board with an TLV320AIC3104 audio codec. The codec is connected to the ARM processor via I2C for configuration and is connected to the FPGA for I2S audio interface connection. I've created a block design (hardware design) for the I2S interface. The block design is very basic. I've used the Xilinx Audio Formatter IP, I2S Receiver and Transmitter IP.
I am using petalinux which automatically creates the kernel config and the device tree entries for the hardware design. I think that there is no problem with the auto generated stuff.

Now my job is to add the external hardware to my linux project. I've added the TLV320AIC3104 to the kernel config and enabled the ALSA ASoC Simple-Sound-Card driver.
I've created a two device tree entries: One for the codec and one for the Simple-Sound-Card. There are already device tree entries on mainline linux for the TLV320AIC3104 codec and simple sound card: am57xx-beagle-x15-common.dtsi - arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi - Linux source code (v5.11.10) - Bootlin  (search for TLV320AIC3104 and simple-audio-card for the device tree nodes using Ctrl+F). My device tree entries are pretty much the same but ALSA doen't recognize a sound card! I've also read your short explanation on how to set up the driver: TLV320AIC3XSW-LINUX Driver or library | TI.com but unfortunately it still doesn't work.

Before I test my design on the board I wanted to test the linux image on the emulator to see if everything is set up properly. Unfortunately it isn't linux is booting and working but there are some error messages from UBOOT:

[ 2.665735] Advanced Linux Sound Architecture Driver Initialized.
...
[ 5.375628] xlnx_formatter_pcm 80010000.audio_formatter: sound card device creation failed
[ 5.376359] xlnx_formatter_pcm 80010000.audio_formatter: pcm platform device registered
[ 5.377945] xlnx_i2s 80020000.i2s_receiver: xlnx_i2s_capture DAI registered
[ 5.378645] xlnx_i2s 80030000.i2s_transmitter: xlnx_i2s_playback DAI registered
...
[ 6.477359] asoc-simple-card sound0: parse error -22
[ 6.477870] asoc-simple-card: probe of sound0 failed with error -22
...
[ 6.359714] tlv320aic3x-codec 0-0018: 0-0018 supply IOVDD not found, using dummy regulator
[ 6.361562] tlv320aic3x-codec 0-0018: 0-0018 supply DVDD not found, using dummy regulator
[ 6.362193] tlv320aic3x-codec 0-0018: 0-0018 supply AVDD not found, using dummy regulator
[ 6.362751] tlv320aic3x-codec 0-0018: 0-0018 supply DRVDD not found, using dummy regulator
...
[ 6.664643] ALSA device list:
[ 6.664918] No soundcards found.


Note the asoc-simple-card sound0: parse error -22 issue. -22 is the value of -EINVAL which means "Invalid Arguments"  (source: Errors: Linux System Errors (fnal.gov))
I think it's because one or some device tree properties of simple-audio-card are wrong. But I can't find the problem. I've spend many hours on searching the problem....
Do you know whats the problem? The .dtsi file with my audio nodes (codec, simple-audio-card) is in the attachment. The boot log is also in attached to this post.
 

system-user.dtsi.txt
/include/ "system-conf.dtsi"
/ {
	// symbiotica board codec voltage
	vdd_3v3: codec3v3 {
		/* VDD_3V3 */
		regulator-name = "codec3v3";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
		regulator-boot-on;
		};

	aic_dvdd: codec1v8 {
		/* VDD_3V3 */
		regulator-name = "codec1v8";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		regulator-always-on;
		regulator-boot-on;
		};

	// ASoC sound card (machine driver) - 
	// glue driver which connects I2S, DMA (Audio-Formatter) and codec
	sound0: sound0 {
		compatible = "simple-audio-card";
		simple-audio-card,name = "keba-audio";
		simple-audio-card,widgets =
			"Line", "Line Out",
			"Line", "Line In";
		simple-audio-card,routing =
			"Line Out", 	"LLOUT",
			"Line Out", 	"RLOUT",
			"LINE1L",	"Line In",
			"LINE1R",	"Line In";
		simple-audio-card,format = "i2s";
		simple-audio-card,bitclock-master = <&sound0_master>; // set codec to i2s master
		simple-audio-card,frame-master = <&sound0_master>; // set codec to i2s master
		simple-audio-card,bitclock-inversion;

		simple-audio-card,cpu {
			sound-dai = <&audio_formatter_0>;
			clocks = <&misc_clk_0>;
		};

		sound0_master: simple-audio-card,codec {
			sound-dai = <&tlv320aic3104>;
			clocks = <&misc_clk_0>;
		};
	};
};

&audio_formatter_0 {
	#sound-dai-cells = <0>;
};

// symbiotica board low power audio codec
&i2c0 {
	tlv320aic3104: tlv320aic3104@18 {
			#sound-dai-cells = <0>;
			compatible = "ti,tlv320aic3104";
			reg = <0x18>; // I2C slave address
			// assigned-clocks = <&misc_clk_0>			

			status = "okay";
			adc-settle-ms = <40>;

			ai3x-micbias-vg = <1>; // 2.0V microphone bias
			ai3x-ocmv = <2>; // from datasheet

			// AVDD-supply = <&vdd_3v3>;
			// IOVDD-supply = <&vdd_3v3>;
			// DRVDD-supply = <&vdd_3v3>;
			// DVDD-supply = <&aic_dvdd>;
			};
};


uboot_log.txt
ZYNQ GEM: ff0b0000, mdio bus ff0b0000, phyaddr -1, interface rgmii-id

Warning: ethernet@ff0b0000 (eth0) using random MAC address - 62:97:db:2e:e4:d0
eth0: ethernet@ff0b0000
ZYNQ GEM: ff0e0000, mdio bus ff0e0000, phyaddr -1, interface rgmii-id

Warning: ethernet@ff0e0000 using MAC address from DT
, eth1: ethernet@ff0e0000
Hit any key to stop autoboot:  0 
JTAG: Trying to boot script at 0x20000000
## Executing script at 20000000
## Loading init Ramdisk from Legacy Image at 04000000 ...
   Image Name:   petalinux-image-minimal-zynqmp-g
   Image Type:   AArch64 Linux RAMDisk Image (uncompressed)
   Data Size:    11148943 Bytes = 10.6 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 00100000
   Booting using the fdt blob at 0x100000
   Loading Ramdisk to 7855e000, end 78fffe8f ... OK
   Loading Device Tree to 000000000ffef000, end 000000000ffff4ac ... OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] Linux version 5.4.0-xilinx-v2020.2 (oe-user@oe-host) (gcc version 9.2.0 (GCC)) #1 SMP Thu Mar 25 15:14:01 UTC 2021
[    0.000000] Machine model: xlnx,zynqmp
[    0.000000] earlycon: cdns0 at MMIO 0x00000000ff000000 (options '115200n8')
[    0.000000] printk: bootconsole [cdns0] enabled
[    0.000000] efi: Getting EFI parameters from FDT:
[    0.000000] efi: UEFI not found.
[    0.000000] cma: Reserved 256 MiB at 0x0000000068400000
[    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] psci: SMC Calling Convention v1.1
[    0.000000] percpu: Embedded 22 pages/cpu s49880 r8192 d32040 u90112
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] CPU features: detected: ARM erratum 845719
[    0.000000] CPU features: detected: ARM erratum 843419
[    0.000000] Speculative Store Bypass Disable mitigation not required
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 1031940
[    0.000000] Kernel command line:  earlycon console=ttyPS0,115200 clk_ignore_unused root=/dev/ram0 rw
[    0.000000] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes, linear)
[    0.000000] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] software IO TLB: mapped [mem 0x7bf00000-0x7ff00000] (64MB)
[    0.000000] Memory: 3755664K/4193280K available (12156K kernel code, 752K rwdata, 3820K rodata, 768K init, 562K bss, 175472K reserved, 262144K cma-reserved)
[    0.000000] rcu: Hierarchical RCU implementation.
[    0.000000] rcu: 	RCU event tracing is enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[    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] random: get_random_bytes called from start_kernel+0x2a8/0x42c with crng_init=0
[    0.000000] arch_timer: cp15 timer(s) running at 65.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0xefdb196da, max_idle_ns: 440795204367 ns
[    0.000079] sched_clock: 56 bits at 65MHz, resolution 15ns, wraps every 2199023255550ns
[    0.010440] Console: colour dummy device 80x25
[    0.011769] Calibrating delay loop (skipped), value calculated using timer frequency.. 130.00 BogoMIPS (lpj=260000)
[    0.012179] pid_max: default: 32768 minimum: 301
[    0.015169] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
[    0.015623] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
[    0.062529] ASID allocator initialised with 32768 entries
[    0.063791] rcu: Hierarchical SRCU implementation.
[    0.067461] EFI services will not be available.
[    0.071161] smp: Bringing up secondary CPUs ...
[    0.088263] Detected VIPT I-cache on CPU1
[    0.089078] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
[    0.107454] Detected VIPT I-cache on CPU2
[    0.107818] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]
[    0.121791] Detected VIPT I-cache on CPU3
[    0.122049] CPU3: Booted secondary processor 0x0000000003 [0x410fd034]
[    0.122633] smp: Brought up 1 node, 4 CPUs
[    0.124581] SMP: Total of 4 processors activated.
[    0.124912] CPU features: detected: 32-bit EL0 Support
[    0.125288] CPU features: detected: CRC32 instructions
[    0.127198] CPU: All CPU(s) started at EL2
[    0.127705] alternatives: patching kernel code
[    0.144281] devtmpfs: initialized
[    0.169213] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.169907] futex hash table entries: 1024 (order: 4, 65536 bytes, linear)
[    0.184255] xor: measuring software checksum speed
[    0.224417]    8regs     :  2089.000 MB/sec
[    0.265277]    32regs    :   974.000 MB/sec
[    0.306137]    arm64_neon:  1758.000 MB/sec
[    0.306365] xor: using function: 8regs (2089.000 MB/sec)
[    0.307701] pinctrl core: initialized pinctrl subsystem
[    0.319509] DMI not present or invalid.
[    0.325791] NET: Registered protocol family 16
[    0.336195] DMA: preallocated 256 KiB pool for atomic allocations
[    0.336846] audit: initializing netlink subsys (disabled)
[    0.339896] audit: type=2000 audit(0.292:1): state=initialized audit_enabled=0 res=1
[    0.344745] cpuidle: using governor menu
[    0.346126] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    0.349166] Serial: AMBA PL011 UART driver
[    0.419607] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
[    0.420117] HugeTLB registered 32.0 MiB page size, pre-allocated 0 pages
[    0.420548] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[    0.421006] HugeTLB registered 64.0 KiB page size, pre-allocated 0 pages
[    1.379757] cryptd: max_cpu_qlen set to 1000
[    1.512151] DRBG: Continuing without Jitter RNG
[    1.595018] raid6: neonx8   gen()  1454 MB/s
[    1.664257] raid6: neonx8   xor()   777 MB/s
[    1.733353] raid6: neonx4   gen()  1266 MB/s
[    1.802683] raid6: neonx4   xor()   684 MB/s
[    1.871781] raid6: neonx2   gen()  1005 MB/s
[    1.940962] raid6: neonx2   xor()   664 MB/s
[    2.010683] raid6: neonx1   gen()   775 MB/s
[    2.080190] raid6: neonx1   xor()   431 MB/s
[    2.149202] raid6: int64x8  gen()   997 MB/s
[    2.218524] raid6: int64x8  xor()   733 MB/s
[    2.287827] raid6: int64x4  gen()  1351 MB/s
[    2.356962] raid6: int64x4  xor()   781 MB/s
[    2.426200] raid6: int64x2  gen()   486 MB/s
[    2.495508] raid6: int64x2  xor()   621 MB/s
[    2.564852] raid6: int64x1  gen()   616 MB/s
[    2.634124] raid6: int64x1  xor()   369 MB/s
[    2.634433] raid6: using algorithm neonx8 gen() 1454 MB/s
[    2.634706] raid6: .... xor() 777 MB/s, rmw enabled
[    2.635218] raid6: using neon recovery algorithm
[    2.639551] iommu: Default domain type: Translated 
[    2.643378] SCSI subsystem initialized
[    2.646364] usbcore: registered new interface driver usbfs
[    2.647399] usbcore: registered new interface driver hub
[    2.648077] usbcore: registered new device driver usb
[    2.648937] mc: Linux media interface: v0.10
[    2.649345] videodev: Linux video capture interface: v2.00
[    2.649829] pps_core: LinuxPPS API ver. 1 registered
[    2.650115] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    2.650759] PTP clock support registered
[    2.651219] EDAC MC: Ver: 3.0.0
[    2.658389] zynqmp-ipi-mbox mailbox@ff990400: Registered ZynqMP IPI mbox with TX/RX channels.
[    2.662342] FPGA manager framework
[    2.665735] Advanced Linux Sound Architecture Driver Initialized.
[    2.681498] Bluetooth: Core ver 2.22
[    2.682582] NET: Registered protocol family 31
[    2.682864] Bluetooth: HCI device and connection manager initialized
[    2.683523] Bluetooth: HCI socket layer initialized
[    2.683906] Bluetooth: L2CAP socket layer initialized
[    2.684603] Bluetooth: SCO socket layer initialized
[    2.692295] clocksource: Switched to clocksource arch_sys_counter
[    2.697948] VFS: Disk quotas dquot_6.6.0
[    2.698618] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    2.741767] NET: Registered protocol family 2
[    2.749892] tcp_listen_portaddr_hash hash table entries: 2048 (order: 3, 32768 bytes, linear)
[    2.750784] TCP established hash table entries: 32768 (order: 6, 262144 bytes, linear)
[    2.751776] TCP bind hash table entries: 32768 (order: 7, 524288 bytes, linear)
[    2.753414] TCP: Hash tables configured (established 32768 bind 32768)
[    2.755627] UDP hash table entries: 2048 (order: 4, 65536 bytes, linear)
[    2.756499] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes, linear)
[    2.758904] NET: Registered protocol family 1
[    2.763376] RPC: Registered named UNIX socket transport module.
[    2.763853] RPC: Registered udp transport module.
[    2.764339] RPC: Registered tcp transport module.
[    2.764636] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    2.767160] PCI: CLS 0 bytes, default 64
[    2.770850] Trying to unpack rootfs image as initramfs...
[    3.788730] Freeing initrd memory: 10884K
[    4.771734] Initialise system trusted keyrings
[    4.774084] workingset: timestamp_bits=46 max_order=20 bucket_order=0
[    4.781448] NFS: Registering the id_resolver key type
[    4.782057] Key type id_resolver registered
[    4.782365] Key type id_legacy registered
[    4.782808] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[    4.783799] jffs2: version 2.2. (NAND) (SUMMARY)  © 2001-2006 Red Hat, Inc.
[    4.807746] NET: Registered protocol family 38
[    4.808479] Key type asymmetric registered
[    4.808840] Asymmetric key parser 'x509' registered
[    4.809358] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 246)
[    4.810028] io scheduler mq-deadline registered
[    4.810332] io scheduler kyber registered
[    4.817132] ps_pcie_dma init()
[    4.973103] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[    4.979956] Serial: AMBA driver
[    5.022731] brd: module loaded
[    5.046823] loop: module loaded
[    5.050425] mtdoops: mtd device (mtddev=name/number) must be supplied
[    5.056567] libphy: Fixed MDIO Bus: probed
[    5.060317] tun: Universal TUN/TAP device driver, 1.6
[    5.061492] CAN device driver interface
[    5.063738] usbcore: registered new interface driver asix
[    5.064300] usbcore: registered new interface driver ax88179_178a
[    5.064693] usbcore: registered new interface driver cdc_ether
[    5.065142] usbcore: registered new interface driver net1080
[    5.065617] usbcore: registered new interface driver cdc_subset
[    5.066096] usbcore: registered new interface driver zaurus
[    5.066649] usbcore: registered new interface driver cdc_ncm
[    5.070219] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    5.070569] ehci-pci: EHCI PCI platform driver
[    5.071747] usbcore: registered new interface driver uas
[    5.072332] usbcore: registered new interface driver usb-storage
[    5.078545] rtc_zynqmp ffa60000.rtc: registered as rtc0
[    5.078998] i2c /dev entries driver
[    5.083478] usbcore: registered new interface driver uvcvideo
[    5.083756] USB Video Class driver (1.1.1)
[    5.085458] Bluetooth: HCI UART driver ver 2.3
[    5.085825] Bluetooth: HCI UART protocol H4 registered
[    5.086087] Bluetooth: HCI UART protocol BCSP registered
[    5.086400] Bluetooth: HCI UART protocol LL registered
[    5.086666] Bluetooth: HCI UART protocol ATH3K registered
[    5.087100] Bluetooth: HCI UART protocol Three-wire (H5) registered
[    5.087579] Bluetooth: HCI UART protocol Intel registered
[    5.087888] Bluetooth: HCI UART protocol QCA registered
[    5.088391] usbcore: registered new interface driver bcm203x
[    5.088769] usbcore: registered new interface driver bpa10x
[    5.089101] usbcore: registered new interface driver bfusb
[    5.089421] usbcore: registered new interface driver btusb
[    5.089827] usbcore: registered new interface driver ath3k
[    5.090829] EDAC MC: ECC not enabled
[    5.091669] EDAC ZynqMP-OCM: ECC not enabled - Disabling EDAC driver
[    5.094146] sdhci: Secure Digital Host Controller Interface driver
[    5.094419] sdhci: Copyright(c) Pierre Ossman
[    5.094625] sdhci-pltfm: SDHCI platform and OF driver helper
[    5.096593] ledtrig-cpu: registered to indicate activity on CPUs
[    5.097946] zynqmp_firmware_probe Platform Management API v1.1
[    5.098547] zynqmp_firmware_probe Trustzone version v1.0
[    5.300481] alg: No test for xilinx-zynqmp-aes (zynqmp-aes)
[    5.308653] zynqmp_aes zynqmp_aes: AES Successfully Registered
[    5.308653] 
[    5.311714] alg: No test for xilinx-keccak-384 (zynqmp-keccak-384)
[    5.325892] alg: No test for xilinx-zynqmp-rsa (zynqmp-rsa)
[    5.341782] usbcore: registered new interface driver usbhid
[    5.342151] usbhid: USB HID core driver
[    5.361399] ARM CCI_400_r1 PMU driver probed
[    5.365731] fpga_manager fpga0: Xilinx ZynqMP FPGA Manager registered
[    5.368800] usbcore: registered new interface driver snd-usb-audio
[    5.375628] xlnx_formatter_pcm 80010000.audio_formatter: sound card device creation failed
[    5.376359] xlnx_formatter_pcm 80010000.audio_formatter: pcm platform device registered
[    5.377945] xlnx_i2s 80020000.i2s_receiver: xlnx_i2s_capture DAI registered
[    5.378645] xlnx_i2s 80030000.i2s_transmitter: xlnx_i2s_playback DAI registered
[    5.379862] pktgen: Packet Generator for packet performance testing. Version: 2.75
[    5.392433] Initializing XFRM netlink socket
[    5.393675] NET: Registered protocol family 10
[    5.403207] Segment Routing with IPv6
[    5.405969] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[    5.409952] NET: Registered protocol family 17
[    5.410525] NET: Registered protocol family 15
[    5.411314] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[    5.411877] can: controller area network core (rev 20170425 abi 9)
[    5.412866] NET: Registered protocol family 29
[    5.413178] can: raw protocol (rev 20170425)
[    5.413625] can: broadcast manager protocol (rev 20170425 t)
[    5.414079] can: netlink gateway (rev 20190810) max_hops=1
[    5.415737] Bluetooth: RFCOMM TTY layer initialized
[    5.416255] Bluetooth: RFCOMM socket layer initialized
[    5.416681] Bluetooth: RFCOMM ver 1.11
[    5.417038] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[    5.417351] Bluetooth: BNEP filters: protocol multicast
[    5.417712] Bluetooth: BNEP socket layer initialized
[    5.418095] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[    5.418547] Bluetooth: HIDP socket layer initialized
[    5.420774] 9pnet: Installing 9P2000 support
[    5.421392] Key type dns_resolver registered
[    5.423017] registered taskstats version 1
[    5.423288] Loading compiled-in X.509 certificates
[    5.435149] Btrfs loaded, crc32c=crc32c-generic
[    5.467522] ff000000.serial: ttyPS0 at MMIO 0xff000000 (irq = 41, base_baud = 2170138) is a xuartps
[    5.469811] printk: console [ttyPS0] enabled
[    5.469811] printk: console [ttyPS0] enabled
[    5.470565] printk: bootconsole [cdns0] disabled
[    5.470565] printk: bootconsole [cdns0] disabled
[    5.473102] of-fpga-region fpga-full: FPGA Region probed
[    5.487822] xilinx-zynqmp-dma fd500000.dma: ZynqMP DMA driver Probe success
[    5.488935] xilinx-zynqmp-dma fd510000.dma: ZynqMP DMA driver Probe success
[    5.489790] xilinx-zynqmp-dma fd520000.dma: ZynqMP DMA driver Probe success
[    5.490640] xilinx-zynqmp-dma fd530000.dma: ZynqMP DMA driver Probe success
[    5.491517] xilinx-zynqmp-dma fd540000.dma: ZynqMP DMA driver Probe success
[    5.492572] xilinx-zynqmp-dma fd550000.dma: ZynqMP DMA driver Probe success
[    5.493360] xilinx-zynqmp-dma fd560000.dma: ZynqMP DMA driver Probe success
[    5.494124] xilinx-zynqmp-dma fd570000.dma: ZynqMP DMA driver Probe success
[    5.496542] xilinx-zynqmp-dma ffa80000.dma: ZynqMP DMA driver Probe success
[    5.497397] xilinx-zynqmp-dma ffa90000.dma: ZynqMP DMA driver Probe success
[    5.498266] xilinx-zynqmp-dma ffaa0000.dma: ZynqMP DMA driver Probe success
[    5.499109] xilinx-zynqmp-dma ffab0000.dma: ZynqMP DMA driver Probe success
[    5.500043] xilinx-zynqmp-dma ffac0000.dma: ZynqMP DMA driver Probe success
[    5.500991] xilinx-zynqmp-dma ffad0000.dma: ZynqMP DMA driver Probe success
[    5.501852] xilinx-zynqmp-dma ffae0000.dma: ZynqMP DMA driver Probe success
[    5.502703] xilinx-zynqmp-dma ffaf0000.dma: ZynqMP DMA driver Probe success
[    5.506542] zynqmp-qspi ff0f0000.spi: rx bus width not found
[    5.506909] zynqmp-qspi ff0f0000.spi: tx bus width not found
[    5.510401] spi_master spi0: cannot find modalias for /amba/spi@ff0f0000/flash@0
[    5.510940] spi_master spi0: Failed to create SPI device for /amba/spi@ff0f0000/flash@0
[    5.512371] zynqmp_gpd_attach_dev() domain5 request failed for node 29: -13
[    5.512979] macb ff0b0000.ethernet: failed to add to PM domain domain5: -13
[    5.513415] macb: probe of ff0b0000.ethernet failed with error -13
[    5.517924] macb ff0e0000.ethernet: Not enabling partial store and forward
[    5.518297] macb: GEM doesn't support hardware ptp.
[    5.522862] libphy: MACB_mii_bus: probed
[    5.602829] zynqmp_pll_disable() clock disable failed for dpll_int, ret = -13
[    6.260934] macb ff0e0000.ethernet eth0: Could not attach to PHY
[    6.307557] macb: probe of ff0e0000.ethernet failed with error -110
[    6.311685] xilinx-axipmon ffa00000.perf-monitor: Probed Xilinx APM
[    6.314351] xilinx-axipmon fd0b0000.perf-monitor: Probed Xilinx APM
[    6.315830] xilinx-axipmon fd490000.perf-monitor: Probed Xilinx APM
[    6.317547] xilinx-axipmon ffa10000.perf-monitor: Probed Xilinx APM
[    6.320510] dwc3-of-simple ff9d0000.usb0: dwc3_simple_set_phydata: Can't find usb3-phy
[    6.324828] dwc3 fe200000.dwc3: Failed to get clk 'ref': -2
[    6.337439] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
[    6.338432] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 1
[    6.343985] xhci-hcd xhci-hcd.0.auto: hcc params 0x00087001 hci version 0x100 quirks 0x0000000200010010
[    6.344971] xhci-hcd xhci-hcd.0.auto: irq 47, io mem 0xfe200000
[    6.359714] tlv320aic3x-codec 0-0018: 0-0018 supply IOVDD not found, using dummy regulator
[    6.361562] tlv320aic3x-codec 0-0018: 0-0018 supply DVDD not found, using dummy regulator
[    6.362193] tlv320aic3x-codec 0-0018: 0-0018 supply AVDD not found, using dummy regulator
[    6.362751] tlv320aic3x-codec 0-0018: 0-0018 supply DRVDD not found, using dummy regulator
[    6.364397] cdns-i2c ff020000.i2c: 400 kHz mmio ff020000 irq 33
[    6.374654] cpufreq: cpufreq_online: CPU0: Running at unlisted freq: 277777 KHz
[    6.379853] cpufreq: cpufreq_online: CPU0: Unlisted initial frequency changed to: 299999 KHz
[    6.383961] zynqmp_gpd_attach_dev() domain9 request failed for node 39: -13
[    6.384647] sdhci-arasan ff160000.mmc: failed to add to PM domain domain9: -13
[    6.385074] sdhci-arasan: probe of ff160000.mmc failed with error -13
[    6.401169] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.04
[    6.401737] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    6.402219] usb usb1: Product: xHCI Host Controller
[    6.402565] usb usb1: Manufacturer: Linux 5.4.0-xilinx-v2020.2 xhci-hcd
[    6.403085] usb usb1: SerialNumber: xhci-hcd.0.auto
[    6.408952] hub 1-0:1.0: USB hub found
[    6.409942] hub 1-0:1.0: 4 ports detected
[    6.414313] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
[    6.414728] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 2
[    6.415300] xhci-hcd xhci-hcd.0.auto: Host supports USB 3.0 SuperSpeed
[    6.430508] usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
[    6.431731] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.04
[    6.432287] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    6.432669] usb usb2: Product: xHCI Host Controller
[    6.432932] usb usb2: Manufacturer: Linux 5.4.0-xilinx-v2020.2 xhci-hcd
[    6.433354] usb usb2: SerialNumber: xhci-hcd.0.auto
[    6.435647] hub 2-0:1.0: USB hub found
[    6.436437] hub 2-0:1.0: 4 ports detected
[    6.474722] mmc0: SDHCI controller on ff170000.mmc [ff170000.mmc] using ADMA 64-bit
[    6.477359] asoc-simple-card sound0: parse error -22
[    6.477870] asoc-simple-card: probe of sound0 failed with error -22
[    6.491879] rtc_zynqmp ffa60000.rtc: setting system clock to 2021-03-30T06:17:24 UTC (1617085044)
[    6.493190] of_cfs_init
[    6.493890] of_cfs_init: OK
[    6.495097] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[    6.631972] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[    6.632781] clk: Not disabling unused clocks
[    6.664643] ALSA device list:
[    6.664918]   No soundcards found.
[    6.674408] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[    6.675361] cfg80211: failed to load regulatory.db
[    6.839414] Freeing unused kernel memory: 768K
[    6.869579] Run /init as init process
INIT: version 2.88 booting
Starting udev
[    7.709931] udevd[361]: starting version 3.2.8
[    7.717264] random: udevd: uninitialized urandom read (16 bytes read)
[    7.720450] random: udevd: uninitialized urandom read (16 bytes read)
[    7.722086] random: udevd: uninitialized urandom read (16 bytes read)
[    7.768981] udevd[362]: starting eudev-3.2.8
[   10.525905] dmaproxy: loading out-of-tree module taints kernel.
Configuring packages on first boot....
 (This may take several minutes. Please do not power off the machine.)
Running postinst /etc/rpm-postinsts/100-sysvinit-inittab...
update-rc.d: /etc/init.d/run-postinsts exists during rc.d purge (continuing)
 Removing any system startup links for run-postinsts ...
  /etc/rcS.d/S99run-postinsts
INIT: Entering runlevel: 5
Configuring network interfaces... Cannot find device "eth0"
Starting haveged: haveged: listening socket at 3
haveged: haveged starting up




I am using petalinux 2020.2

  • Daniel,

    Looks like you are having an error in the DTS on how the sound card was defined. Seems you are passing an argument that is not defined.

    In our DTS we define these lines:

    simple-audio-card,cpu {
       sound-dai = <&audio_formatter_0>;
       clocks = <&misc_clk_0>;
    };

    &audio_formatter_0 {
       #sound-dai-cells = <0>;
    };

    with the TDM or I2S interface. In our BeagleBone systems, it uses the McASP peripheral of the Sitara:

    simple-audio-card,cpu {
      sound-dai = <&mcasp3>;
    };

    &mcasp3 {
      #sound-dai-cells = <0>;
      assigned-clocks = <&l4per2_clkctrl DRA7_L4PER2_MCASP3_CLKCTRL 24>;
      assigned-clock-parents = <&sys_clkin2>;
      status = "okay";

      op-mode = <0>; /* MCASP_IIS_MODE */
      tdm-slots = <2>;
      /* 4 serializers */
      serial-dir = < /* 0: INACTIVE, 1: TX, 2: RX */  1 2 0 0>;
      tx-num-evt = <32>;
      rx-num-evt = <32>;
    };

    Also please ensure that mix_clk_0 is defined. Here is the Linux kernel documentation for simple cards:

    https://www.kernel.org/doc/Documentation/devicetree/bindings/sound/simple-card.txt

    And Linux Sound Subsystem Documentation

    https://www.kernel.org/doc/html/v4.11/sound/index.html?highlight=sound

    Best regards,
    Pedro

  • Hmm.. I compared my device tree to yours but I cannot find the issue.

    Seems you are passing an argument that is not defined.

    I've searched for an undefined argument in the simple-sound-card but I didn't find one. Do you maybe have any suggestions what could be the undefines node property?

    This is the file where misc_clk_0 and audio_formatter_0 are defined:

    pl.dtsi.txt
    /*
     * CAUTION: This file is automatically generated by Xilinx.
     * Version:  
     * Today is: Tue Mar 30 09:42:25 2021
     */
    
    
    / {
    	amba_pl: amba_pl@0 {
    		#address-cells = <2>;
    		#size-cells = <2>;
    		compatible = "simple-bus";
    		ranges ;
    		audio_formatter_0: audio_formatter@80010000 {
    			clock-names = "s_axi_lite_aclk", "m_axis_mm2s_aclk", "aud_mclk", "s_axis_s2mm_aclk";
    			clocks = <&zynqmp_clk 71>, <&zynqmp_clk 71>, <&misc_clk_0>, <&zynqmp_clk 71>;
    			compatible = "xlnx,audio-formatter-1.0", "xlnx,audio-formatter-1.0";
    			interrupt-names = "irq_mm2s", "irq_s2mm";
    			interrupt-parent = <&gic>;
    			interrupts = <0 89 4 0 90 4>;
    			reg = <0x0 0x80010000 0x0 0x10000>;
    			xlnx,include-mm2s = <0x1>;
    			xlnx,include-s2mm = <0x1>;
    			xlnx,max-num-channels-mm2s = <0x2>;
    			xlnx,max-num-channels-s2mm = <0x2>;
    			xlnx,mm2s-addr-width = <0x40>;
    			xlnx,mm2s-async-clock = <0x1>;
    			xlnx,mm2s-dataformat = <0x3>;
    			xlnx,packing-mode-mm2s = <0x0>;
    			xlnx,packing-mode-s2mm = <0x0>;
    			xlnx,rx = <&i2s_receiver_0>;
    			xlnx,s2mm-addr-width = <0x40>;
    			xlnx,s2mm-async-clock = <0x1>;
    			xlnx,s2mm-dataformat = <0x1>;
    			xlnx,tx = <&i2s_transmitter_0>;
    		};
    		misc_clk_0: misc_clk_0 {
    			#clock-cells = <0>;
    			clock-frequency = <12001004>;
    			compatible = "fixed-clock";
    		};
    		ddr4: ddr4@400000000 {
    			compatible = "xlnx,ddr4-2.2";
    			reg = <0x00000004 0x00000000 0x0 0x80000000>;
    		};
    		i2s_receiver_0: i2s_receiver@80020000 {
    			aud_mclk = <12001004>;
    			clock-names = "s_axi_ctrl_aclk", "aud_mclk", "m_axis_aud_aclk";
    			clocks = <&zynqmp_clk 71>, <&misc_clk_0>, <&zynqmp_clk 71>;
    			compatible = "xlnx,i2s-receiver-1.0", "xlnx,i2s-receiver-1.0";
    			interrupt-names = "irq";
    			interrupt-parent = <&gic>;
    			interrupts = <0 91 4>;
    			reg = <0x0 0x80020000 0x0 0x10000>;
    			xlnx,depth = <0x80>;
    			xlnx,dwidth = <0x18>;
    			xlnx,num-channels = <0x1>;
    			xlnx,snd-pcm = <&audio_formatter_0>;
    		};
    		i2s_transmitter_0: i2s_transmitter@80030000 {
    			aud_mclk = <12001004>;
    			clock-names = "s_axi_ctrl_aclk", "aud_mclk", "s_axis_aud_aclk";
    			clocks = <&zynqmp_clk 71>, <&misc_clk_0>, <&zynqmp_clk 71>;
    			compatible = "xlnx,i2s-transmitter-1.0", "xlnx,i2s-transmitter-1.0";
    			interrupt-names = "irq";
    			interrupt-parent = <&gic>;
    			interrupts = <0 92 4>;
    			reg = <0x0 0x80030000 0x0 0x10000>;
    			xlnx,depth = <0x80>;
    			xlnx,dwidth = <0x18>;
    			xlnx,num-channels = <0x1>;
    			xlnx,snd-pcm = <&audio_formatter_0>;
    		};
    		system_management_wiz: system_management_wiz@80000000 {
    			clock-names = "s_axi_aclk";
    			clocks = <&zynqmp_clk 71>;
    			compatible = "xlnx,system-management-wiz-1.3";
    			reg = <0x0 0x80000000 0x0 0x10000>;
    			xlnx,alarm-limit-r0 = <0xb794>;
    			xlnx,alarm-limit-r1 = <0x4e81>;
    			xlnx,alarm-limit-r10 = <0x4963>;
    			xlnx,alarm-limit-r11 = <0x451e>;
    			xlnx,alarm-limit-r12 = <0x4963>;
    			xlnx,alarm-limit-r13 = <0x451e>;
    			xlnx,alarm-limit-r14 = <0x9a74>;
    			xlnx,alarm-limit-r15 = <0x91eb>;
    			xlnx,alarm-limit-r2 = <0xa147>;
    			xlnx,alarm-limit-r3 = <0xcba3>;
    			xlnx,alarm-limit-r4 = <0xab03>;
    			xlnx,alarm-limit-r5 = <0x4963>;
    			xlnx,alarm-limit-r6 = <0x9555>;
    			xlnx,alarm-limit-r7 = <0xb00a>;
    			xlnx,alarm-limit-r8 = <0x4e81>;
    			xlnx,alarm-limit-r9 = <0x4963>;
    			xlnx,alarm-limit-slave0-ssit-usl1 = <0x4c5e>;
    			xlnx,alarm-limit-slave0-ssit-usl2 = <0x4bf2>;
    			xlnx,alarm-limit-slave0-ssit-usl3 = <0x98bf>;
    			xlnx,alarm-limit-slave0-ssit-usl4 = <0x98bf>;
    			xlnx,alarm-limit-slave0-ssit-usu1 = <0x4d39>;
    			xlnx,alarm-limit-slave0-ssit-usu2 = <0x4da7>;
    			xlnx,alarm-limit-slave0-ssit-usu3 = <0x9a74>;
    			xlnx,alarm-limit-slave0-ssit-usu4 = <0x9a74>;
    			xlnx,alarm-limit-slave1-ssit-usl1 = <0x4c5e>;
    			xlnx,alarm-limit-slave1-ssit-usl2 = <0x4bf2>;
    			xlnx,alarm-limit-slave1-ssit-usl3 = <0x98bf>;
    			xlnx,alarm-limit-slave1-ssit-usl4 = <0x98bf>;
    			xlnx,alarm-limit-slave1-ssit-usu1 = <0x4d39>;
    			xlnx,alarm-limit-slave1-ssit-usu2 = <0x4da7>;
    			xlnx,alarm-limit-slave1-ssit-usu3 = <0x9a74>;
    			xlnx,alarm-limit-slave1-ssit-usu4 = <0x9a74>;
    			xlnx,alarm-limit-slave2-ssit-usl1 = <0x4c5e>;
    			xlnx,alarm-limit-slave2-ssit-usl2 = <0x4bf2>;
    			xlnx,alarm-limit-slave2-ssit-usl3 = <0x98bf>;
    			xlnx,alarm-limit-slave2-ssit-usl4 = <0x98bf>;
    			xlnx,alarm-limit-slave2-ssit-usu1 = <0x4d39>;
    			xlnx,alarm-limit-slave2-ssit-usu2 = <0x4da7>;
    			xlnx,alarm-limit-slave2-ssit-usu3 = <0x9a74>;
    			xlnx,alarm-limit-slave2-ssit-usu4 = <0x9a74>;
    			xlnx,alarm-limit-usl1 = <0x4c5e>;
    			xlnx,alarm-limit-usl2 = <0x4bf2>;
    			xlnx,alarm-limit-usl3 = <0x98bf>;
    			xlnx,alarm-limit-usl4 = <0x98bf>;
    			xlnx,alarm-limit-usu1 = <0x4d39>;
    			xlnx,alarm-limit-usu2 = <0x4da7>;
    			xlnx,alarm-limit-usu3 = <0x9a74>;
    			xlnx,alarm-limit-usu4 = <0x9a74>;
    			xlnx,average-en-slave0-ssit-vuser0 = <0x0>;
    			xlnx,average-en-slave0-ssit-vuser1 = <0x0>;
    			xlnx,average-en-slave0-ssit-vuser2 = <0x0>;
    			xlnx,average-en-slave0-ssit-vuser3 = <0x0>;
    			xlnx,average-en-slave1-ssit-vuser0 = <0x0>;
    			xlnx,average-en-slave1-ssit-vuser1 = <0x0>;
    			xlnx,average-en-slave1-ssit-vuser2 = <0x0>;
    			xlnx,average-en-slave1-ssit-vuser3 = <0x0>;
    			xlnx,average-en-slave2-ssit-vuser0 = <0x0>;
    			xlnx,average-en-slave2-ssit-vuser1 = <0x0>;
    			xlnx,average-en-slave2-ssit-vuser2 = <0x0>;
    			xlnx,average-en-slave2-ssit-vuser3 = <0x0>;
    			xlnx,average-en-vuser0 = <0x0>;
    			xlnx,average-en-vuser1 = <0x0>;
    			xlnx,average-en-vuser2 = <0x0>;
    			xlnx,average-en-vuser3 = <0x0>;
    			xlnx,avg-slave0-ssit-vuser = <0x0>;
    			xlnx,avg-slave1-ssit-vuser = <0x0>;
    			xlnx,avg-slave2-ssit-vuser = <0x0>;
    			xlnx,avg-vuser = <0x0>;
    			xlnx,channel-cnt = <0x6>;
    			xlnx,common-n-source = "Null";
    			xlnx,configuration-r0 = <0x0>;
    			xlnx,configuration-r1 = <0x2190>;
    			xlnx,configuration-r2 = <0x1400>;
    			xlnx,configuration-r3 = <0xf>;
    			xlnx,configuration-r4 = <0x0>;
    			xlnx,configuration-r4-1 = <0x0>;
    			xlnx,configuration-r4-2 = <0x0>;
    			xlnx,configuration-r4-3 = <0x2>;
    			xlnx,configuration-r4-4 = <0xe>;
    			xlnx,configuration-slave0-ssit-r3 = <0xf>;
    			xlnx,configuration-slave0-ssit-r4-1 = <0x0>;
    			xlnx,configuration-slave0-ssit-r4-2 = <0x0>;
    			xlnx,configuration-slave0-ssit-r4-3 = <0x2>;
    			xlnx,configuration-slave0-ssit-r4-4 = <0xe>;
    			xlnx,configuration-slave1-ssit-r3 = <0xf>;
    			xlnx,configuration-slave1-ssit-r4-1 = <0x0>;
    			xlnx,configuration-slave1-ssit-r4-2 = <0x0>;
    			xlnx,configuration-slave1-ssit-r4-3 = <0x2>;
    			xlnx,configuration-slave1-ssit-r4-4 = <0xe>;
    			xlnx,configuration-slave2-ssit-r3 = <0xf>;
    			xlnx,configuration-slave2-ssit-r4-1 = <0x0>;
    			xlnx,configuration-slave2-ssit-r4-2 = <0x0>;
    			xlnx,configuration-slave2-ssit-r4-3 = <0x2>;
    			xlnx,configuration-slave2-ssit-r4-4 = <0xe>;
    			xlnx,dclk-frequency = <0x64>;
    			xlnx,div-vuser0 = <0x6>;
    			xlnx,div-vuser0-slave0 = <0x6>;
    			xlnx,div-vuser0-slave1 = <0x6>;
    			xlnx,div-vuser0-slave2 = <0x6>;
    			xlnx,div-vuser1 = <0x3>;
    			xlnx,div-vuser1-slave0 = <0x3>;
    			xlnx,div-vuser1-slave1 = <0x3>;
    			xlnx,div-vuser1-slave2 = <0x3>;
    			xlnx,div-vuser2 = <0x3>;
    			xlnx,div-vuser2-slave0 = <0x3>;
    			xlnx,div-vuser2-slave1 = <0x3>;
    			xlnx,div-vuser2-slave2 = <0x3>;
    			xlnx,div-vuser3 = <0x3>;
    			xlnx,div-vuser3-slave0 = <0x3>;
    			xlnx,div-vuser3-slave1 = <0x3>;
    			xlnx,div-vuser3-slave2 = <0x3>;
    			xlnx,dual-seq = <0x0>;
    			xlnx,dual-sequence-r0 = <0x0>;
    			xlnx,dual-sequence-r1 = <0x0>;
    			xlnx,dual-sequence-r2 = <0x0>;
    			xlnx,dual0-register = <0x0>;
    			xlnx,dual1-register = <0x0>;
    			xlnx,dual2-register = <0x0>;
    			xlnx,dual3-register = <0x0>;
    			xlnx,enable-adc-data-out-master = <0x0>;
    			xlnx,enable-adc-data-out-slave0 = <0x0>;
    			xlnx,enable-adc-data-out-slave1 = <0x0>;
    			xlnx,enable-adc-data-out-slave2 = <0x0>;
    			xlnx,enable-dual-sequence-mode = <0x0>;
    			xlnx,enable-slave0 = <0x0>;
    			xlnx,enable-slave1 = <0x0>;
    			xlnx,enable-slave2 = <0x0>;
    			xlnx,external-mux-channel = "VP_VN";
    			xlnx,external-muxaddr-enable = <0x0>;
    			xlnx,fifo-depth = <0x7>;
    			xlnx,has-axi = <0x1>;
    			xlnx,has-axi4stream = <0x0>;
    			xlnx,has-busy = <0x1>;
    			xlnx,has-channel = <0x1>;
    			xlnx,has-convst = <0x0>;
    			xlnx,has-convstclk = <0x0>;
    			xlnx,has-dclk = <0x1>;
    			xlnx,has-drp = <0x0>;
    			xlnx,has-eoc = <0x1>;
    			xlnx,has-eos = <0x1>;
    			xlnx,has-external-mux = <0x0>;
    			xlnx,has-i2c = <0x0>;
    			xlnx,has-i2c-slave = <0x0>;
    			xlnx,has-jtagbusy = <0x0>;
    			xlnx,has-jtaglocked = <0x0>;
    			xlnx,has-jtagmodified = <0x0>;
    			xlnx,has-ot-alarm = <0x1>;
    			xlnx,has-pmbus = <0x0>;
    			xlnx,has-pmc = <0x0>;
    			xlnx,has-pmc-master = <0x0>;
    			xlnx,has-reset = <0x0>;
    			xlnx,has-slave0-ssit-temp-ch = <0x1>;
    			xlnx,has-slave0-ssit-vuser0 = <0x0>;
    			xlnx,has-slave0-ssit-vuser1 = <0x0>;
    			xlnx,has-slave0-ssit-vuser2 = <0x0>;
    			xlnx,has-slave0-ssit-vuser3 = <0x0>;
    			xlnx,has-slave1-ssit-temp-ch = <0x1>;
    			xlnx,has-slave1-ssit-vuser0 = <0x0>;
    			xlnx,has-slave1-ssit-vuser1 = <0x0>;
    			xlnx,has-slave1-ssit-vuser2 = <0x0>;
    			xlnx,has-slave1-ssit-vuser3 = <0x0>;
    			xlnx,has-slave2-ssit-temp-ch = <0x1>;
    			xlnx,has-slave2-ssit-vuser0 = <0x0>;
    			xlnx,has-slave2-ssit-vuser1 = <0x0>;
    			xlnx,has-slave2-ssit-vuser2 = <0x0>;
    			xlnx,has-slave2-ssit-vuser3 = <0x0>;
    			xlnx,has-temp-bus = <0x0>;
    			xlnx,has-under-ot-alarm = <0x0>;
    			xlnx,has-under-temp-alarm = <0x0>;
    			xlnx,has-user-supply0-alarm = <0x0>;
    			xlnx,has-user-supply0-slave0-ssit-alarm = <0x0>;
    			xlnx,has-user-supply0-slave1-ssit-alarm = <0x0>;
    			xlnx,has-user-supply0-slave2-ssit-alarm = <0x0>;
    			xlnx,has-user-supply1-alarm = <0x0>;
    			xlnx,has-user-supply1-slave0-ssit-alarm = <0x0>;
    			xlnx,has-user-supply1-slave1-ssit-alarm = <0x0>;
    			xlnx,has-user-supply1-slave2-ssit-alarm = <0x0>;
    			xlnx,has-user-supply2-alarm = <0x0>;
    			xlnx,has-user-supply2-slave0-ssit-alarm = <0x0>;
    			xlnx,has-user-supply2-slave1-ssit-alarm = <0x0>;
    			xlnx,has-user-supply2-slave2-ssit-alarm = <0x0>;
    			xlnx,has-user-supply3-alarm = <0x0>;
    			xlnx,has-user-supply3-slave0-ssit-alarm = <0x0>;
    			xlnx,has-user-supply3-slave1-ssit-alarm = <0x0>;
    			xlnx,has-user-supply3-slave2-ssit-alarm = <0x0>;
    			xlnx,has-user-temp-alarm = <0x1>;
    			xlnx,has-vbram-alarm = <0x0>;
    			xlnx,has-vccaux-alarm = <0x1>;
    			xlnx,has-vccddro-alarm = <0x0>;
    			xlnx,has-vccint-alarm = <0x1>;
    			xlnx,has-vccpaux-alarm = <0x0>;
    			xlnx,has-vccpint-alarm = <0x0>;
    			xlnx,has-vccpsaux-alarm = <0x1>;
    			xlnx,has-vccpsintfp-alarm = <0x1>;
    			xlnx,has-vccpsintlp-alarm = <0x1>;
    			xlnx,has-vn = <0x1>;
    			xlnx,has-vp = <0x1>;
    			xlnx,has-vuser0 = <0x0>;
    			xlnx,has-vuser1 = <0x0>;
    			xlnx,has-vuser2 = <0x0>;
    			xlnx,has-vuser3 = <0x0>;
    			xlnx,i2c-clk-period = "2500.000";
    			xlnx,i2c-sclk-loc = "AG1";
    			xlnx,i2c-sda-loc = "AF3";
    			xlnx,i2c-slave-address = <0x20>;
    			xlnx,i2c-slave0-address = <0x20>;
    			xlnx,i2c-slave1-address = <0x20>;
    			xlnx,i2c-slave2-address = <0x20>;
    			xlnx,include-intr = <0x1>;
    			xlnx,is-diablo = <0x1>;
    			xlnx,is-ssit-slave0 = <0x0>;
    			xlnx,is-ssit-slave0-analog-bank = <0x0>;
    			xlnx,is-ssit-slave1 = <0x0>;
    			xlnx,is-ssit-slave1-analog-bank = <0x0>;
    			xlnx,is-ssit-slave2 = <0x0>;
    			xlnx,is-ssit-slave2-analog-bank = <0x0>;
    			xlnx,sampling-rate = "192307.6923076923";
    			xlnx,sequence-r0 = <0x4f01>;
    			xlnx,sequence-r1 = <0x0>;
    			xlnx,sequence-r2 = <0x0>;
    			xlnx,sequence-r3 = <0x0>;
    			xlnx,sequence-r4 = <0x0>;
    			xlnx,sequence-r5 = <0x0>;
    			xlnx,sequence-r6 = <0x0>;
    			xlnx,sequence-r7 = <0x0>;
    			xlnx,sequence-r8 = <0x0>;
    			xlnx,sequence-slave0-ssit-r0 = <0x100>;
    			xlnx,sequence-slave0-ssit-r8 = <0x0>;
    			xlnx,sequence-slave1-ssit-r0 = <0x100>;
    			xlnx,sequence-slave1-ssit-r8 = <0x0>;
    			xlnx,sequence-slave2-ssit-r0 = <0x100>;
    			xlnx,sequence-slave2-ssit-r8 = <0x0>;
    			xlnx,sim-device = "ZYNQ_ULTRASCALE";
    			xlnx,sim-file-name = "design";
    			xlnx,sim-file-rel-path = "./";
    			xlnx,sim-file-sel = "Default";
    			xlnx,user-supply0-bank = <0x2c>;
    			xlnx,user-supply0-slave0-ssit-bank = <0x2c>;
    			xlnx,user-supply0-slave0-ssit-source = "VCCO";
    			xlnx,user-supply0-slave1-ssit-bank = <0x2c>;
    			xlnx,user-supply0-slave1-ssit-source = "VCCO";
    			xlnx,user-supply0-slave2-ssit-bank = <0x2c>;
    			xlnx,user-supply0-slave2-ssit-source = "VCCO";
    			xlnx,user-supply0-source = "VCCO";
    			xlnx,user-supply1-bank = <0x2c>;
    			xlnx,user-supply1-slave0-ssit-bank = <0x2c>;
    			xlnx,user-supply1-slave0-ssit-source = "VCCINT";
    			xlnx,user-supply1-slave1-ssit-bank = <0x2c>;
    			xlnx,user-supply1-slave1-ssit-source = "VCCINT";
    			xlnx,user-supply1-slave2-ssit-bank = <0x2c>;
    			xlnx,user-supply1-slave2-ssit-source = "VCCINT";
    			xlnx,user-supply1-source = "VCCINT";
    			xlnx,user-supply2-bank = <0x2c>;
    			xlnx,user-supply2-slave0-ssit-bank = <0x2c>;
    			xlnx,user-supply2-slave0-ssit-source = "VCCAUX";
    			xlnx,user-supply2-slave1-ssit-bank = <0x2c>;
    			xlnx,user-supply2-slave1-ssit-source = "VCCAUX";
    			xlnx,user-supply2-slave2-ssit-bank = <0x2c>;
    			xlnx,user-supply2-slave2-ssit-source = "VCCAUX";
    			xlnx,user-supply2-source = "VCCAUX";
    			xlnx,user-supply3-bank = <0x41>;
    			xlnx,user-supply3-slave0-ssit-bank = <0x41>;
    			xlnx,user-supply3-slave0-ssit-source = "VCCO";
    			xlnx,user-supply3-slave1-ssit-bank = <0x41>;
    			xlnx,user-supply3-slave1-ssit-source = "VCCO";
    			xlnx,user-supply3-slave2-ssit-bank = <0x41>;
    			xlnx,user-supply3-slave2-ssit-source = "VCCO";
    			xlnx,user-supply3-source = "VCCO";
    			xlnx,vaux0 = <0x0>;
    			xlnx,vaux1 = <0x0>;
    			xlnx,vaux10 = <0x0>;
    			xlnx,vaux11 = <0x0>;
    			xlnx,vaux12 = <0x0>;
    			xlnx,vaux13 = <0x0>;
    			xlnx,vaux14 = <0x0>;
    			xlnx,vaux15 = <0x0>;
    			xlnx,vaux2 = <0x0>;
    			xlnx,vaux3 = <0x0>;
    			xlnx,vaux4 = <0x0>;
    			xlnx,vaux5 = <0x0>;
    			xlnx,vaux6 = <0x0>;
    			xlnx,vaux7 = <0x0>;
    			xlnx,vaux8 = <0x0>;
    			xlnx,vaux9 = <0x0>;
    			xlnx,vauxn0-loc = "AK18";
    			xlnx,vauxn1-loc = "AK16";
    			xlnx,vauxn10-loc = "AC18";
    			xlnx,vauxn11-loc = "AD16";
    			xlnx,vauxn12-loc = "AK14";
    			xlnx,vauxn13-loc = "AH13";
    			xlnx,vauxn14-loc = "AB15";
    			xlnx,vauxn15-loc = "AD14";
    			xlnx,vauxn2-loc = "AE19";
    			xlnx,vauxn3-loc = "AB16";
    			xlnx,vauxn4-loc = "AK15";
    			xlnx,vauxn5-loc = "AK12";
    			xlnx,vauxn6-loc = "AE15";
    			xlnx,vauxn7-loc = "AB14";
    			xlnx,vauxn8-loc = "AJ17";
    			xlnx,vauxn9-loc = "AH16";
    			xlnx,vauxp0-loc = "AK17";
    			xlnx,vauxp1-loc = "AJ16";
    			xlnx,vauxp10-loc = "AC17";
    			xlnx,vauxp11-loc = "AC16";
    			xlnx,vauxp12-loc = "AJ14";
    			xlnx,vauxp13-loc = "AG13";
    			xlnx,vauxp14-loc = "AA15";
    			xlnx,vauxp15-loc = "AC14";
    			xlnx,vauxp2-loc = "AD19";
    			xlnx,vauxp3-loc = "AA16";
    			xlnx,vauxp4-loc = "AJ15";
    			xlnx,vauxp5-loc = "AK13";
    			xlnx,vauxp6-loc = "AD15";
    			xlnx,vauxp7-loc = "AA14";
    			xlnx,vauxp8-loc = "AH17";
    			xlnx,vauxp9-loc = "AG16";
    			xlnx,vpvn = <0x1>;
    		};
    	};
    };
    


    It is auto generated by Xilinx' petalinux tool from my FPGA block design

  • Typically, the sound-dai is connected to the I2S peripheral in your DTS. I see that only misc_clk is connected and set to 12MHz frequency. I do not follow how is this is all being connected. This is not usually how we suggest to do the connections. It should somehow be assigned to a peripheral that drives the I2S bus with bit clock, frame sync, and data. I wonder if the error is being generated because it does not know how BCLK, FSYNC, and data are connected to sound-dai.

    Apart from that, everything else seems proper. Thus, I am not sure what else to suggest.

  • Thanks alot for you reply again!
    I will try to fix the problem with your suggestion and come back in a few days to tell you if it worked.

    The sound0 and the tlv320aic3104 node are inspired by a device tree from the linux mainline kernel:
    am57xx-beagle-x15-common.dtsi - arch/arm/boot/dts/am57xx-beagle-x15-common.dtsi - Linux source code (v5.11.11) - Bootlin
    (The nodes in this device tree are also called sound0 and tlv320aic3104)

    It should somehow be assigned to a peripheral that drives the I2S bus with bit clock, frame sync, and data.

    My i2s "peripheral" consists of 3 components: I2S receiver, I2S transmitter and audio formatter (DMA for accessing memory). Together they form the i2s peripheral. I2S Rx and Tx are conntected to the audio formatter and the audio formatter is connected to the CPU/memory via AXI4 bus. All of them can be programmed by the CPU via memory mapped registers.
    I actually think that you are right. I only connected the audio formatter to the sound0 device tree node. I actually need to connect the whole I2S "peripheral".
    At the moment I don't know how to combine all 3 i2s device tree nodes to one I2S DAI node but I will search for a solution.

    Thank you very much for the tipp I didn't see this problem. I need to try this out!

  • I think it is already connected to a peripheral which drives the I2S bus.

    simple-audio-card,cpu {
    sound-dai = <&audio_formatter_0>;
    clocks = <&misc_clk_0>;
    };

    audio_formatter_0 is the the DMA. audio_formatter_0 is aware of the i2s rx and tx device tree nodes.
    But I don't know if thats sufficient.

    There is a soundcard driver from Xilinx for this setup but this is way less convinient because the driver has to be modified in order to work. It's way less comfortable than the simple-card driver ...