i.Mx35 SGTL5000 sound driver hangs on playing sound only on reboot

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

i.Mx35 SGTL5000 sound driver hangs on playing sound only on reboot

904 Views
NikhilKamathLNT
Contributor I

Hello,

I am facing an issue with SGTL5000 codec which happens only on reboot.
Below are the details.

On doing a power cycle audio works fine, but if I do a "reboot", I
could see that driver probe is success, but on playing a file using
ogg, it hangs. At the moment, I am not sure where the issue is. I did
some search in Freescale/NXP forums and found there are issues related
to SGTL5000 and i2c bus on reboot, but in my case, on reboot the probe
itself is success, so I believe , its not the I2c reboot issue. Any
help as to how I can debug further or solutions is much appreciated.
Thanks in advance.

Regards
Nikhil

System details:
chip : i.Mx35
Kernel : 4.14 linux-fslc
DeviceTree :
sound {
        compatible = "fsl,imx-audio-sgtl5000";
        model = "ebox-sgtl5000";
        ssi-controller = <&ssi1>;
        audio-codec = <&codec>;
        audio-routing =
            "MIC_IN", "Mic Jack",
            "Mic Jack", "Mic Bias",
            "Headphone Jack", "HP_OUT",
            "Ext Spk", "LINE_OUT";
        mux-int-port = <1>;
        mux-ext-port = <4>;
    };
    codec: sgtl5000@0a {
           compatible = "fsl,sgtl5000";
           pinctrl-names = "default";
           pinctrl-0 = <&pinctrl_sgtl5000>;
           reg = <0x0a>;
           clocks = <&clks 86>;
           VDDA-supply = <&vcam_reg>;
           VDDIO-supply = <&reg_sgtl5000_vddd>;
    };

sgtl output:
$ dmesg | grep sgtl
[    2.416167] sgtl5000 1-000a: sgtl5000 revision 0x11
[    2.425204] sgtl5000 1-000a: Using internal LDO instead of VDDD: check ER1
[    2.562911] imx-sgtl5000 sound: sgtl5000 <-> 43fa0000.ssi mapping ok
[    3.247742]   #0: ebox-sgtl5000


dma output on reboot:
$ dmesg | grep -i dma
[    0.049859] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.710313] i2c i2c-1: can't use DMA, using PIO instead.
[    0.712794] i2c i2c-3: can't use DMA, using PIO instead.
[    0.818858] ipu-core ipu-core: private_candidate: dma0chan0 filter said false
[    0.818918] ipu-core ipu-core: private_candidate: dma0chan1 filter said false
[    0.818945] ipu-core ipu-core: private_candidate: dma0chan2 filter said false
[    0.818972] ipu-core ipu-core: private_candidate: dma0chan3 filter said false
[    0.818997] ipu-core ipu-core: private_candidate: dma0chan4 filter said false
[    0.819022] ipu-core ipu-core: private_candidate: dma0chan5 filter said false
[    0.819047] ipu-core ipu-core: private_candidate: dma0chan6 filter said false
[    0.819072] ipu-core ipu-core: private_candidate: dma0chan7 filter said false
[    0.819098] ipu-core ipu-core: private_candidate: dma0chan8 filter said false
[    0.819123] ipu-core ipu-core: private_candidate: dma0chan9 filter said false
[    0.819148] ipu-core ipu-core: private_candidate: dma0chan10 filter
said false
[    0.819174] ipu-core ipu-core: private_candidate: dma0chan11 filter
said false
[    0.819199] ipu-core ipu-core: private_candidate: dma0chan12 filter
said false
[    0.819224] ipu-core ipu-core: private_candidate: dma0chan13 filter
said false
[    0.961113] ipu-core ipu-core: IDMAC_CONF 0x70, IC_CONF 0x0,
IDMAC_CHA_EN 0x0, IDMAC_CHA_PRI 0x0, IDMAC_CHA_BUSY 0x0
[    0.961409] dma dma0chan14: Found channel 0xe, irq 176
[    0.961442] dmaengine: __dma_request_channel: success (dma0chan14)
[    0.988705] dma dma0chan14: Submitting sg d79f3b94
[    0.988776] dma dma0chan14: Updated sg d79f3b94 on channel 0xe buffer 0
[    0.988827] ipu-core ipu-core: IDMAC_CONF 0x70, IC_CONF 0x0,
IDMAC_CHA_EN 0x0, IDMAC_CHA_PRI 0x4000, IDMAC_CHA_BUSY 0x0
[    0.988885] ipu-core ipu-core: IDMAC_CONF 0x70, IC_CONF 0x0,
IDMAC_CHA_EN 0x4000, IDMAC_CHA_PRI 0x4000, IDMAC_CHA_BUSY 0x0
[    1.084868] imx-sdma 53fd4000.sdma: no event needs to be remapped
[    1.085941] imx-sdma 53fd4000.sdma: loaded firmware 1.0
[    1.934535] spi_imx 43fa4000.cspi: dma setup error -19, use pio
[    2.401179] mmc0: SDHCI controller on 53fb4000.esdhc
[53fb4000.esdhc] using DMA
[    2.472063] dmaengine: __dma_request_channel: success (dma1chan0)
[    2.472236] imx-sdma 53fd4000.sdma: private_candidate: dma1chan0 busy
[    2.472374] dmaengine: __dma_request_channel: success (dma1chan1)


