Commit 691a0180 authored by Stephen Boyd's avatar Stephen Boyd
Browse files

Merge tag 'qcom-clk-for-6.11-2' of...

Merge tag 'qcom-clk-for-6.11-2' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux into clk-qcom

Pull more qcom clk driver updates from Bjorn Andersson:

 - Introduces helper logic to expose clock controllers as simple
   interconnect providers
 - Use the interconnect helper above on Qualcomm ipq9574
 - Add CLK_SET_RATE_PARENT to the remaining USB pipe clocks on Qualcomm
   X1Elite.
 - Improve error handling in Qualcomm kpss-xcc driver
 - Mark Qualcomm SC8280XP LPASS clock controller regmap_config const

* tag 'qcom-clk-for-6.11-2' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux:
  clk: qcom: ipq9574: Use icc-clk for enabling NoC related clocks
  clk: qcom: common: Add interconnect clocks support
  interconnect: icc-clk: Add devm_icc_clk_register
  interconnect: icc-clk: Specify master/slave ids
  dt-bindings: clock: qcom: Add AHB clock for SM8150
  clk: qcom: gcc-x1e80100: Set parent rate for USB3 sec and tert PHY pipe clks
  dt-bindings: interconnect: Add Qualcomm IPQ9574 support
  clk: qcom: kpss-xcc: Return of_clk_add_hw_provider to transfer the error
  clk: qcom: lpasscc-sc8280xp: Constify struct regmap_config
parents 01a0a6cc 23711cab
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -35,6 +35,9 @@ properties:

  '#power-domain-cells': false

  '#interconnect-cells':
    const: 1

required:
  - compatible
  - clocks
+16 −1
Original line number Diff line number Diff line
@@ -62,7 +62,6 @@ allOf:
          enum:
            - qcom,sc7180-videocc
            - qcom,sdm845-videocc
            - qcom,sm8150-videocc
    then:
      properties:
        clocks:
@@ -88,6 +87,22 @@ allOf:
            - const: bi_tcxo
            - const: bi_tcxo_ao

  - if:
      properties:
        compatible:
          enum:
            - qcom,sm8150-videocc
    then:
      properties:
        clocks:
          items:
            - description: AHB
            - description: Board XO source
        clock-names:
          items:
            - const: iface
            - const: bi_tcxo

  - if:
      properties:
        compatible:
+2 −0
Original line number Diff line number Diff line
@@ -14,6 +14,8 @@ menuconfig COMMON_CLK_QCOM
	select RATIONAL
	select REGMAP_MMIO
	select RESET_CONTROLLER
	select INTERCONNECT
	select INTERCONNECT_CLK

if COMMON_CLK_QCOM

+6 −1
Original line number Diff line number Diff line
@@ -226,7 +226,12 @@ static int qcom_msm8996_cbf_icc_register(struct platform_device *pdev, struct cl
	struct device *dev = &pdev->dev;
	struct clk *clk = devm_clk_hw_get_clk(dev, cbf_hw, "cbf");
	const struct icc_clk_data data[] = {
		{ .clk = clk, .name = "cbf", },
		{
			.clk = clk,
			.name = "cbf",
			.master_id = MASTER_CBF_M4M,
			.slave_id = SLAVE_CBF_M4M,
		},
	};
	struct icc_provider *provider;

+34 −1
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
#include <linux/regmap.h>
#include <linux/platform_device.h>
#include <linux/clk-provider.h>
#include <linux/interconnect-clk.h>
#include <linux/reset-controller.h>
#include <linux/of.h>

@@ -252,6 +253,38 @@ static struct clk_hw *qcom_cc_clk_hw_get(struct of_phandle_args *clkspec,
	return cc->rclks[idx] ? &cc->rclks[idx]->hw : NULL;
}

static int qcom_cc_icc_register(struct device *dev,
				const struct qcom_cc_desc *desc)
{
	struct icc_clk_data *icd;
	struct clk_hw *hws;
	int i;

	if (!IS_ENABLED(CONFIG_INTERCONNECT_CLK))
		return 0;

	if (!desc->icc_hws)
		return 0;

	icd = devm_kcalloc(dev, desc->num_icc_hws, sizeof(*icd), GFP_KERNEL);
	if (!icd)
		return -ENOMEM;

	for (i = 0; i < desc->num_icc_hws; i++) {
		icd[i].master_id = desc->icc_hws[i].master_id;
		icd[i].slave_id = desc->icc_hws[i].slave_id;
		hws = &desc->clks[desc->icc_hws[i].clk_id]->hw;
		icd[i].clk = devm_clk_hw_get_clk(dev, hws, "icc");
		if (!icd[i].clk)
			return dev_err_probe(dev, -ENOENT,
					     "(%d) clock entry is null\n", i);
		icd[i].name = clk_hw_get_name(hws);
	}

	return devm_icc_clk_register(dev, desc->icc_first_node_id,
						     desc->num_icc_hws, icd);
}

int qcom_cc_really_probe(struct device *dev,
			 const struct qcom_cc_desc *desc, struct regmap *regmap)
{
@@ -320,7 +353,7 @@ int qcom_cc_really_probe(struct device *dev,
	if (ret)
		return ret;

	return 0;
	return qcom_cc_icc_register(dev, desc);
}
EXPORT_SYMBOL_GPL(qcom_cc_really_probe);

Loading