svn commit: r287212 - head/sys/dev/mmc/host

Andrew Turner andrew at FreeBSD.org
Thu Aug 27 16:18:23 UTC 2015


Author: andrew
Date: Thu Aug 27 16:18:22 2015
New Revision: 287212
URL: https://svnweb.freebsd.org/changeset/base/287212

Log:
  Allow the fifo-depth and num-slots to be missing. For the former we read
  the value from the hardware, for the latter assume a single slot.
  
  Sponsored by:	ABT Systems Ltd

Modified:
  head/sys/dev/mmc/host/dwmmc.c

Modified: head/sys/dev/mmc/host/dwmmc.c
==============================================================================
--- head/sys/dev/mmc/host/dwmmc.c	Thu Aug 27 15:27:41 2015	(r287211)
+++ head/sys/dev/mmc/host/dwmmc.c	Thu Aug 27 16:18:22 2015	(r287212)
@@ -466,16 +466,17 @@ parse_fdt(struct dwmmc_softc *sc)
 		return (ENXIO);
 
 	/* fifo-depth */
-	if ((len = OF_getproplen(node, "fifo-depth")) <= 0)
-		return (ENXIO);
-	OF_getencprop(node, "fifo-depth", dts_value, len);
-	sc->fifo_depth = dts_value[0];
+	if ((len = OF_getproplen(node, "fifo-depth")) > 0) {
+		OF_getencprop(node, "fifo-depth", dts_value, len);
+		sc->fifo_depth = dts_value[0];
+	}
 
 	/* num-slots */
-	if ((len = OF_getproplen(node, "num-slots")) <= 0)
-		return (ENXIO);
-	OF_getencprop(node, "num-slots", dts_value, len);
-	sc->num_slots = dts_value[0];
+	sc->num_slots = 1;
+	if ((len = OF_getproplen(node, "num-slots")) > 0) {
+		OF_getencprop(node, "num-slots", dts_value, len);
+		sc->num_slots = dts_value[0];
+	}
 
 	/*
 	 * We need some platform-specific code to know
@@ -610,6 +611,13 @@ dwmmc_attach(device_t dev)
 
 	dwmmc_setup_bus(sc, sc->host.f_min);
 
+	if (sc->fifo_depth == 0) {
+		sc->fifo_depth = 1 +
+		    ((READ4(sc, SDMMC_FIFOTH) >> SDMMC_FIFOTH_RXWMARK_S) & 0xfff);
+		device_printf(dev, "No fifo-depth, using FIFOTH %x\n",
+		    sc->fifo_depth);
+	}
+
 	if (!sc->use_pio) {
 		if (dma_setup(sc))
 			return (ENXIO);


More information about the svn-src-all mailing list