svn commit: r294266 - head/sys/arm64/cavium

Zbigniew Bodek zbb at FreeBSD.org
Mon Jan 18 13:31:31 UTC 2016


Author: zbb
Date: Mon Jan 18 13:31:29 2016
New Revision: 294266
URL: https://svnweb.freebsd.org/changeset/base/294266

Log:
  Update ThunderX PCIe driver to fit new DTS layout
  
  In recent EFI the DTS entries changed for PCIe controller.
  This commit fixes internal PCIe, external is yet TBD.
  
  Submitted by:  Dominik Ermel <der at semihalf.com>
  Obtained from: Semihalf
  Sponsored by:  The FreeBSD Foundation
  Differential revision: https://reviews.freebsd.org/D4976

Modified:
  head/sys/arm64/cavium/thunder_pcie.c
  head/sys/arm64/cavium/thunder_pcie_common.c
  head/sys/arm64/cavium/thunder_pcie_common.h
  head/sys/arm64/cavium/thunder_pcie_pem.c

Modified: head/sys/arm64/cavium/thunder_pcie.c
==============================================================================
--- head/sys/arm64/cavium/thunder_pcie.c	Mon Jan 18 12:02:05 2016	(r294265)
+++ head/sys/arm64/cavium/thunder_pcie.c	Mon Jan 18 13:31:29 2016	(r294266)
@@ -92,7 +92,7 @@ __FBSDID("$FreeBSD$");
 #define	PCI_ADDR_CELL_SIZE	2
 
 struct thunder_pcie_softc {
-	struct pcie_range	ranges[MAX_RANGES_TUPLES];
+	struct pcie_range	ranges[RANGES_TUPLES_MAX];
 	struct rman		mem_rman;
 	struct resource		*res;
 	int			ecam;
@@ -132,7 +132,8 @@ thunder_pcie_probe(device_t dev)
 	if (!ofw_bus_status_okay(dev))
 		return (ENXIO);
 
-	if (ofw_bus_is_compatible(dev, "cavium,thunder-pcie")) {
+	if (ofw_bus_is_compatible(dev, "cavium,thunder-pcie") ||
+	    ofw_bus_is_compatible(dev, "cavium,pci-host-thunder-ecam")) {
 		device_set_desc(dev, "Cavium Integrated PCI/PCI-E Controller");
 		return (BUS_PROBE_DEFAULT);
 	}
@@ -180,7 +181,7 @@ thunder_pcie_attach(device_t dev)
 		return (error);
 	}
 
-	for (tuple = 0; tuple < MAX_RANGES_TUPLES; tuple++) {
+	for (tuple = 0; tuple < RANGES_TUPLES_MAX; tuple++) {
 		base = sc->ranges[tuple].phys_base;
 		size = sc->ranges[tuple].size;
 		if ((base == 0) || (size == 0))
@@ -245,8 +246,7 @@ parse_pci_mem_ranges(struct thunder_pcie
 
 	tuples_count = cells_count /
 	    (pci_addr_cells + parent_addr_cells + size_cells);
-	if ((tuples_count > MAX_RANGES_TUPLES) ||
-	    (tuples_count < MIN_RANGES_TUPLES)) {
+	if (tuples_count > RANGES_TUPLES_MAX) {
 		device_printf(sc->dev,
 		    "Unexpected number of 'ranges' tuples in FDT\n");
 		rv = ENXIO;
@@ -296,7 +296,7 @@ parse_pci_mem_ranges(struct thunder_pcie
 		}
 
 	}
-	for (; tuple < MAX_RANGES_TUPLES; tuple++) {
+	for (; tuple < RANGES_TUPLES_MAX; tuple++) {
 		/* zero-fill remaining tuples to mark empty elements in array */
 		sc->ranges[tuple].phys_base = 0;
 		sc->ranges[tuple].size = 0;

Modified: head/sys/arm64/cavium/thunder_pcie_common.c
==============================================================================
--- head/sys/arm64/cavium/thunder_pcie_common.c	Mon Jan 18 12:02:05 2016	(r294265)
+++ head/sys/arm64/cavium/thunder_pcie_common.c	Mon Jan 18 13:31:29 2016	(r294266)
@@ -48,7 +48,7 @@ range_addr_is_pci(struct pcie_range *ran
 	struct pcie_range *r;
 	int tuple;
 
-	for (tuple = 0; tuple < MAX_RANGES_TUPLES; tuple++) {
+	for (tuple = 0; tuple < RANGES_TUPLES_MAX; tuple++) {
 		r = &ranges[tuple];
 		if (addr >= r->pci_base &&
 		    addr < (r->pci_base + r->size) &&
@@ -68,7 +68,7 @@ range_addr_is_phys(struct pcie_range *ra
 	struct pcie_range *r;
 	int tuple;
 
-	for (tuple = 0; tuple < MAX_RANGES_TUPLES; tuple++) {
+	for (tuple = 0; tuple < RANGES_TUPLES_MAX; tuple++) {
 		r = &ranges[tuple];
 		if (addr >= r->phys_base &&
 		    addr < (r->phys_base + r->size) &&
@@ -90,7 +90,7 @@ range_addr_pci_to_phys(struct pcie_range
 	int tuple;
 
 	/* Find physical address corresponding to given bus address */
-	for (tuple = 0; tuple < MAX_RANGES_TUPLES; tuple++) {
+	for (tuple = 0; tuple < RANGES_TUPLES_MAX; tuple++) {
 		r = &ranges[tuple];
 		if (pci_addr >= r->pci_base &&
 		    pci_addr < (r->pci_base + r->size)) {

Modified: head/sys/arm64/cavium/thunder_pcie_common.h
==============================================================================
--- head/sys/arm64/cavium/thunder_pcie_common.h	Mon Jan 18 12:02:05 2016	(r294265)
+++ head/sys/arm64/cavium/thunder_pcie_common.h	Mon Jan 18 13:31:29 2016	(r294266)
@@ -29,8 +29,8 @@
 #ifndef _CAVIUM_THUNDER_PCIE_COMMON_H_
 #define	_CAVIUM_THUNDER_PCIE_COMMON_H_
 
-#define	MAX_RANGES_TUPLES	5
-#define	MIN_RANGES_TUPLES	2
+#define	RANGES_TUPLES_MAX	6
+#define	RANGES_TUPLES_INVALID (RANGES_TUPLES_MAX + 1)
 
 struct pcie_range {
 	uint64_t	pci_base;

Modified: head/sys/arm64/cavium/thunder_pcie_pem.c
==============================================================================
--- head/sys/arm64/cavium/thunder_pcie_pem.c	Mon Jan 18 12:02:05 2016	(r294265)
+++ head/sys/arm64/cavium/thunder_pcie_pem.c	Mon Jan 18 13:31:29 2016	(r294266)
@@ -114,7 +114,7 @@ struct thunder_pem_softc {
 	struct resource		*reg;
 	bus_space_tag_t		reg_bst;
 	bus_space_handle_t	reg_bsh;
-	struct pcie_range	ranges[MAX_RANGES_TUPLES];
+	struct pcie_range	ranges[RANGES_TUPLES_MAX];
 	struct rman		mem_rman;
 	struct rman		io_rman;
 	bus_space_handle_t	pem_sli_base;


More information about the svn-src-head mailing list