From patchwork Tue Jul 27 12:35:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Avri Altman X-Patchwork-Id: 488341 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 63460C4338F for ; Tue, 27 Jul 2021 12:36:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3F4FA61108 for ; Tue, 27 Jul 2021 12:36:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231942AbhG0MgW (ORCPT ); Tue, 27 Jul 2021 08:36:22 -0400 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:27410 "EHLO esa2.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231931AbhG0MgW (ORCPT ); Tue, 27 Jul 2021 08:36:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1627389382; x=1658925382; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=UAVtttqGG06RhZJUkEl4p9T+hH0k4w3CjaEdb67yxKY=; b=MVB1Rf1/cF/rbCtq/TzLCbTNBjSO9dFtAujcwA2jDGwZEE1d4YnhBbcc BpcPcawM+KzQnjhw2f6x43vJPeVJpKjusvOo9E3v61UtxsXp3GXr7iUQ7 I19UADOiqdIIVnNE+TJugptlrNHLwT39pBRwFsQvNttTsSd6MjWX/qN9q SgLz4YlbiwVJaQc6JAGAdE2rys5zYbCNN1EiDYqVT64YXs5SCDdLsbU6E psRCndW2hdREnbLGwbCkaRRQd3LXSsMdAONuv5BhyFusCXA9PO8ETZgTI MpsdKcIIxNKd9/1CWcTvECiHUtIoYhbNHcTuHzO1nQPL3AJJ72XrLd7y8 w==; X-IronPort-AV: E=Sophos;i="5.84,273,1620662400"; d="scan'208";a="279424659" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 27 Jul 2021 20:36:21 +0800 IronPort-SDR: W1zcUpueUSnT+tI9w4eqYKzHPgWpGQ44TYuZWQ249jhk5YOI4DAakPLj5bmOwvb42t+CSBGc2q T2whem/04/dtYf06ABFX4jxuwKMzqlLAYt7sPlzzv93VJ4uAvcQwKPfBpZ4gh0Ds0HUPnRIOVw UMeJt1blJhik85SztAbdjr/y0WHYchFd4wrwrX8J+9r5IROpxUR2pHOQFvalZGxH65Yx4MAl5Q Ob+R7/hiVG69PA/YggLMZ5/KIbRL9hs4+SILXS0GtR/0ejvyG9JVq6FWlwO+dfg6MiozOyENcD n2VKT2Q8zmESqLWPlQHgxbcV Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jul 2021 05:12:16 -0700 IronPort-SDR: 2H/fKiPj0nvmRlTt2TLMkyWyUZV8RCZkr2HemLkeK9AjlsOA8maqUga4P3zKR8UyizwQxV848t SjfoBHgcupAk8a8tJdwMSBsHDmWbe2levWBhVikNzBU35vvuEK/n7DkUj+ONiEPLT5w4nV/M77 i3LnkJ9JMGlt+kwViZc4es7eC9zfdAV44UPYpI/sJtOHzyFBGG7vPGTLzeEsdkEAcSVIuGeO/l sbLySfYYi8B4a1FXSsvC0rhYHxYMImS05KGBaB2pyuX6t8glDDLjmmrrmnp3x4sJCOe+iuOAZ2 UIM= WDCIronportException: Internal Received: from bxygm33.sdcorp.global.sandisk.com (HELO BXYGM33.ad.shared) ([10.0.231.247]) by uls-op-cesaip01.wdc.com with ESMTP; 27 Jul 2021 05:36:20 -0700 From: Avri Altman To: "James E . J . Bottomley" , "Martin K . Petersen" , linux-scsi@vger.kernel.org Cc: Bart Van Assche , Bean Huo , Alim Akhtar , Avri Altman Subject: [PATCH 1/3] scsi: ufs: Remove redundant define Date: Tue, 27 Jul 2021 15:35:44 +0300 Message-Id: <20210727123546.17228-2-avri.altman@wdc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210727123546.17228-1-avri.altman@wdc.com> References: <20210727123546.17228-1-avri.altman@wdc.com> Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org UFS_UPIU_RPMB_WLUN already describe the rpmb wlun index. Signed-off-by: Avri Altman Reviewed-by: Bean Huo --- drivers/scsi/ufs/ufs.h | 1 - drivers/scsi/ufs/ufshcd.c | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h index cb80b9670bfe..579cf6f9e7a1 100644 --- a/drivers/scsi/ufs/ufs.h +++ b/drivers/scsi/ufs/ufs.h @@ -38,7 +38,6 @@ #define UFS_UPIU_MAX_UNIT_NUM_ID 0x7F #define UFS_MAX_LUNS (SCSI_W_LUN_BASE + UFS_UPIU_MAX_UNIT_NUM_ID) #define UFS_UPIU_WLUN_ID (1 << 7) -#define UFS_RPMB_UNIT 0xC4 /* WriteBooster buffer is available only for the logical unit from 0 to 7 */ #define UFS_UPIU_MAX_WB_LUN_ID 8 diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 064a44e628d6..74ccfd2b80ce 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -3334,7 +3334,8 @@ static void ufshcd_update_desc_length(struct ufs_hba *hba, unsigned char desc_len) { if (hba->desc_size[desc_id] == QUERY_DESC_MAX_SIZE && - desc_id != QUERY_DESC_IDN_STRING && desc_index != UFS_RPMB_UNIT) + desc_id != QUERY_DESC_IDN_STRING && + desc_index != UFS_UPIU_RPMB_WLUN) /* For UFS 3.1, the normal unit descriptor is 10 bytes larger * than the RPMB unit, however, both descriptors share the same * desc_idn, to cover both unit descriptors with one length, we From patchwork Tue Jul 27 12:35:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Avri Altman X-Patchwork-Id: 487192 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AC6F5C4338F for ; Tue, 27 Jul 2021 12:36:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8AAF261A3F for ; Tue, 27 Jul 2021 12:36:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231975AbhG0Mgf (ORCPT ); Tue, 27 Jul 2021 08:36:35 -0400 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:61888 "EHLO esa4.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231931AbhG0Mgf (ORCPT ); Tue, 27 Jul 2021 08:36:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1627389395; x=1658925395; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=QflOCDwcgW3OC1VQgoA1Hz5zfRTa+mhAWKhPfg48n7A=; b=lF+BWw+XjT3GDaZ/6flGk8tU9XzfTcLt4e5Wt7FHnZfLfFPXiePiN0OW 0v1kbrbJSKdyim58IUVbngv+XAgmszmt8U75Qfvx7+wb2WVGRnSeMuzcz KmLzdj8O4l7vlYGk2ANVakk2tlPJlhYQK30PCRpr68aHyrL3d91fXefUC T2dYAoIfoO/2j5VsPWU92WIoYCe9Oa+TmpRLYAaS31+drHg6C7qxhXzby 5YoeuuLmrEMTwM8zHPvopS9N3QI1WgPT5GJS1QBXmRyiB0iKhzketpkWq en8euTmYylzfy6vijaTa1hxJMzxrT8a6m7FQt0yTDi/2mOA5N1k/L7yGM Q==; X-IronPort-AV: E=Sophos;i="5.84,273,1620662400"; d="scan'208";a="174813585" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 27 Jul 2021 20:36:35 +0800 IronPort-SDR: BDmgRTiLfhbc7XuwFzVwwRiepPqJ3h0i5D5jjyaCOFbd7hHzstCUOwICQtnVWO4Hhw3NOLIfIO eTAwCZc58C6S+XOZfmyvy1ImdG6DzpMk6RrWidFXiExvZzIM6cQV0ptQsCvR4s+Wcigy3BfFch EWXVtf0lLdRVEUkmff10LZeki4HkPKp9xBUTOqLY7OfY221zSuB7pBbtpzqlKvUze382ViMN/r UwCUtUC4W7Hqq6A9zRD0PQnmVzjnjb+xLb9zQOMB4g6mvGWw83XLwmQ6bJXLoZpl2jQ1NeKeLj ssEchysT87LC4CnppuSIHmy3 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jul 2021 05:12:29 -0700 IronPort-SDR: Ix+QTwPeSMKp/tuFGUsfSjuZ53Uo4O/JGJGMKmXMXiOPaPEZKJevglwmzfn1Oa0P+EZxLX0twV bEDzH4IAT3cNFl18oQn0SdYqU5fql1tevIRVmXptcwnu+/0XeW/UqqCVPBUmJdlV4kiD56+rVZ TzOQpR9axkD09OymSMqEEupTa/9KihSud8K937gHB5nXr4LV+umgQs2BDQ6YQlQ3zkXoQBMxTZ WlK2h/34ePxXY7XpnojImUJzxFY8UgIqypwok2yDqjYgqVRvDsMU9SVdo2u7KvZA6z0iHAQ9X4 wro= WDCIronportException: Internal Received: from bxygm33.sdcorp.global.sandisk.com (HELO BXYGM33.ad.shared) ([10.0.231.247]) by uls-op-cesaip01.wdc.com with ESMTP; 27 Jul 2021 05:36:33 -0700 From: Avri Altman To: "James E . J . Bottomley" , "Martin K . Petersen" , linux-scsi@vger.kernel.org Cc: Bart Van Assche , Bean Huo , Alim Akhtar , Avri Altman Subject: [PATCH 2/3] scsi: ufs: Map the correct size to the rpmb unit descriptor Date: Tue, 27 Jul 2021 15:35:45 +0300 Message-Id: <20210727123546.17228-3-avri.altman@wdc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210727123546.17228-1-avri.altman@wdc.com> References: <20210727123546.17228-1-avri.altman@wdc.com> Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org Each lun is designated by its unit descriptor. All regular luns share the same unit descriptor size. The rpmb unit descriptor size, however, is different. Log the correct size for the rpmb unit descriptor in an unused descriptor id number. Signed-off-by: Avri Altman --- drivers/scsi/ufs/ufs.h | 1 + drivers/scsi/ufs/ufs_bsg.c | 3 ++- drivers/scsi/ufs/ufshcd.c | 18 +++++++++++------- drivers/scsi/ufs/ufshcd.h | 2 +- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h index 579cf6f9e7a1..d0be8d4c8091 100644 --- a/drivers/scsi/ufs/ufs.h +++ b/drivers/scsi/ufs/ufs.h @@ -167,6 +167,7 @@ enum desc_idn { QUERY_DESC_IDN_GEOMETRY = 0x7, QUERY_DESC_IDN_POWER = 0x8, QUERY_DESC_IDN_HEALTH = 0x9, + QUERY_DESC_IDN_UNIT_RPMB = 0xA, QUERY_DESC_IDN_MAX, }; diff --git a/drivers/scsi/ufs/ufs_bsg.c b/drivers/scsi/ufs/ufs_bsg.c index 39bf204c6ec3..fcb46c882f1c 100644 --- a/drivers/scsi/ufs/ufs_bsg.c +++ b/drivers/scsi/ufs/ufs_bsg.c @@ -11,11 +11,12 @@ static int ufs_bsg_get_query_desc_size(struct ufs_hba *hba, int *desc_len, { int desc_size = be16_to_cpu(qr->length); int desc_id = qr->idn; + int desc_index = qr->index; if (desc_size <= 0) return -EINVAL; - ufshcd_map_desc_id_to_length(hba, desc_id, desc_len); + ufshcd_map_desc_id_to_length(hba, desc_id, desc_index, desc_len); if (!*desc_len) return -EINVAL; diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 74ccfd2b80ce..eec1bc95391b 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -3319,11 +3319,13 @@ int ufshcd_query_descriptor_retry(struct ufs_hba *hba, * @desc_len: mapped desc length (out) */ void ufshcd_map_desc_id_to_length(struct ufs_hba *hba, enum desc_idn desc_id, - int *desc_len) + int desc_index, int *desc_len) { if (desc_id >= QUERY_DESC_IDN_MAX || desc_id == QUERY_DESC_IDN_RFU_0 || desc_id == QUERY_DESC_IDN_RFU_1) *desc_len = 0; + else if (desc_index == UFS_UPIU_RPMB_WLUN) + *desc_len = hba->desc_size[QUERY_DESC_IDN_UNIT_RPMB]; else *desc_len = hba->desc_size[desc_id]; } @@ -3334,14 +3336,16 @@ static void ufshcd_update_desc_length(struct ufs_hba *hba, unsigned char desc_len) { if (hba->desc_size[desc_id] == QUERY_DESC_MAX_SIZE && - desc_id != QUERY_DESC_IDN_STRING && - desc_index != UFS_UPIU_RPMB_WLUN) + desc_id != QUERY_DESC_IDN_STRING) { + if (desc_index == UFS_UPIU_RPMB_WLUN) /* For UFS 3.1, the normal unit descriptor is 10 bytes larger * than the RPMB unit, however, both descriptors share the same - * desc_idn, to cover both unit descriptors with one length, we - * choose the normal unit descriptor length by desc_index. + * desc_idn, but differ by the descriptor index */ - hba->desc_size[desc_id] = desc_len; + hba->desc_size[QUERY_DESC_IDN_UNIT_RPMB] = desc_len; + else + hba->desc_size[desc_id] = desc_len; + } } /** @@ -3372,7 +3376,7 @@ int ufshcd_read_desc_param(struct ufs_hba *hba, return -EINVAL; /* Get the length of descriptor */ - ufshcd_map_desc_id_to_length(hba, desc_id, &buff_len); + ufshcd_map_desc_id_to_length(hba, desc_id, desc_index, &buff_len); if (!buff_len) { dev_err(hba->dev, "%s: Failed to get desc length\n", __func__); return -EINVAL; diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 971cfabc4a1e..c77bef77ec87 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -1105,7 +1105,7 @@ int ufshcd_hold(struct ufs_hba *hba, bool async); void ufshcd_release(struct ufs_hba *hba); void ufshcd_map_desc_id_to_length(struct ufs_hba *hba, enum desc_idn desc_id, - int *desc_length); + int desc_index, int *desc_length); u32 ufshcd_get_local_unipro_ver(struct ufs_hba *hba); From patchwork Tue Jul 27 12:35:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Avri Altman X-Patchwork-Id: 488340 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3BF11C4338F for ; Tue, 27 Jul 2021 12:36:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 19C2660F51 for ; Tue, 27 Jul 2021 12:36:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232027AbhG0Mgp (ORCPT ); Tue, 27 Jul 2021 08:36:45 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:65233 "EHLO esa1.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231931AbhG0Mgo (ORCPT ); Tue, 27 Jul 2021 08:36:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1627389404; x=1658925404; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=XLlR3TBwvAId3GFwFU6XBIXH72v88cus8s8lFXx1h78=; b=gWMEakf/dVkbGr0NNsvpyrbGeot7iUnp85AzTlc1sHOwTu79fM4pgck2 FXxFbLOcPZBItoDbDXgR2YMShF20lCl7xX6RxDvpUvN8/BQFhwvPtuEev ZpUpzePsP3XqKjB0/6r3dQUd99UtUe+RnTDqqVFrM9OEZRbovmFaKbpuI KKpbYBgDgzW265MwCnVYzTR1oOUFQsgRxYtRLxClzN2MlIwKtATVihuUA dua2kDfgcFSkaCaH6pToF46yOWsm8Wtkf1PPVJ431EC2cGGWAr3X39Z2o 3+r9I2Kg1CF3zWjoSOIiwhHaD/awDBTU63raqUc43Gf206EgdK0b9Qtil w==; X-IronPort-AV: E=Sophos;i="5.84,273,1620662400"; d="scan'208";a="287155367" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 27 Jul 2021 20:36:44 +0800 IronPort-SDR: k2p/yuqsKkOWn4gYfsI85sgHsFPQcnuKkJ9/KJKGEnYiZh2ucov6E0GUu/Il0FrqH4HZnD1ar/ muojwTZmFocT+6aWR6RM2wKTjxEu9JJJC0T4wDVRUpWs7I81wntKV4er74ntqOBlO7vtVJlYaA CycvrMz2HaZp9TKAJgojIXLTF4iZfZJ76OdYtRkBx/7IPvkdEkij0t8bpzBOiHBSDP0eSVlQqe p1GsXurx0h+LyrGszL8VjdCk4flyk1S2PJhyBVQifjzZd0wPIMiHlvfmoRffRZpGL47OMIdfoN w2qQ6BDwnJ6bSXAJR3h7LA7Y Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep02.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jul 2021 05:12:39 -0700 IronPort-SDR: wMSmSfZ7+qHTxLKXRPIIFBVOqFInEjXwW1Rt6lv910MHw1ZVjPBL3u0LWA5AQACjTUF+1axDJT wTsT1jOURvkPFfcZfEuUGvZUUw3RVAOzVGOUhPEsy9VXjodAL5c0X3cSC0Wb1DewD26APqvwnt 0/kPTnAXLlEC5lpN7QuWo4Y5Vxaub2totJhF3ZvLCSkQxqYVr3wDRqFlMSUWJxv1GwsebyCvUj yz6FVBu0jQHotBuKOqAC1jGFdIcxsaskjECHkIgJuTPHb0KZsqY7QPWddrqrlmnfGRihZOWJ// 3sE= WDCIronportException: Internal Received: from bxygm33.sdcorp.global.sandisk.com (HELO BXYGM33.ad.shared) ([10.0.231.247]) by uls-op-cesaip01.wdc.com with ESMTP; 27 Jul 2021 05:36:42 -0700 From: Avri Altman To: "James E . J . Bottomley" , "Martin K . Petersen" , linux-scsi@vger.kernel.org Cc: Bart Van Assche , Bean Huo , Alim Akhtar , Avri Altman Subject: [PATCH 3/3] scsi: ufs: Generalize ufs_is_valid_unit_desc_lun() Date: Tue, 27 Jul 2021 15:35:46 +0300 Message-Id: <20210727123546.17228-4-avri.altman@wdc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210727123546.17228-1-avri.altman@wdc.com> References: <20210727123546.17228-1-avri.altman@wdc.com> Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org ufs_is_valid_unit_desc_lun() test for specific wb offset case, and does not verify that the requested field does not exceed the descriptor size. So do that, and while at it, move it to ufshcd.h where it should be. Signed-off-by: Avri Altman --- drivers/scsi/ufs/ufs-sysfs.c | 2 +- drivers/scsi/ufs/ufs.h | 19 ------------------- drivers/scsi/ufs/ufshcd.c | 2 +- drivers/scsi/ufs/ufshcd.h | 25 +++++++++++++++++++++++++ 4 files changed, 27 insertions(+), 21 deletions(-) diff --git a/drivers/scsi/ufs/ufs-sysfs.c b/drivers/scsi/ufs/ufs-sysfs.c index 52bd807f7940..0d6dfaa70d2f 100644 --- a/drivers/scsi/ufs/ufs-sysfs.c +++ b/drivers/scsi/ufs/ufs-sysfs.c @@ -1136,7 +1136,7 @@ static ssize_t _pname##_show(struct device *dev, \ struct scsi_device *sdev = to_scsi_device(dev); \ struct ufs_hba *hba = shost_priv(sdev->host); \ u8 lun = ufshcd_scsi_to_upiu_lun(sdev->lun); \ - if (!ufs_is_valid_unit_desc_lun(&hba->dev_info, lun, \ + if (!ufs_is_valid_unit_desc_lun(hba, lun, \ _duname##_DESC_PARAM##_puname)) \ return -EINVAL; \ return ufs_sysfs_read_desc_param(hba, QUERY_DESC_IDN_##_duname, \ diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h index d0be8d4c8091..366ece129a4d 100644 --- a/drivers/scsi/ufs/ufs.h +++ b/drivers/scsi/ufs/ufs.h @@ -571,23 +571,4 @@ enum ufs_trace_tsf_t { UFS_TSF_CDB, UFS_TSF_OSF, UFS_TSF_TM_INPUT, UFS_TSF_TM_OUTPUT }; -/** - * ufs_is_valid_unit_desc_lun - checks if the given LUN has a unit descriptor - * @dev_info: pointer of instance of struct ufs_dev_info - * @lun: LU number to check - * @return: true if the lun has a matching unit descriptor, false otherwise - */ -static inline bool ufs_is_valid_unit_desc_lun(struct ufs_dev_info *dev_info, - u8 lun, u8 param_offset) -{ - if (!dev_info || !dev_info->max_lu_supported) { - pr_err("Max General LU supported by UFS isn't initialized\n"); - return false; - } - /* WB is available only for the logical unit from 0 to 7 */ - if (param_offset == UNIT_DESC_PARAM_WB_BUF_ALLOC_UNITS) - return lun < UFS_UPIU_MAX_WB_LUN_ID; - return lun == UFS_UPIU_RPMB_WLUN || (lun < dev_info->max_lu_supported); -} - #endif /* End of Header */ diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index eec1bc95391b..7f4c8f0c0459 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -3555,7 +3555,7 @@ static inline int ufshcd_read_unit_desc_param(struct ufs_hba *hba, * Unit descriptors are only available for general purpose LUs (LUN id * from 0 to 7) and RPMB Well known LU. */ - if (!ufs_is_valid_unit_desc_lun(&hba->dev_info, lun, param_offset)) + if (!ufs_is_valid_unit_desc_lun(hba, lun, param_offset)) return -EOPNOTSUPP; return ufshcd_read_desc_param(hba, QUERY_DESC_IDN_UNIT, lun, diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index c77bef77ec87..395c1f5ecf9d 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -1122,6 +1122,31 @@ int ufshcd_wb_toggle(struct ufs_hba *hba, bool enable); int ufshcd_suspend_prepare(struct device *dev); void ufshcd_resume_complete(struct device *dev); +/** + * ufs_is_valid_unit_desc_lun - checks if the given LUN has a unit descriptor + * @dev_info: pointer of instance of struct ufs_dev_info + * @lun: LU number to check + * @return: true if the lun has a matching unit descriptor, false otherwise + */ +static inline bool ufs_is_valid_unit_desc_lun(struct ufs_hba *hba, u8 lun, + u8 param_offset) +{ + struct ufs_dev_info *dev_info = &hba->dev_info; + u8 desc_size = lun == UFS_UPIU_RPMB_WLUN ? + hba->desc_size[QUERY_DESC_IDN_UNIT_RPMB] : + hba->desc_size[QUERY_DESC_IDN_UNIT]; + + if (!dev_info || !dev_info->max_lu_supported) { + pr_err("Max General LU supported by UFS isn't initialized\n"); + return false; + } + + if (param_offset >= desc_size) + return false; + + return lun == UFS_UPIU_RPMB_WLUN || (lun < dev_info->max_lu_supported); +} + /* Wrapper functions for safely calling variant operations */ static inline const char *ufshcd_get_var_name(struct ufs_hba *hba) {