]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
qualcommax: ipq50xx: backport upstreamed patches for adding ipq5018 CMN PLL support 19890/head
authorGeorge Moussalem <george.moussalem@outlook.com>
Tue, 19 Aug 2025 14:51:59 +0000 (18:51 +0400)
committerRobert Marko <robimarko@gmail.com>
Mon, 15 Sep 2025 08:29:41 +0000 (10:29 +0200)
Use upstreamed patches for adding IPQ CMN PLL driver support and its
node and clocks to the DTS accordingly.

In addition, set clock-div and clock-mult properties instead of the
frequency itself for the XO board clock in all board files as it's
converted to a fixed factor clock.

Signed-off-by: George Moussalem <george.moussalem@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/19890
Signed-off-by: Robert Marko <robimarko@gmail.com>
22 files changed:
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax6000.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-ax830.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-gl-b3000.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-mx-base.dtsi
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-wn-dax3000gr.dts
target/linux/qualcommax/files/arch/arm64/boot/dts/qcom/ipq5018-wrc-x3000gs2.dts
target/linux/qualcommax/patches-6.12/0063-v6.14-clk-qcom-Add-CMN-PLL-clock-controller-driver-for-IPQ-SoC.patch [new file with mode: 0644]
target/linux/qualcommax/patches-6.12/0064-v6.17-clk-qcom-cmnpll-Add-IPQ5424-SoC-support.patch [new file with mode: 0644]
target/linux/qualcommax/patches-6.12/0065-v6.17-dt-bindings-clock-qcom-Add-CMN-PLL-support-for-IPQ5018-SoC.patch [new file with mode: 0644]
target/linux/qualcommax/patches-6.12/0066-v6.17-clk-qcom-ipq-cmn-pll-Add-IPQ5018-SoC-support.patch [new file with mode: 0644]
target/linux/qualcommax/patches-6.12/0067-v6.18-arm64-dts-ipq5018-Add-CMN-PLL-node.patch [new file with mode: 0644]
target/linux/qualcommax/patches-6.12/0068-v6.18-arm64-dts-qcom-Update-IPQ5018-xo_board_clk-to-use-fixed-factor-clock.patch [new file with mode: 0644]
target/linux/qualcommax/patches-6.12/0306-arm64-dts-qcom-ipq5018-Add-PWM-node.patch
target/linux/qualcommax/patches-6.12/0339-arm64-dts-qcom-ipq5018-Add-QUP1-UART2-node.patch
target/linux/qualcommax/patches-6.12/0340-arm64-dts-qcom-ipq5018-Add-QUP3-I2C-node.patch
target/linux/qualcommax/patches-6.12/0701-dt-bindings-clock-qcom-Add-CMN-PLL-clock-controller-.patch [deleted file]
target/linux/qualcommax/patches-6.12/0702-clk-qcom-Add-CMN-PLL-clock-controller-driver-for-IPQ.patch [deleted file]
target/linux/qualcommax/patches-6.12/0703-clk-qcom-cmn-pll-add-IPQ5018-support.patch [deleted file]
target/linux/qualcommax/patches-6.12/0704-arm64-dts-qcom-ipq5018-Add-ethernet-cmn-node.patch [deleted file]
target/linux/qualcommax/patches-6.12/0715-arm64-dts-qcom-ipq5018-add-vendor-compatible-to-mdio-node.patch
target/linux/qualcommax/patches-6.12/0816-arm64-dts-qcom-ipq5018-add-wifi-support.patch
target/linux/qualcommax/patches-6.12/0817-arm64-dts-qcom-ipq5018-add-tz_apps-reserved-memory-region.patch

