edit SideBar

Main / Clocks

iMX6 LVDS Clock Init Issue

On boot, the function prints clk_set_parent: failed to switch parent of ldb_di0_div_sel due to child mux ipu1_di1_sel and returns with error, so the rest of the needed setup appears NOT to occur.

The code checks for a specific bit set in the clk flags, if it is then it does the above failure
/* check two consecutive basic mux clocks */ ./include/linux/clk-provider.h:38:#define CLK_IS_BASIC_MUX BIT(9)
explanation of this seemingly rather recent patch – added into kernel 3.14 a couple years ago:
When switching parent clock with another basic mux clock being its child, a glitch might be generated and propagated to downstream clocks through this child mux. The patch adds a flag CLK_IS_BASIC_MUX to identify the basic mux clocks, and prohibit the parent switching when the clock itself is the parent of any basic mux clock. With this check, the parent switching of a clock has to happen before the child mux switches to this clock path.

A hacked version of the kernel which won’t stop at this checkpoint should hopefully continue the clock parent configuration as asked, on the assumption that we want to push forward regardless of the potential clock glitch the patcher is worried about.

Release from NXP about the problem:

There have been recent (2016) kernel patches addressing the issue.

Page last modified on November 11, 2016, at 06:41 PM