From patchwork Fri May 20 10:10:01 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yangbo Lu X-Patchwork-Id: 624443 X-Patchwork-Delegate: yorksun@freescale.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 3rB3pt2WvXz9t6B for ; Fri, 20 May 2016 20:20:22 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id AD573A7532; Fri, 20 May 2016 12:20:19 +0200 (CEST) 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 POPFmKBTBtdb; Fri, 20 May 2016 12:20:19 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 633E0A750E; Fri, 20 May 2016 12:20:17 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id D28234BF90 for ; Fri, 20 May 2016 12:20:12 +0200 (CEST) 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 UsMSelv4X6qH for ; Fri, 20 May 2016 12:20:12 +0200 (CEST) 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 na01-by2-obe.outbound.protection.outlook.com (mail-by2on0080.outbound.protection.outlook.com [207.46.100.80]) by theia.denx.de (Postfix) with ESMTPS id 439744B801 for ; Fri, 20 May 2016 12:20:05 +0200 (CEST) Received: from BN3PR0301CA0039.namprd03.prod.outlook.com (10.160.180.177) by BY2PR03MB476.namprd03.prod.outlook.com (10.141.141.153) with Microsoft SMTP Server (TLS) id 15.1.492.11; Fri, 20 May 2016 10:20:03 +0000 Received: from BL2FFO11FD007.protection.gbl (2a01:111:f400:7c09::144) by BN3PR0301CA0039.outlook.office365.com (2a01:111:e400:4000::49) with Microsoft SMTP Server (TLS) id 15.1.497.12 via Frontend Transport; Fri, 20 May 2016 10:20:02 +0000 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=none action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BL2FFO11FD007.mail.protection.outlook.com (10.173.161.3) with Microsoft SMTP Server (TLS) id 15.1.497.8 via Frontend Transport; Fri, 20 May 2016 10:20:02 +0000 Received: from titan.ap.freescale.net ([10.192.208.233]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id u4KAJqQr030375; Fri, 20 May 2016 03:20:00 -0700 From: Yangbo Lu To: Date: Fri, 20 May 2016 18:10:01 +0800 Message-ID: <1463739001-25905-4-git-send-email-yangbo.lu@nxp.com> X-Mailer: git-send-email 2.1.0.27.g96db324 In-Reply-To: <1463739001-25905-1-git-send-email-yangbo.lu@nxp.com> References: <1463739001-25905-1-git-send-email-yangbo.lu@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131082132021999009; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.168.50; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(979002)(6009001)(2980300002)(1110001)(1109001)(339900001)(50944005)(199003)(189002)(9170700003)(19580405001)(11100500001)(229853001)(2351001)(19580395003)(48376002)(76176999)(86362001)(105606002)(106466001)(85426001)(8666003)(8676002)(50226002)(81166006)(2906002)(4326007)(586003)(5008740100001)(87936001)(1220700001)(33646002)(92566002)(8936002)(110136002)(189998001)(50466002)(104016004)(36756003)(50986999)(2950100001)(575784001)(6806005)(5003940100001)(47776003)(77096005)(7059030)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR03MB476; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; A:1; MX:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD007; 1:TICwT5lU5J3GpvkLAM7SkX3/hgIDR8no5BIhs8jWSSgFaKIV3iOTNpAE+0FUM1v3Pkxocb6t6k39Ia9EogQQ5JJ3mmv8e+FvOn9lWq7A31oFq86Lh6De63PySjaRqOwpQk/z64uzsi+jXZ2nklYkrFvfGMuR13SBdCWj0iK1rFp78FrZdw0jrUedRfgNbf/BpSHotkomtJdciqhJI1DpDBk8oXKV6FCPV2A8qUTlI0WzWHGzqOyr8Yg1RRfdweXd8JTZVLc32l7qS/M9ixCuJqqCc/JRasP3X+3h53IgPTeFvoAJWNsAjx/L7kZuQxGgla3Y91hbm54NueIVHH9VcEpwGer+k0iPuwGWBMC/U+q8l5rf2BBVqoNXw1GSPkcv7x+hNCUNYvZixpZicarWV/pU9wNcblg9QLgjHqDVQuggqqSrbsKOyXcTWTI0N+/ddZJqwF1CbdzJtl7GvT0CyzF/fjMO/SpUq4JcBJ8VL2acz4uI6UJ3SWNtCTfOnCA9N5nh15nQo0Rbeq3On05Yh84rg7oGBMo68U5+oiCij0Tggyfb4F85EmRCRknKY8gjTZvhI3FdGelbsgWwvFpalx2e0ShCoiqi/jk7VsjGvguSLtKBfNxoUkxzfEfy7k8L53Gxo6bxuK99VmA9gecJj+WmaGbk2cx+3sroaje8gO8= MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: baf8897f-28db-4e8c-1440-08d380984e07 X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB476; 2:KnGKdWpEdLThK1bmPozQNedWgUUQa0JPBg611UsbX7VJjhAyW8CJtoYs5wXaQAmsVxbYHf9ZgW0K3MnaNB7xqh5GbIuRGHXby8Tu4hVQUEtUwIwth82duvQFfv44h9fzhtehRlFh1engPavsW/TV3m7evjBlr30O5NDrN7VNkquo7MofmhO5GOWjKap2sUGN; 3:yCqdvnCU0xuv7pKwmFiheMvFm6oxPSZpgHEYCy37PW+CYDjvrUiAskx/vsaMHdseXDTunydlwVscvoCFC12pMaKYweZ32YIaUNJJ1D1hPD7SvPfgzZAms40MPyynwjktEV1Qaw0qLdeoALnpMScwe9r9P+0e9XhqXRR6b2PYmKm4Tq5gna4IH7fT1ofYRav/+RSCDgKGgtkomgkWt24s+FAGGSxebFgE8vgdg4Gq7eg= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY2PR03MB476; X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB476; 25:jM6P5V5aaV+c3E4iVyGiifxiLHepRhTdR8aFEuOi/f3fIDqg1DXnch+5snF3Y/CQVE9MNn/DAiS6TtwxynJj8LvP1+BL6XTRwZY0Cn+giYZjpQgGq65AgFKhxPWkeVmjVaS1QUAaAnXK/am+T8xp7TcJmNFOsPM5JztbPR4CtXL03kp2/1Qa5q1d4TUdcUWY2q3ZpGKHynkRencuz1DJhvgMm64X75Rn4Q8gALkyP9HvzNrI01IEnib8XidPCMWo2S6s54or4dJ4HZ9ah2iqw1KlfP6thVb/hp8ljP1sOcaimRX/1Zk+/gbBWUoSFoltVmXw+jgksoDAYcMLt5H7MQ4a0cY0UODqA5wRJe2Wc+cu7vKxvMHIXjXArLi9OsYvmP0zOl2CbOS/E8h2p/pe/LtaYo+4DGU4klIYB7YrqcSyrFHD4i8ChH76qE3+neWUHuk8f7zv2PNfsra7p8Ka52U9e+vf23LILPODmf0/e3jolaRJ06VP+KxM1iHW0azz16hWFROSqrqNtrsx0xb+QXOryDuy/fVaUw0AkZ7msRnD2guewPLjbWn39y8nU4WPk2O90srCIzU7/JcPuc37WKjElADbLUrZH1aVDEuZHUl4XGy0hvqgLn/z39C0M2yFhNbkALYhW3rpSr91dTlxSCH1jwVgJu5Z23H2g97C3+/d3dQMmmnAF4Y7JpltyhwShkcI1RLG0LBAnInFr2IcCrNUxJJjxJh9/6ze4Yc1b00ueSpen6FWisUZWMwg85eD X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(13017025)(5005006)(8121501046)(13024025)(13023025)(13015025)(13018025)(10201501046)(3002001)(6055026); SRVR:BY2PR03MB476; BCL:0; PCL:0; RULEID:(400006); SRVR:BY2PR03MB476; X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB476; 4:t6koeQ+k6N0i1CDFexZQ3KhYOku75+i4nR8BmTgU5mYyinkBzI3dATNZ/Sz3PxbrdwiN/FdnKE7AEqcR0SuDpViAbFm+0pxuNjtao6sey0maQ/mnI4WE6C3NmIjRuD5s2hfquZviLsBymUhsZWl8FslW9+MvIdKEeTzhALcCz4jaSSSrpnD3yMYfLq53MxYKHonpP3XFxRbDiJxlfQCV/cqvNa0w+N3h6zFv/eomEFXOVzOKboRrcZHErVifGPkkB/cGRfgeVrfqAUTSuemgP8UyOoyjmypJ00GtVnObLONeQbs+gsTNQl3v8gztcWdN5hekGi13aPBV77jkB/G0r3UVov6JLPKoEPsMQsQ8/b9aavjMfYTCCAE5j+zK4gYSZiB7yJVc7Xov442Cb5+KF6maECryURYxCZCZwxYlCD5vNujpIuCd+iZIP6mjzIKFM7sm/2v+D2DOIdXWb5ST2FzAzTHk4Dmzil+TzkOhG5A= X-Forefront-PRVS: 09480768F8 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR03MB476; 23:M1rK9ALcvU50yC9YBjnlNBdYeuHbSPbyjKmp6q5Kyq?= =?us-ascii?Q?9eSGSa5DLkE51Frr/7keVe0nyU6GboMcaKHfmOtDmg6JHvxmq9MKstQwbuBj?= =?us-ascii?Q?sCL8T9RIXty1aZ2t9IFPBV7ospeivTW+KWnTTLYl4EK8QGuY6Cm6ZnnQ0G59?= =?us-ascii?Q?qc+5LtXOaMLR2tv8S/qozaJC2oH6M81VJFCzh3B4/Js2eFomPcfsGvbZ/5e9?= =?us-ascii?Q?1EckpZCAM6CF2PRZM3LnF0MBTgp0xh1NUh2zib08/33D4mZTOH5uvgZtawvB?= =?us-ascii?Q?2gegWSR4BKnwLka5UfztN/KPv291oHkqNRgCpqC5Bnf50dxnrXx9JEZO+43I?= =?us-ascii?Q?FV1tBt5rYSx/49fgeziWnuRg8GJLi750veK9y9jmXTqw6YzJAIXVpFq4JUUL?= =?us-ascii?Q?gYtBmP4/x86Atmc/zgqnV2C8EqK/PqewEbAaSV0VXxH16KQK3dJEp059Xsch?= =?us-ascii?Q?AsSv3lc5Lr5YPwGOz0NZLTUSX3K5Fyr+FzF4OsULYSe2m0FdMDh5yLW7V0DG?= =?us-ascii?Q?g57GfPBeQnEpPR6Zqnt2YMA9ZlmSDODN+86ZFC4Hkbv5wq17W9mZBuILLWrM?= =?us-ascii?Q?avbjuLkT3D1QZnFcPEox/2DmPjdpPCJpP8i1QCq7mGUX/eeliA3YXQ/F3uoi?= =?us-ascii?Q?TL9C5yw98NB6bXrsPcES+OzeOC/sY2YUJFBzF2x/osSNdrTUFyuTg82un74v?= =?us-ascii?Q?pmXYkNaltmIvtqIiUNEvpwOkRXLi3/q86MZ+gw+y0FAOOdBTZP1ogH8aYCtL?= =?us-ascii?Q?IlqIYG5yQh9Za2WcK5Wq2ZcwgB5tXAYxbNBFZJmzjGzPuDMGErmR+x05pp/F?= =?us-ascii?Q?J4vdWpYay3uJcL5pvzEhj3xxzb2uF4oJrxSBwKxVJNL1hLOodEXgfV/Qiky4?= =?us-ascii?Q?XXb5jRrJpE9EzD43xZbGdsDLQNhhYDwfbd8x9T4M6eiszlvx46xnEiWpu6HS?= =?us-ascii?Q?9/dkLFJ3yfZgJ80ieWXX/FNgHrUSO5foxxFVR59wVrwv3muB5pjBCThJJTkq?= =?us-ascii?Q?Ga2UU5QT6q3sAQUO+h8i0fiELVFl+XYGbUZnFyCE0FGj79Xm4IqKXaqEX95D?= =?us-ascii?Q?nvw26AV7vC4xmo6HbY8lCv4yuE70+yiliI8bIK8f5FODQ5h7CmKuIQrNqFer?= =?us-ascii?Q?vX//A0t1Snfq5C3c/6GlbDCbb533JNONJ7FduE3JDBc+QNmmXL4t876G7XBm?= =?us-ascii?Q?GAlafO0w/mdBAyIh2v6bVozVeGe0wYVBDf4Kfb+iHg/SIaF7bslXzexsGBlf?= =?us-ascii?Q?95gB4eWKZK/O+ZAU6afPrn5m3SOnAM5c5zVH2F?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB476; 5:oi1QQFSOyMJAsM5/+anl3UMcKad9fBsMaD1FvqyhDlf993VzjImBX+UAkgzWA60EM8xvlqGTXh5ylu+kfXhjeiN8Dlc0d48zJAXWHgrxP9ij9NBrMmqtXFsIFiBJXSbP9skXhsNvPz1YXBlCP3NpQM+ouedgQIpjOLvblBrPmCA=; 24:bfuPsCLmXhl0vYuc9rwjz3kxNAKSbvUDvI2vwwpOZAdd7yvko+K9BiZthJ1zbHgmn3hLP14BeZxQpMeF00w/Esv4a8XGVIPoHu7Ccobcn28=; 7:1poZXopIYF/1efx/mlrRfohscGHMNHPYBFOVo+6mSgFEJnMNIipc+WZAuIFwi7qUfPRrgVvDv0JKrnuIgkKKg4xbEdAzN0uc0xu/E/XldevWhyFfhigXLkaAJ5Z1l4dhxLP0IW1O7Fit1cXUSRracQ3DHVXk+T+722SIMN/l2fHanX0oW3Lj1QM2nM9KiwR0 SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 May 2016 10:20:02.0126 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR03MB476 Subject: [U-Boot] [PATCH 4/4] mmc: add workaround for eSDHC erratum A009620 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 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" Erratum Title: Data timeout error not getting set in case of command with busy response (R1b) as well as for busy period after last write block transfer. Description: In the event that a busy timeout occurs for a command with a busy response (e.g. R1b response) as well as busy period after the last write block, the eSDHC does not set the IRQSTAT[DTOE] bit or the IRQSTAT[TC]. Therefore, the current command transfer is never completed. Workaround: Workaround for CMD with busy: Don't set the XFRTYP[RSP]=2'b11 for commands with busy response and poll the busy status of the card from the PRSSTAT[DLSL] Workaround for busy period after last write block: 1. After the command completion interrupt (IRQSTAT[CC]), wait for de-assertion of PRSTAT[WTA]. 2. Once PRSTAT[WTA] is de-asserted, start the software timer and poll the busy signal (DAT0) using PRSTAT[DLSL[0]]. 3. Wait for DAT0 signal to go high (which indicate transfer complete) or software timer expiry (which indicate data timeout error). 4. Issue soft reset for data (SYSCTL[RSTD]). 5. In case of data timeout error (detected in step 3) perform the error recovery. The workaround for CMD with busy has already been applied in eSDHC driver. This patch is to add workaround for the 2nd issue, and the fixup platforms include PowerPC(P1010/P2020/P5020/P5040/T1024/T1040/ T2080/T4240) and ARM(LS1021A/LS1043A/LS2080A). Signed-off-by: Yangbo Lu --- arch/powerpc/include/asm/config_mpc85xx.h | 8 ++++++++ drivers/mmc/fsl_esdhc.c | 26 ++++++++++++++++++++++++++ include/configs/ls1021aqds.h | 1 + include/configs/ls1021atwr.h | 1 + include/configs/ls1043a_common.h | 1 + include/configs/ls2080a_simu.h | 1 + include/configs/ls2080aqds.h | 1 + include/configs/ls2080ardb.h | 1 + include/fsl_esdhc.h | 1 + 9 files changed, 41 insertions(+) diff --git a/arch/powerpc/include/asm/config_mpc85xx.h b/arch/powerpc/include/asm/config_mpc85xx.h index eccc146..197ee42 100644 --- a/arch/powerpc/include/asm/config_mpc85xx.h +++ b/arch/powerpc/include/asm/config_mpc85xx.h @@ -148,6 +148,7 @@ #define CONFIG_TSECV2 #define CONFIG_SYS_FSL_SEC_COMPAT 4 #define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A009620 #define CONFIG_NUM_DDR_CONTROLLERS 1 #define CONFIG_USB_MAX_CONTROLLER_COUNT 1 #define CONFIG_SYS_FSL_IFC_BANK_COUNT 4 @@ -369,6 +370,7 @@ #define CONFIG_SYS_CCSRBAR_DEFAULT 0xff700000 #define CONFIG_SYS_FSL_ERRATUM_ESDHC111 #define CONFIG_SYS_FSL_ERRATUM_ESDHC_A001 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A009620 #define CONFIG_SYS_FSL_SRIO_MAX_PORTS 2 #define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9 #define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5 @@ -530,6 +532,7 @@ #define CONFIG_SYS_FSL_USB2_PHY_ENABLE #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY #define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A009620 #define CONFIG_SYS_FSL_ERRATUM_USB14 #define CONFIG_SYS_FSL_ERRATUM_DDR_A003 #define CONFIG_SYS_FSL_ERRATUM_DDR_A003474 @@ -568,6 +571,7 @@ #define CONFIG_SYS_FSL_USB2_PHY_ENABLE #define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY #define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A009620 #define CONFIG_SYS_FSL_ERRATUM_USB14 #define CONFIG_SYS_FSL_ERRATUM_DDR_A003 #define CONFIG_SYS_FSL_ERRATUM_DDR_A003474 @@ -686,6 +690,7 @@ #define CONFIG_SYS_FSL_ERRATUM_A007186 #define CONFIG_SYS_FSL_ERRATUM_A006593 #define CONFIG_SYS_FSL_ERRATUM_A007798 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A009620 #define CONFIG_SYS_CCSRBAR_DEFAULT 0xfe000000 #define CONFIG_SYS_FSL_SFP_VER_3_0 #define CONFIG_SYS_FSL_PCI_VER_3_X @@ -802,6 +807,7 @@ defined(CONFIG_PPC_T1020) || defined(CONFIG_PPC_T1022) #define CONFIG_SYS_FSL_ERRATUM_A006261 #define CONFIG_SYS_CCSRBAR_DEFAULT 0xfe000000 #define CONFIG_SYS_FSL_ERRATUM_ESDHC111 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A009620 #define ESDHCI_QUIRK_BROKEN_TIMEOUT_VALUE #define QE_MURAM_SIZE 0x6000UL #define MAX_QE_RISC 1 @@ -823,6 +829,7 @@ defined(CONFIG_PPC_T1014) || defined(CONFIG_PPC_T1013) #endif #if defined(CONFIG_PPC_T1024) || defined(CONFIG_PPC_T1023) #define CONFIG_MAX_CPUS 2 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A009620 #elif defined(CONFIG_PPC_T1014) || defined(CONFIG_PPC_T1013) #define CONFIG_MAX_CPUS 1 #endif @@ -882,6 +889,7 @@ defined(CONFIG_PPC_T1014) || defined(CONFIG_PPC_T1013) #define CONFIG_SYS_FSL_SRIO_MAX_PORTS 2 #define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9 #define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5 +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A009620 #elif defined(CONFIG_PPC_T2081) #define CONFIG_SYS_NUM_FM1_DTSEC 6 #define CONFIG_SYS_NUM_FM1_10GEC 2 diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index 744037e..fba87d2 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -470,6 +470,32 @@ esdhc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data) #ifdef CONFIG_SYS_FSL_ESDHC_USE_PIO esdhc_pio_read_write(mmc, data); #else +#ifdef CONFIG_SYS_FSL_ERRATUM_ESDHC_A009620 + int timeout = 5000; + if (data->flags & MMC_DATA_WRITE) { + while (esdhc_read32(®s->prsstat) & PRSSTAT_WTA) + ; + + /* Poll on DATA0 line for 500 ms */ + while (!(esdhc_read32(®s->prsstat) & PRSSTAT_DAT0)) { + udelay(100); + timeout--; + if (timeout <= 0) { + err = TIMEOUT; + break; + } + } + if (!err) { + esdhc_write32(®s->sysctl, + esdhc_read32(®s->sysctl) | + SYSCTL_RSTD); + while ((esdhc_read32(®s->sysctl) & + SYSCTL_RSTD)) + ; + } + goto out; + } +#endif do { irqstat = esdhc_read32(®s->irqstat); diff --git a/include/configs/ls1021aqds.h b/include/configs/ls1021aqds.h index 62cf6e5..a656976 100644 --- a/include/configs/ls1021aqds.h +++ b/include/configs/ls1021aqds.h @@ -415,6 +415,7 @@ unsigned long get_board_ddr_clk(void); #define CONFIG_MMC #define CONFIG_CMD_MMC #define CONFIG_FSL_ESDHC +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A009620 #define CONFIG_GENERIC_MMC #define CONFIG_CMD_FAT diff --git a/include/configs/ls1021atwr.h b/include/configs/ls1021atwr.h index b2e431a..912af90 100644 --- a/include/configs/ls1021atwr.h +++ b/include/configs/ls1021atwr.h @@ -303,6 +303,7 @@ #define CONFIG_MMC #define CONFIG_CMD_MMC #define CONFIG_FSL_ESDHC +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A009620 #define CONFIG_GENERIC_MMC #define CONFIG_CMD_FAT diff --git a/include/configs/ls1043a_common.h b/include/configs/ls1043a_common.h index e900c50..e1e1518 100644 --- a/include/configs/ls1043a_common.h +++ b/include/configs/ls1043a_common.h @@ -186,6 +186,7 @@ #define CONFIG_CMD_MMC #define CONFIG_CMD_FAT #define CONFIG_FSL_ESDHC +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A009620 #define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 #define CONFIG_GENERIC_MMC #define CONFIG_DOS_PARTITION diff --git a/include/configs/ls2080a_simu.h b/include/configs/ls2080a_simu.h index 0dbe95f..a431b66 100644 --- a/include/configs/ls2080a_simu.h +++ b/include/configs/ls2080a_simu.h @@ -134,6 +134,7 @@ #ifdef CONFIG_MMC #define CONFIG_CMD_MMC #define CONFIG_FSL_ESDHC +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A009620 #define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 #define CONFIG_GENERIC_MMC #define CONFIG_CMD_FAT diff --git a/include/configs/ls2080aqds.h b/include/configs/ls2080aqds.h index 91fad0a..5c38bdf 100644 --- a/include/configs/ls2080aqds.h +++ b/include/configs/ls2080aqds.h @@ -328,6 +328,7 @@ unsigned long get_board_ddr_clk(void); #ifdef CONFIG_MMC #define CONFIG_CMD_MMC #define CONFIG_FSL_ESDHC +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A009620 #define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 #define CONFIG_GENERIC_MMC #define CONFIG_CMD_FAT diff --git a/include/configs/ls2080ardb.h b/include/configs/ls2080ardb.h index 15a1172..518aa17 100644 --- a/include/configs/ls2080ardb.h +++ b/include/configs/ls2080ardb.h @@ -310,6 +310,7 @@ unsigned long get_board_sys_clk(void); #ifdef CONFIG_MMC #define CONFIG_CMD_MMC #define CONFIG_FSL_ESDHC +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A009620 #define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33 #define CONFIG_GENERIC_MMC #define CONFIG_CMD_FAT diff --git a/include/fsl_esdhc.h b/include/fsl_esdhc.h index fa760a5..2d049b7 100644 --- a/include/fsl_esdhc.h +++ b/include/fsl_esdhc.h @@ -91,6 +91,7 @@ #define PRSSTAT_CINS (0x00010000) #define PRSSTAT_BREN (0x00000800) #define PRSSTAT_BWEN (0x00000400) +#define PRSSTAT_WTA (0x00000100) #define PRSSTAT_SDSTB (0X00000008) #define PRSSTAT_DLA (0x00000004) #define PRSSTAT_CICHB (0x00000002)