index 93898d88e0aaaf0e4baed2a260fce7b76387ded8..8c8766327df10222c52aa362c36de9f38a12cb92 100644 (file)
@@ -98,7 +98,8 @@
 };
 
 &xo_board_clk {
-       clock-frequency = <24000000>;
+       clock-div = <4>;
+       clock-mult = <1>;
 };
 
 &blsp1_uart1 {
index 2853c84c4672034d89243f81cbc57b300bb1882b..de36118c0adf87574ceca5819f4541853ef1da5a 100644 (file)
 };
 
 &xo_board_clk {
-       clock-frequency = <24000000>;
+       clock-div = <4>;
+       clock-mult = <1>;
 };
 
 &blsp1_uart1 {
index 30fce130bf969884d76412cd841137aef461fd45..f389bb0386ed48ad391cde2d210a47b55ac0552e 100644 (file)
 };
 
 &xo_board_clk {
-       clock-frequency = <24000000>;
+       clock-div = <4>;
+       clock-mult = <1>;
 };
 
 &blsp1_uart1 {
index 29754b1e03c5f8acfc1e48cbf7124b682ebeb866..c56882fb7a75a3e6ca08ee4695b4edd678ee68e4 100644 (file)
@@ -76,7 +76,8 @@
 };
 
 &xo_board_clk {
-       clock-frequency = <24000000>;
+       clock-div = <4>;
+       clock-mult = <1>;
 };
 
 &blsp1_uart1 {
index 572f2fbcb28162ae46a5abd9de0b6c02f836b304..18c4a7a23346b8164342d6d99ecbf7dfd207cb96 100644 (file)
 };
 
 &xo_board_clk {
-       clock-frequency = <24000000>;
+       clock-div = <4>;
+       clock-mult = <1>;
 };
 
 &blsp1_uart1 {
index 3e01b8dbd14a76ac3bb93ae45c7151823374fda4..c6ff01bfb86e24b4b23cb931efddd06d7977b584 100644 (file)
 };
 
 &xo_board_clk {
-       clock-frequency = <24000000>;
+       clock-div = <4>;
+       clock-mult = <1>;
 };
 
 &blsp1_uart1 {
diff --git a/target/linux/qualcommax/patches-6.12/0063-v6.14-clk-qcom-Add-CMN-PLL-clock-controller-driver-for-IPQ-SoC.patch b/target/linux/qualcommax/patches-6.12/0063-v6.14-clk-qcom-Add-CMN-PLL-clock-controller-driver-for-IPQ-SoC.patch
new file mode 100644 (file)
index 0000000..7317a13
--- /dev/null
@@ -0,0 +1,472 @@
+From f81715a4c87c3b75ca2640bb61b6c66506061a64 Mon Sep 17 00:00:00 2001
+From: Luo Jie <quic_luoj@quicinc.com>
+Date: Fri, 3 Jan 2025 15:31:35 +0800
+Subject: clk: qcom: Add CMN PLL clock controller driver for IPQ SoC
+
+The CMN PLL clock controller supplies clocks to the hardware
+blocks that together make up the Ethernet function on Qualcomm
+IPQ SoCs and to GCC. The driver is initially supported for
+IPQ9574 SoC.
+
+The CMN PLL clock controller expects a reference input clock
+from the on-board Wi-Fi block acting as clock source. The input
+reference clock needs to be configured to one of the supported
+clock rates.
+
+The controller supplies a number of fixed-rate output clocks.
+For the IPQ9574, there is one output clock of 353 MHZ to PPE
+(Packet Process Engine) hardware block, three 50 MHZ output
+clocks and an additional 25 MHZ output clock supplied to the
+connected Ethernet devices. The PLL also supplies a 24 MHZ
+clock as XO and a 32 KHZ sleep clock to GCC, and one 31.25
+MHZ clock to PCS.
+
+Signed-off-by: Luo Jie <quic_luoj@quicinc.com>
+Acked-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
+Link: https://lore.kernel.org/r/20250103-qcom_ipq_cmnpll-v8-2-c89fb4d4849d@quicinc.com
+Signed-off-by: Bjorn Andersson <andersson@kernel.org>
+---
+ drivers/clk/qcom/ipq-cmn-pll.c | 435 +++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 435 insertions(+)
+ create mode 100644 drivers/clk/qcom/ipq-cmn-pll.c
+
+(limited to 'drivers/clk/qcom/ipq-cmn-pll.c')
+
+--- /dev/null
++++ b/drivers/clk/qcom/ipq-cmn-pll.c
+@@ -0,0 +1,435 @@
++// SPDX-License-Identifier: GPL-2.0-only
++/*
++ * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
++ */
++
++/*
++ * CMN PLL block expects the reference clock from on-board Wi-Fi block,
++ * and supplies fixed rate clocks as output to the networking hardware
++ * blocks and to GCC. The networking related blocks include PPE (packet
++ * process engine), the externally connected PHY or switch devices, and
++ * the PCS.
++ *
++ * On the IPQ9574 SoC, there are three clocks with 50 MHZ and one clock
++ * with 25 MHZ which are output from the CMN PLL to Ethernet PHY (or switch),
++ * and one clock with 353 MHZ to PPE. The other fixed rate output clocks
++ * are supplied to GCC (24 MHZ as XO and 32 KHZ as sleep clock), and to PCS
++ * with 31.25 MHZ.
++ *
++ *               +---------+
++ *               |   GCC   |
++ *               +--+---+--+
++ *           AHB CLK|   |SYS CLK
++ *                  V   V
++ *          +-------+---+------+
++ *          |                  +-------------> eth0-50mhz
++ * REF CLK  |     IPQ9574      |
++ * -------->+                  +-------------> eth1-50mhz
++ *          |  CMN PLL block   |
++ *          |                  +-------------> eth2-50mhz
++ *          |                  |
++ *          +----+----+----+---+-------------> eth-25mhz
++ *               |    |    |
++ *               V    V    V
++ *              GCC  PCS  NSS/PPE
++ */
++
++#include <linux/bitfield.h>
++#include <linux/clk-provider.h>
++#include <linux/delay.h>
++#include <linux/err.h>
++#include <linux/mod_devicetable.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/pm_clock.h>
++#include <linux/pm_runtime.h>
++#include <linux/regmap.h>
++
++#include <dt-bindings/clock/qcom,ipq-cmn-pll.h>
++
++#define CMN_PLL_REFCLK_SRC_SELECTION          0x28
++#define CMN_PLL_REFCLK_SRC_DIV                        GENMASK(9, 8)
++
++#define CMN_PLL_LOCKED                                0x64
++#define CMN_PLL_CLKS_LOCKED                   BIT(8)
++
++#define CMN_PLL_POWER_ON_AND_RESET            0x780
++#define CMN_ANA_EN_SW_RSTN                    BIT(6)
++
++#define CMN_PLL_REFCLK_CONFIG                 0x784
++#define CMN_PLL_REFCLK_EXTERNAL                       BIT(9)
++#define CMN_PLL_REFCLK_DIV                    GENMASK(8, 4)
++#define CMN_PLL_REFCLK_INDEX                  GENMASK(3, 0)
++
++#define CMN_PLL_CTRL                          0x78c
++#define CMN_PLL_CTRL_LOCK_DETECT_EN           BIT(15)
++
++#define CMN_PLL_DIVIDER_CTRL                  0x794
++#define CMN_PLL_DIVIDER_CTRL_FACTOR           GENMASK(9, 0)
++
++/**
++ * struct cmn_pll_fixed_output_clk - CMN PLL output clocks information
++ * @id:       Clock specifier to be supplied
++ * @name: Clock name to be registered
++ * @rate: Clock rate
++ */
++struct cmn_pll_fixed_output_clk {
++      unsigned int id;
++      const char *name;
++      unsigned long rate;
++};
++
++/**
++ * struct clk_cmn_pll - CMN PLL hardware specific data
++ * @regmap: hardware regmap.
++ * @hw: handle between common and hardware-specific interfaces
++ */
++struct clk_cmn_pll {
++      struct regmap *regmap;
++      struct clk_hw hw;
++};
++
++#define CLK_PLL_OUTPUT(_id, _name, _rate) {           \
++      .id =           _id,                            \
++      .name =         _name,                          \
++      .rate =         _rate,                          \
++}
++
++#define to_clk_cmn_pll(_hw) container_of(_hw, struct clk_cmn_pll, hw)
++
++static const struct regmap_config ipq_cmn_pll_regmap_config = {
++      .reg_bits = 32,
++      .reg_stride = 4,
++      .val_bits = 32,
++      .max_register = 0x7fc,
++      .fast_io = true,
++};
++
++static const struct cmn_pll_fixed_output_clk ipq9574_output_clks[] = {
++      CLK_PLL_OUTPUT(XO_24MHZ_CLK, "xo-24mhz", 24000000UL),
++      CLK_PLL_OUTPUT(SLEEP_32KHZ_CLK, "sleep-32khz", 32000UL),
++      CLK_PLL_OUTPUT(PCS_31P25MHZ_CLK, "pcs-31p25mhz", 31250000UL),
++      CLK_PLL_OUTPUT(NSS_1200MHZ_CLK, "nss-1200mhz", 1200000000UL),
++      CLK_PLL_OUTPUT(PPE_353MHZ_CLK, "ppe-353mhz", 353000000UL),
++      CLK_PLL_OUTPUT(ETH0_50MHZ_CLK, "eth0-50mhz", 50000000UL),
++      CLK_PLL_OUTPUT(ETH1_50MHZ_CLK, "eth1-50mhz", 50000000UL),
++      CLK_PLL_OUTPUT(ETH2_50MHZ_CLK, "eth2-50mhz", 50000000UL),
++      CLK_PLL_OUTPUT(ETH_25MHZ_CLK, "eth-25mhz", 25000000UL),
++};
++
++/*
++ * CMN PLL has the single parent clock, which supports the several
++ * possible parent clock rates, each parent clock rate is reflected
++ * by the specific reference index value in the hardware.
++ */
++static int ipq_cmn_pll_find_freq_index(unsigned long parent_rate)
++{
++      int index = -EINVAL;
++
++      switch (parent_rate) {
++      case 25000000:
++              index = 3;
++              break;
++      case 31250000:
++              index = 4;
++              break;
++      case 40000000:
++              index = 6;
++              break;
++      case 48000000:
++      case 96000000:
++              /*
++               * Parent clock rate 48 MHZ and 96 MHZ take the same value
++               * of reference clock index. 96 MHZ needs the source clock
++               * divider to be programmed as 2.
++               */
++              index = 7;
++              break;
++      case 50000000:
++              index = 8;
++              break;
++      default:
++              break;
++      }
++
++      return index;
++}
++
++static unsigned long clk_cmn_pll_recalc_rate(struct clk_hw *hw,
++                                           unsigned long parent_rate)
++{
++      struct clk_cmn_pll *cmn_pll = to_clk_cmn_pll(hw);
++      u32 val, factor;
++
++      /*
++       * The value of CMN_PLL_DIVIDER_CTRL_FACTOR is automatically adjusted
++       * by HW according to the parent clock rate.
++       */
++      regmap_read(cmn_pll->regmap, CMN_PLL_DIVIDER_CTRL, &val);
++      factor = FIELD_GET(CMN_PLL_DIVIDER_CTRL_FACTOR, val);
++
++      return parent_rate * 2 * factor;
++}
++
++static int clk_cmn_pll_determine_rate(struct clk_hw *hw,
++                                    struct clk_rate_request *req)
++{
++      int ret;
++
++      /* Validate the rate of the single parent clock. */
++      ret = ipq_cmn_pll_find_freq_index(req->best_parent_rate);
++
++      return ret < 0 ? ret : 0;
++}
++
++/*
++ * This function is used to initialize the CMN PLL to enable the fixed
++ * rate output clocks. It is expected to be configured once.
++ */
++static int clk_cmn_pll_set_rate(struct clk_hw *hw, unsigned long rate,
++                              unsigned long parent_rate)
++{
++      struct clk_cmn_pll *cmn_pll = to_clk_cmn_pll(hw);
++      int ret, index;
++      u32 val;
++
++      /*
++       * Configure the reference input clock selection as per the given
++       * parent clock. The output clock rates are always of fixed value.
++       */
++      index = ipq_cmn_pll_find_freq_index(parent_rate);
++      if (index < 0)
++              return index;
++
++      ret = regmap_update_bits(cmn_pll->regmap, CMN_PLL_REFCLK_CONFIG,
++                               CMN_PLL_REFCLK_INDEX,
++                               FIELD_PREP(CMN_PLL_REFCLK_INDEX, index));
++      if (ret)
++              return ret;
++
++      /*
++       * Update the source clock rate selection and source clock
++       * divider as 2 when the parent clock rate is 96 MHZ.
++       */
++      if (parent_rate == 96000000) {
++              ret = regmap_update_bits(cmn_pll->regmap, CMN_PLL_REFCLK_CONFIG,
++                                       CMN_PLL_REFCLK_DIV,
++                                       FIELD_PREP(CMN_PLL_REFCLK_DIV, 2));
++              if (ret)
++                      return ret;
++
++              ret = regmap_update_bits(cmn_pll->regmap, CMN_PLL_REFCLK_SRC_SELECTION,
++                                       CMN_PLL_REFCLK_SRC_DIV,
++                                       FIELD_PREP(CMN_PLL_REFCLK_SRC_DIV, 0));
++              if (ret)
++                      return ret;
++      }
++
++      /* Enable PLL locked detect. */
++      ret = regmap_set_bits(cmn_pll->regmap, CMN_PLL_CTRL,
++                            CMN_PLL_CTRL_LOCK_DETECT_EN);
++      if (ret)
++              return ret;
++
++      /*
++       * Reset the CMN PLL block to ensure the updated configurations
++       * take effect.
++       */
++      ret = regmap_clear_bits(cmn_pll->regmap, CMN_PLL_POWER_ON_AND_RESET,
++                              CMN_ANA_EN_SW_RSTN);
++      if (ret)
++              return ret;
++
++      usleep_range(1000, 1200);
++      ret = regmap_set_bits(cmn_pll->regmap, CMN_PLL_POWER_ON_AND_RESET,
++                            CMN_ANA_EN_SW_RSTN);
++      if (ret)
++              return ret;
++
++      /* Stability check of CMN PLL output clocks. */
++      return regmap_read_poll_timeout(cmn_pll->regmap, CMN_PLL_LOCKED, val,
++                                      (val & CMN_PLL_CLKS_LOCKED),
++                                      100, 100 * USEC_PER_MSEC);
++}
++
++static const struct clk_ops clk_cmn_pll_ops = {
++      .recalc_rate = clk_cmn_pll_recalc_rate,
++      .determine_rate = clk_cmn_pll_determine_rate,
++      .set_rate = clk_cmn_pll_set_rate,
++};
++
++static struct clk_hw *ipq_cmn_pll_clk_hw_register(struct platform_device *pdev)
++{
++      struct clk_parent_data pdata = { .index = 0 };
++      struct device *dev = &pdev->dev;
++      struct clk_init_data init = {};
++      struct clk_cmn_pll *cmn_pll;
++      struct regmap *regmap;
++      void __iomem *base;
++      int ret;
++
++      base = devm_platform_ioremap_resource(pdev, 0);
++      if (IS_ERR(base))
++              return ERR_CAST(base);
++
++      regmap = devm_regmap_init_mmio(dev, base, &ipq_cmn_pll_regmap_config);
++      if (IS_ERR(regmap))
++              return ERR_CAST(regmap);
++
++      cmn_pll = devm_kzalloc(dev, sizeof(*cmn_pll), GFP_KERNEL);
++      if (!cmn_pll)
++              return ERR_PTR(-ENOMEM);
++
++      init.name = "cmn_pll";
++      init.parent_data = &pdata;
++      init.num_parents = 1;
++      init.ops = &clk_cmn_pll_ops;
++
++      cmn_pll->hw.init = &init;
++      cmn_pll->regmap = regmap;
++
++      ret = devm_clk_hw_register(dev, &cmn_pll->hw);
++      if (ret)
++              return ERR_PTR(ret);
++
++      return &cmn_pll->hw;
++}
++
++static int ipq_cmn_pll_register_clks(struct platform_device *pdev)
++{
++      const struct cmn_pll_fixed_output_clk *fixed_clk;
++      struct clk_hw_onecell_data *hw_data;
++      struct device *dev = &pdev->dev;
++      struct clk_hw *cmn_pll_hw;
++      unsigned int num_clks;
++      struct clk_hw *hw;
++      int ret, i;
++
++      fixed_clk = ipq9574_output_clks;
++      num_clks = ARRAY_SIZE(ipq9574_output_clks);
++
++      hw_data = devm_kzalloc(dev, struct_size(hw_data, hws, num_clks + 1),
++                             GFP_KERNEL);
++      if (!hw_data)
++              return -ENOMEM;
++
++      /*
++       * Register the CMN PLL clock, which is the parent clock of
++       * the fixed rate output clocks.
++       */
++      cmn_pll_hw = ipq_cmn_pll_clk_hw_register(pdev);
++      if (IS_ERR(cmn_pll_hw))
++              return PTR_ERR(cmn_pll_hw);
++
++      /* Register the fixed rate output clocks. */
++      for (i = 0; i < num_clks; i++) {
++              hw = clk_hw_register_fixed_rate_parent_hw(dev, fixed_clk[i].name,
++                                                        cmn_pll_hw, 0,
++                                                        fixed_clk[i].rate);
++              if (IS_ERR(hw)) {
++                      ret = PTR_ERR(hw);
++                      goto unregister_fixed_clk;
++              }
++
++              hw_data->hws[fixed_clk[i].id] = hw;
++      }
++
++      /*
++       * Provide the CMN PLL clock. The clock rate of CMN PLL
++       * is configured to 12 GHZ by DT property assigned-clock-rates-u64.
++       */
++      hw_data->hws[CMN_PLL_CLK] = cmn_pll_hw;
++      hw_data->num = num_clks + 1;
++
++      ret = devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, hw_data);
++      if (ret)
++              goto unregister_fixed_clk;
++
++      platform_set_drvdata(pdev, hw_data);
++
++      return 0;
++
++unregister_fixed_clk:
++      while (i > 0)
++              clk_hw_unregister(hw_data->hws[fixed_clk[--i].id]);
++
++      return ret;
++}
++
++static int ipq_cmn_pll_clk_probe(struct platform_device *pdev)
++{
++      struct device *dev = &pdev->dev;
++      int ret;
++
++      ret = devm_pm_runtime_enable(dev);
++      if (ret)
++              return ret;
++
++      ret = devm_pm_clk_create(dev);
++      if (ret)
++              return ret;
++
++      /*
++       * To access the CMN PLL registers, the GCC AHB & SYS clocks
++       * of CMN PLL block need to be enabled.
++       */
++      ret = pm_clk_add(dev, "ahb");
++      if (ret)
++              return dev_err_probe(dev, ret, "Fail to add AHB clock\n");
++
++      ret = pm_clk_add(dev, "sys");
++      if (ret)
++              return dev_err_probe(dev, ret, "Fail to add SYS clock\n");
++
++      ret = pm_runtime_resume_and_get(dev);
++      if (ret)
++              return ret;
++
++      /* Register CMN PLL clock and fixed rate output clocks. */
++      ret = ipq_cmn_pll_register_clks(pdev);
++      pm_runtime_put(dev);
++      if (ret)
++              return dev_err_probe(dev, ret,
++                                   "Fail to register CMN PLL clocks\n");
++
++      return 0;
++}
++
++static void ipq_cmn_pll_clk_remove(struct platform_device *pdev)
++{
++      struct clk_hw_onecell_data *hw_data = platform_get_drvdata(pdev);
++      int i;
++
++      /*
++       * The clock with index CMN_PLL_CLK is unregistered by
++       * device management.
++       */
++      for (i = 0; i < hw_data->num; i++) {
++              if (i != CMN_PLL_CLK)
++                      clk_hw_unregister(hw_data->hws[i]);
++      }
++}
++
++static const struct dev_pm_ops ipq_cmn_pll_pm_ops = {
++      SET_RUNTIME_PM_OPS(pm_clk_suspend, pm_clk_resume, NULL)
++};
++
++static const struct of_device_id ipq_cmn_pll_clk_ids[] = {
++      { .compatible = "qcom,ipq9574-cmn-pll", },
++      { }
++};
++MODULE_DEVICE_TABLE(of, ipq_cmn_pll_clk_ids);
++
++static struct platform_driver ipq_cmn_pll_clk_driver = {
++      .probe = ipq_cmn_pll_clk_probe,
++      .remove = ipq_cmn_pll_clk_remove,
++      .driver = {
++              .name = "ipq_cmn_pll",
++              .of_match_table = ipq_cmn_pll_clk_ids,
++              .pm = &ipq_cmn_pll_pm_ops,
++      },
++};
++module_platform_driver(ipq_cmn_pll_clk_driver);
++
++MODULE_DESCRIPTION("Qualcomm Technologies, Inc. IPQ CMN PLL Driver");
++MODULE_LICENSE("GPL");
diff --git a/target/linux/qualcommax/patches-6.12/0064-v6.17-clk-qcom-cmnpll-Add-IPQ5424-SoC-support.patch b/target/linux/qualcommax/patches-6.12/0064-v6.17-clk-qcom-cmnpll-Add-IPQ5424-SoC-support.patch
new file mode 100644 (file)
index 0000000..d13e0b1
--- /dev/null
@@ -0,0 +1,104 @@
+From a2afa4c33f0a7f7f70d54a1bc5110e326753f982 Mon Sep 17 00:00:00 2001
+From: Luo Jie <quic_luoj@quicinc.com>
+Date: Tue, 10 Jun 2025 18:35:19 +0800
+Subject: clk: qcom: cmnpll: Add IPQ5424 SoC support
+
+The CMN PLL in IPQ5424 SoC supplies the fixed clock to NSS at 300 MHZ
+and to PPE at 375 MHZ. Other output clocks from CMN PLL on this SoC,
+and their rates are same as IPQ9574.
+
+Acked-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Luo Jie <quic_luoj@quicinc.com>
+Link: https://lore.kernel.org/r/20250610-qcom_ipq5424_cmnpll-v3-2-ceada8165645@quicinc.com
+Signed-off-by: Bjorn Andersson <andersson@kernel.org>
+---
+ drivers/clk/qcom/ipq-cmn-pll.c | 35 ++++++++++++++++++++++++++++++-----
+ 1 file changed, 30 insertions(+), 5 deletions(-)
+
+(limited to 'drivers/clk/qcom/ipq-cmn-pll.c')
+
+--- a/drivers/clk/qcom/ipq-cmn-pll.c
++++ b/drivers/clk/qcom/ipq-cmn-pll.c
+@@ -1,6 +1,6 @@
+ // SPDX-License-Identifier: GPL-2.0-only
+ /*
+- * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
++ * Copyright (c) 2024-2025 Qualcomm Innovation Center, Inc. All rights reserved.
+  */
+ /*
+@@ -16,6 +16,10 @@
+  * are supplied to GCC (24 MHZ as XO and 32 KHZ as sleep clock), and to PCS
+  * with 31.25 MHZ.
+  *
++ * On the IPQ5424 SoC, there is an output clock from CMN PLL to PPE at 375 MHZ,
++ * and an output clock to NSS (network subsystem) at 300 MHZ. The other output
++ * clocks from CMN PLL on IPQ5424 are the same as IPQ9574.
++ *
+  *               +---------+
+  *               |   GCC   |
+  *               +--+---+--+
+@@ -46,6 +50,7 @@
+ #include <linux/regmap.h>
+ #include <dt-bindings/clock/qcom,ipq-cmn-pll.h>
++#include <dt-bindings/clock/qcom,ipq5424-cmn-pll.h>
+ #define CMN_PLL_REFCLK_SRC_SELECTION          0x28
+ #define CMN_PLL_REFCLK_SRC_DIV                        GENMASK(9, 8)
+@@ -115,6 +120,20 @@ static const struct cmn_pll_fixed_output
+       CLK_PLL_OUTPUT(ETH1_50MHZ_CLK, "eth1-50mhz", 50000000UL),
+       CLK_PLL_OUTPUT(ETH2_50MHZ_CLK, "eth2-50mhz", 50000000UL),
+       CLK_PLL_OUTPUT(ETH_25MHZ_CLK, "eth-25mhz", 25000000UL),
++      { /* Sentinel */ }
++};
++
++static const struct cmn_pll_fixed_output_clk ipq5424_output_clks[] = {
++      CLK_PLL_OUTPUT(IPQ5424_XO_24MHZ_CLK, "xo-24mhz", 24000000UL),
++      CLK_PLL_OUTPUT(IPQ5424_SLEEP_32KHZ_CLK, "sleep-32khz", 32000UL),
++      CLK_PLL_OUTPUT(IPQ5424_PCS_31P25MHZ_CLK, "pcs-31p25mhz", 31250000UL),
++      CLK_PLL_OUTPUT(IPQ5424_NSS_300MHZ_CLK, "nss-300mhz", 300000000UL),
++      CLK_PLL_OUTPUT(IPQ5424_PPE_375MHZ_CLK, "ppe-375mhz", 375000000UL),
++      CLK_PLL_OUTPUT(IPQ5424_ETH0_50MHZ_CLK, "eth0-50mhz", 50000000UL),
++      CLK_PLL_OUTPUT(IPQ5424_ETH1_50MHZ_CLK, "eth1-50mhz", 50000000UL),
++      CLK_PLL_OUTPUT(IPQ5424_ETH2_50MHZ_CLK, "eth2-50mhz", 50000000UL),
++      CLK_PLL_OUTPUT(IPQ5424_ETH_25MHZ_CLK, "eth-25mhz", 25000000UL),
++      { /* Sentinel */ }
+ };
+ /*
+@@ -297,7 +316,7 @@ static struct clk_hw *ipq_cmn_pll_clk_hw
+ static int ipq_cmn_pll_register_clks(struct platform_device *pdev)
+ {
+-      const struct cmn_pll_fixed_output_clk *fixed_clk;
++      const struct cmn_pll_fixed_output_clk *p, *fixed_clk;
+       struct clk_hw_onecell_data *hw_data;
+       struct device *dev = &pdev->dev;
+       struct clk_hw *cmn_pll_hw;
+@@ -305,8 +324,13 @@ static int ipq_cmn_pll_register_clks(str
+       struct clk_hw *hw;
+       int ret, i;
+-      fixed_clk = ipq9574_output_clks;
+-      num_clks = ARRAY_SIZE(ipq9574_output_clks);
++      fixed_clk = device_get_match_data(dev);
++      if (!fixed_clk)
++              return -EINVAL;
++
++      num_clks = 0;
++      for (p = fixed_clk; p->name; p++)
++              num_clks++;
+       hw_data = devm_kzalloc(dev, struct_size(hw_data, hws, num_clks + 1),
+                              GFP_KERNEL);
+@@ -415,7 +439,8 @@ static const struct dev_pm_ops ipq_cmn_p
+ };
+ static const struct of_device_id ipq_cmn_pll_clk_ids[] = {
+-      { .compatible = "qcom,ipq9574-cmn-pll", },
++      { .compatible = "qcom,ipq9574-cmn-pll", .data = &ipq9574_output_clks },
++      { .compatible = "qcom,ipq5424-cmn-pll", .data = &ipq5424_output_clks },
+       { }
+ };
+ MODULE_DEVICE_TABLE(of, ipq_cmn_pll_clk_ids);
diff --git a/target/linux/qualcommax/patches-6.12/0065-v6.17-dt-bindings-clock-qcom-Add-CMN-PLL-support-for-IPQ5018-SoC.patch b/target/linux/qualcommax/patches-6.12/0065-v6.17-dt-bindings-clock-qcom-Add-CMN-PLL-support-for-IPQ5018-SoC.patch
new file mode 100644 (file)
index 0000000..c0d887f
--- /dev/null
@@ -0,0 +1,39 @@
+From 314b903c30040632db7edd187cd33003b2aee512 Mon Sep 17 00:00:00 2001
+From: George Moussalem <george.moussalem@outlook.com>
+Date: Fri, 16 May 2025 16:36:09 +0400
+Subject: dt-bindings: clock: qcom: Add CMN PLL support for IPQ5018 SoC
+
+The CMN PLL block in the IPQ5018 SoC takes 96 MHZ as the reference
+input clock. Its output clocks are the XO (24Mhz), sleep (32Khz), and
+ethernet (50Mhz) clocks.
+
+Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
+Signed-off-by: George Moussalem <george.moussalem@outlook.com>
+Link: https://lore.kernel.org/r/20250516-ipq5018-cmn-pll-v4-2-389a6b30e504@outlook.com
+Signed-off-by: Bjorn Andersson <andersson@kernel.org>
+---
+ include/dt-bindings/clock/qcom,ipq5018-cmn-pll.h | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+ create mode 100644 include/dt-bindings/clock/qcom,ipq5018-cmn-pll.h
+
+(limited to 'include/dt-bindings/clock/qcom,ipq5018-cmn-pll.h')
+
+--- /dev/null
++++ b/include/dt-bindings/clock/qcom,ipq5018-cmn-pll.h
+@@ -0,0 +1,16 @@
++/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
++/*
++ * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
++ */
++
++#ifndef _DT_BINDINGS_CLK_QCOM_IPQ5018_CMN_PLL_H
++#define _DT_BINDINGS_CLK_QCOM_IPQ5018_CMN_PLL_H
++
++/* CMN PLL core clock. */
++#define IPQ5018_CMN_PLL_CLK                   0
++
++/* The output clocks from CMN PLL of IPQ5018. */
++#define IPQ5018_XO_24MHZ_CLK                  1
++#define IPQ5018_SLEEP_32KHZ_CLK                       2
++#define IPQ5018_ETH_50MHZ_CLK                 3
++#endif
diff --git a/target/linux/qualcommax/patches-6.12/0066-v6.17-clk-qcom-ipq-cmn-pll-Add-IPQ5018-SoC-support.patch b/target/linux/qualcommax/patches-6.12/0066-v6.17-clk-qcom-ipq-cmn-pll-Add-IPQ5018-SoC-support.patch
new file mode 100644 (file)
index 0000000..d113c2d
--- /dev/null
@@ -0,0 +1,102 @@
+From 25d12630561d8d0906f1f5eceb055da3af67c8c9 Mon Sep 17 00:00:00 2001
+From: George Moussalem <george.moussalem@outlook.com>
+Date: Fri, 16 May 2025 16:36:10 +0400
+Subject: clk: qcom: ipq-cmn-pll: Add IPQ5018 SoC support
+
+The CMN PLL in IPQ5018 SoC supplies fixed clocks to XO, sleep, and the
+ethernet block.
+
+Signed-off-by: George Moussalem <george.moussalem@outlook.com>
+Link: https://lore.kernel.org/r/20250516-ipq5018-cmn-pll-v4-3-389a6b30e504@outlook.com
+Signed-off-by: Bjorn Andersson <andersson@kernel.org>
+---
+ drivers/clk/qcom/ipq-cmn-pll.c | 37 +++++++++++++++++++++++--------------
+ 1 file changed, 23 insertions(+), 14 deletions(-)
+
+(limited to 'drivers/clk/qcom/ipq-cmn-pll.c')
+
+--- a/drivers/clk/qcom/ipq-cmn-pll.c
++++ b/drivers/clk/qcom/ipq-cmn-pll.c
+@@ -50,6 +50,7 @@
+ #include <linux/regmap.h>
+ #include <dt-bindings/clock/qcom,ipq-cmn-pll.h>
++#include <dt-bindings/clock/qcom,ipq5018-cmn-pll.h>
+ #include <dt-bindings/clock/qcom,ipq5424-cmn-pll.h>
+ #define CMN_PLL_REFCLK_SRC_SELECTION          0x28
+@@ -110,16 +111,10 @@ static const struct regmap_config ipq_cm
+       .fast_io = true,
+ };
+-static const struct cmn_pll_fixed_output_clk ipq9574_output_clks[] = {
+-      CLK_PLL_OUTPUT(XO_24MHZ_CLK, "xo-24mhz", 24000000UL),
+-      CLK_PLL_OUTPUT(SLEEP_32KHZ_CLK, "sleep-32khz", 32000UL),
+-      CLK_PLL_OUTPUT(PCS_31P25MHZ_CLK, "pcs-31p25mhz", 31250000UL),
+-      CLK_PLL_OUTPUT(NSS_1200MHZ_CLK, "nss-1200mhz", 1200000000UL),
+-      CLK_PLL_OUTPUT(PPE_353MHZ_CLK, "ppe-353mhz", 353000000UL),
+-      CLK_PLL_OUTPUT(ETH0_50MHZ_CLK, "eth0-50mhz", 50000000UL),
+-      CLK_PLL_OUTPUT(ETH1_50MHZ_CLK, "eth1-50mhz", 50000000UL),
+-      CLK_PLL_OUTPUT(ETH2_50MHZ_CLK, "eth2-50mhz", 50000000UL),
+-      CLK_PLL_OUTPUT(ETH_25MHZ_CLK, "eth-25mhz", 25000000UL),
++static const struct cmn_pll_fixed_output_clk ipq5018_output_clks[] = {
++      CLK_PLL_OUTPUT(IPQ5018_XO_24MHZ_CLK, "xo-24mhz", 24000000UL),
++      CLK_PLL_OUTPUT(IPQ5018_SLEEP_32KHZ_CLK, "sleep-32khz", 32000UL),
++      CLK_PLL_OUTPUT(IPQ5018_ETH_50MHZ_CLK, "eth-50mhz", 50000000UL),
+       { /* Sentinel */ }
+ };
+@@ -136,6 +131,19 @@ static const struct cmn_pll_fixed_output
+       { /* Sentinel */ }
+ };
++static const struct cmn_pll_fixed_output_clk ipq9574_output_clks[] = {
++      CLK_PLL_OUTPUT(XO_24MHZ_CLK, "xo-24mhz", 24000000UL),
++      CLK_PLL_OUTPUT(SLEEP_32KHZ_CLK, "sleep-32khz", 32000UL),
++      CLK_PLL_OUTPUT(PCS_31P25MHZ_CLK, "pcs-31p25mhz", 31250000UL),
++      CLK_PLL_OUTPUT(NSS_1200MHZ_CLK, "nss-1200mhz", 1200000000UL),
++      CLK_PLL_OUTPUT(PPE_353MHZ_CLK, "ppe-353mhz", 353000000UL),
++      CLK_PLL_OUTPUT(ETH0_50MHZ_CLK, "eth0-50mhz", 50000000UL),
++      CLK_PLL_OUTPUT(ETH1_50MHZ_CLK, "eth1-50mhz", 50000000UL),
++      CLK_PLL_OUTPUT(ETH2_50MHZ_CLK, "eth2-50mhz", 50000000UL),
++      CLK_PLL_OUTPUT(ETH_25MHZ_CLK, "eth-25mhz", 25000000UL),
++      { /* Sentinel */ }
++};
++
+ /*
+  * CMN PLL has the single parent clock, which supports the several
+  * possible parent clock rates, each parent clock rate is reflected
+@@ -399,11 +407,11 @@ static int ipq_cmn_pll_clk_probe(struct
+        */
+       ret = pm_clk_add(dev, "ahb");
+       if (ret)
+-              return dev_err_probe(dev, ret, "Fail to add AHB clock\n");
++              return dev_err_probe(dev, ret, "Failed to add AHB clock\n");
+       ret = pm_clk_add(dev, "sys");
+       if (ret)
+-              return dev_err_probe(dev, ret, "Fail to add SYS clock\n");
++              return dev_err_probe(dev, ret, "Failed to add SYS clock\n");
+       ret = pm_runtime_resume_and_get(dev);
+       if (ret)
+@@ -414,7 +422,7 @@ static int ipq_cmn_pll_clk_probe(struct
+       pm_runtime_put(dev);
+       if (ret)
+               return dev_err_probe(dev, ret,
+-                                   "Fail to register CMN PLL clocks\n");
++                                   "Failed to register CMN PLL clocks\n");
+       return 0;
+ }
+@@ -439,8 +447,9 @@ static const struct dev_pm_ops ipq_cmn_p
+ };
+ static const struct of_device_id ipq_cmn_pll_clk_ids[] = {
+-      { .compatible = "qcom,ipq9574-cmn-pll", .data = &ipq9574_output_clks },
++      { .compatible = "qcom,ipq5018-cmn-pll", .data = &ipq5018_output_clks },
+       { .compatible = "qcom,ipq5424-cmn-pll", .data = &ipq5424_output_clks },
++      { .compatible = "qcom,ipq9574-cmn-pll", .data = &ipq9574_output_clks },
+       { }
+ };
+ MODULE_DEVICE_TABLE(of, ipq_cmn_pll_clk_ids);
diff --git a/target/linux/qualcommax/patches-6.12/0067-v6.18-arm64-dts-ipq5018-Add-CMN-PLL-node.patch b/target/linux/qualcommax/patches-6.12/0067-v6.18-arm64-dts-ipq5018-Add-CMN-PLL-node.patch
new file mode 100644 (file)
index 0000000..83d6714
--- /dev/null
@@ -0,0 +1,89 @@
+From c006b249c54441dd8a3a493c7c87158f441f8178 Mon Sep 17 00:00:00 2001
+From: George Moussalem <george.moussalem@outlook.com>
+Date: Mon, 21 Jul 2025 10:04:35 +0400
+Subject: arm64: dts: ipq5018: Add CMN PLL node
+
+Add CMN PLL node for enabling output clocks to the networking
+hardware blocks on IPQ5018 devices.
+
+The reference clock of CMN PLL is routed from XO to the CMN PLL
+through the internal WiFi block.
+.XO (48 MHZ) --> WiFi (multiplier/divider)--> 96 MHZ to CMN PLL.
+
+Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
+Signed-off-by: George Moussalem <george.moussalem@outlook.com>
+Link: https://lore.kernel.org/r/20250721-ipq5018-cmn-pll-v5-1-4cbf3479af65@outlook.com
+Signed-off-by: Bjorn Andersson <andersson@kernel.org>
+---
+ arch/arm64/boot/dts/qcom/ipq5018.dtsi | 33 +++++++++++++++++++++++++++++++--
+ 1 file changed, 31 insertions(+), 2 deletions(-)
+
+(limited to 'arch/arm64/boot/dts/qcom/ipq5018.dtsi')
+
+--- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
++++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
+@@ -2,12 +2,13 @@
+ /*
+  * IPQ5018 SoC device tree source
+  *
+- * Copyright (c) 2023 The Linux Foundation. All rights reserved.
++ * Copyright (c) 2023-2025 The Linux Foundation. All rights reserved.
+  */
+ #include <dt-bindings/clock/qcom,apss-ipq.h>
+-#include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/clock/qcom,gcc-ipq5018.h>
++#include <dt-bindings/clock/qcom,ipq5018-cmn-pll.h>
++#include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/reset/qcom,gcc-ipq5018.h>
+ #include <dt-bindings/thermal/thermal.h>
+@@ -29,6 +30,14 @@
+                       #clock-cells = <0>;
+               };
++              ref_96mhz_clk: ref-96mhz-clk {
++                      compatible = "fixed-factor-clock";
++                      clocks = <&xo_clk>;
++                      #clock-cells = <0>;
++                      clock-div = <1>;
++                      clock-mult = <2>;
++              };
++
+               sleep_clk: sleep-clk {
+                       compatible = "fixed-clock";
+                       #clock-cells = <0>;
+@@ -38,6 +47,12 @@
+                       compatible = "fixed-clock";
+                       #clock-cells = <0>;
+               };
++
++              xo_clk: xo-clk {
++                      compatible = "fixed-clock";
++                      #clock-cells = <0>;
++                      clock-frequency = <48000000>;
++              };
+       };
+       cpus {
+@@ -229,6 +244,20 @@
+                       status = "disabled";
+               };
++              cmn_pll: clock-controller@9b000 {
++                      compatible = "qcom,ipq5018-cmn-pll";
++                      reg = <0x0009b000 0x800>;
++                      clocks = <&ref_96mhz_clk>,
++                               <&gcc GCC_CMN_BLK_AHB_CLK>,
++                               <&gcc GCC_CMN_BLK_SYS_CLK>;
++                      clock-names = "ref",
++                                    "ahb",
++                                    "sys";
++                      #clock-cells = <1>;
++                      assigned-clocks = <&cmn_pll IPQ5018_CMN_PLL_CLK>;
++                      assigned-clock-rates-u64 = /bits/ 64 <9600000000>;
++              };
++
+               qfprom: qfprom@a0000 {
+                       compatible = "qcom,ipq5018-qfprom", "qcom,qfprom";
+                       reg = <0x000a0000 0x1000>;
diff --git a/target/linux/qualcommax/patches-6.12/0068-v6.18-arm64-dts-qcom-Update-IPQ5018-xo_board_clk-to-use-fixed-factor-clock.patch b/target/linux/qualcommax/patches-6.12/0068-v6.18-arm64-dts-qcom-Update-IPQ5018-xo_board_clk-to-use-fixed-factor-clock.patch
new file mode 100644 (file)
index 0000000..20c184d
--- /dev/null
@@ -0,0 +1,33 @@
+From 5ca3d42384a66bcb66f91d75da16ec9e9f053aab Mon Sep 17 00:00:00 2001
+From: George Moussalem <george.moussalem@outlook.com>
+Date: Mon, 21 Jul 2025 10:04:36 +0400
+Subject: arm64: dts: qcom: Update IPQ5018 xo_board_clk to use fixed factor
+ clock
+
+The xo_board_clk is fixed to 24 MHZ, which is routed from WiFi output
+clock 96 MHZ (also being the reference clock of CMN PLL) divided by 4
+to the analog block routing channel. Update the xo_board_clk nodes in
+the board DTS files to use clock-div/clock-mult accordingly.
+
+Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
+Signed-off-by: George Moussalem <george.moussalem@outlook.com>
+Link: https://lore.kernel.org/r/20250721-ipq5018-cmn-pll-v5-2-4cbf3479af65@outlook.com
+Signed-off-by: Bjorn Andersson <andersson@kernel.org>
+---
+ arch/arm64/boot/dts/qcom/ipq5018.dtsi | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+(limited to 'arch/arm64/boot/dts/qcom/ipq5018.dtsi')
+
+--- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
++++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
+@@ -44,7 +44,8 @@
+               };
+               xo_board_clk: xo-board-clk {
+-                      compatible = "fixed-clock";
++                      compatible = "fixed-factor-clock";
++                      clocks = <&ref_96mhz_clk>;
+                       #clock-cells = <0>;
+               };
index 42d5a4a387be921f8c20c3d39c2b44081e5b8d12..74b82ea0a06f7fef47031a27cae0ccada515d4cc 100644 (file)
@@ -8,7 +8,7 @@ Signed-off-by: George Moussalem <george.moussalem@outlook.com>
 ---
 --- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
 +++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
