IMX8MP: hdmimix_clk driver hanging the kernel at boot

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

IMX8MP: hdmimix_clk driver hanging the kernel at boot

430 Views
john_obendorfer
Contributor III

I am attempting to validate the HDMI port on a custom board running Linux 5.4.24_2.1.0.

HDMI pin configuration (in the HOG group):

MX8MP_IOMUXC_HDMI_DDC_SCL__HDMIMIX_EARC_SCL 0x400001c3
MX8MP_IOMUXC_HDMI_DDC_SDA__HDMIMIX_EARC_SDA 0x400001c3
MX8MP_IOMUXC_HDMI_HPD__HDMIMIX_EARC_DC_HPD 0x40000019
MX8MP_IOMUXC_HDMI_CEC__HDMIMIX_EARC_CEC 0x40000019

 

HDMI device(s) enabled:

&hdmimix_clk {
status = "okay";
};

Note: all other HDMI devices were disabled to isolate the kernel boot hang to this driver.

I instrumented the hdmimix_clk driver (drivers/clk/imx/clk-hdmimix.c).

I see the driver's probe() method execute.

Then I see a series of hdmimix_clk driver suspend/resumes.  Eventually one of the resume() calls hangs, at the point where it attempts to restore a hardware register from the hdmimix_clk_saved_regs.  

I have inserted the serial console output below:

[ 1.562210] imx_hdmimix_clk_probe(): entry
[ 1.566322] imx_hdmimix_clk_probe(): 1
[ 1.570079] imx_hdmimix_clk_resume(): entry
[ 1.574268] imx_hdmimix_clk_resume(): base = ffff800010035000
[ 1.580019] imx_hdmimix_clk_resume(): restoring base + 0x40 -> 0
[ 1.586046] imx_hdmimix_clk_resume(): restoring base + 0x50 -> 0
[ 1.592065] imx_hdmimix_clk_resume(): exit(success)
[ 1.596950] imx_hdmimix_clk_probe(): 2
[ 1.600713] imx_hdmimix_clk_probe(): 3
[ 1.604469] imx_hdmimix_clk_probe(): 4
[ 1.610415] imx_hdmimix_clk_probe(): 5
[ 1.614171] imx_hdmimix_clk_probe(): 6
[ 1.617960] imx_hdmimix_clk_probe(): 7
[ 1.621729] imx_hdmimix_clk_suspend(): entry
[ 1.626009] imx_hdmimix_clk_suspend(): base = ffff800010035000
[ 1.626026] imx_hdmimix_clk_probe(): exit(success)
[ 1.631849] imx_hdmimix_clk_suspend(): base + 0x40 = 0
[ 1.638941] spi_imx 30820000.spi: bitbang start failed with -517
[ 1.641789] imx_hdmimix_clk_suspend(): base + 0x50 = 1800
[ 1.648076] spi_imx 30830000.spi: bitbang start failed with -517
[ 1.653191] imx_hdmimix_clk_suspend(): exit (success)

(I am curious about the concurrent execution of the probe, resumes,and suspend.)

...

