Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp4596201ybg; Tue, 29 Oct 2019 09:27:55 -0700 (PDT) X-Google-Smtp-Source: APXvYqwnKHsySyLUZr4RBAKxUCBibTucNxKOOxXySDXkW+Tm/iz1QK4S+NY+AwHvDEK2zFDi4zJy X-Received: by 2002:a17:906:79c9:: with SMTP id m9mr4040677ejo.297.1572366475345; Tue, 29 Oct 2019 09:27:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1572366475; cv=none; d=google.com; s=arc-20160816; b=w8/Dt1cCuK4+XT0x+7L+iu0tuISvo2Hb/AneqdZ1wuoWL5+C/bAiFcIbigG6ttGxb/ kJcm+5JiW5117Eycf01g+F4H+pgJzlClP2QZwrdDFOT0xvM0qNlELbt9y48wmy6KPEDl gAGzdXZs2IrW8fsLryCB/ap0bLuT+AWuL5fx87np8u0vLq4VKbqXIrYDFCOVkYSEUeYp aukf085rEDvTVEUG0/J7zVVaTmY49ZSDxrPQkSKxVmjS3AP47jp4uUMm9mB2AdIrWX+g gpjhUN9ssCRfDfDkOH5VoAudijjlD9zLWddrmINfP7Sk7QcpqbTqIZN9tSPtf2NV8e/J b18Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:message-id:references :in-reply-to:subject:cc:to:from:date:content-transfer-encoding :mime-version:dkim-signature:dkim-signature; bh=A0M2LJRgL8YFjzLlnt8Lq7XTZG83rXxinkHjPjFE6NI=; b=EXwNACtJF2ShymK629cuXg7f7ey8TmYpd2S8k9lFdbP3e7oEBnmy57vBd3FRIC9M8d EeE7q0nmF6wOgqlPjKFZyFh3cbky5Qe7E9GjWY6NMQgf1wsypx8SfzmWxNI0B23NX98g m6aUPnr1p4hVJv0dQlgOThMbob8WQZZBWQEI0ejCmO2CTO9hgH7WXyXvBbCVvoUF8ykG EZRNzDRB4fYZC3BFm1QT/KBoTjGQB9PRsuHdKUpomaR+gqewMM0tCHvD/OOCaNV7ByFx GWY/EIJAdtCAop22ErFLVFLC9qc9iNxGJPfVsnHMFFVph6GcqxpDFGBOFmMl2C2BXoQ9 dZYQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=ZPS+0MWs; dkim=pass header.i=@codeaurora.org header.s=default header.b=POA1ZhWC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r3si12431254edb.245.2019.10.29.09.27.31; Tue, 29 Oct 2019 09:27:55 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=ZPS+0MWs; dkim=pass header.i=@codeaurora.org header.s=default header.b=POA1ZhWC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390329AbfJ2Q0w (ORCPT + 99 others); Tue, 29 Oct 2019 12:26:52 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:37480 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728902AbfJ2Q0w (ORCPT ); Tue, 29 Oct 2019 12:26:52 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id A999B60CDD; Tue, 29 Oct 2019 16:26:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1572366410; bh=oxh4rlK6bZR9Qdq45X3TCKCQDVm+kGPTdv4JEvnfIIk=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=ZPS+0MWsX4ErNbommogw2fEXU3TNzotLrLp0kdwGuxwdwKR6XXvkDBDrZ0iPu0hdw tiPym9flOTuPUkNpG90Di6n02ezhuj1el0g/l2RYEG5+AHnPF33UOIhfzUdz/Ueb6F edmmOPiCJahrV/NGOwy/xBNYmhMzEzhwNO/R1l44= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_INVALID,DKIM_SIGNED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.codeaurora.org (Postfix) with ESMTP id 1552A607EF; Tue, 29 Oct 2019 16:26:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1572366408; bh=oxh4rlK6bZR9Qdq45X3TCKCQDVm+kGPTdv4JEvnfIIk=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=POA1ZhWC8QagaIQlbx7Hin1ppqzB2RqzK5NcSyimw8STUKoN3qzfH0bN98CpF/Ja4 BZjEhPaAdkdzCXXGobG7e3U0eAqqYXCoOBKxJzwbA9laajniLitlmkVAbje8nWCZ3d CVb6WWq/eadDyCASWhS73MDingY22US/scnzxjGc= MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Tue, 29 Oct 2019 09:26:48 -0700 From: asutoshd@codeaurora.org To: Can Guo Cc: nguyenb@codeaurora.org, rnayak@codeaurora.org, linux-scsi@vger.kernel.org, kernel-team@android.com, saravanak@google.com, salyzyn@google.com, Alim Akhtar , Avri Altman , Pedro Sousa , "James E.J. Bottomley" , "Martin K. Petersen" , Stanley Chu , Bean Huo , Tomas Winkler , Subhash Jadavani , Bjorn Andersson , Arnd Bergmann , linux-kernel@vger.kernel.org Subject: Re: [PATCH v1 2/2] scsi: ufs: Do not rely on prefetched data In-Reply-To: <1572351831-30373-3-git-send-email-cang@codeaurora.org> References: <1572351831-30373-1-git-send-email-cang@codeaurora.org> <1572351831-30373-3-git-send-email-cang@codeaurora.org> Message-ID: X-Sender: asutoshd@codeaurora.org User-Agent: Roundcube Webmail/1.2.5 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2019-10-29 05:23, Can Guo wrote: > We were setting bActiveICCLevel attribute for UFS device only once but > type of this attribute has changed from persistent to volatile since > UFS > device specification v2.1. This attribute is set to the default value > after > power cycle or hardware reset event. It isn't safe to rely on > prefetched > data (only used for bActiveICCLevel attribute now). Hence this change > removes the code related to data prefetching and set this parameter on > every attempt to probe the UFS device. > > Signed-off-by: Can Guo > --- > drivers/scsi/ufs/ufshcd.c | 30 +++++++++++++++--------------- > drivers/scsi/ufs/ufshcd.h | 13 ------------- > 2 files changed, 15 insertions(+), 28 deletions(-) > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > index 3a0b99b..0026199 100644 > --- a/drivers/scsi/ufs/ufshcd.c > +++ b/drivers/scsi/ufs/ufshcd.c > @@ -6424,11 +6424,12 @@ static u32 > ufshcd_find_max_sup_active_icc_level(struct ufs_hba *hba, > return icc_level; > } > > -static void ufshcd_init_icc_levels(struct ufs_hba *hba) > +static void ufshcd_set_active_icc_lvl(struct ufs_hba *hba) > { > int ret; > int buff_len = hba->desc_size.pwr_desc; > u8 *desc_buf; > + u32 icc_level; > > desc_buf = kmalloc(buff_len, GFP_KERNEL); > if (!desc_buf) > @@ -6442,20 +6443,17 @@ static void ufshcd_init_icc_levels(struct > ufs_hba *hba) > goto out; > } > > - hba->init_prefetch_data.icc_level = > - ufshcd_find_max_sup_active_icc_level(hba, > - desc_buf, buff_len); > - dev_dbg(hba->dev, "%s: setting icc_level 0x%x", > - __func__, hba->init_prefetch_data.icc_level); > + icc_level = ufshcd_find_max_sup_active_icc_level(hba, desc_buf, > + buff_len); > + dev_dbg(hba->dev, "%s: setting icc_level 0x%x", __func__, icc_level); > > ret = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_WRITE_ATTR, > - QUERY_ATTR_IDN_ACTIVE_ICC_LVL, 0, 0, > - &hba->init_prefetch_data.icc_level); > + QUERY_ATTR_IDN_ACTIVE_ICC_LVL, 0, 0, &icc_level); > > if (ret) > dev_err(hba->dev, > "%s: Failed configuring bActiveICCLevel = %d ret = %d", > - __func__, hba->init_prefetch_data.icc_level , ret); > + __func__, icc_level, ret); > > out: > kfree(desc_buf); > @@ -6963,6 +6961,14 @@ static int ufshcd_probe_hba(struct ufs_hba *hba) > } > } > > + /* > + * bActiveICCLevel is volatile for UFS device (as per latest v2.1 > spec) > + * and for removable UFS card as well, hence always set the > parameter. > + * Note: Error handler may issue the device reset hence resetting > + * bActiveICCLevel as well so it is always safe to set this > here. > + */ > + ufshcd_set_active_icc_lvl(hba); > + > /* set the state as operational after switching to desired gear */ > hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL; > > @@ -6979,9 +6985,6 @@ static int ufshcd_probe_hba(struct ufs_hba *hba) > QUERY_FLAG_IDN_PWR_ON_WPE, &flag)) > hba->dev_info.f_power_on_wp_en = flag; > > - if (!hba->is_init_prefetch) > - ufshcd_init_icc_levels(hba); > - > /* Add required well known logical units to scsi mid layer */ > if (ufshcd_scsi_add_wlus(hba)) > goto out; > @@ -7006,9 +7009,6 @@ static int ufshcd_probe_hba(struct ufs_hba *hba) > pm_runtime_put_sync(hba->dev); > } > > - if (!hba->is_init_prefetch) > - hba->is_init_prefetch = true; > - > out: > /* > * If we failed to initialize the device or the device is not > diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h > index e0fe247..3089b81 100644 > --- a/drivers/scsi/ufs/ufshcd.h > +++ b/drivers/scsi/ufs/ufshcd.h > @@ -405,15 +405,6 @@ struct ufs_clk_scaling { > bool is_suspended; > }; > > -/** > - * struct ufs_init_prefetch - contains data that is pre-fetched once > during > - * initialization > - * @icc_level: icc level which was read during initialization > - */ > -struct ufs_init_prefetch { > - u32 icc_level; > -}; > - > #define UFS_ERR_REG_HIST_LENGTH 8 > /** > * struct ufs_err_reg_hist - keeps history of errors > @@ -505,8 +496,6 @@ struct ufs_stats { > * @intr_mask: Interrupt Mask Bits > * @ee_ctrl_mask: Exception event control mask > * @is_powered: flag to check if HBA is powered > - * @is_init_prefetch: flag to check if data was pre-fetched in > initialization > - * @init_prefetch_data: data pre-fetched during initialization > * @eh_work: Worker to handle UFS errors that require s/w attention > * @eeh_work: Worker to handle exception events > * @errors: HBA errors > @@ -657,8 +646,6 @@ struct ufs_hba { > u32 intr_mask; > u16 ee_ctrl_mask; > bool is_powered; > - bool is_init_prefetch; > - struct ufs_init_prefetch init_prefetch_data; > > /* Work Queues */ > struct work_struct eh_work; Looks good to me. -Asutosh