-@@ -423,6 +423,16 @@
+@@ -453,6 +453,16 @@
                        reg = <0x01937000 0x21000>;
                };
  
index 4bb0e0fd262b356a9dad934e3bdb954fe430d48f..16f81cc4168e2dc877160a6f9e2b3a8b62ceab22 100644 (file)
@@ -8,7 +8,7 @@ Signed-off-by: George Moussalem <george.moussalem@outlook.com>
 ---
 --- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
 +++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
-@@ -470,6 +470,16 @@
+@@ -500,6 +500,16 @@
                        status = "disabled";
                };
  
index bc28b61985e60bc0668adb145985e5455006bfc4..6a384a756629b2cb452edb6c927900c41737e407 100644 (file)
@@ -8,7 +8,7 @@ Signed-off-by: George Moussalem <george.moussalem@outlook.com>
 ---
 --- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
 +++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
-@@ -494,6 +494,21 @@
+@@ -524,6 +524,21 @@
                        status = "disabled";
                };
  
diff --git a/target/linux/qualcommax/patches-6.12/0701-dt-bindings-clock-qcom-Add-CMN-PLL-clock-controller-.patch b/target/linux/qualcommax/patches-6.12/0701-dt-bindings-clock-qcom-Add-CMN-PLL-clock-controller-.patch
deleted file mode 100644 (file)
index ad7e08c..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-From 7b89dbf5c7dcd8a9c131721e93c1292e5993968b Mon Sep 17 00:00:00 2001
-From: Luo Jie <quic_luoj@quicinc.com>
-Date: Tue, 20 Aug 2024 22:02:42 +0800
-Subject: [PATCH] dt-bindings: clock: qcom: Add CMN PLL clock controller
- for IPQ SoC
-
-The CMN PLL controller provides clocks to networking hardware blocks
-on Qualcomm IPQ9574 SoC. It receives input clock from the on-chip Wi-Fi,
-and produces output clocks at fixed rates. These output rates are
-predetermined, and are unrelated to the input clock rate. The output
-clocks are supplied to the Ethernet hardware such as PPE (packet
-process engine) and the externally connected switch or PHY device.
-
-Signed-off-by: Luo Jie <quic_luoj@quicinc.com>
-Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
----
- .../bindings/clock/qcom,ipq9574-cmn-pll.yaml  | 70 +++++++++++++++++++
- include/dt-bindings/clock/qcom,ipq-cmn-pll.h  | 15 ++++
- 2 files changed, 85 insertions(+)
- create mode 100644 Documentation/devicetree/bindings/clock/qcom,ipq9574-cmn-pll.yaml
- create mode 100644 include/dt-bindings/clock/qcom,ipq-cmn-pll.h
-
---- /dev/null
-+++ b/Documentation/devicetree/bindings/clock/qcom,ipq9574-cmn-pll.yaml
-@@ -0,0 +1,70 @@
-+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
-+%YAML 1.2
-+---
-+$id: http://devicetree.org/schemas/clock/qcom,ipq9574-cmn-pll.yaml#
-+$schema: http://devicetree.org/meta-schemas/core.yaml#
-+
-+title: Qualcomm CMN PLL Clock Controller on IPQ SoC
-+
-+maintainers:
-+  - Bjorn Andersson <andersson@kernel.org>
-+  - Luo Jie <quic_luoj@quicinc.com>
-+
-+description:
-+  The CMN PLL clock controller expects a reference input clock.
-+  This reference clock is from the on-board Wi-Fi. The CMN PLL
-+  supplies a number of fixed rate output clocks to the Ethernet
-+  devices including PPE (packet process engine) and the connected
-+  switch or PHY device.
-+
-+properties:
-+  compatible:
-+    enum:
-+      - qcom,ipq9574-cmn-pll
-+
-+  reg:
-+    maxItems: 1
-+
-+  clocks:
-+    items:
-+      - description: The reference clock. The supported clock rates include
-+          25000000, 31250000, 40000000, 48000000, 50000000 and 96000000 HZ.
-+      - description: The AHB clock
-+      - description: The SYS clock
-+    description:
-+      The reference clock is the source clock of CMN PLL, which is from the
-+      Wi-Fi. The AHB and SYS clocks must be enabled to access CMN PLL
-+      clock registers.
-+
-+  clock-names:
-+    items:
-+      - const: ref
-+      - const: ahb
-+      - const: sys
-+
-+  "#clock-cells":
-+    const: 1
-+
-+required:
-+  - compatible
-+  - reg
-+  - clocks
-+  - clock-names
-+  - "#clock-cells"
-+
-+additionalProperties: false
-+
-+examples:
-+  - |
-+    #include <dt-bindings/clock/qcom,ipq9574-gcc.h>
-+
-+    clock-controller@9b000 {
-+        compatible = "qcom,ipq9574-cmn-pll";
-+        reg = <0x0009b000 0x800>;
-+        clocks = <&cmn_pll_ref_clk>,
-+                 <&gcc GCC_CMN_12GPLL_AHB_CLK>,
-+                 <&gcc GCC_CMN_12GPLL_SYS_CLK>;
-+        clock-names = "ref", "ahb", "sys";
-+        #clock-cells = <1>;
-+    };
-+...
---- /dev/null
-+++ b/include/dt-bindings/clock/qcom,ipq-cmn-pll.h
-@@ -0,0 +1,15 @@
-+/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
-+/*
-+ * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
-+ */
-+
-+#ifndef _DT_BINDINGS_CLK_QCOM_IPQ_CMN_PLL_H
-+#define _DT_BINDINGS_CLK_QCOM_IPQ_CMN_PLL_H
-+
-+/* The output clocks from CMN PLL of IPQ9574. */
-+#define PPE_353MHZ_CLK                        0
-+#define ETH0_50MHZ_CLK                        1
-+#define ETH1_50MHZ_CLK                        2
-+#define ETH2_50MHZ_CLK                        3
-+#define ETH_25MHZ_CLK                 4
-+#endif
diff --git a/target/linux/qualcommax/patches-6.12/0702-clk-qcom-Add-CMN-PLL-clock-controller-driver-for-IPQ.patch b/target/linux/qualcommax/patches-6.12/0702-clk-qcom-Add-CMN-PLL-clock-controller-driver-for-IPQ.patch
deleted file mode 100644 (file)
index a9587b5..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-From a7e8397e2db6133e3435054a3f312dbd9cab05ed Mon Sep 17 00:00:00 2001
-From: Luo Jie <quic_luoj@quicinc.com>
-Date: Tue, 20 Aug 2024 22:02:43 +0800
-Subject: [PATCH] clk: qcom: Add CMN PLL clock controller driver for IPQ
- SoC
-
-The CMN PLL clock controller supplies clocks to the hardware
-blocks that together make up the Ethernet function on Qualcomm
-IPQ SoCs. The driver is initially supported for IPQ9574 SoC.
-
-The CMN PLL clock controller expects a reference input clock
-from the on-board Wi-Fi block acting as clock source. The input
-reference clock needs to be configured to one of the supported
-clock rates.
-
-The controller supplies a number of fixed-rate output clocks.
-For the IPQ9574, there is one output clock of 353 MHZ to PPE
-(Packet Process Engine) hardware block, three 50 MHZ output
-clocks and an additional 25 MHZ output clock supplied to the
-connected Ethernet devices.
-
-Signed-off-by: Luo Jie <quic_luoj@quicinc.com>
----
- drivers/clk/qcom/Kconfig           |  10 ++
- drivers/clk/qcom/Makefile          |   1 +
- drivers/clk/qcom/clk-ipq-cmn-pll.c | 227 +++++++++++++++++++++++++++++
- 3 files changed, 238 insertions(+)
- create mode 100644 drivers/clk/qcom/clk-ipq-cmn-pll.c
-
---- a/drivers/clk/qcom/Kconfig
-+++ b/drivers/clk/qcom/Kconfig
-@@ -190,6 +190,16 @@ config IPQ_APSS_6018
-         Say Y if you want to support CPU frequency scaling on
-         ipq based devices.
-+config IPQ_CMN_PLL
-+      tristate "IPQ CMN PLL Clock Controller"
-+      depends on IPQ_GCC_9574
-+      help
-+        Support for CMN PLL clock controller on IPQ platform. The
-+        CMN PLL feeds the reference clocks to the Ethernet devices
-+        based on IPQ SoC.
-+        Say Y or M if you want to support CMN PLL clock on the IPQ
-+        based devices.
-+
- config IPQ_GCC_4019
-       tristate "IPQ4019 Global Clock Controller"
-       help
---- a/drivers/clk/qcom/Makefile
-+++ b/drivers/clk/qcom/Makefile
-@@ -29,6 +29,7 @@ obj-$(CONFIG_CLK_X1E80100_TCSRCC) += tcs
- obj-$(CONFIG_CLK_QCM2290_GPUCC) += gpucc-qcm2290.o
- obj-$(CONFIG_IPQ_APSS_PLL) += apss-ipq-pll.o
- obj-$(CONFIG_IPQ_APSS_6018) += apss-ipq6018.o
-+obj-$(CONFIG_IPQ_CMN_PLL) += clk-ipq-cmn-pll.o
- obj-$(CONFIG_IPQ_GCC_4019) += gcc-ipq4019.o
- obj-$(CONFIG_IPQ_GCC_5018) += gcc-ipq5018.o
- obj-$(CONFIG_IPQ_GCC_5332) += gcc-ipq5332.o
---- /dev/null
-+++ b/drivers/clk/qcom/clk-ipq-cmn-pll.c
-@@ -0,0 +1,227 @@
-+// SPDX-License-Identifier: GPL-2.0-only
-+/*
-+ * Copyright (c) 2024 Qualcomm Innovation Center, Inc. All rights reserved.
-+ */
-+
-+/*
-+ * CMN PLL block expects the reference clock from on-board Wi-Fi block, and
-+ * supplies fixed rate clocks as output to the Ethernet hardware blocks.
-+ * The Ethernet related blocks include PPE (packet process engine) and the
-+ * external connected PHY (or switch) chip receiving clocks from the CMN PLL.
-+ *
-+ * On the IPQ9574 SoC, There are three clocks with 50 MHZ, one clock with
-+ * 25 MHZ which are output from the CMN PLL to Ethernet PHY (or switch),
-+ * and one clock with 353 MHZ to PPE.
-+ *
-+ *               +---------+
-+ *               |   GCC   |
-+ *               +--+---+--+
-+ *           AHB CLK|   |SYS CLK
-+ *                  V   V
-+ *          +-------+---+------+
-+ *          |                  +-------------> eth0-50mhz
-+ * REF CLK  |     IPQ9574      |
-+ * -------->+                  +-------------> eth1-50mhz
-+ *          |  CMN PLL block   |
-+ *          |                  +-------------> eth2-50mhz
-+ *          |                  |
-+ *          +---------+--------+-------------> eth-25mhz
-+ *                    |
-+ *                    V
-+ *                    ppe-353mhz
-+ */
-+
-+#include <dt-bindings/clock/qcom,ipq-cmn-pll.h>
-+#include <linux/bitfield.h>
-+#include <linux/clk.h>
-+#include <linux/clk-provider.h>
-+#include <linux/delay.h>
-+#include <linux/io.h>
-+#include <linux/of.h>
-+#include <linux/of_address.h>
-+#include <linux/platform_device.h>
-+#include <linux/slab.h>
-+
-+#define CMN_PLL_REFCLK_SRC_SELECTION          0x28
-+#define CMN_PLL_REFCLK_SRC_DIV                        GENMASK(9, 8)
-+
-+#define CMN_PLL_REFCLK_CONFIG                 0x784
-+#define CMN_PLL_REFCLK_EXTERNAL                       BIT(9)
-+#define CMN_PLL_REFCLK_DIV                    GENMASK(8, 4)
-+#define CMN_PLL_REFCLK_INDEX                  GENMASK(3, 0)
-+
-+#define CMN_PLL_POWER_ON_AND_RESET            0x780
-+#define CMN_ANA_EN_SW_RSTN                    BIT(6)
-+
-+/**
-+ * struct cmn_pll_fixed_output_clk - CMN PLL output clocks information
-+ * @id:       Clock specifier to be supplied
-+ * @name: Clock name to be registered
-+ * @rate: Clock rate
-+ */
-+struct cmn_pll_fixed_output_clk {
-+      unsigned int            id;
-+      const char              *name;
-+      const unsigned long     rate;
-+};
-+
-+#define CLK_PLL_OUTPUT(_id, _name, _rate) {           \
-+      .id = _id,                                      \
-+      .name = _name,                                  \
-+      .rate = _rate,                                  \
-+}
-+
-+static const struct cmn_pll_fixed_output_clk ipq9574_output_clks[] = {
-+      CLK_PLL_OUTPUT(PPE_353MHZ_CLK, "ppe-353mhz", 353000000UL),
-+      CLK_PLL_OUTPUT(ETH0_50MHZ_CLK, "eth0-50mhz", 50000000UL),
-+      CLK_PLL_OUTPUT(ETH1_50MHZ_CLK, "eth1-50mhz", 50000000UL),
-+      CLK_PLL_OUTPUT(ETH2_50MHZ_CLK, "eth2-50mhz", 50000000UL),
-+      CLK_PLL_OUTPUT(ETH_25MHZ_CLK, "eth-25mhz", 25000000UL),
-+};
-+
-+static int ipq_cmn_pll_config(struct device *dev, unsigned long parent_rate)
-+{
-+      void __iomem *base;
-+      u32 val;
-+
-+      base = devm_of_iomap(dev, dev->of_node, 0, NULL);
-+      if (IS_ERR(base))
-+              return PTR_ERR(base);
-+
-+      val = readl(base + CMN_PLL_REFCLK_CONFIG);
-+      val &= ~(CMN_PLL_REFCLK_EXTERNAL | CMN_PLL_REFCLK_INDEX);
-+
-+      /*
-+       * Configure the reference input clock selection as per the given rate.
-+       * The output clock rates are always of fixed value.
-+       */
-+      switch (parent_rate) {
-+      case 25000000:
-+              val |= FIELD_PREP(CMN_PLL_REFCLK_INDEX, 3);
-+              break;
-+      case 31250000:
-+              val |= FIELD_PREP(CMN_PLL_REFCLK_INDEX, 4);
-+              break;
-+      case 40000000:
-+              val |= FIELD_PREP(CMN_PLL_REFCLK_INDEX, 6);
-+              break;
-+      case 48000000:
-+              val |= FIELD_PREP(CMN_PLL_REFCLK_INDEX, 7);
-+              break;
-+      case 50000000:
-+              val |= FIELD_PREP(CMN_PLL_REFCLK_INDEX, 8);
-+              break;
-+      case 96000000:
-+              val |= FIELD_PREP(CMN_PLL_REFCLK_INDEX, 7);
-+              val &= ~CMN_PLL_REFCLK_DIV;
-+              val |= FIELD_PREP(CMN_PLL_REFCLK_DIV, 2);
-+              break;
-+      default:
-+              return -EINVAL;
-+      }
-+
-+      writel(val, base + CMN_PLL_REFCLK_CONFIG);
-+
-+      /* Update the source clock rate selection. Only 96 MHZ uses 0. */
-+      val = readl(base + CMN_PLL_REFCLK_SRC_SELECTION);
-+      val &= ~CMN_PLL_REFCLK_SRC_DIV;
-+      if (parent_rate != 96000000)
-+              val |= FIELD_PREP(CMN_PLL_REFCLK_SRC_DIV, 1);
-+
-+      writel(val, base + CMN_PLL_REFCLK_SRC_SELECTION);
-+
-+      /*
-+       * Reset the CMN PLL block by asserting/de-asserting for 100 ms
-+       * each, to ensure the updated configurations take effect.
-+       */
-+      val = readl(base + CMN_PLL_POWER_ON_AND_RESET);
-+      val &= ~CMN_ANA_EN_SW_RSTN;
-+      writel(val, base);
-+      msleep(100);
-+
-+      val |= CMN_ANA_EN_SW_RSTN;
-+      writel(val, base + CMN_PLL_POWER_ON_AND_RESET);
-+      msleep(100);
-+
-+      return 0;
-+}
-+
-+static int ipq_cmn_pll_clk_register(struct device *dev, const char *parent)
-+{
-+      const struct cmn_pll_fixed_output_clk *fixed_clk;
-+      struct clk_hw_onecell_data *data;
-+      unsigned int num_clks;
-+      struct clk_hw *hw;
-+      int i;
-+
-+      num_clks = ARRAY_SIZE(ipq9574_output_clks);
-+      fixed_clk = ipq9574_output_clks;
-+
-+      data = devm_kzalloc(dev, struct_size(data, hws, num_clks), GFP_KERNEL);
-+      if (!data)
-+              return -ENOMEM;
-+
-+      for (i = 0; i < num_clks; i++) {
-+              hw = devm_clk_hw_register_fixed_rate(dev, fixed_clk[i].name,
-+                                                   parent, 0,
-+                                                   fixed_clk[i].rate);
-+              if (IS_ERR(hw))
-+                      return PTR_ERR(hw);
-+
-+              data->hws[fixed_clk[i].id] = hw;
-+      }
-+      data->num = num_clks;
-+
-+      return devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, data);
-+}
-+
-+static int ipq_cmn_pll_clk_probe(struct platform_device *pdev)
-+{
-+      struct device *dev = &pdev->dev;
-+      struct clk *clk;
-+      int ret;
-+
-+      /*
-+       * To access the CMN PLL registers, the GCC AHB & SYSY clocks
-+       * for CMN PLL block need to be enabled.
-+       */
-+      clk = devm_clk_get_enabled(dev, "ahb");
-+      if (IS_ERR(clk))
-+              return dev_err_probe(dev, PTR_ERR(clk),
-+                                   "Enable AHB clock failed\n");
-+
-+      clk = devm_clk_get_enabled(dev, "sys");
-+      if (IS_ERR(clk))
-+              return dev_err_probe(dev, PTR_ERR(clk),
-+                                   "Enable SYS clock failed\n");
-+
-+      clk = devm_clk_get(dev, "ref");
-+      if (IS_ERR(clk))
-+              return dev_err_probe(dev, PTR_ERR(clk),
-+                                   "Get reference clock failed\n");
-+
-+      /* Configure CMN PLL to apply the reference clock. */
-+      ret = ipq_cmn_pll_config(dev, clk_get_rate(clk));
-+      if (ret)
-+              return dev_err_probe(dev, ret, "Configure CMN PLL failed\n");
-+
-+      return ipq_cmn_pll_clk_register(dev, __clk_get_name(clk));
-+}
-+
-+static const struct of_device_id ipq_cmn_pll_clk_ids[] = {
-+      { .compatible = "qcom,ipq9574-cmn-pll", },
-+      { }
-+};
-+
-+static struct platform_driver ipq_cmn_pll_clk_driver = {
-+      .probe = ipq_cmn_pll_clk_probe,
-+      .driver = {
-+              .name = "ipq_cmn_pll",
-+              .of_match_table = ipq_cmn_pll_clk_ids,
-+      },
-+};
-+
-+module_platform_driver(ipq_cmn_pll_clk_driver);
-+
-+MODULE_DESCRIPTION("Qualcomm Technologies, Inc. IPQ CMN PLL Driver");
-+MODULE_LICENSE("GPL");
diff --git a/target/linux/qualcommax/patches-6.12/0703-clk-qcom-cmn-pll-add-IPQ5018-support.patch b/target/linux/qualcommax/patches-6.12/0703-clk-qcom-cmn-pll-add-IPQ5018-support.patch
deleted file mode 100644 (file)
index 75b37df..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-From a28797563b8c97c9abced82e0cf89302fcd2bf37 Mon Sep 17 00:00:00 2001
-From: Ziyang Huang <hzyitc@outlook.com>
-Date: Sun, 8 Sep 2024 16:40:11 +0800
-Subject: [PATCH 1/2] clk: qcom: cmn-pll: add IPQ5018 support
-
-Add support for IPQ5018 (and removing dependency on the IPQ9574 platform).
-The common network block in IPQ5018 must be enabled first through a 
-specific register at a fixed offset in the TCSR area, set in the DTS.
-
-Signed-off-by: Ziyang Huang <hzyitc@outlook.com>
-Signed-off-by: George Moussalem <george.moussalem@outlook.com>
----
- drivers/clk/qcom/Kconfig           |  1 -
- drivers/clk/qcom/clk-ipq-cmn-pll.c | 29 +++++++++++++++++++++++++++++
- 2 files changed, 29 insertions(+), 1 deletion(-)
-
---- a/drivers/clk/qcom/Kconfig
-+++ b/drivers/clk/qcom/Kconfig
-@@ -192,7 +192,6 @@ config IPQ_APSS_6018
- config IPQ_CMN_PLL
-       tristate "IPQ CMN PLL Clock Controller"
--      depends on IPQ_GCC_9574
-       help
-         Support for CMN PLL clock controller on IPQ platform. The
-         CMN PLL feeds the reference clocks to the Ethernet devices
---- a/drivers/clk/qcom/clk-ipq-cmn-pll.c
-+++ b/drivers/clk/qcom/clk-ipq-cmn-pll.c
-@@ -42,6 +42,9 @@
- #include <linux/platform_device.h>
- #include <linux/slab.h>
-+#define TCSR_ETH_CMN                          0x0
-+#define  TCSR_ETH_CMN_ENABLE                  BIT(0)
-+
- #define CMN_PLL_REFCLK_SRC_SELECTION          0x28
- #define CMN_PLL_REFCLK_SRC_DIV                        GENMASK(9, 8)
-@@ -79,6 +82,28 @@ static const struct cmn_pll_fixed_output
-       CLK_PLL_OUTPUT(ETH_25MHZ_CLK, "eth-25mhz", 25000000UL),
- };
-+static int ipq_cmn_pll_tcsr_enable(struct platform_device *pdev)
-+{
-+      struct resource *res;
-+      void __iomem *tcsr_base;
-+      u32 val;
-+
-+      /* For IPQ50xx, tcsr is necessary to enable cmn block */
-+      res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "tcsr");
-+      if (!res)
-+              return 0;
-+
-+      tcsr_base = devm_ioremap_resource(&pdev->dev, res);
-+      if (IS_ERR_OR_NULL(tcsr_base))
-+              return PTR_ERR(tcsr_base);
-+
-+      val = readl(tcsr_base + TCSR_ETH_CMN);
-+      val |= TCSR_ETH_CMN_ENABLE;
-+      writel(val, (tcsr_base + TCSR_ETH_CMN));
-+
-+      return 0;
-+}
-+
- static int ipq_cmn_pll_config(struct device *dev, unsigned long parent_rate)
- {
-       void __iomem *base;
-@@ -181,6 +206,10 @@ static int ipq_cmn_pll_clk_probe(struct
-       struct clk *clk;
-       int ret;
-+      ret = ipq_cmn_pll_tcsr_enable(pdev);
-+      if (ret)
-+              return dev_err_probe(dev, ret, "Enable CMN PLL failed\n");
-+
-       /*
-        * To access the CMN PLL registers, the GCC AHB & SYSY clocks
-        * for CMN PLL block need to be enabled.
diff --git a/target/linux/qualcommax/patches-6.12/0704-arm64-dts-qcom-ipq5018-Add-ethernet-cmn-node.patch b/target/linux/qualcommax/patches-6.12/0704-arm64-dts-qcom-ipq5018-Add-ethernet-cmn-node.patch
deleted file mode 100644 (file)
index 04508da..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-From 1b625a37b96b0448aac126d7720eec38de8e5956 Mon Sep 17 00:00:00 2001
-From: Ziyang Huang <hzyitc@outlook.com>
-Date: Sun, 8 Sep 2024 16:40:11 +0800
-Subject: [PATCH 2/2] arm64: dts: qcom: ipq5018: Add ethernet cmn node
-
-Signed-off-by: Ziyang Huang <hzyitc@outlook.com>
----
- arch/arm64/boot/dts/qcom/ipq5018.dtsi | 19 +++++++++++++++++++
- 1 file changed, 19 insertions(+)
-
---- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
-+++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
-@@ -17,6 +17,12 @@
-       #size-cells = <2>;
-       clocks {
-+              cmn_pll_ref_clk: cmn-pll-ref-clk {
-+                      compatible = "fixed-clock";
-+                      clock-frequency = <96000000>;
-+                      #clock-cells = <0>;
-+              };
-+
-               gephy_rx_clk: gephy-rx-clk {
-                       compatible = "fixed-clock";
-                       clock-frequency = <125000000>;
-@@ -229,6 +235,17 @@
-                       status = "disabled";
-               };
-+              cmn_pll: clock-controller@9b000 {
-+                      compatible = "qcom,ipq9574-cmn-pll";
-+                      reg = <0x0009b000 0x800>;
-+                      reg-names = "cmn";
-+                      clocks = <&cmn_pll_ref_clk>,
-+                               <&gcc GCC_CMN_BLK_AHB_CLK>,
-+                               <&gcc GCC_CMN_BLK_SYS_CLK>;
-+                      clock-names = "ref", "ahb", "sys";
-+                      #clock-cells = <1>;
-+              };
-+
-               qfprom: qfprom@a0000 {
-                       compatible = "qcom,ipq5018-qfprom", "qcom,qfprom";
-                       reg = <0x000a0000 0x1000>;
index fd22ba7e3779adc1ba5986f4b7e33ed6267d2da0..18272f3d9a3cbe291aff8b891497d75aae23c048 100644 (file)
@@ -9,7 +9,7 @@ aren't upstreamed, add the vendor compatible.
 Signed-off-by: George Moussalem <george.moussalem@outlook.com>
 --- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
 +++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
-@@ -204,7 +204,7 @@
+@@ -214,7 +214,7 @@
                };
  
                mdio0: mdio@88000 {
index 239e2a8454386c30715d5160b2b6fdaa41028ae6..c4575e6c9118608b641e279e6c6acdebac3b892f 100644 (file)
@@ -13,7 +13,7 @@ Signed-off-by: George Moussalem <george.moussalem@outlook.com>
 ---
 --- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
 +++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
-@@ -714,6 +714,225 @@
+@@ -727,6 +727,225 @@
                        };
                };
  
index dccf9adceb24d21ad2cb4b9223b46fc8228528b3..ce44b037550ae7bb1e680538fa4c0c131824fced 100644 (file)
@@ -8,7 +8,7 @@ Signed-off-by: George Moussalem <george.moussalem@outlook.com>
 ---
 --- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
 +++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
-@@ -126,6 +126,11 @@
+@@ -136,6 +136,11 @@
                #size-cells = <2>;
                ranges;