From patchwork Tue Mar 5 13:11:23 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amar X-Patchwork-Id: 225010 X-Patchwork-Delegate: promsoft@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 0FF632C0346 for ; Tue, 5 Mar 2013 23:54:41 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 8F8944A152; Tue, 5 Mar 2013 13:54:39 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id L4HZIWMEAzrU; Tue, 5 Mar 2013 13:54:39 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id E862A4A13F; Tue, 5 Mar 2013 13:54:37 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id B50684A13F for ; Tue, 5 Mar 2013 13:54:35 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Nr2Glgqp29FS for ; Tue, 5 Mar 2013 13:54:34 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mailout1.samsung.com (mailout1.samsung.com [203.254.224.24]) by theia.denx.de (Postfix) with ESMTP id 3E49F4A13A for ; Tue, 5 Mar 2013 13:54:32 +0100 (CET) Received: from epcpsbgr5.samsung.com (u145.gpu120.samsung.co.kr [203.254.230.145]) by mailout1.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MJ6002R3UIVFT00@mailout1.samsung.com> for u-boot@lists.denx.de; Tue, 05 Mar 2013 21:54:31 +0900 (KST) Received: from epcpsbgm1.samsung.com ( [172.20.52.125]) by epcpsbgr5.samsung.com (EPCPMTA) with SMTP id A7.0C.23273.70BE5315; Tue, 05 Mar 2013 21:54:31 +0900 (KST) X-AuditID: cbfee691-b7faa6d000005ae9-40-5135eb07d36c Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id 33.B9.03918.60BE5315; Tue, 05 Mar 2013 21:54:30 +0900 (KST) Received: from chrome-ubuntu.sisodomain.com ([107.108.73.106]) by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0MJ600GDUUCXH840@mmp1.samsung.com> for u-boot@lists.denx.de; Tue, 05 Mar 2013 21:54:30 +0900 (KST) From: Amar To: u-boot@lists.denx.de Date: Tue, 05 Mar 2013 08:11:23 -0500 Message-id: <1362489090-7745-4-git-send-email-amarendra.xt@samsung.com> X-Mailer: git-send-email 1.8.0 In-reply-to: <1362489090-7745-1-git-send-email-amarendra.xt@samsung.com> References: <1362489090-7745-1-git-send-email-amarendra.xt@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrKLMWRmVeSWpSXmKPExsWyRsSkVpf9tWmgwY0TPBZv93ayOzB6nL2z gzGAMYrLJiU1J7MstUjfLoEr41THXKaCnRIVz59NYmtgfCzcxcjBISFgIvGkOa+LkRPIFJO4 cG89WxcjF4eQwFJGiU2Te1ggEiYS988fZoRILGKUOLN1IjuEs4xJYt7K22wgk9gEVCV+LbYH aRARkJD41X8VrIFZoINRYsfEzYwgCWGBMIm7rcdYQWwWoPor+9+AbeAVcJd4uGAN1DY5iQ97 HrGD2JwCHhKLPi9kBrGFgGou9SxiARkqIXCdTeLC3L0sEIMEJL5NPsQC8Y6sxKYDzBBzJCUO rrjBMoFReAEjwypG0dSC5ILipPQiU73ixNzi0rx0veT83E2MwCA8/e/ZxB2M9w9YH2JMBho3 kVlKNDkfGMR5JfGGxibmpsamZkaWlpampAkrifPKX5IJFBJITyxJzU5NLUgtii8qzUktPsTI xMEp1cC4eI1Ect9d3/gNN/88vXjMX+wkY+uhW+dzfp0/O6PdInpbXFvRkSR93bztAtc+Ldmq N0NzyrLoZf/kJNjOdp4zitd6yMXd+eSaab3xOqnrSQx/1DrKLnryXrsStHTfa495UjK77+62 XuwoyMPCvqi6Nfxo6snk9Hf/+JfP+Cq04dBF8asXDuxtUGIpzkg01GIuKk4EALB6AwVYAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrMIsWRmVeSWpSXmKPExsVy+t9jAV2216aBBr/+GFm83dvJ7sDocfbO DsYAxqgGRpuM1MSU1CKF1Lzk/JTMvHRbJe/geOd4UzMDQ11DSwtzJYW8xNxUWyUXnwBdt8wc oLFKCmWJOaVAoYDE4mIlfTtME0JD3HQtYBojdH1DguB6jAzQQMIaxoxTHXOZCnZKVDx/Nomt gfGxcBcjJ4eEgInE/fOHGSFsMYkL99azdTFycQgJLGKUOLN1IjuEs4xJYt7K20AZDg42AVWJ X4vtQRpEBCQkfvVfZQSpYRboYJTYMXEz2CRhgTCJu63HWEFsFqD6K/vfsIDYvALuEg8XrGGB 2CYn8WHPI3YQm1PAQ2LR54XMILYQUM2lnkUsExh5FzAyrGIUTS1ILihOSs811CtOzC0uzUvX S87P3cQIDvJnUjsYVzZYHGIU4GBU4uFlOGoSKMSaWFZcmXuIUYKDWUmEd+dT00Ah3pTEyqrU ovz4otKc1OJDjMlAV01klhJNzgdGYF5JvKGxibmpsamliYWJmSVpwkrivIynngQICaQnlqRm p6YWpBbBbGHi4JRqYGQsrrrGvn1BnNS/0xoyCidF2Iy9/+5sPvzSs8zSVLI5csOHqVe7vZeb XOC9n/RjMXedflXT4Re5zr0Rf2bWic9b7rtC7kC79/ErjsnsXcc4F+bGfNtw+0Uve2jz1jB2 iSnTN7OvOlN9uWK9i11JYqVO26p98Za6TaIvXC7Zr67te2txqO34bSWW4oxEQy3mouJEAEUW Z7a2AgAA DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Cc: patches@linaro.org, jh80.chung@samsung.com, afleming@gmail.com Subject: [U-Boot] [PATCH V7 03/10] DWMMC: Initialise dwmci and resolve EMMC read write issues X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de This patch enumerates dwmci and set auto stop command during dwmci initialisation. EMMC read/write is not happening in current implementation due to improper fifo size computation. Hence modified the fifo size computation to resolve EMMC read write issues. Signed-off-by: Amar Acked-by: Jaehoon Chung Acked-by: Simon Glass --- Changes since V1: 1)Created the macros RX_WMARK_SHIFT and RX_WMARK_MASK in header file. Changes since V2: 1)Updation of commit message and resubmition of proper patch set. Changes since V3: 1)Updated to use the macro DWMCI_CTRL_SEND_AS_CCSD instead of the hard coded value (1 << 10). Changes since V4: 1)Updated the function dwmci_send_cmd() to use get_timer() instead of using mdelay(1). Changes since V5: 1)Updated in response to review comments. Changes since V6: No change. drivers/mmc/dw_mmc.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c index 4070d4e..3bd1af6 100644 --- a/drivers/mmc/dw_mmc.c +++ b/drivers/mmc/dw_mmc.c @@ -129,13 +129,13 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, unsigned int timeout = 100000; u32 retry = 10000; u32 mask, ctrl; + ulong start = get_timer(0); while (dwmci_readl(host, DWMCI_STATUS) & DWMCI_BUSY) { - if (timeout == 0) { + if (get_timer(start) > timeout) { printf("Timeout on data busy\n"); return TIMEOUT; } - timeout--; } dwmci_writel(host, DWMCI_RINTSTS, DWMCI_INTMSK_ALL); @@ -143,7 +143,6 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, if (data) dwmci_prepare_data(host, data); - dwmci_writel(host, DWMCI_CMDARG, cmd->cmdarg); if (data) @@ -314,7 +313,7 @@ static void dwmci_set_ios(struct mmc *mmc) static int dwmci_init(struct mmc *mmc) { struct dwmci_host *host = (struct dwmci_host *)mmc->priv; - u32 fifo_size, fifoth_val; + u32 fifo_size, fifoth_val, ier; dwmci_writel(host, DWMCI_PWREN, 1); @@ -323,6 +322,14 @@ static int dwmci_init(struct mmc *mmc) return -1; } + /* Enumerate at 400KHz */ + dwmci_setup_bus(host, mmc->f_min); + + /* Set auto stop command */ + ier = dwmci_readl(host, DWMCI_CTRL); + ier |= DWMCI_CTRL_SEND_AS_CCSD; + dwmci_writel(host, DWMCI_CTRL, ier); + dwmci_writel(host, DWMCI_RINTSTS, 0xFFFFFFFF); dwmci_writel(host, DWMCI_INTMASK, 0); @@ -332,11 +339,13 @@ static int dwmci_init(struct mmc *mmc) dwmci_writel(host, DWMCI_BMOD, 1); fifo_size = dwmci_readl(host, DWMCI_FIFOTH); - if (host->fifoth_val) + fifo_size = ((fifo_size & RX_WMARK_MASK) >> RX_WMARK_SHIFT) + 1; + if (host->fifoth_val) { fifoth_val = host->fifoth_val; - else - fifoth_val = MSIZE(0x2) | RX_WMARK(fifo_size/2 -1) | - TX_WMARK(fifo_size/2); + } else { + fifoth_val = MSIZE(0x2) | RX_WMARK(fifo_size / 2 - 1) | + TX_WMARK(fifo_size / 2); + } dwmci_writel(host, DWMCI_FIFOTH, fifoth_val); dwmci_writel(host, DWMCI_CLKENA, 0);