On our custom board (imx6d + lpddr2, pop-package) we faced with kernel panic after some tome of work. After some reserces I detected that busfreq causes this.
The thing is that before change ddr frequancy, driver (in function "update_lpddr2_freq_smp") compares new freq value with current and if they equals it returns 0. After that driver configures clock parents and if frequancies not configured before it (because update_lpddr2_freq_smp doesn't actually work) system crashes.
Some times in "update_lpddr2_freq_smp" curr_ddr_rate doesn't changes after previous call. Make it volatile not help. If not check curr_ddr_rate - all works perfect.
Why curr_ddr_rate doesn't change sometimes? And do we need curr_ddr_rate if all other work doings unconditionally?