Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp877449pxb; Wed, 1 Sep 2021 11:55:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzNeU0WfTudPPZYGzi2Evh8fOngCIYklsBFP1G/LsMQ9LlK4tisVfSKxsGtL5tk4lBx8pbV X-Received: by 2002:a17:907:100c:: with SMTP id ox12mr1044879ejb.102.1630522513189; Wed, 01 Sep 2021 11:55:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1630522513; cv=none; d=google.com; s=arc-20160816; b=o0FvN5PrzUAV7uYjLySLewxL8W6Ob4IeIzEsMyA4TFN3Or08L1wr9H98wn4GRH5zz1 kmcJWz+rxG/urU1i/s95IRTZFX3Gi25EoPyY+mBRuWj1I0iQs7m1Tx5VIDU+KjGJcvaF lEHJ/Z21/dN17tUjabNkFnIelWT1Fs67yVmzFUpMZzO7PAp4Wp9SjqtnHiQClgNlOeWG suERQs1m+kTJme2ig6rjtAEzUoUOyaZazX9LdnZfuy3bIR24l+zYW3g7a2BPMYBfUBoy wkE6NjG59umbRcmy4DIstaDsTEalClzK/FlWpEhOoNerIpTB4dEb3E35TsB2d45xub3T L4pA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from:wdcironportexception:ironport-sdr:ironport-sdr :dkim-signature; bh=sGKGxDDEryleDiB+yQ9r8UqDNzSUPzUv9xnKN7wbSac=; b=Rsp3443JdFtUnBMwGsqAIiiyT7nOXW6FvihuhQLJXJUUDTd/jzISHtCadcLCe+HQub 1L6/ab4qagT1lcSKkG5iQAXZYZnOrsQnmtnv78cumLjikyw9DA6WF+8RSp6jeFkpAEcC nIh2l6anlUof71RE7xE8E/XmCn6z8/Yv3mey7eRFm14NBwfyFaHok15Z6Gr7rQO0peTh EsqDAOkxxJNHdbilPRzZAJwXryA/xrvck+TavC5DBWTaN9mjnKsFy+Mdq+D0menLGyy2 9bDDU71JMf/EJO6RQXJv2zg+CumtfXE8aCAbFGcuzhm9ZEwdAIPY3K5fsbZUwZAolv3j Hymg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=VMVbCrg4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=wdc.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i23si550875ejo.714.2021.09.01.11.54.50; Wed, 01 Sep 2021 11:55:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=VMVbCrg4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=wdc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344957AbhIAMnd (ORCPT + 99 others); Wed, 1 Sep 2021 08:43:33 -0400 Received: from esa3.hgst.iphmx.com ([216.71.153.141]:42670 "EHLO esa3.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344174AbhIAMjS (ORCPT ); Wed, 1 Sep 2021 08:39:18 -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=1630499899; x=1662035899; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=acXOXl6f171r3xjXGOHp//YkIK3zeBR5dh3oHNFOwmk=; b=VMVbCrg4UbR9cM3nZi2djgg8X8fpsdCIZ7F7nHG5UBNno6yHoOKKlLdV RRKPbKdnSfkTeWwLbCVYNtY+B6OmknTu6eHinewwPYuyHq4TFrVpH7jZC c95lKYYvBxLST9HLJOsAVKtkkPiA0ZQ+NzzLfCVkSqysEXf8cKweUNmhb uxEHjNsTV9SeyC20LkMvzBnntne2o96BllIxKLDvqhxo9FYsORjv+9Ip7 rwiPfmiCsuYyRmgyBxnQcIaVD0gvsS4joQMlFDWrQcQ2jY13Sg8vH2Tm7 Y9O8dnfQNixPsSH+OwV1CPwWvheh8WClIel7Ko4wcg2EAkaduuvbZ0ZOO w==; X-IronPort-AV: E=Sophos;i="5.84,369,1620662400"; d="scan'208";a="183729689" Received: from h199-255-45-14.hgst.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 01 Sep 2021 20:38:19 +0800 IronPort-SDR: nCfzlD5gzCqODt3w2EXWXjagCe1HEAwEdc7ANIAzC0B4QESqgutvs0fkHHm+Q5DSM8Oahr9a2B e8yQ1ACdU1b+P2uVI0r9vOiplrKGdfxN6r4DbB3/pa1OFl3XeMJYbQOlEh29xqlDFKnXjrInK4 aukxUSFyDRFNSLmQET/+iP57bWYUNy65pZpgtHN2AELpFQfuF8wVufplrxa0nn3I0ub11p4+OV 1wcPycUj5O3a6tBMPR8mnl6/4oeFj4Ib6r8ZhT7ORv9JP/wwcE8XZCBq4RSycQu0HlKNYu4nBN DzbQnNWK3kqVIzE5tyJtHq31 Received: from uls-op-cesaip01.wdc.com ([10.248.3.36]) by uls-op-cesaep01.wdc.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Sep 2021 05:15:07 -0700 IronPort-SDR: N9xpnGymTAS5VSDPvi1/q4V5nETrIOGTDT0iEkST7nG76GigU6JVZYoi+VzTNetwjnSUXwJZwF khnboCDnQo1mCIJ6wxdQ0trM91u2ZiMYNavX8xRVheguf3fiGa+pZ/Z2z3GQoVaDlRaBD4LFpz H7bT+Rv+KpDQ7aPYmJlGnj2umJdB2gXOGsQeUe9rqvukmBi8yJULlqgxkA6uVKc1E0/n4oh2Th iLSHclB68ZiHkmNCoRuRGVoaIrSkPSrIgF2wUc+AOEtjNLy28yh+T9K1iWjBFHXk+Tg7jGAcUA RSU= 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; 01 Sep 2021 05:38:18 -0700 From: Avri Altman To: "James E . J . Bottomley" , "Martin K . Petersen" Cc: linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org, Bart Van Assche , Adrian Hunter , Bean Huo , Avri Altman Subject: [PATCH 1/3] scsi: ufs: Probe for temperature notification support Date: Wed, 1 Sep 2021 15:37:05 +0300 Message-Id: <20210901123707.5014-2-avri.altman@wdc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210901123707.5014-1-avri.altman@wdc.com> References: <20210901123707.5014-1-avri.altman@wdc.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Probe the dExtendedUFSFeaturesSupport register for the device's temperature notification support. Signed-off-by: Avri Altman --- drivers/scsi/ufs/ufs.h | 7 +++++++ drivers/scsi/ufs/ufshcd.c | 18 ++++++++++++++++++ drivers/scsi/ufs/ufshcd.h | 22 ++++++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h index 8c6b38b1b142..dee897ef9631 100644 --- a/drivers/scsi/ufs/ufs.h +++ b/drivers/scsi/ufs/ufs.h @@ -338,6 +338,9 @@ enum { /* Possible values for dExtendedUFSFeaturesSupport */ enum { + UFS_DEV_LOW_TEMP_NOTIF = BIT(4), + UFS_DEV_HIGH_TEMP_NOTIF = BIT(5), + UFS_DEV_EXT_TEMP_NOTIF = BIT(6), UFS_DEV_HPB_SUPPORT = BIT(7), UFS_DEV_WRITE_BOOSTER_SUP = BIT(8), }; @@ -604,6 +607,10 @@ struct ufs_dev_info { bool b_rpm_dev_flush_capable; u8 b_presrv_uspc_en; + + /* temperature notification */ + bool high_temp_notif; + bool low_temp_notif; }; /* diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 3841ab49f556..6ad51ae764c5 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -7469,6 +7469,22 @@ static void ufshcd_wb_probe(struct ufs_hba *hba, u8 *desc_buf) hba->caps &= ~UFSHCD_CAP_WB_EN; } +static void ufshcd_temp_notif_probe(struct ufs_hba *hba, u8 *desc_buf) +{ + struct ufs_dev_info *dev_info = &hba->dev_info; + u32 ext_ufs_feature; + + if (!(hba->caps & UFSHCD_CAP_TEMP_NOTIF) || + dev_info->wspecversion < 0x300) + return; + + ext_ufs_feature = get_unaligned_be32(desc_buf + + DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP); + + dev_info->low_temp_notif = ext_ufs_feature & UFS_DEV_LOW_TEMP_NOTIF; + dev_info->high_temp_notif = ext_ufs_feature & UFS_DEV_HIGH_TEMP_NOTIF; +} + void ufshcd_fixup_dev_quirks(struct ufs_hba *hba, struct ufs_dev_fix *fixups) { struct ufs_dev_fix *f; @@ -7564,6 +7580,8 @@ static int ufs_get_device_desc(struct ufs_hba *hba) ufshcd_wb_probe(hba, desc_buf); + ufshcd_temp_notif_probe(hba, desc_buf); + /* * ufshcd_read_string_desc returns size of the string * reset the error value diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 52ea6f350b18..467affbaec80 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -653,6 +653,12 @@ enum ufshcd_caps { * in order to exit DeepSleep state. */ UFSHCD_CAP_DEEPSLEEP = 1 << 10, + + /* + * This capability allows the host controller driver to use temperature + * notification if it is supported by the UFS device. + */ + UFSHCD_CAP_TEMP_NOTIF = 1 << 11, }; struct ufs_hba_variant_params { @@ -972,6 +978,22 @@ static inline bool ufshcd_is_user_access_allowed(struct ufs_hba *hba) return !hba->shutting_down; } +static inline bool ufshcd_is_high_temp_notif_allowed(struct ufs_hba *hba) +{ + return hba->dev_info.high_temp_notif; +} + +static inline bool ufshcd_is_low_temp_notif_allowed(struct ufs_hba *hba) +{ + return hba->dev_info.low_temp_notif; +} + +static inline bool ufshcd_is_temp_notif_allowed(struct ufs_hba *hba) +{ + return ufshcd_is_high_temp_notif_allowed(hba) || + ufshcd_is_high_temp_notif_allowed(hba); +} + #define ufshcd_writel(hba, val, reg) \ writel((val), (hba)->mmio_base + (reg)) #define ufshcd_readl(hba, reg) \ -- 2.17.1