summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorian <ian@FreeBSD.org>2015-02-13 18:03:50 +0000
committerian <ian@FreeBSD.org>2015-02-13 18:03:50 +0000
commit64831f08c18ce814b8a3ddb2536f95bf333b59fe (patch)
tree60791a9de86874b8c3d242e8354d4605ed5b8ddb
parente11cd4215f13e902be227c11ae437eb6ebe1a7c6 (diff)
downloadFreeBSD-src-64831f08c18ce814b8a3ddb2536f95bf333b59fe.zip
FreeBSD-src-64831f08c18ce814b8a3ddb2536f95bf333b59fe.tar.gz
MFC r276985:
Store the shadow command/mode register in the softc, not a local static var.
-rw-r--r--sys/arm/broadcom/bcm2835/bcm2835_sdhci.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c b/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c
index 7b8bbf3..b3d3f84 100644
--- a/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c
+++ b/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c
@@ -121,6 +121,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);
@@ -344,6 +345,14 @@ bcm_sdhci_read_2(device_t dev, struct sdhci_slot *slot, bus_size_t off)
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);
}
@@ -378,16 +387,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);
}
OpenPOWER on IntegriCloud