From patchwork Tue Jun 7 13:38:39 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Lee Jones X-Patchwork-Id: 69513 Delivered-To: patch@linaro.org Received: by 10.140.106.246 with SMTP id e109csp1983857qgf; Tue, 7 Jun 2016 06:38:12 -0700 (PDT) X-Received: by 10.98.28.148 with SMTP id c142mr32325482pfc.102.1465306692759; Tue, 07 Jun 2016 06:38:12 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id qz3si33279353pab.82.2016.06.07.06.38.12; Tue, 07 Jun 2016 06:38:12 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-mmc-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org; spf=pass (google.com: best guess record for domain of linux-mmc-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-mmc-owner@vger.kernel.org; dmarc=fail (p=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932728AbcFGNiK (ORCPT + 3 others); Tue, 7 Jun 2016 09:38:10 -0400 Received: from mail-wm0-f49.google.com ([74.125.82.49]:35325 "EHLO mail-wm0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932607AbcFGNiI (ORCPT ); Tue, 7 Jun 2016 09:38:08 -0400 Received: by mail-wm0-f49.google.com with SMTP id v199so20063179wmv.0 for ; Tue, 07 Jun 2016 06:38:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=McTNMh/s6zJ5yS/K7alHiTnXKY7E+WvySsZViYHmXhU=; b=IQddBOOTe8m28QdtmKCvr3b+7jrRMeQKs/d5/Q6G2J7Rvuf3XX6H+E8pJe3xJX8f11 TPXwu32OBn74wJhLWTEupANH7DjzqAJn0g9FeXc0KyOryH5JxA2Q8vrW67Muf1Cs3lwU SJmzcAajY9MQFfY//wWJvzeSEGRHqTUA3a68w= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=McTNMh/s6zJ5yS/K7alHiTnXKY7E+WvySsZViYHmXhU=; b=aXqxA/bz2/zMXJQVHy6DxSdBoUFmgIA0/S+ZDKCN86rIRxFunD/dr26v+ylRVuDi0C O5+iNXe6b6Y2Oo90dlYtu2iVbbrue2P+JVuekRJl176YavA5zz/s9DepMuuHIy/TD4yO yen084tU/+Z82FpsbnOtZEgj67fhvYSsz0czyF8lbo/xQOgmZdIZlyvD3DdPGgoJlx5S cWCxLXfaJmkZbuhT/hdfYA4zYT9oN/ojQH+6tvh0aZeAudKm2PWay8Y1DGUing2p2ICg RmL7XVyzc/gTtwqjMlRyJ58QA9W6VlJlbVHwFXTo4GnCB4BtD3jJha2eg0GvZLXbUM8a /BDg== X-Gm-Message-State: ALyK8tIq5QdkAGRF9OdsS6QNE46z/8EyGhi3lC7ag3pB72QPvI4rYve7UBP5n7pHCBmJgelN X-Received: by 10.28.17.200 with SMTP id 191mr2669072wmr.45.1465306686388; Tue, 07 Jun 2016 06:38:06 -0700 (PDT) Received: from dell (host81-129-171-215.range81-129.btcentralplus.com. [81.129.171.215]) by smtp.gmail.com with ESMTPSA id w16sm19526373wmw.6.2016.06.07.06.38.05 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 07 Jun 2016 06:38:05 -0700 (PDT) Date: Tue, 7 Jun 2016 14:38:39 +0100 From: Lee Jones To: Peter Griffin Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kernel@stlinux.com, ulf.hansson@linaro.org, adrian.hunter@intel.com, linux-mmc@vger.kernel.org, Arnd Bergmann Subject: Re: [PATCH] mmc: core: Fix mmc_select_hs200() regression in v4.7-rc. Message-ID: <20160607133839.GH18047@dell> References: <1465304543-23988-1-git-send-email-peter.griffin@linaro.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1465304543-23988-1-git-send-email-peter.griffin@linaro.org> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-mmc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org On Tue, 07 Jun 2016, Peter Griffin wrote: > mmc_select_bus_width() returns bus width (4 or 8) on success or > zero if unsupported. If bus width is set successfully we then wish > to switch to HS200 mode. > > This avoids the following error message in v4.70-rc2 > > [ 2.523674] mmc0: mmc_select_hs200 failed, error 3 > [ 2.528516] mmc0: error 3 whilst initialising MMC card > > With this patch card is enumerated correctly > > [ 2.468065] mmc0: new HS200 MMC card at address 0001 > [ 2.468335] mmcblk0: mmc0:0001 P1XXXX 7.20 GiB > [ 2.468441] mmcblk0boot0: mmc0:0001 P1XXXX partition 1 2.00 MiB > [ 2.468552] mmcblk0boot1: mmc0:0001 P1XXXX partition 2 2.00 MiB > [ 2.468651] mmcblk0rpmb: mmc0:0001 P1XXXX partition 3 128 KiB > [ 2.469269] mmcblk0: p1 > > Fixes: 287980e (remove lots of IS_ERR_VALUE abuses) > Signed-off-by: Peter Griffin > Cc: Arnd Bergmann > --- > drivers/mmc/core/mmc.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c > index c984321..aafb73d 100644 > --- a/drivers/mmc/core/mmc.c > +++ b/drivers/mmc/core/mmc.c > @@ -1276,7 +1276,7 @@ static int mmc_select_hs200(struct mmc_card *card) > * switch to HS200 mode if bus width is set successfully. > */ > err = mmc_select_bus_width(card); > - if (!err) { > + if (err > 0) { > val = EXT_CSD_TIMING_HS200 | > card->drive_strength << EXT_CSD_DRV_STR_SHIFT; > err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, > @@ -1583,7 +1583,7 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, > } else if (mmc_card_hs(card)) { > /* Select the desired bus width optionally */ > err = mmc_select_bus_width(card); > - if (!err) { > + if (err > 0) { > err = mmc_select_hs_ddr(card); > if (err) > goto free_card; Looks like this has already been 'fixed' in -rc2. Although, this patch does not work for me. commit f741494363c6c90e6744117d2771bbdf0fb3c455 Author: Chen-Yu Tsai Date: Sun May 29 15:04:42 2016 +0800 mmc: fix mmc mode selection for HS-DDR and higher When IS_ERR_VALUE was removed from the mmc core code, it was replaced with a simple not-zero check. This does not work, as the value checked is the return value for mmc_select_bus_width, which returns the set bit width on success. This made eMMC modes higher than HS-DDR unusable. Fix this by checking for a positive return value instead. Fixes: 287980e49ffc ("remove lots of IS_ERR_VALUE abuses") Cc: Arnd Bergmann Signed-off-by: Chen-Yu Tsai Acked-by: Hans de Goede Reviewed-by: Krzysztof Kozlowski Acked-by: Jaehoon Chung Reviewed-by: Shawn Lin Tested-by: Marcel Ziswiler Tested-by: Bjorn Andersson Signed-off-by: Ulf Hansson -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index c984321..5d438ad 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c @@ -1276,7 +1276,7 @@ static int mmc_select_hs200(struct mmc_card *card) * switch to HS200 mode if bus width is set successfully. */ err = mmc_select_bus_width(card); - if (!err) { + if (err >= 0) { val = EXT_CSD_TIMING_HS200 | card->drive_strength << EXT_CSD_DRV_STR_SHIFT; err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, @@ -1583,7 +1583,7 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, } else if (mmc_card_hs(card)) { /* Select the desired bus width optionally */ err = mmc_select_bus_width(card); - if (!err) { + if (err >= 0) { err = mmc_select_hs_ddr(card); if (err) goto free_card;