|
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");
|