From patchwork Mon Mar 5 09:11:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 881357 X-Patchwork-Delegate: jh80.chung@samsung.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="AdP7KAW5"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3zvvKD1sp9z9sZB for ; Mon, 5 Mar 2018 20:11:12 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id DF803C21F3C; Mon, 5 Mar 2018 09:11:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=BAD_ENC_HEADER, RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 3AEBAC21EA8; Mon, 5 Mar 2018 09:11:04 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 9F72BC21D74; Mon, 5 Mar 2018 09:11:02 +0000 (UTC) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30073.outbound.protection.outlook.com [40.107.3.73]) by lists.denx.de (Postfix) with ESMTPS id 190F3C21EBD for ; Mon, 5 Mar 2018 09:11:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=S76O+gfaUP9Ugw7oPIap7A3Pi17+zONKB4SMx2rZEPI=; b=AdP7KAW5zH6CsHsiRzKrGElqE/d8l4ZZZm80Z+YMCrbHGMqpSaprac7HygrHnsxuDU0JZq3o/C1RV9DV3B/lwgo9roWfytbYnw2gpmxf4PMQRZVFRS18XPrvisoKXUdYGgv4YfNiT224lp8uHJW7HYVPiR1c0/5zUmijsrDqJII= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; Received: from linux-u7w5.ap.freescale.net.net (92.121.68.129) by DB6PR04MB3224.eurprd04.prod.outlook.com (2603:10a6:6:6::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.548.13; Mon, 5 Mar 2018 09:10:58 +0000 From: Peng Fan To: jh80.chung@samsung.com, sbabic@denx.de Date: Mon, 5 Mar 2018 17:11:41 +0800 Message-Id: <20180305091141.31251-2-peng.fan@nxp.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180305091141.31251-1-peng.fan@nxp.com> References: <20180305091141.31251-1-peng.fan@nxp.com> MIME-Version: 1.0 X-Originating-IP: [92.121.68.129] X-ClientProxiedBy: HK2PR0302CA0022.apcprd03.prod.outlook.com (2603:1096:202::32) To DB6PR04MB3224.eurprd04.prod.outlook.com (2603:10a6:6:6::20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 64f96506-15e5-4c56-ec1e-08d5827903dc X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603307)(7153060)(7193020); SRVR:DB6PR04MB3224; X-Microsoft-Exchange-Diagnostics: 1; DB6PR04MB3224; 3:lww0fPJ48S3L7uPPLJZ9d+JC8WQxgFtJdZ+pXp8PGkhExaBQ6GDgcZgviX+0qo1V5I5yr0Wgs+OO+o1OGjor2NR7Fgm2bkTqVvkVYAtCIpoRyFu77l6ykAB7pN+cdlUk1EduLfelRWNFsf5lNoR71OqmSrhoX+iEMDxuWqeu8sLoIMez4tKoPvmgYu9G35nOXKECNELiE70PDaWgxTPsAwnLn+VXfiJEGbrblzG7kvUZFIrIEzcQDb+4VnqsPGRb; 25:c1ezUIwC69fu0bHysUjGgAGMg7iKM2fDhJiekxlxWnMEVfxm/RhIFBlBSq0fI77Iyi8WOiHYvKqXWRN11T/w2jQoEYqADIruYS230C+MnPK9aaFcCz9esXpy6jAoHJLm9vGn2TB2+BE4AQk5PH+IraqbqrI2C2OLSaJY0RfnBUshjdTCYzZNxgycOP88HsPJ0UMNvMO2PIAPPqOe1MXAm5zMMv3kcMk0Azim6BoVjtbfNpp/zowWzhHp7QeqfF3VldAXfh7/SUj2z0QAbHboIDQO9NFAQOtj6uQniLevjkbDjD0lh95y7pEWWk+oiTUkKapG0g11nXvTSIGCOwlEgg==; 31:B/zc1Tj+4WS1n52iN3597bHvp2jwQCubQcWBDU4rRbsUNMsJ7wHASMfAVgON39t6GDyIN4esR96stzOmAWaMAtp7nJ1iBA1MUCZe1Iz8kpGk3Klyb4oOn8gD4nRLXC/fGV9o7amttY9HFVq//kAVIuDVBD9tvRht3xV/lLAMXs9BTdupCooC61M7TdvuFKrOxr+6+1+r/cD6duMvRM8KqCN147DgrAZcdF48SGVb6wc= X-MS-TrafficTypeDiagnostic: DB6PR04MB3224: X-Microsoft-Exchange-Diagnostics: 1; DB6PR04MB3224; 20:2j8zOkUfI7SaN3nB2s9IhWWKeGDvK1gUpaOnWDdAvbvooCsYB5MEtBjRbAoV+cZII0M7ck2HcSP5xtCAfHl9C0Xsu3YTOAVxgrKAvVSHo/8Cg6yYfpjoIIjkIZuehHK94FX1QImRzkoLdwbY8/kLWRyKdiK8/h28QE6+7fOSv/V30r/33j6dWNd9NTs3VkbYsKUM/31JVRGnVbKphS/FAk5iaOuCdiER2I8FLMF3ZQbJl6+BjzpMILPP4TKfhsMAHa2AVRXL9/JyNOQKtLuQx5GvtvHb3yzHDgariq8LG8nc8Bjg3euhs2hg5h2WNe8NryiVolkNBNGuVSDdk4syjL6DbanvoZV66c/hRIoE9v9V3AopFo2A9BXMwhDlpVmX7i5iVMXUYqKThUUN5szrh47dj4TUQzM2rV62mf3DZR1RL6VLlK+TArdkr55SMKIfdY87fGLbmrUtAG0kio7pAJicd2AnkN061kkD3zmAhKMR12WiwgjqJL7urSNJQEit; 4:bGdJkGanTn8sgfmVn0Y5sljKLmxIEIBbpqzHyY1RN3skFoW6BNzGoIOGfCsiq/Dw67jZfDt0iPT/lkiRvU1E7twE9WUh3at/5K5Rgc/Xyra+rLwY0NN9cccysrbJNC+PpZzc4HBmHVPscGPwGtMF+SIgiGVSOWftFHoVYURIOD4srXbsYFyvb7hol70Z2QY5gsNxjBoKKCiUTX24wXnK3Jd5iMPFhJfNvqwFlEtbF/IkeQtqGvBGh4BO79KtDuz7Zp/JFB3Sl87TVEOLYeV2AzC7IJGcVgQP7rvT2dRpQrKEF3XYzxzvQBPIymffJuKE8IURLZKvNJxTkXhIu7JBrt8AiZPJl27N5to3rlNRR/g= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(7411616537696); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040501)(2401047)(8121501046)(5005006)(93006095)(93001095)(3231220)(944501244)(52105095)(3002001)(10201501046)(6055026)(6041288)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123562045)(20161123558120)(6072148)(201708071742011); SRVR:DB6PR04MB3224; BCL:0; PCL:0; RULEID:; SRVR:DB6PR04MB3224; X-Forefront-PRVS: 06022AA85F X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(376002)(346002)(39860400002)(396003)(39380400002)(199004)(189003)(305945005)(81166006)(8676002)(81156014)(97736004)(50226002)(16586007)(1076002)(3846002)(8936002)(6116002)(7736002)(76176011)(2906002)(105586002)(68736007)(51416003)(53936002)(52116002)(6486002)(6506007)(386003)(25786009)(6512007)(4326008)(5660300001)(478600001)(2950100002)(26005)(6666003)(316002)(47776003)(50466002)(66066001)(86362001)(16526019)(106356001)(186003)(48376002)(59450400001)(36756003); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR04MB3224; H:linux-u7w5.ap.freescale.net.net; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR04MB3224; 23:9NBzRRBfMpisz3VvIGrQzYnFziCFhjutjQOQkgWWw?= 0u00WwcqKoXOgKGJafmQmXlNMYKrsPyQ4ladItlln3SpiZwlksktxJXVYFoD+JEJaOnH/+gQJ9NmgJwLAn2FsJc0wmAQzsVUypGSUpy39bkbHkmPSf0X7QOL4tlT6FSRAJHMdpLnfFXoiLWaG9dwwbKH3F3ksu2SVXSbLJkbr2VTMT6t3xRGous42GmdjFJouNN9Qe2Yf0e0F3fUAbzLSHN6NDCPN0n3jWKnhFtVW4Pm8E0FsqCUx4SSpehB5wdTMbJqIMTaXRjZ0SnrmRXaxCuw2guJywPW3rrSh8j/tfKqwpmRFRggeUZwa6G2JmxHWrWl7GhknQeTPbbi6FF0bIEprac2ucKBgMg931lOOIedEZni5i/3N04iOgGZS/rnAc6tXndBKETc1CxppyRDNB0Sg65rj7y+D2pXkuU4xQP2mclk1ysqp6uZcx/jWpGvLdzM0bUzJKoAwXL79LXym5VI2zOEkZSsWUkJM9eWAqxkIgksvs/u/Tg6vqGUsyUwD9rdYm0OC12m+ZuwKs5U2cFYHwl2Y0zrPIDq+DL1gjUSAl+HsggYIfX9hTpHcXzesX3TKLVVwKiUn4Q0hymqGJIvu0V28CfOzaWsPQ1ISbjLiC7bVQ56mOWdFQGcsg23gQQni6pgmWFi7GwIAw+EV33F6eU+pzHdK9h1T23MnrTf5M1wBYAdtRD/89ioWLlBUxOnatjXsnrTWVuTb6bKdXM4AtDvLP4x5xwS1dQzKZ46TbarcHW/yqWArmQ0t36KAFuDeUKMFOVIP5BO/THh5LiqF5+3Wdw6zGwgcLGnW75+yDH/wB8Lc6GIyjN0CMMpNVAGzXbImwYVECGd7kwX1bB65vsEJ0JWOxxgC/n1WZWgBonaK3Kiu+nlC5jtDoqW5N8zmuO8o3UgpMqMlexy7Mrg+Nc+fNvUbas8sitY6kkXPiBIDyb6t3B31252wEHW5Yn+Z65QJRuVIjqmsa1EPL4hTbVHVzdFaAdLTGPxnsLYEXVGm5PoGmqZiDhlLLydD1CUFh5MwV/KX5TEiN14Sp+UO+IvieCEHUfGMB1NlSiy3bzEaMyz7cZ9tHSMdcRkzU= X-Microsoft-Antispam-Message-Info: VUrNsKXbvmuOylKxm8WsdVdI9Jf0ycHuXpeT+ZMZPUsCkRr/MJa+x8JXGFFaVCSHeVlOCCMCtzCD0iPwex6zt5MGL83sj+9McS5awSXNjN3M552w35wHquWQRk+lsVjdnCP8o1mTslpmspoZFpEtukYUAAbw2h0I1KsFMYVnFbT9sVsnwBh5lqPVGg9CJaPK X-Microsoft-Exchange-Diagnostics: 1; DB6PR04MB3224; 6:WORXffb/STZ+jFhYbr17zmKIzfZ+Hd3PzospFEl6381+qjXMjU4HZFsM2j1Om6XUBDyocd5qZ59InxUbtY52Wp907ykzcw6184OdJ/S4svmqnoDue/YhXqXkRMUnFmZv6s0AlQK7khnm5wPMm2D5NdWWOgjp0qY4fICVSDZRGyFlVX2paFCON6S1OrORvNhojc3YRqDVjolZkMgcklTf0QfQvksOWV8yFh6+nZNYAW43nqpEjQjcY1ZDTUbzNfP6o93BPkavNnZZCQokZ6eXQDFCMpNjLu5BiuDpSksYkLqcm6X2NowrPYzPuCEaIZDlzd+WQENS8Tc3lxi5eewWv7P+b+VsUDmsfkGShReO/6E=; 5:JmZ8LGZDU11CFD6rxW/qvXULUqW0g+4oMeb6oWU8Bub5sxA0NupiXg6TY5qMRv3adyFw1zGXrky5IPhmcujduyr4aGgfGRp+8mdX8H9oV9LxOHAThTaNH97x/KzeN2mlWX9fduHGNLWLKYEgQbrxLbbYaFjhYa6hAOStHJR0Fu8=; 24:8mGb4tnP+wlPhJozXhJzWoIag3c+9cbV5q4WeBDzAa6yMw/+JBhS9GBoYSHVrq/1YxxCnccWBaJY+Okeq3EkZyp7ob2WPZrtwbHd9ZPq6Bg=; 7:JGIp/D060fb0kI9HW9zxCypTe6mFZN29BH7g5XzApGKXRTB2ECgtxvxXJzeRpxq4M4SEwuhtA7ajbgadByhMdLA70U+oU16f6rPZAAjkCN9gB+aFDweHmaPZ4MhwmoVJL8E3D5BIKDZwYhg56921pKCjIfpySxhLN3fQL21GyiYqI+uj9tZAqAR25IvT16EEjdfz3qNjFFlml1zz8f3R1/7VlLIJ27OT3O+T3yMUIdGP1e6pJSphQNFee5e/orMh SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Mar 2018 09:10:58.6662 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 64f96506-15e5-4c56-ec1e-08d5827903dc X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR04MB3224 Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 2/2] mmc: fsl_esdhc: enable HS400 feature X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" The strobe dll code is ported from Linux Kernel: drivers/mmc/host/sdhci-esdhc-imx.c The comments are from the above file, "For HS400 eMMC, there is a data_strobe line. This signal is generated by the device and used for data output and CRC status response output in HS400 mode. The frequency of this signal follows the frequency of CLK generated by host. The host receives the data which is aligned to the edge of data_strobe line. Due to the time delay between CLK line and data_strobe line, if the delay time is larger than one clock cycle, then CLK and data_strobe line will be misaligned, read error shows up. So when the CLK is higher than 100MHz, each clock cycle is short enough, host should configure the delay target. " Signed-off-by: Peng Fan Cc: Jaehoon Chung Cc: Stefano Babic --- drivers/mmc/fsl_esdhc.c | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index 6018f84307..e42bdb6941 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -663,6 +663,7 @@ static int esdhc_change_pinstate(struct udevice *dev) break; case UHS_SDR104: case MMC_HS_200: + case MMC_HS_400: ret = pinctrl_select_state(dev, "state_200mhz"); break; default: @@ -690,6 +691,33 @@ static void esdhc_reset_tuning(struct mmc *mmc) } } +static void esdhc_set_strobe_dll(struct mmc *mmc) +{ + struct fsl_esdhc_priv *priv = dev_get_priv(mmc->dev); + struct fsl_esdhc *regs = priv->esdhc_regs; + u32 v; + + if (priv->clock > ESDHC_STROBE_DLL_CLK_FREQ) { + writel(ESDHC_STROBE_DLL_CTRL_RESET, ®s->strobe_dllctrl); + + /* + * enable strobe dll ctrl and adjust the delay target + * for the uSDHC loopback read clock + */ + v = ESDHC_STROBE_DLL_CTRL_ENABLE | + (priv->strobe_dll_delay_target << + ESDHC_STROBE_DLL_CTRL_SLV_DLY_TARGET_SHIFT); + writel(v, ®s->strobe_dllctrl); + /* wait 1us to make sure strobe dll status register stable */ + mdelay(1); + v = readl(®s->strobe_dllstat); + if (!(v & ESDHC_STROBE_DLL_STS_REF_LOCK)) + pr_warn("HS400 strobe DLL status REF not lock!\n"); + if (!(v & ESDHC_STROBE_DLL_STS_SLV_LOCK)) + pr_warn("HS400 strobe DLL status SLV not lock!\n"); + } +} + static int esdhc_set_timing(struct mmc *mmc) { struct fsl_esdhc_priv *priv = dev_get_priv(mmc->dev); @@ -704,6 +732,11 @@ static int esdhc_set_timing(struct mmc *mmc) case SD_LEGACY: esdhc_reset_tuning(mmc); break; + case MMC_HS_400: + mixctrl |= MIX_CTRL_DDREN | MIX_CTRL_HS400_EN; + writel(mixctrl, ®s->mixctrl); + esdhc_set_strobe_dll(mmc); + break; case MMC_HS: case MMC_HS_52: case MMC_HS_200: @@ -1439,7 +1472,7 @@ static int fsl_esdhc_probe(struct udevice *dev) #endif if (fdt_get_property(fdt, node, "no-1-8-v", NULL)) - priv->caps &= ~(UHS_CAPS | MMC_MODE_HS200); + priv->caps &= ~(UHS_CAPS | MMC_MODE_HS200 | MMC_MODE_HS400); /* * TODO: