Quoting Jeffrey Hugo (2018-12-05 13:20:07) > On 12/5/2018 2:04 PM, Stephen Boyd wrote: > > Quoting Jeffrey Hugo (2018-12-05 09:03:54) > > > > I don't quite understand the patch in general. The xo_board clk should > > always exist in DT and the fixed factor clk in GCC is there until the > > rpm clk driver can control the XO clk state vote for the kernel. > > Sorry, this wasn't apparent. It doesn't seem like this "requirement" is > captured anywhere. Agreed! > > As far as the SD clocks are concerned, they are defined in GCC, and > eventually have a root parent called "xo". "xo" isn't defined anywhere, > so the SD clocks can't really be used, and the hardware doesn't come up. > This patch "fixed" that, but I missed the link to the rpm driver that > Marc pointed out. Hmm ok. The SD DT node should just point to the xo_board clk for now and later on it can be changed to use the rpm clk when the rpm node is created. > > > > > > If anything, change the DT node to be named xo-board instead of xo_board > > because that matches DT naming schemes and then add a clock-output-names > > = "xo_board" property to it so that we keep the underscore. > > I see this now, and I agree with it, but then SD goes back to a broken > state because there is "xo" clock for GCC. Its not quite clear to me > how to make GCC (and thus SD) happy again with this change reverted/fixed. > > Bjorn mentioned offline he is going to take a look, but he has a few > other things on his plate first. > There is an XO clk created in drivers/clk/qcom/gcc-msm8996.c, we should do the same here until rpm can handle this. I'll pack this patch up and merge it to clk-next soon. ----8<---- diff --git a/drivers/clk/qcom/gcc-msm8998.c b/drivers/clk/qcom/gcc-msm8998.c index c3bb9fffd040..d72b908137e2 100644 --- a/drivers/clk/qcom/gcc-msm8998.c +++ b/drivers/clk/qcom/gcc-msm8998.c @@ -117,6 +117,17 @@ static const char * const gcc_parent_names_5[] = { "core_bi_pll_test_se", }; +static struct clk_fixed_factor xo = { + .mult = 1, + .div = 1, + .hw.init = &(struct clk_init_data){ + .name = "xo", + .parent_names = (const char *[]){ "xo_board" }, + .num_parents = 1, + .ops = &clk_fixed_factor_ops, + }, +}; + static struct pll_vco fabia_vco[] = { { 250000000, 2000000000, 0 }, { 125000000, 1000000000, 1 }, @@ -2798,6 +2809,10 @@ static int gcc_msm8998_probe(struct platform_device *pdev) if (ret) return ret; + ret = devm_clk_hw_register(&pdev->dev, &xo.hw); + if (ret) + return ret; + return qcom_cc_really_probe(pdev, &gcc_msm8998_desc, regmap); }