sgtl5000 registers on reboot , but before playing sound file:
$ cat /sys/kernel/debug/regmap/1-000a/registers
000: a011
002: 0060
004: 0008
006: 0080
00a: 0010
00e: 020c
010: 3c3c
014: 015f
020: 0000
022: 1818
024: 0022
026: 0008
028: 01c1
02a: 0200
02c: 031c
02e: 0f0f
030: 7a60
032: 5000
034: 0800
036: 0017
03a: 0000
03c: 0000
100: 0000
102: 0000
104: 8040
106: 051f
108: 0000
10a: 0040
10c: 0000
10e: 0000
110: 0000
116: 002f
118: 002f
11a: 002f
11c: 002f
11e: 002f
120: 8000
122: 0000
124: 5100
126: 1473
128: 0028
12a: 0050
12c: 0000
12e: 0000
130: 0000
132: 0000
134: 0000
136: 0000
138: 0000
13a: 0000

ssi registers on reboot , but before playing sound file:
$ cat /sys/kernel/debug/regmap/43fa0000.ssi/registers
00: 00000000
04: 00000000
10: 00001058
18: 00003003
1c: 0000020d
20: 0000020d
24: 00040100
28: 00040100
2c: 00880088
30: 00001111
34: 00000000
38: 00000000
48: 00000000
4c: 00000000
50: 00000000
54: 00000000
58: 00000000

sgtl5000 registers on reboot , after playing sound file:
$ cat /sys/kernel/debug/regmap/1-000a/registers
000: a011
002: 0061
004: 0007
006: 0090
00a: 0010
00e: 0200
010: 3c3c
014: 015f
020: 0000
022: 1818
024: 0022
026: 0008
028: 01c1
02a: 0200
02c: 031c
02e: 0f0f
030: 7ff9
032: 786c
034: 0808
036: 0017
03a: 0000
03c: 0000
100: 0000
102: 0000
104: 8040
106: 051f
108: 0000
10a: 0040
10c: 0000
10e: 0000
110: 0000
116: 002f
118: 002f
11a: 002f
11c: 002f
11e: 002f
120: 8000
122: 0000
124: 5100
126: 1473
128: 0028
12a: 0050
12c: 0000
12e: 0000
130: 0000
132: 0000
134: 0000
136: 0000
138: 0000
13a: 0000

ssi registers on reboot ,  after playing sound file:
$ cat /sys/kernel/debug/regmap/43fa0000.ssi/registers
00: 00ffff00
04: 00000000
10: 0000105b
18: 01d035f7
1c: 0000028d
20: 0000028d
24: 00056100
28: 00040100
2c: 00880888
30: 00001111
34: 00000000
38: 00000000
48: 00000000
4c: 00000000
50: 00000000
54: 00000000
58: 00000000

dma output after playing a sound file:
[  115.626358] imx-sdma 53fd4000.sdma: load_address = 834
[  115.626482] imx-sdma 53fd4000.sdma: wml = 0x00000020
[  115.626512] imx-sdma 53fd4000.sdma: shp_addr = 0x43fa0000
[  115.626537] imx-sdma 53fd4000.sdma: per_addr = 0x00000000
[  115.626563] imx-sdma 53fd4000.sdma: event_mask0 = 0x20000000
[  115.626588] imx-sdma 53fd4000.sdma: event_mask1 = 0x00000000
[  116.072831] imx-sdma 53fd4000.sdma: sdma_prep_dma_cyclic channel: 1
[  116.072956] imx-sdma 53fd4000.sdma: load_address = 834
[  116.072984] imx-sdma 53fd4000.sdma: wml = 0x00000020
[  116.073009] imx-sdma 53fd4000.sdma: shp_addr = 0x43fa0000
[  116.073032] imx-sdma 53fd4000.sdma: per_addr = 0x00000000
[  116.073055] imx-sdma 53fd4000.sdma: event_mask0 = 0x20000000
[  116.073077] imx-sdma 53fd4000.sdma: event_mask1 = 0x00000000
[  116.073160] imx-sdma 53fd4000.sdma: entry 0: count: 1768 dma:
0x97b80000  intr
[  116.073191] imx-sdma 53fd4000.sdma: entry 1: count: 1768 dma:
0x97b806e8  intr
[  116.073219] imx-sdma 53fd4000.sdma: entry 2: count: 1768 dma:
0x97b80dd0  intr
[  116.073247] imx-sdma 53fd4000.sdma: entry 3: count: 1768 dma:
0x97b814b8 wrap int

Tags (2)
0 Kudos
3 Replies

656 Views
igorpadykov
NXP Employee
NXP Employee

Hi Nikhil

hanging may be due to erratum described on SGTL5000 Silicon Errata

https://www.nxp.com/docs/en/errata/SGTL5000ER.pdf 

Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos

656 Views
NikhilKamathLNT
Contributor I

Thanks Igor.

In my case, on reboot , the probe of SGTL5000 is success. According to erratum , even this shouldn't be happening. Please correct me if my understanding is wrong. 

Regards

Nikhil

0 Kudos

656 Views
igorpadykov
NXP Employee
NXP Employee

Hi Nikhil

please verify that all board power was removed during reset as it is done

in i.MX6Q Sabre SD board schematic spf-27392 p.21 U507 using pmic PWRON signal

Schematics
i.MX6_SABRE_SDP_DESIGNFILES
http://www.nxp.com/products/software-and-tools/hardware-development-tools/sabre-development-system/s...

Best regards
igor

0 Kudos