svn commit: r276985 - head/sys/arm/broadcom/bcm2835

Ian Lepore ian at FreeBSD.org
Sun Jan 11 17:00:26 UTC 2015


Author: ian
Date: Sun Jan 11 17:00:24 2015
New Revision: 276985
URL: https://svnweb.freebsd.org/changeset/base/276985

Log:
  Store the shadow command/mode register in the softc, not a local static var.
  
  Submitted by:	Michal Meloun

Modified:
  head/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c

Modified: head/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c
==============================================================================
--- head/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c	Sun Jan 11 16:46:43 2015	(r276984)
+++ head/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c	Sun Jan 11 17:00:24 2015	(r276985)
@@ -124,6 +124,7 @@ struct bcm_sdhci_softc {
 	bus_dma_tag_t		sc_dma_tag;
 	bus_dmamap_t		sc_dma_map;
 	vm_paddr_t		sc_sdhci_buffer_phys;
+	uint32_t		cmd_and_mode;
 };
 
 static int bcm_sdhci_probe(device_t);
@@ -341,6 +342,14 @@ bcm_sdhci_read_2(device_t dev, struct sd
 	struct bcm_sdhci_softc *sc = device_get_softc(dev);
 	uint32_t val = RD4(sc, off & ~3);
 
+	/*
+	 * Standard 32-bit handling of command and transfer mode.
+	 */
+	if (off == SDHCI_TRANSFER_MODE) {
+		return (sc->cmd_and_mode >> 16);
+	} else if (off == SDHCI_COMMAND_FLAGS) {
+		return (sc->cmd_and_mode & 0x0000ffff);
+	}
 	return ((val >> (off & 3)*8) & 0xffff);
 }
 
@@ -375,16 +384,15 @@ static void
 bcm_sdhci_write_2(device_t dev, struct sdhci_slot *slot, bus_size_t off, uint16_t val)
 {
 	struct bcm_sdhci_softc *sc = device_get_softc(dev);
-	static uint32_t cmd_and_trandfer_mode;
 	uint32_t val32;
 	if (off == SDHCI_COMMAND_FLAGS)
-		val32 = cmd_and_trandfer_mode;
+		val32 = sc->cmd_and_mode;
 	else
 		val32 = RD4(sc, off & ~3);
 	val32 &= ~(0xffff << (off & 3)*8);
 	val32 |= (val << (off & 3)*8);
 	if (off == SDHCI_TRANSFER_MODE)
-		cmd_and_trandfer_mode = val32;
+		sc->cmd_and_mode = val32;
 	else
 		WR4(sc, off & ~3, val32);
 }


More information about the svn-src-all mailing list