Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp828498pxb; Wed, 22 Sep 2021 14:00:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJygzWuWF82piypia1PzGTlCRuXkQFXnMgu4p9+6KVUBUX9USlymxX6g1tAIvPPsCwSX59xo X-Received: by 2002:a17:906:8295:: with SMTP id h21mr1314724ejx.101.1632344454159; Wed, 22 Sep 2021 14:00:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632344454; cv=none; d=google.com; s=arc-20160816; b=rhciw0hLL/d5fy93mAe4n8Hboq3cMaua8UPvqllILdaFe9E99LEmW2ml8DeTHzHAOe cJDu5mJEtQt0ExTD0lsvsRINiJSBQJPI0xQ0x5967CDQFbBc42Te1B27IuQ9Opik1gP1 Pg6pe82amwvUpcEbT5Jq/W2wNnn/Vzqs0qaDhXMdZXDYeJCQQJ2PVv+1yQlVbMsnShPk 3lyZ/uEpH26AZaJDzr1ydJJKHeeTmlKSKAYcyGwgb18xqykiUzNLBxSinYfvW/wIlyd8 ySmc0yfzWMXe3T6t1X1AZwzIAC5dSyDDDG8G175zeNOCQAqCUgqDgNqW5vSAsopWMMVf UQdg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=oMrGwXXSYwfJXHxJgiwmEtUs87bYnU7dssa/C2ceze8=; b=y5tGXaIeGnbla9HgeUof5QIBlWcMVAAUmmRp7xkUQ7ib/RY5lr/RJ0AYvrsw42JaXg r8MV4+U1UFRdzWW+9QyaA9yXX5MQnWuVVBSHA1UQ8m/m3lxdqtH/21evq/ZUcVmge25f bExu3/qB7jfKHeegHVupPjDW3G4YOaGGdZsl2phdelxSG4VPUqsF/rb5JauNQispeWl7 kEJhmBfFYSBDdand0NcxhRoX5niR9Ov6t3raHlu+R+BQvvUsAYuEn5nmoyWDtfTJgFOp EP0YvpcPaF1pYqEpY9PX95e4ttJPYTyqgpM42W5RxNw7cjVF9X68Vb1eOREvnTPnY67D Dpww== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 12si3844730eja.426.2021.09.22.14.00.30; Wed, 22 Sep 2021 14:00:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238116AbhIVU5d (ORCPT + 99 others); Wed, 22 Sep 2021 16:57:33 -0400 Received: from mail.kernel.org ([198.145.29.99]:55752 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237910AbhIVU45 (ORCPT ); Wed, 22 Sep 2021 16:56:57 -0400 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id ECDEF61214; Wed, 22 Sep 2021 20:55:20 +0000 (UTC) Received: from sofa.misterjones.org ([185.219.108.64] helo=wait-a-minute.lan) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1mT9Gx-00CP8z-B3; Wed, 22 Sep 2021 21:55:19 +0100 From: Marc Zyngier To: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org Cc: Bjorn Helgaas , Rob Herring , Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Alyssa Rosenzweig , Stan Skowronek , Mark Kettenis , Sven Peter , Hector Martin , Robin Murphy , kernel-team@android.com Subject: [PATCH v4 05/10] PCI: apple: Set up reference clocks when probing Date: Wed, 22 Sep 2021 21:54:53 +0100 Message-Id: <20210922205458.358517-6-maz@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210922205458.358517-1-maz@kernel.org> References: <20210922205458.358517-1-maz@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, bhelgaas@google.com, robh+dt@kernel.org, lorenzo.pieralisi@arm.com, kw@linux.com, alyssa@rosenzweig.io, stan@corellium.com, kettenis@openbsd.org, sven@svenpeter.dev, marcan@marcan.st, Robin.Murphy@arm.com, kernel-team@android.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Alyssa Rosenzweig 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 Signed-off-by: Stan Skowronek Signed-off-by: Alyssa Rosenzweig Signed-off-by: Marc Zyngier --- 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 2479a4168439..2620fd9d0ab1 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 + 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