Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp800987pxb; Tue, 3 Nov 2020 12:55:41 -0800 (PST) X-Google-Smtp-Source: ABdhPJy2uEggRyMgfgx/f477dLOAk9ACIw7QmY5u12DZLj0W25c+cSNUi9ji4zp86w0R3m+a7kZC X-Received: by 2002:a17:906:5793:: with SMTP id k19mr22485863ejq.410.1604436941227; Tue, 03 Nov 2020 12:55:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604436941; cv=none; d=google.com; s=arc-20160816; b=v89CnCI2Kbd2jp3PzwA+0xF21GOENtgbHhpR2Fkampd022Erd3f3oeOKSelJwR0y8U 40Krnml1RqBat8d92JZPwzxK/G3AwMmK9wJLyh7iYIilQ1eqBsPpgSZyEVNUxtCxPoTF 9De+VqNQk/4rJenBPVq6swBOjZOUXwt2/mIwWoehbu0EDtCoCGTrkh2vTr1hG2pz45Y/ bF7CwwJGFSnRwFdGrY+uSL7OcTrCCncABCx+9ZJ4wdZjXAjRxkAYrM5Fx+rmNsNw2XVr d6aBTSYdYRNwl94Y8y47ZwLUPCRxaouub6liZl9Xqi+We5A8BJFrjcwGFdorgjWedOLA fD9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=DSZg0WfkEhxlOjOeTiJv8meuRzdSuLC10JfmuCfMmnY=; b=oKZlTgpg0wjzA+zQWyPK5pmyCy12TXqPToqWQOe5W6GXEb0uE6g0aRNCeOtmHvhuVM lDHpSsESFSApdwikyfolW2t7/kdz3Eis5Ufb8shUIsJAYPuhiF/vEVjSf5JLTH+QEZu0 vfOLJiV+LRklvYrAMBwg0O2WmJvs+HRz3iS80TgmistYG1QsCJyN3avylBHvvwJXjQCY OR0WvIGah3gK5KVo9awe9Jyzsj9f9BP2LUKVHBF9nRDAgOhl3L6xRjBe5eMzseK78b/W 5BzDx04AwddajTzzQFEfFC300m0ZuNQlS/yGhCCq/nDxuRGtuDR1lhe4dMgEg4GH5yRL lxqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=z+ldPxR3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p10si14528ejy.70.2020.11.03.12.55.18; Tue, 03 Nov 2020 12:55:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=z+ldPxR3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732127AbgKCUwl (ORCPT + 99 others); Tue, 3 Nov 2020 15:52:41 -0500 Received: from mail.kernel.org ([198.145.29.99]:49340 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731696AbgKCUwf (ORCPT ); Tue, 3 Nov 2020 15:52:35 -0500 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 23CEC2071E; Tue, 3 Nov 2020 20:52:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1604436754; bh=0rj+ug9R9MpMJQzwapoymSxbfpj6sNKwYChpyIoCe0U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=z+ldPxR3tPGmIIjuUzeuURyfYuzoVrLl4BhH+xISLxE+SMp8NsVy7QJeVCU9m6+5h EIeiwVyCrYsn1VP+gJgH45TQbHDijXK0Qh6f/X0OhXX03vlMrP268Jfe6zgwYmPi0p w/rYd7Bf6acX5jX6uK5KiKBNiZDyLpELCknYQUh8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Yangbo Lu , Adrian Hunter , Ulf Hansson Subject: [PATCH 5.9 350/391] mmc: sdhci-of-esdhc: make sure delay chain locked for HS400 Date: Tue, 3 Nov 2020 21:36:41 +0100 Message-Id: <20201103203410.755470067@linuxfoundation.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201103203348.153465465@linuxfoundation.org> References: <20201103203348.153465465@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Yangbo Lu commit 011fde48394b7dc8dfd6660d1013b26a00157b80 upstream. For eMMC HS400 mode initialization, the DLL reset is a required step if DLL is enabled to use previously, like in bootloader. This step has not been documented in reference manual, but the RM will be fixed sooner or later. This patch is to add the step of DLL reset, and make sure delay chain locked for HS400. Signed-off-by: Yangbo Lu Acked-by: Adrian Hunter Link: https://lore.kernel.org/r/20201020081116.20918-1-yangbo.lu@nxp.com Fixes: 54e08d9a95ca ("mmc: sdhci-of-esdhc: add hs400 mode support") Cc: stable@vger.kernel.org Signed-off-by: Ulf Hansson Signed-off-by: Greg Kroah-Hartman --- drivers/mmc/host/sdhci-esdhc.h | 2 ++ drivers/mmc/host/sdhci-of-esdhc.c | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) --- a/drivers/mmc/host/sdhci-esdhc.h +++ b/drivers/mmc/host/sdhci-esdhc.h @@ -5,6 +5,7 @@ * Copyright (c) 2007 Freescale Semiconductor, Inc. * Copyright (c) 2009 MontaVista Software, Inc. * Copyright (c) 2010 Pengutronix e.K. + * Copyright 2020 NXP * Author: Wolfram Sang */ @@ -88,6 +89,7 @@ /* DLL Config 0 Register */ #define ESDHC_DLLCFG0 0x160 #define ESDHC_DLL_ENABLE 0x80000000 +#define ESDHC_DLL_RESET 0x40000000 #define ESDHC_DLL_FREQ_SEL 0x08000000 /* DLL Config 1 Register */ --- a/drivers/mmc/host/sdhci-of-esdhc.c +++ b/drivers/mmc/host/sdhci-of-esdhc.c @@ -4,6 +4,7 @@ * * Copyright (c) 2007, 2010, 2012 Freescale Semiconductor, Inc. * Copyright (c) 2009 MontaVista Software, Inc. + * Copyright 2020 NXP * * Authors: Xiaobo Xie * Anton Vorontsov @@ -19,6 +20,7 @@ #include #include #include +#include #include #include #include "sdhci-pltfm.h" @@ -743,6 +745,21 @@ static void esdhc_of_set_clock(struct sd if (host->mmc->actual_clock == MMC_HS200_MAX_DTR) temp |= ESDHC_DLL_FREQ_SEL; sdhci_writel(host, temp, ESDHC_DLLCFG0); + + temp |= ESDHC_DLL_RESET; + sdhci_writel(host, temp, ESDHC_DLLCFG0); + udelay(1); + temp &= ~ESDHC_DLL_RESET; + sdhci_writel(host, temp, ESDHC_DLLCFG0); + + /* Wait max 20 ms */ + if (read_poll_timeout(sdhci_readl, temp, + temp & ESDHC_DLL_STS_SLV_LOCK, + 10, 20000, false, + host, ESDHC_DLLSTAT0)) + pr_err("%s: timeout for delay chain lock.\n", + mmc_hostname(host->mmc)); + temp = sdhci_readl(host, ESDHC_TBCTL); sdhci_writel(host, temp | ESDHC_HS400_WNDW_ADJUST, ESDHC_TBCTL);