From 3ff4188a7ee7d9871d5663630715e69053bf22e4 Mon Sep 17 00:00:00 2001 From: rpaulo Date: Sat, 6 Jul 2013 04:18:34 +0000 Subject: 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. --- sys/arm/ti/ti_mmchs.c | 6 ++++-- sys/arm/ti/ti_mmchs.h | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'sys/arm/ti') 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) -- cgit v1.1