[ 3.244155] imx_hdmimix_clk_resume(): entry
[ 3.248604] platform regulatory.0: Falling back to sysfs fallback for: regula
tory.db
[ 3.252796] imx_hdmimix_clk_resume(): base = ffff800010035000
[ 3.266263] imx_hdmimix_clk_resume(): restoring base + 0x40 -> 0
[ 3.272269] imx_hdmimix_clk_resume(): restoring base + 0x50 -> 1800
[ 3.278547] imx_hdmimix_clk_resume(): exit(success)
[ 3.283434] imx_hdmimix_clk_suspend(): entry
[ 3.287707] imx_hdmimix_clk_suspend(): base = ffff800010035000
[ 3.293543] imx_hdmimix_clk_suspend(): base + 0x40 = 0
[ 3.298683] imx_hdmimix_clk_suspend(): base + 0x50 = 1800
[ 3.304081] imx_hdmimix_clk_suspend(): exit (success)
[ 3.309135] imx_hdmimix_clk_resume(): entry
[ 3.313318] imx_hdmimix_clk_resume(): base = ffff800010035000
[ 3.319063] imx_hdmimix_clk_resume(): restoring base + 0x40 -> 0
[ 3.325070] imx_hdmimix_clk_resume(): restoring base + 0x50 -> 1800
[ 3.331338] imx_hdmimix_clk_resume(): exit(success)
[ 3.336217] imx_hdmimix_clk_suspend(): entry
[ 3.340487] imx_hdmimix_clk_suspend(): base = ffff800010035000
[ 3.346320] imx_hdmimix_clk_suspend(): base + 0x40 = 0
[ 3.351458] imx_hdmimix_clk_suspend(): base + 0x50 = 1800
[ 3.356859] imx_hdmimix_clk_suspend(): exit (success)
[ 3.361913] imx_hdmimix_clk_resume(): entry
[ 3.366095] imx_hdmimix_clk_resume(): base = ffff800010035000
[ 3.370609] usb 1-1: new high-speed USB device number 2 using xhci-hcd
[ 3.371846] imx_hdmimix_clk_resume(): restoring base + 0x40 -> 0
[ 3.384380] imx_hdmimix_clk_resume(): restoring base + 0x50 -> 1800
[ 3.390653] imx_hdmimix_clk_resume(): exit(success)
[ 3.395542] imx_hdmimix_clk_suspend(): entry
[ 3.399815] imx_hdmimix_clk_suspend(): base = ffff800010035000
[ 3.405649] imx_hdmimix_clk_suspend(): base + 0x40 = 0
[ 3.410789] imx_hdmimix_clk_suspend(): base + 0x50 = 1800
[ 3.416188] imx_hdmimix_clk_suspend(): exit (success)
[ 3.421246] imx_hdmimix_clk_resume(): entry
[ 3.425429] imx_hdmimix_clk_resume(): base = ffff800010035000
[ 3.431174] imx_hdmimix_clk_resume(): restoring base + 0x40 -> 0
[ 3.437183] imx_hdmimix_clk_resume(): restoring base + 0x50 -> 1800
[ 3.443451] imx_hdmimix_clk_resume(): exit(success)
[ 3.448331] imx_hdmimix_clk_suspend(): entry
[ 3.452601] imx_hdmimix_clk_suspend(): base = ffff800010035000
[ 3.458433] imx_hdmimix_clk_suspend(): base + 0x40 = 0
[ 3.463572] imx_hdmimix_clk_suspend(): base + 0x50 = 1800
[ 3.468971] imx_hdmimix_clk_suspend(): exit (success)
[ 3.474029] imx_hdmimix_clk_resume(): entry
[ 3.478213] imx_hdmimix_clk_resume(): base = ffff800010035000
[ 3.483960] imx_hdmimix_clk_resume(): restoring base + 0x40 -> 0
[ 3.489975] imx_hdmimix_clk_resume(): restoring base + 0x50 -> 1800
[ 3.496246] imx_hdmimix_clk_resume(): exit(success)
[ 3.501126] imx_hdmimix_clk_suspend(): entry
[ 3.505399] imx_hdmimix_clk_suspend(): base = ffff800010035000
[ 3.511233] imx_hdmimix_clk_suspend(): base + 0x40 = 0
[ 3.516372] imx_hdmimix_clk_suspend(): base + 0x50 = 1800
[ 3.521771] imx_hdmimix_clk_suspend(): exit (success)
[ 3.526830] imx_hdmimix_clk_resume(): entry
[ 3.531014] imx_hdmimix_clk_resume(): base = ffff800010035000
[ 3.536763] imx_hdmimix_clk_resume(): restoring base + 0x40 -> 0
[ 3.542771] imx_hdmimix_clk_resume(): restoring base + 0x50 -> 1800
[ 3.549039] imx_hdmimix_clk_resume(): exit(success)
[ 3.553922] imx_hdmimix_clk_suspend(): entry
[ 3.558193] imx_hdmimix_clk_suspend(): base = ffff800010035000
[ 3.564029] imx_hdmimix_clk_suspend(): base + 0x40 = 0
[ 3.569170] imx_hdmimix_clk_suspend(): base + 0x50 = 1800
[ 3.574570] imx_hdmimix_clk_suspend(): exit (success)
[ 3.582770] imx_hdmimix_clk_resume(): entry
[ 3.586959] imx_hdmimix_clk_resume(): base = ffff800010035000
[ 3.592712] imx_hdmimix_clk_resume(): restoring base + 0x40 -> 0
[ 3.598723] imx_hdmimix_clk_resume(): restoring base + 0x50 -> 1800
[ 3.604994] imx_hdmimix_clk_resume(): exit(success)
[ 3.609876] imx_hdmimix_clk_suspend(): entry
[ 3.614150] imx_hdmimix_clk_suspend(): base = ffff800010035000
[ 3.619983] imx_hdmimix_clk_suspend(): base + 0x40 = 0
[ 3.625123] imx_hdmimix_clk_suspend(): base + 0x50 = 1800
[ 3.630527] imx_hdmimix_clk_suspend(): exit (success)
[ 3.635581] imx_hdmimix_clk_resume(): entry
[ 3.639764] imx_hdmimix_clk_resume(): base = ffff800010035000
[ 3.645513] imx_hdmimix_clk_resume(): restoring base + 0x40 -> 0
[ 3.651521] imx_hdmimix_clk_resume(): restoring base + 0x50 -> 1800
[ 3.657788] imx_hdmimix_clk_resume(): exit(success)
[ 3.662669] imx_hdmimix_clk_suspend(): entry
[ 3.666941] imx_hdmimix_clk_suspend(): base = ffff800010035000
[ 3.672775] imx_hdmimix_clk_suspend(): base + 0x40 = 0
[ 3.677916] imx_hdmimix_clk_suspend(): base + 0x50 = 1800
[ 3.683316] imx_hdmimix_clk_suspend(): exit (success)
[ 3.688467] imx_hdmimix_clk_resume(): entry
[ 3.692652] imx_hdmimix_clk_resume(): base = ffff800010035000
[ 3.698406] imx_hdmimix_clk_resume(): restoring base + 0x40 -> 0

At this point the boot hangs, at the point where the hdmimix_clk driver is attempt to restore  the hardware from its register cache, as noted above.

Is there any further information I can provide to help figure out what's going wrong?

Labels (1)
0 Kudos
0 Replies