From patchwork Tue Aug 22 15:15:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bin Meng X-Patchwork-Id: 804531 X-Patchwork-Delegate: trini@ti.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; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="vfQ9LcRX"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3xcDjP1t1Rz9sNd for ; Wed, 23 Aug 2017 01:18:49 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 03495C21F01; Tue, 22 Aug 2017 15:13:18 +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=-0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, 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 22D0DC21F21; Tue, 22 Aug 2017 15:11:44 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id DF1D3C21F06; Tue, 22 Aug 2017 15:11:10 +0000 (UTC) Received: from mail-it0-f65.google.com (mail-it0-f65.google.com [209.85.214.65]) by lists.denx.de (Postfix) with ESMTPS id 0104CC21E99 for ; Tue, 22 Aug 2017 15:11:07 +0000 (UTC) Received: by mail-it0-f65.google.com with SMTP id w204so3940331ita.5 for ; Tue, 22 Aug 2017 08:11:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=ERfb/Gpo50NRxncT4yARaOnU/p1US9KsiO48JDMumLI=; b=vfQ9LcRXhx/cTv67zPPWgU90PW5HbWS8s7DXk+/A2jAmqss99QZ8SbWZSLxR3zHafA LT/woKOlykgjCypFIjt2kFz6UGkxxnPAL0wod3F2BJsuybKAfK/qD1CMwjKhucmAYW1+ oj9NJfOOE/Lke/klz2klHAzj5ioFI0MTdnyc4eK+I3atfa7tKFXTwK5UqNwheYyep53L EtLpP+pdu2HHqbrPGby9kz40dqzjhGkkPrgOyIMVuiEDKSxc9jvJF7MSxWR4+q/34ol0 ZXCu2a6/JI+++bNET1O7dincH6B9dn5KRc1BrqdNVd2kt7cKF15UdW8oU5mzohp6gqUA M4cA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=ERfb/Gpo50NRxncT4yARaOnU/p1US9KsiO48JDMumLI=; b=ATd3Ws67rPPJvxToHP7cq6z9vHYDu4ouF4ngFaByucvSRM9hovt8ICbUNaCnwfen0C EqiPwtiFZne5+HO7Pew5Xo1iLomd4Jm+FnliyKlRLcANMJj9+y2+7IV1CRxK6G3a+fcS epxf0+VmP5TsVtnpXpA7uZfZkA+gBsfQIvgMfPJMuPyKZnrzhz/f8eB96iGuaIXU7J1L LB5VQXQHrTTEnSVuKg1xPGMg0srhgNhoapRwXVIuVLaqeXqqCf/6e6aVM8RLHgQkgHOV WxGbV/VxHnWAwpOC+I0wwrKfZ2FCIZnhdEpeaMX2KGka7H1u8WZ/VqYFnAm+SA2Juxha tUbQ== X-Gm-Message-State: AHYfb5giaOd/RzeH4x8C3LlhU1bOFh5a+waSDPDwQXnTvlm2Ig/WxsfQ GBkK8jhkA7nhbL8K X-Received: by 10.36.208.132 with SMTP id m126mr180763itg.41.1503414665971; Tue, 22 Aug 2017 08:11:05 -0700 (PDT) Received: from ala-d2121-lx1.wrs.com (unknown-156-139.windriver.com. [147.11.156.139]) by smtp.gmail.com with ESMTPSA id a189sm5182572itd.5.2017.08.22.08.11.04 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 22 Aug 2017 08:11:05 -0700 (PDT) From: Bin Meng To: Tom Rini , U-Boot Mailing List Date: Tue, 22 Aug 2017 08:15:11 -0700 Message-Id: <1503414919-30820-7-git-send-email-bmeng.cn@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1503414919-30820-1-git-send-email-bmeng.cn@gmail.com> References: <1503414919-30820-1-git-send-email-bmeng.cn@gmail.com> Subject: [U-Boot] [PATCH 06/14] nvme: Respect timeout when en/disabling the controller 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: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" So far the driver unconditionally delays 10ms when en/disabling the controller and still return 0 if 10ms times out. In fact, spec defines a timeout value in the CAP register that is the worst case time that host software shall wait for the controller to become ready. Signed-off-by: Bin Meng --- drivers/nvme/nvme.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/nvme/nvme.c b/drivers/nvme/nvme.c index d92273e..8867977 100644 --- a/drivers/nvme/nvme.c +++ b/drivers/nvme/nvme.c @@ -47,11 +47,19 @@ struct nvme_queue { static int nvme_wait_ready(struct nvme_dev *dev, bool enabled) { u32 bit = enabled ? NVME_CSTS_RDY : 0; + int timeout; + ulong start; - while ((readl(&dev->bar->csts) & NVME_CSTS_RDY) != bit) - udelay(10000); + /* Timeout field in the CAP register is in 500 millisecond units */ + timeout = NVME_CAP_TIMEOUT(dev->cap) * 500; - return 0; + start = get_timer(0); + while (get_timer(start) < timeout) { + if ((readl(&dev->bar->csts) & NVME_CSTS_RDY) == bit) + return 0; + } + + return -ETIME; } static int nvme_setup_prps(struct nvme_dev *dev, u64 *prp2,