The i2s interface has a frame signal and clock signal, but no data output.

Hello,
I have configured the i2s1 interface, which already has a frame and clock signal.
I have configured dma and have been able to enter dma interrupts normally.
However, the value I assigned to buf in the dma interrupt was not transmitted to the data line i2s0_dout.
The value of the AXBAR_PART_0_ADMAIF_RX1_0 register is 0x10000 and the value of theAXBAR_PART_0_I2S1_RX1_0 register is 0x1.
Admaif register as follows:
[ 33.382671] regadmaif[290f500] value=1
[ 33.386518] regadmaif[290f504] value=0
[ 33.394198] regadmaif[290f50c] value=400051
[ 33.398476] regadmaif[290f510] value=0
[ 33.402311] regadmaif[290f514] value=1
[ 33.406156] regadmaif[290f518] value=0
[ 33.409996] regadmaif[290f51c] value=0
[ 33.413842] regadmaif[290f520] value=117700
[ 33.421946] regadmaif[290f528] value=2000300
[ 33.426312] regadmaif[290f52c] value=0
May I ask if the register value is correct or what other registers need to be configured?

Hello!

The above register settings look fine. However, you need to ensure that the AXBAR_CHANNELS and CLIENT_CHANNELS fields match what is in the I2S_AXBAR_RX_CIF_CTRL_0. You also need to ensure that you have …

ADMAIF_GLOBAL_ENABLE_0 = 0x1
ADMAIF_GLOBAL_CG_0 = 0x3

Finally, you also need to ensure that AXBAR_PART_0_I2S1_RX1_0 has the ADMAIF_TX1 bit set to enable the link.

Regards,
Jon

Hello!
1.The value of the I2S_AXBAR_TX_CIF_CTRL_0 is 0x3117700 and the ADMAIF_AXBAR_TX_CIF_CTRL_0 is 0x117700.The AXBAR_CHANNELS and CLIENT_CHANNELS fields of I2S and ADMAIF are both match.
2.The value of the ADMAIF_GLOBAL_ENABLE_0 is 0x1.The value of the ADMAIF_GLOBAL_CG_0 is 0x3.
admaifreg[290fd00]=1
admaifreg[290fd08]=3
3.The AXBAR_PART_0_I2S1_RX1_0 register is 0x1,this should mean that the ADMAIF_TX1 bit of AXBAR_PART_0_I2S1_RX1_0 is set and enable the link.
So my configuration should match what you said.But it still can’t output data.

When I want to output data, do I need to configure ADMAIF_AXBAR_TX* and I2S_AXBARTX* register?
Should the AXBARRX
* register be configured?

So for outputting data, you want to configure the ADMAIF_AXBAR_TX_xxxx and the I2S_AXBAR_RX_xxxx because the I2S is receiving data from ADMAIF via the XBAR.

If you want to compare register settings, you can always flash the stock L4T r28.x release and play an audio file to I2S1 and while it is playing dump the various I2S, XBAR and ADMAIF registers via the following sysfs location …

$ sudo cat /sys/kernel/debug/regmap//registers

Regards,
Jon

I configured I2S AXBAR RX XXXX and still can’t output data.
The following is the register value.

reg.txt (5.31 KB)

I recommend that you flash the stock L4T rel28.x release, playback audio to the I2S1 port (verifying you see data on the I2S dout), then dump the registers (for the I2S, XBAR and ADMAIF) and compare.

Regards,
Jon

You may also want to check your pinmux configuration is good. You should have something like …

$ sudo grep dap1 /sys/kernel/debug/tegra_pinctrl_reg                                                                                                                                                          
Bank: 0 Reg: 0x02431028 Val: 0x00000400 -> dap1_fs_pj3
Bank: 0 Reg: 0x02431030 Val: 0x00000458 -> dap1_din_pj2
Bank: 0 Reg: 0x02431038 Val: 0x00000400 -> dap1_dout_pj1
Bank: 0 Reg: 0x02431040 Val: 0x00000400 -> dap1_sclk_pj0

Regards,
Jon

Also given that you are working on a custom driver, you may wish to look at the default I2S and XBAR drivers from the L4T release and review how the clocks are configured. When comparing the register settings against the stock L4T release, you may also wish to check that the various clocks used by the audio drivers are configured correctly.

Regards,
Jon