Jiri Slaby 8f9d95
From: Hyun Kwon <hyun.kwon@xilinx.com>
Jiri Slaby 8f9d95
Date: Fri, 25 Jun 2021 12:48:23 +0200
Jiri Slaby 8f9d95
Subject: PCI: xilinx-nwl: Enable the clock through CCF
Jiri Slaby 8f9d95
Git-commit: de0a01f5296651d3a539f2d23d0db8f359483696
Jiri Slaby 8f9d95
Patch-mainline: 5.15-rc1
Jiri Slaby 8f9d95
References: git-fixes
Jiri Slaby 8f9d95
Jiri Slaby 8f9d95
Enable PCIe reference clock. There is no remove function that's why
Jiri Slaby 8f9d95
this should be enough for simple operation.
Jiri Slaby 8f9d95
Normally this clock is enabled by default by firmware but there are
Jiri Slaby 8f9d95
usecases where this clock should be enabled by driver itself.
Jiri Slaby 8f9d95
It is also good that PCIe clock is recorded in a clock framework.
Jiri Slaby 8f9d95
Jiri Slaby 8f9d95
Link: https://lore.kernel.org/r/ee6997a08fab582b1c6de05f8be184f3fe8d5357.1624618100.git.michal.simek@xilinx.com
Jiri Slaby 8f9d95
Fixes: ab597d35ef11 ("PCI: xilinx-nwl: Add support for Xilinx NWL PCIe Host Controller")
Jiri Slaby 8f9d95
Signed-off-by: Hyun Kwon <hyun.kwon@xilinx.com>
Jiri Slaby 8f9d95
Signed-off-by: Bharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>
Jiri Slaby 8f9d95
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Jiri Slaby 8f9d95
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Jiri Slaby 8f9d95
Cc: stable@vger.kernel.org
Jiri Slaby 8f9d95
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Jiri Slaby 8f9d95
---
Jiri Slaby 8f9d95
 drivers/pci/host/pcie-xilinx-nwl.c |   12 ++++++++++++
Jiri Slaby 8f9d95
 1 file changed, 12 insertions(+)
Jiri Slaby 8f9d95
Jiri Slaby 8f9d95
--- a/drivers/pci/host/pcie-xilinx-nwl.c
Jiri Slaby 8f9d95
+++ b/drivers/pci/host/pcie-xilinx-nwl.c
Jiri Slaby 8f9d95
@@ -10,6 +10,7 @@
Jiri Slaby 8f9d95
  * (at your option) any later version.
Jiri Slaby 8f9d95
  */
Jiri Slaby 8f9d95
 
Jiri Slaby 8f9d95
+#include <linux/clk.h>
Jiri Slaby 8f9d95
 #include <linux/delay.h>
Jiri Slaby 8f9d95
 #include <linux/interrupt.h>
Jiri Slaby 8f9d95
 #include <linux/irq.h>
Jiri Slaby 8f9d95
@@ -171,6 +172,7 @@ struct nwl_pcie {
Jiri Slaby 8f9d95
 	u8 root_busno;
Jiri Slaby 8f9d95
 	struct nwl_msi msi;
Jiri Slaby 8f9d95
 	struct irq_domain *legacy_irq_domain;
Jiri Slaby 8f9d95
+	struct clk *clk;
Jiri Slaby 8f9d95
 };
Jiri Slaby 8f9d95
 
Jiri Slaby 8f9d95
 static inline u32 nwl_bridge_readl(struct nwl_pcie *pcie, u32 off)
Jiri Slaby 8f9d95
@@ -808,6 +810,16 @@ static int nwl_pcie_probe(struct platfor
Jiri Slaby 8f9d95
 		return err;
Jiri Slaby 8f9d95
 	}
Jiri Slaby 8f9d95
 
Jiri Slaby 8f9d95
+	pcie->clk = devm_clk_get(dev, NULL);
Jiri Slaby 8f9d95
+	if (IS_ERR(pcie->clk))
Jiri Slaby 8f9d95
+		return PTR_ERR(pcie->clk);
Jiri Slaby 8f9d95
+
Jiri Slaby 8f9d95
+	err = clk_prepare_enable(pcie->clk);
Jiri Slaby 8f9d95
+	if (err) {
Jiri Slaby 8f9d95
+		dev_err(dev, "can't enable PCIe ref clock\n");
Jiri Slaby 8f9d95
+		return err;
Jiri Slaby 8f9d95
+	}
Jiri Slaby 8f9d95
+
Jiri Slaby 8f9d95
 	err = nwl_pcie_bridge_init(pcie);
Jiri Slaby 8f9d95
 	if (err) {
Jiri Slaby 8f9d95
 		dev_err(dev, "HW Initialization failed\n");