svn commit: r306328 - head/sys/arm/nvidia

Oleksandr Tymoshenko gonzo at FreeBSD.org
Sun Sep 25 23:48:17 UTC 2016


Author: gonzo
Date: Sun Sep 25 23:48:15 2016
New Revision: 306328
URL: https://svnweb.freebsd.org/changeset/base/306328

Log:
  Update PCI driver to match new dts tree
  
  In new dts tree phy is a property of port, not the controller node, also
  the name was changed from "pcie" to "pcie-0"

Modified:
  head/sys/arm/nvidia/tegra_pcie.c

Modified: head/sys/arm/nvidia/tegra_pcie.c
==============================================================================
--- head/sys/arm/nvidia/tegra_pcie.c	Sun Sep 25 23:45:49 2016	(r306327)
+++ head/sys/arm/nvidia/tegra_pcie.c	Sun Sep 25 23:48:15 2016	(r306328)
@@ -266,6 +266,7 @@ struct tegra_pcib_port {
 	int 		port_idx;		/* chip port index */
 	int		num_lanes;		/* number of lanes */
 	bus_size_t	afi_pex_ctrl;		/* offset of afi_pex_ctrl */
+	phy_t		phy;			/* port phy */
 
 	/* Config space properties. */
 	bus_addr_t	rp_base_addr;		/* PA of config window */
@@ -291,7 +292,6 @@ struct tegra_pcib_softc {
 	struct ofw_pci_range	pref_mem_range;
 	struct ofw_pci_range	io_range;
 
-	phy_t			phy;
 	clk_t			clk_pex;
 	clk_t			clk_afi;
 	clk_t			clk_pll_e;
@@ -963,6 +963,15 @@ tegra_pcib_parse_port(struct tegra_pcib_
 	port->afi_pex_ctrl = tegra_pcib_pex_ctrl(sc, port->port_idx);
 	sc->lanes_cfg |= port->num_lanes << (4 * port->port_idx);
 
+	/* Phy. */
+	rv = phy_get_by_ofw_name(sc->dev, node, "pcie-0", &port->phy);
+	if (rv != 0) {
+		device_printf(sc->dev,
+		    "Cannot get 'pcie-0' phy for port %d\n",
+		    port->port_idx);
+		goto fail;
+	}
+
 	return (port);
 fail:
 	free(port, M_DEVBUF);
@@ -1067,13 +1076,6 @@ tegra_pcib_parse_fdt_resources(struct te
 		return (ENXIO);
 	}
 
-	/* Phy. */
-	rv = phy_get_by_ofw_name(sc->dev, 0, "pcie", &sc->phy);
-	if (rv != 0) {
-		device_printf(sc->dev, "Cannot get 'pcie' phy\n");
-		return (ENXIO);
-	}
-
 	/* Ports */
 	sc->num_ports = 0;
 	for (child = OF_child(node); child != 0; child = OF_peer(child)) {
@@ -1306,13 +1308,19 @@ tegra_pcib_enable(struct tegra_pcib_soft
 	reg &= ~AFI_FUSE_PCIE_T0_GEN2_DIS;
 	AFI_WR4(sc, AFI_FUSE, reg);
 
-	/* Enable PCIe phy. */
-	rv = phy_enable(sc->dev, sc->phy);
-	if (rv != 0) {
-		device_printf(sc->dev, "Cannot enable phy\n");
-		return (rv);
+	for (i = 0; i < TEGRA_PCIB_MAX_PORTS; i++) {
+		if (sc->ports[i] != NULL) {
+			rv = phy_enable(sc->dev, sc->ports[i]->phy);
+			if (rv != 0) {
+				device_printf(sc->dev,
+				    "Cannot enable phy for port %d\n",
+				    sc->ports[i]->port_idx);
+				return (rv);
+			}
+		}
 	}
 
+
 	rv = hwreset_deassert(sc->hwreset_pcie_x);
 	if (rv != 0) {
 		device_printf(sc->dev, "Cannot unreset  'pci_x' reset\n");


More information about the svn-src-all mailing list