Message ID | 1475933892-16021-1-git-send-email-shawn.guo@linaro.org |
---|---|
State | Accepted |
Commit | d3397484bb5b8534289a630c1a78500ff4f2fbf4 |
Headers | show |
On Sat, Oct 8, 2016 at 6:38 AM, Shawn Guo <shawn.guo@linaro.org> wrote: > The hi6220-sysctrl and hi6220-mediactrl are not only clock provider but > also reset controller. It worked fine that single sysctrl/mediactrl > device node in DT can be used to initialize clock driver and populate > platform device for reset controller. But it stops working after > commit 989eafd0b609 ("clk: core: Avoid double initialization of clocks") > gets merged. The commit sets flag OF_POPULATED during clock > initialization to skip the platform device populating for the same > device node. On hi6220, it effectively makes hi6220-sysctrl reset > driver not probe any more. > > The patch changes hi6220 sysctrl and mediactrl clock init macro from > CLK_OF_DECLARE to CLK_OF_DECLARE_DRIVER, so that the reset driver using > the same hardware block can continue working. > > Signed-off-by: Shawn Guo <shawn.guo@linaro.org> Tested-by: John Stultz <john.stultz@linaro.org> I hit this as well last week when 989eafd0b609 ("clk: core: Avoid double initialization of clocks") landed, which killed graphics on my HiKey. My workaround was a bit hackish, as I don't really know when one should use OF_DECLARE vs OF_DECLARE_DRIVER, but I also converted the hi6220_clk_ao and hi6220_clk_power to the _DRIVER side. Your patch seems to work just as well for me, but I wanted to double check with you that the ao/power clks didn't need the conversion as well. thanks -john _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
On 10/08, Shawn Guo wrote: > The hi6220-sysctrl and hi6220-mediactrl are not only clock provider but > also reset controller. It worked fine that single sysctrl/mediactrl > device node in DT can be used to initialize clock driver and populate > platform device for reset controller. But it stops working after > commit 989eafd0b609 ("clk: core: Avoid double initialization of clocks") > gets merged. The commit sets flag OF_POPULATED during clock > initialization to skip the platform device populating for the same > device node. On hi6220, it effectively makes hi6220-sysctrl reset > driver not probe any more. > > The patch changes hi6220 sysctrl and mediactrl clock init macro from > CLK_OF_DECLARE to CLK_OF_DECLARE_DRIVER, so that the reset driver using > the same hardware block can continue working. > > Signed-off-by: Shawn Guo <shawn.guo@linaro.org> > --- Applied to clk-fixes -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff --git a/drivers/clk/hisilicon/clk-hi6220.c b/drivers/clk/hisilicon/clk-hi6220.c index fe364e63f8de..c0e8e1f196aa 100644 --- a/drivers/clk/hisilicon/clk-hi6220.c +++ b/drivers/clk/hisilicon/clk-hi6220.c @@ -195,7 +195,7 @@ static void __init hi6220_clk_sys_init(struct device_node *np) hi6220_clk_register_divider(hi6220_div_clks_sys, ARRAY_SIZE(hi6220_div_clks_sys), clk_data); } -CLK_OF_DECLARE(hi6220_clk_sys, "hisilicon,hi6220-sysctrl", hi6220_clk_sys_init); +CLK_OF_DECLARE_DRIVER(hi6220_clk_sys, "hisilicon,hi6220-sysctrl", hi6220_clk_sys_init); /* clocks in media controller */ @@ -252,7 +252,7 @@ static void __init hi6220_clk_media_init(struct device_node *np) hi6220_clk_register_divider(hi6220_div_clks_media, ARRAY_SIZE(hi6220_div_clks_media), clk_data); } -CLK_OF_DECLARE(hi6220_clk_media, "hisilicon,hi6220-mediactrl", hi6220_clk_media_init); +CLK_OF_DECLARE_DRIVER(hi6220_clk_media, "hisilicon,hi6220-mediactrl", hi6220_clk_media_init); /* clocks in pmctrl */
The hi6220-sysctrl and hi6220-mediactrl are not only clock provider but also reset controller. It worked fine that single sysctrl/mediactrl device node in DT can be used to initialize clock driver and populate platform device for reset controller. But it stops working after commit 989eafd0b609 ("clk: core: Avoid double initialization of clocks") gets merged. The commit sets flag OF_POPULATED during clock initialization to skip the platform device populating for the same device node. On hi6220, it effectively makes hi6220-sysctrl reset driver not probe any more. The patch changes hi6220 sysctrl and mediactrl clock init macro from CLK_OF_DECLARE to CLK_OF_DECLARE_DRIVER, so that the reset driver using the same hardware block can continue working. Signed-off-by: Shawn Guo <shawn.guo@linaro.org> --- It fixes an issue that is seen on linux-next, i.e. the new added hi6220-sysctrl reset driver doesn't probe at all, and consequently the mmc driver fails to register. Shawn drivers/clk/hisilicon/clk-hi6220.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -- 1.9.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel