From: Marc Zyngier <maz@kernel.org>
To: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-pci@vger.kernel.org
Cc: "Bjorn Helgaas" <bhelgaas@google.com>,
"Rob Herring" <robh+dt@kernel.org>,
"Lorenzo Pieralisi" <lorenzo.pieralisi@arm.com>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Alyssa Rosenzweig" <alyssa@rosenzweig.io>,
"Stan Skowronek" <stan@corellium.com>,
"Mark Kettenis" <kettenis@openbsd.org>,
"Sven Peter" <sven@svenpeter.dev>,
"Hector Martin" <marcan@marcan.st>,
"Robin Murphy" <Robin.Murphy@arm.com>,
"Joey Gouly" <joey.gouly@arm.com>,
"Joerg Roedel" <joro@8bytes.org>,
kernel-team@android.com
Subject: [PATCH v5 05/14] PCI: apple: Set up reference clocks when probing
Date: Wed, 29 Sep 2021 17:38:38 +0100 [thread overview]
Message-ID: <20210929163847.2807812-6-maz@kernel.org> (raw)
In-Reply-To: <20210929163847.2807812-1-maz@kernel.org>
From: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Apple's PCIe controller requires clocks to be configured in order to
bring up the hardware. Add the register pokes required to do so.
Adapted from Corellium's driver via Mark Kettenis's U-Boot patches.
Co-developed-by: Stan Skowronek <stan@corellium.com>
Signed-off-by: Stan Skowronek <stan@corellium.com>
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
drivers/pci/controller/pcie-apple.c | 46 +++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/drivers/pci/controller/pcie-apple.c b/drivers/pci/controller/pcie-apple.c
index ba7b2949aaa4..23390e5c54e9 100644
--- a/drivers/pci/controller/pcie-apple.c
+++ b/drivers/pci/controller/pcie-apple.c
@@ -132,6 +132,48 @@ static void rmw_set(u32 set, void __iomem *addr)
writel_relaxed(readl_relaxed(addr) | set, addr);
}
+static void rmw_clear(u32 clr, void __iomem *addr)
+{
+ writel_relaxed(readl_relaxed(addr) & ~clr, addr);
+}
+
+static int apple_pcie_setup_refclk(struct apple_pcie *pcie,
+ struct apple_pcie_port *port)
+{
+ u32 stat;
+ int res;
+
+ res = readl_relaxed_poll_timeout(pcie->base + CORE_RC_PHYIF_STAT, stat,
+ stat & CORE_RC_PHYIF_STAT_REFCLK,
+ 100, 50000);
+ if (res < 0)
+ return res;
+
+ rmw_set(CORE_LANE_CTL_CFGACC, pcie->base + CORE_LANE_CTL(port->idx));
+ rmw_set(CORE_LANE_CFG_REFCLK0REQ, pcie->base + CORE_LANE_CFG(port->idx));
+
+ res = readl_relaxed_poll_timeout(pcie->base + CORE_LANE_CFG(port->idx),
+ stat, stat & CORE_LANE_CFG_REFCLK0ACK,
+ 100, 50000);
+ if (res < 0)
+ return res;
+
+ rmw_set(CORE_LANE_CFG_REFCLK1, pcie->base + CORE_LANE_CFG(port->idx));
+ res = readl_relaxed_poll_timeout(pcie->base + CORE_LANE_CFG(port->idx),
+ stat, stat & CORE_LANE_CFG_REFCLK1,
+ 100, 50000);
+
+ if (res < 0)
+ return res;
+
+ rmw_clear(CORE_LANE_CTL_CFGACC, pcie->base + CORE_LANE_CTL(port->idx));
+
+ rmw_set(CORE_LANE_CFG_REFCLKEN, pcie->base + CORE_LANE_CFG(port->idx));
+ rmw_set(PORT_REFCLK_EN, port->base + PORT_REFCLK);
+
+ return 0;
+}
+
static int apple_pcie_setup_port(struct apple_pcie *pcie,
struct device_node *np)
{
@@ -165,6 +207,10 @@ static int apple_pcie_setup_port(struct apple_pcie *pcie,
rmw_set(PORT_APPCLK_EN, port->base + PORT_APPCLK);
+ ret = apple_pcie_setup_refclk(pcie, port);
+ if (ret < 0)
+ return ret;
+
rmw_set(PORT_PERST_OFF, port->base + PORT_PERST);
gpiod_set_value(reset, 1);
--
2.30.2
next prev parent reply other threads:[~2021-09-29 16:39 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-29 16:38 [PATCH v5 00/14] PCI: Add support for Apple M1 Marc Zyngier
2021-09-29 16:38 ` [PATCH v5 01/14] irqdomain: Make of_phandle_args_to_fwspec generally available Marc Zyngier
2021-09-29 16:38 ` [PATCH v5 02/14] of/irq: Allow matching of an interrupt-map local to an interrupt controller Marc Zyngier
2021-09-29 16:38 ` [PATCH v5 03/14] PCI: of: Allow matching of an interrupt-map local to a PCI device Marc Zyngier
2021-09-29 16:38 ` [PATCH v5 04/14] PCI: apple: Add initial hardware bring-up Marc Zyngier
2021-09-29 16:38 ` Marc Zyngier [this message]
2021-09-29 16:38 ` [PATCH v5 06/14] PCI: apple: Add INTx and per-port interrupt support Marc Zyngier
2021-09-29 16:38 ` [PATCH v5 07/14] PCI: apple: Implement MSI support Marc Zyngier
2021-09-29 16:38 ` [PATCH v5 08/14] iommu/dart: Exclude MSI doorbell from PCIe device IOVA range Marc Zyngier
2021-09-29 16:38 ` [PATCH v5 09/14] PCI: apple: Configure RID to SID mapper on device addition Marc Zyngier
2021-09-29 16:38 ` [PATCH v5 10/14] arm64: apple: Add pinctrl nodes Marc Zyngier
2021-09-29 19:05 ` Linus Walleij
2021-09-30 8:00 ` Marc Zyngier
2021-09-30 9:20 ` Mark Kettenis
2021-09-30 15:46 ` Linus Walleij
2021-10-07 16:00 ` Hector Martin
2021-09-29 16:38 ` [PATCH v5 11/14] arm64: apple: Add PCIe node Marc Zyngier
2021-10-07 16:01 ` Hector Martin
2021-09-29 16:38 ` [PATCH v5 12/14] arm64: dts: apple: t8103: Add PCIe DARTs Marc Zyngier
2021-10-07 16:02 ` Hector Martin
2021-09-29 16:38 ` [PATCH v5 13/14] arm64: dts: apple: t8103: Add root port interrupt routing Marc Zyngier
2021-10-07 16:03 ` Hector Martin
2021-09-29 16:38 ` [PATCH v5 14/14] arm64: dts: apple: j274: Expose PCI node for the Ethernet MAC address Marc Zyngier
2021-10-07 16:03 ` Hector Martin
2021-10-04 8:38 ` [PATCH v5 00/14] PCI: Add support for Apple M1 Lorenzo Pieralisi
2021-10-04 9:05 ` Marc Zyngier
2021-10-04 18:30 ` Linus Walleij
2021-10-07 15:43 ` Hector Martin
2021-10-04 19:51 ` Rob Herring
2021-10-04 20:42 ` Linus Walleij
2021-10-04 20:42 ` Linus Walleij
2021-10-05 9:57 ` Marc Zyngier
2021-10-05 9:57 ` Marc Zyngier
2021-10-06 5:56 ` Michael Ellerman
2021-10-06 5:56 ` Michael Ellerman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210929163847.2807812-6-maz@kernel.org \
--to=maz@kernel.org \
--cc=Robin.Murphy@arm.com \
--cc=alyssa@rosenzweig.io \
--cc=bhelgaas@google.com \
--cc=devicetree@vger.kernel.org \
--cc=joey.gouly@arm.com \
--cc=joro@8bytes.org \
--cc=kernel-team@android.com \
--cc=kettenis@openbsd.org \
--cc=kw@linux.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=marcan@marcan.st \
--cc=robh+dt@kernel.org \
--cc=stan@corellium.com \
--cc=sven@svenpeter.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.