[PATCH 09/14] atmel_mci: on version 0x0 we need to reset the IP at each request

Jean-Christophe PLAGNIOL-VILLARD plagnioj at jcrosoft.com
Fri Jan 25 10:17:42 EST 2013


Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj at jcrosoft.com>
---
 drivers/mci/atmel_mci.c |   10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/mci/atmel_mci.c b/drivers/mci/atmel_mci.c
index bf0adb0..1b60348 100644
--- a/drivers/mci/atmel_mci.c
+++ b/drivers/mci/atmel_mci.c
@@ -30,6 +30,7 @@
 struct atmel_mci_caps {
 	bool    has_rwproof;
 	bool	has_odd_clk_div;
+	bool	need_reset_after_xfer;
 };
 
 struct atmel_mci {
@@ -411,6 +412,12 @@ static int atmci_request(struct mci_host *mci, struct mci_cmd *cmd, struct mci_d
 	u32 stat, cmdat = 0;
 	int ret;
 
+	if (host->caps.need_reset_after_xfer) {
+		atmci_writel(host, ATMCI_CR, ATMCI_CR_SWRST);
+		atmci_writel(host, ATMCI_CR, ATMCI_CR_MCIEN);
+		atmci_writel(host, ATMCI_MR, host->mode_reg);
+	}
+
 	if (cmd->resp_type != MMC_RSP_NONE)
 		cmdat |= ATMCI_CMDR_MAXLAT_64CYC;
 
@@ -471,6 +478,8 @@ static void atmci_get_cap(struct atmel_mci *host)
 
 	dev_info(host->hw_dev, "version: 0x%x\n", version);
 
+	host->caps.need_reset_after_xfer = 1;
+
 	switch (version & 0xf00) {
 	case 0x500:
 		host->caps.has_odd_clk_div = 1;
@@ -479,6 +488,7 @@ static void atmci_get_cap(struct atmel_mci *host)
 	case 0x200:
 		host->caps.has_rwproof = 1;
 	case 0x100:
+		host->caps.need_reset_after_xfer = 0;
 	case 0x0:
 		break;
 	default:
-- 
1.7.10.4




More information about the barebox mailing list