Hi Martin, Quoting kernel@xxxxxxxxxxxxxxxx (2016-01-11 11:55:54) > @@ -1274,9 +1283,50 @@ static int bcm2835_clock_set_rate(struct clk_hw *hw, > struct bcm2835_cprman *cprman = clock->cprman; > const struct bcm2835_clock_data *data = clock->data; > u32 div = bcm2835_clock_choose_div(hw, rate, parent_rate, false); > + u32 ctl, mash; > + bool enabled; > > + spin_lock(&cprman->regs_lock); > + /* check if divider is identical, then return */ > + if (div == cprman_read(cprman, data->div_reg)) > + goto unlock; > + > + /* it is recommended to only set clock registers when disabled */ > + ctl = cprman_read(cprman, data->ctl_reg); > + enabled = ctl & CM_ENABLE; > + if (enabled) { > + /* disable clock */ > + cprman_write(cprman, data->ctl_reg, ctl); This seems unsafe to me. Any IP block consuming this signal will have its clock cut without warning! If you need to enforce this behavior we provide the CLK_SET_RATE_GATE flag to handle it at the framework level. Regards, Mike -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html