summaryrefslogtreecommitdiffstats
path: root/sys/arm/ti
diff options
context:
space:
mode:
authorrpaulo <rpaulo@FreeBSD.org>2013-07-06 04:18:34 +0000
committerrpaulo <rpaulo@FreeBSD.org>2013-07-06 04:18:34 +0000
commit3ff4188a7ee7d9871d5663630715e69053bf22e4 (patch)
tree8f8c84170ec7c00fd87d39f5d868282f4a66ae97 /sys/arm/ti
parentf7464e7e0414bb36578cd7945036bd3c90499c42 (diff)
downloadFreeBSD-src-3ff4188a7ee7d9871d5663630715e69053bf22e4.zip
FreeBSD-src-3ff4188a7ee7d9871d5663630715e69053bf22e4.tar.gz
Don't clear the SYSCONFIG register on boot.
This follows section 18.4.2.2 SD Soft Reset Flow in the TI AM335x Technical Reference Manual and seems to fix the "ti_mmchs0: Error: current cmd NULL, already done?" messages.
Diffstat (limited to 'sys/arm/ti')
-rw-r--r--sys/arm/ti/ti_mmchs.c6
-rw-r--r--sys/arm/ti/ti_mmchs.h6
2 files changed, 10 insertions, 2 deletions
diff --git a/sys/arm/ti/ti_mmchs.c b/sys/arm/ti/ti_mmchs.c
index 76ecc58..d4f436f 100644
--- a/sys/arm/ti/ti_mmchs.c
+++ b/sys/arm/ti/ti_mmchs.c
@@ -1327,7 +1327,7 @@ ti_mmchs_hw_init(device_t dev)
unsigned long timeout;
uint32_t sysctl;
uint32_t capa;
- uint32_t con;
+ uint32_t con, sysconfig;
/* 1: Enable the controller and interface/functional clocks */
clk = MMC0_CLK + sc->device_id;
@@ -1344,7 +1344,9 @@ ti_mmchs_hw_init(device_t dev)
}
/* 2: Issue a softreset to the controller */
- ti_mmchs_write_4(sc, MMCHS_SYSCONFIG, 0x0002);
+ sysconfig = ti_mmchs_read_4(sc, MMCHS_SYSCONFIG);
+ sysconfig |= MMCHS_SYSCONFIG_SRST;
+ ti_mmchs_write_4(sc, MMCHS_SYSCONFIG, sysconfig);
timeout = 100;
while ((ti_mmchs_read_4(sc, MMCHS_SYSSTATUS) & 0x01) == 0x0) {
DELAY(1000);
diff --git a/sys/arm/ti/ti_mmchs.h b/sys/arm/ti/ti_mmchs.h
index 5a7f3f4..175c0c6 100644
--- a/sys/arm/ti/ti_mmchs.h
+++ b/sys/arm/ti/ti_mmchs.h
@@ -67,6 +67,12 @@
#define AM335X_MMCHS_REG_OFFSET 0x100
/* Register bit settings */
+#define MMCHS_SYSCONFIG_CLK_FUN (2 << 8)
+#define MMCHS_SYSCONFIG_CLK_IFC (1 << 8)
+#define MMCHS_SYSCONFIG_SIDL (2 << 3)
+#define MMCHS_SYSCONFIG_ENW (1 << 2)
+#define MMCHS_SYSCONFIG_SRST (1 << 1)
+#define MMCHS_SYSCONFIG_AIDL (1 << 0)
#define MMCHS_STAT_BADA (1UL << 29)
#define MMCHS_STAT_CERR (1UL << 28)
#define MMCHS_STAT_ACE (1UL << 24)
OpenPOWER on IntegriCloud