Module Name: src
Committed By: jmcneill
Date: Mon Sep 25 08:55:27 UTC 2017
Modified Files:
src/sys/arch/arm/nvidia: tegra_pcie.c
Log Message:
Enable pcie on tegra210
To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/arm/nvidia/tegra_pcie.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/nvidia/tegra_pcie.c
diff -u src/sys/arch/arm/nvidia/tegra_pcie.c:1.19 src/sys/arch/arm/nvidia/tegra_pcie.c:1.20
--- src/sys/arch/arm/nvidia/tegra_pcie.c:1.19 Thu Jul 20 01:45:38 2017
+++ src/sys/arch/arm/nvidia/tegra_pcie.c Mon Sep 25 08:55:27 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_pcie.c,v 1.19 2017/07/20 01:45:38 jmcneill Exp $ */
+/* $NetBSD: tegra_pcie.c,v 1.20 2017/09/25 08:55:27 jmcneill Exp $ */
/*-
* Copyright (c) 2015 Jared D. McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tegra_pcie.c,v 1.19 2017/07/20 01:45:38 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tegra_pcie.c,v 1.20 2017/09/25 08:55:27 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -92,6 +92,7 @@ struct tegra_pcie_softc {
static int tegra_pcie_intr(void *);
static void tegra_pcie_init(pci_chipset_tag_t, void *);
static void tegra_pcie_enable(struct tegra_pcie_softc *);
+static void tegra_pcie_enable_clocks(struct tegra_pcie_softc *);
static void tegra_pcie_setup(struct tegra_pcie_softc * const);
static void tegra_pcie_conf_frag_map(struct tegra_pcie_softc * const,
uint, uint);
@@ -126,9 +127,7 @@ static int
tegra_pcie_match(device_t parent, cfdata_t cf, void *aux)
{
const char * const compatible[] = {
-#if notyet
"nvidia,tegra210-pcie",
-#endif
"nvidia,tegra124-pcie",
NULL
};
@@ -188,6 +187,8 @@ tegra_pcie_attach(device_t parent, devic
aprint_naive("\n");
aprint_normal(": PCIE\n");
+ tegra_pcie_enable_clocks(sc);
+
if (!fdtbus_intr_str(faa->faa_phandle, 0, intrstr, sizeof(intrstr))) {
aprint_error_dev(self, "failed to decode interrupt\n");
return;
@@ -313,6 +314,30 @@ tegra_pcie_intr(void *priv)
}
static void
+tegra_pcie_enable_clocks(struct tegra_pcie_softc * const sc)
+{
+ const char *clock_names[] = { "pex", "afi", "pll_e", "cml" };
+ const char *reset_names[] = { "pex", "afi", "pcie_x" };
+ struct fdtbus_reset *rst;
+ struct clk *clk;
+ int n;
+
+ for (n = 0; n < __arraycount(clock_names); n++) {
+ clk = fdtbus_clock_get(sc->sc_phandle, clock_names[n]);
+ if (clk == NULL || clk_enable(clk) != 0)
+ aprint_error_dev(sc->sc_dev, "couldn't enable clock %s\n",
+ clock_names[n]);
+ }
+
+ for (n = 0; n < __arraycount(reset_names); n++) {
+ rst = fdtbus_reset_get(sc->sc_phandle, reset_names[n]);
+ if (rst == NULL || fdtbus_reset_deassert(rst) != 0)
+ aprint_error_dev(sc->sc_dev, "couldn't de-assert reset %s\n",
+ reset_names[n]);
+ }
+}
+
+static void
tegra_pcie_setup(struct tegra_pcie_softc * const sc)
{
size_t i;