From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751839AbcFUNQU (ORCPT ); Tue, 21 Jun 2016 09:16:20 -0400 Received: from mail-lf0-f45.google.com ([209.85.215.45]:34401 "EHLO mail-lf0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751462AbcFUNQM (ORCPT ); Tue, 21 Jun 2016 09:16:12 -0400 MIME-Version: 1.0 In-Reply-To: <1463647662-27426-3-git-send-email-chaotian.jing@mediatek.com> References: <1463647662-27426-1-git-send-email-chaotian.jing@mediatek.com> <1463647662-27426-3-git-send-email-chaotian.jing@mediatek.com> From: Ulf Hansson Date: Tue, 21 Jun 2016 15:16:03 +0200 Message-ID: Subject: Re: [PATCH 2/3] mmc: mmc: do not use CMD13 to get status after speed mode switch To: Chaotian Jing Cc: Matthias Brugger , Adrian Hunter , Wolfram Sang , Kuninori Morimoto , Masahiro Yamada , linux-mmc , "linux-kernel@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , linux-mediatek@lists.infradead.org, srv_heupstream , Sascha Hauer Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 19 May 2016 at 10:47, Chaotian Jing wrote: > Per JEDEC spec, it is not recommended to use CMD13 to get card status > after speed mode switch. below are two reason about this: > 1. CMD13 cannot be guaranteed due to the asynchronous operation. > Therefore it is not recommended to use CMD13 to check busy completion > of the timing change indication. > 2. After switch to HS200, CMD13 will get response of 0x800, and even the > busy signal gets de-asserted, the response of CMD13 is aslo 0x800. > > Signed-off-by: Chaotian Jing Thanks, applied for next! (With a minor change, see below) [...] > > /* Switch HS to HS200 */ > val = EXT_CSD_TIMING_HS200 | > card->drive_strength << EXT_CSD_DRV_STR_SHIFT; > err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, > val, card->ext_csd.generic_cmd6_time, true, > - send_status, true); > + false, true); To keep consistency with other calls to __mmc_switch(), I change these lines to: err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, val, card->ext_csd.generic_cmd6_time, true, false, true); > if (err) > goto out_err; > > mmc_set_timing(host, MMC_TIMING_MMC_HS200); > > - if (!send_status) { > - err = mmc_switch_status(card); > - if (err) > - goto out_err; > - } > + err = mmc_switch_status(card); > + if (err) > + goto out_err; > > mmc_set_bus_speed(card); > > @@ -1243,7 +1227,6 @@ static void mmc_select_driver_type(struct mmc_card *card) > static int mmc_select_hs200(struct mmc_card *card) > { > struct mmc_host *host = card->host; > - bool send_status = true; > unsigned int old_timing; > int err = -EINVAL; > u8 val; > @@ -1260,9 +1243,6 @@ static int mmc_select_hs200(struct mmc_card *card) > > mmc_select_driver_type(card); > > - if (host->caps & MMC_CAP_WAIT_WHILE_BUSY) > - send_status = false; > - > /* > * Set the bus width(4 or 8) with host's support and > * switch to HS200 mode if bus width is set successfully. > @@ -1274,20 +1254,18 @@ static int mmc_select_hs200(struct mmc_card *card) > err = __mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, > EXT_CSD_HS_TIMING, val, > card->ext_csd.generic_cmd6_time, > - true, send_status, true); > + true, false, true); [...] Kind regards Uffe