From patchwork Wed Sep 1 12:37:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Avri Altman X-Patchwork-Id: 505429 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, 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 2758DC43216 for ; Wed, 1 Sep 2021 12:39:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 10D2D6115B for ; Wed, 1 Sep 2021 12:39:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345108AbhIAMkp (ORCPT ); Wed, 1 Sep 2021 08:40:45 -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-scsi@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) \ From patchwork Wed Sep 1 12:37:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Avri Altman X-Patchwork-Id: 505428 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, 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 CC0AAC4320A for ; Wed, 1 Sep 2021 12:40:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B36F36115C for ; Wed, 1 Sep 2021 12:40:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344023AbhIAMkz (ORCPT ); Wed, 1 Sep 2021 08:40:55 -0400 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:63997 "EHLO esa1.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344573AbhIAMjk (ORCPT ); Wed, 1 Sep 2021 08:39:40 -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=1630499924; x=1662035924; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=Ovy15cfCLOVD1iYA9PGNZtmHCKvlbWrMM4AuvWkgx/c=; b=O9s2v7e5HpyRAS/Wo9+hO+OJ0yH9zi2dRg9c9/u/3EQLorbxeA1I6fMw WsJqnN5XCL4XS48cuvc0gfGb34ARusjPu22HH56dY4ongjP0uy4gP7x79 7wDonc9dnAK2kTf5R9wR8mbZWTbunNzEQuXJnFU8UECk/weeDpjb6yZDG j2Zz5TPSlEsxFkeIGxNhr3jHYXzhVuWGqpFaVykazNlcgq5rlnUri4fOJ MQBt5LIJdDhqmXFUzUW6s2DpfeIuPKeFOfeoca2IM1gTKmtQgDSEDzJPs In2CpfBt5PKYNXAaUYTkIDBrKnWbaaMZibofbdCQrYP0I3x5nguJJ/AsQ w==; X-IronPort-AV: E=Sophos;i="5.84,369,1620662400"; d="scan'208";a="290548644" 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; 01 Sep 2021 20:38:44 +0800 IronPort-SDR: t6RfBioPj4CIb1HB2SeaJKItjHkVv267/HPNk9OKIiaCEETjCnWL0IZMKPRMiuZl7uqSP+nZ9Z 00Wj2EFbWgt5lfWFLLrWZvvxwnXeWSQ2mSzjUQP0Ayua148yIR68vKmZkPEsH2gugwd2+w76oR 7lHBRE1FfUC5cCwvynQjA+XmFA+vJIorbPqQHr5Pb7f6Jc+B1DayvGpDEZHpFEeHzFO3M6cU53 NKEgpTRZCpOOTJtV8eqKMeZSCkaKT9LfqNNk+amzisjEPzA0YxLLU5ZyKHj6mZhizEggKB7ykS Kd7I7TJPq8b1VkwFxLubtZvj 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; 01 Sep 2021 05:13:49 -0700 IronPort-SDR: F2H452xKyaSNYsJ95UYRnySX6LfS+T/RQaeM81OwQywVrE/LHXTg/GzRQ4YHVU8IwDrJTXgccu p0NUZzkBDP8dpQSY0Lo5cyAuvVYPdcEnXG8aosl2tR+uYJqFUDY5KmtL+nhvgzd75CqKAeOWJq 8v9M7PXM0x/fBAigQ5lpZnr4tkeXRYvxB/+LY6fjPTWJMSCbY8877p79h4/waF8I8W9TnpSM+4 ydu4VaK95JGzDAPCVOWsQtWWjCimDGObNFzx2bqkOm9L61bsOhOPbKJ8Ofnm5AA6olwxcdEdu9 S84= 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:41 -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 3/3] scsi: ufs-sysfs: Add sysfs entries for temperature notification Date: Wed, 1 Sep 2021 15:37:07 +0300 Message-Id: <20210901123707.5014-4-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-scsi@vger.kernel.org The temperature readings are in degrees Celsius, and to allow negative temperature, need to subtract 80 from the reported value. Make sure to enforce the legal range of those values, and properly document it as well. Signed-off-by: Avri Altman --- Documentation/ABI/testing/sysfs-driver-ufs | 38 ++++++++++ drivers/scsi/ufs/ufs-sysfs.c | 86 ++++++++++++++++++++++ drivers/scsi/ufs/ufs.h | 3 + 3 files changed, 127 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-driver-ufs b/Documentation/ABI/testing/sysfs-driver-ufs index ec3a7149ced5..ff2294971e44 100644 --- a/Documentation/ABI/testing/sysfs-driver-ufs +++ b/Documentation/ABI/testing/sysfs-driver-ufs @@ -1534,3 +1534,41 @@ Contact: Avri Altman Description: In host control mode the host is the originator of map requests. To avoid flooding the device with map requests, use a simple throttling mechanism that limits the number of inflight map requests. + +What: /sys/bus/platform/drivers/ufshcd/*/attributes/case_rough_temp +Date: September 2021 +Contact: Avri Altman +Description: The device case rough temperature (bDeviceCaseRoughTemperature + attribute). It is termed "rough" due to the inherent inaccuracy + of the temperature sensor inside a semiconductor device, + e.g. +- 10 degrees centigrade error range. + allowable range is [-79..170]. + The temperature readings are in decimal degrees Celsius. + + Please note that the Tcase validity depends on the state of the + wExceptionEventControl attribute: it is up to the user to + verify that the applicable mask (TOO_HIGH_TEMP_EN, and / or + TOO_LOW_TEMP_EN) is set for the exception handling control. + This can be either done by ufs-bsg or ufs-debugfs. + + The file is read only. + +What: /sys/bus/platform/drivers/ufshcd/*/attributes/high_temp_bound +Date: September 2021 +Contact: Avri Altman +Description: The high temperature (bDeviceTooHighTempBoundary attribute) + from which TOO_HIGH_TEMP in wExceptionEventStatus is turned on. + The temperature readings are in decimal degrees Celsius. + allowable range is [20..170]. + + The file is read only. + +What: /sys/bus/platform/drivers/ufshcd/*/attributes/low_temp_bound +Date: September 2021 +Contact: Avri Altman +Description: The low temperature (bDeviceTooLowTempBoundary attribute) + from which TOO_LOW_TEMP in wExceptionEventStatus is turned on. + The temperature readings are in decimal degrees Celsius. + allowable range is [-79..0]. + + The file is read only. diff --git a/drivers/scsi/ufs/ufs-sysfs.c b/drivers/scsi/ufs/ufs-sysfs.c index 5c405ff7b6ea..a9abe33c40e4 100644 --- a/drivers/scsi/ufs/ufs-sysfs.c +++ b/drivers/scsi/ufs/ufs-sysfs.c @@ -1047,6 +1047,86 @@ static inline bool ufshcd_is_wb_attrs(enum attr_idn idn) idn <= QUERY_ATTR_IDN_CURR_WB_BUFF_SIZE; } +static inline bool ufshcd_is_temp_attrs(enum attr_idn idn) +{ + return idn >= QUERY_ATTR_IDN_CASE_ROUGH_TEMP && + idn <= QUERY_ATTR_IDN_LOW_TEMP_BOUND; +} + +static bool ufshcd_case_temp_legal(struct ufs_hba *hba) +{ + u32 ee_mask; + int ret; + + ufshcd_rpm_get_sync(hba); + ret = ufshcd_query_attr(hba, UPIU_QUERY_OPCODE_READ_ATTR, + QUERY_ATTR_IDN_EE_CONTROL, 0, 0, &ee_mask); + ufshcd_rpm_put_sync(hba); + if (ret) + return false; + + return (ufshcd_is_high_temp_notif_allowed(hba) && + (ee_mask & MASK_EE_TOO_HIGH_TEMP)) || + (ufshcd_is_low_temp_notif_allowed(hba) && + (ee_mask & MASK_EE_TOO_HIGH_TEMP)); +} + +static bool ufshcd_temp_legal(struct ufs_hba *hba, enum attr_idn idn, + u32 value) +{ + return (idn == QUERY_ATTR_IDN_CASE_ROUGH_TEMP && value >= 1 && + value <= 250 && ufshcd_case_temp_legal(hba)) || + (idn == QUERY_ATTR_IDN_HIGH_TEMP_BOUND && value >= 100 && + value <= 250) || + (idn == QUERY_ATTR_IDN_LOW_TEMP_BOUND && value >= 1 && + value <= 80); +} + +#define UFS_ATTRIBUTE_DEC(_name, _uname) \ +static ssize_t _name##_show(struct device *dev, \ + struct device_attribute *attr, char *buf) \ +{ \ + struct ufs_hba *hba = dev_get_drvdata(dev); \ + u32 value; \ + int dec_value; \ + int ret; \ + u8 index = 0; \ + \ + down(&hba->host_sem); \ + if (!ufshcd_is_user_access_allowed(hba)) { \ + up(&hba->host_sem); \ + return -EBUSY; \ + } \ + if (ufshcd_is_temp_attrs(QUERY_ATTR_IDN##_uname)) { \ + if (!ufshcd_is_temp_notif_allowed(hba)) { \ + up(&hba->host_sem); \ + return -EOPNOTSUPP; \ + } \ + } \ + ufshcd_rpm_get_sync(hba); \ + ret = ufshcd_query_attr(hba, UPIU_QUERY_OPCODE_READ_ATTR, \ + QUERY_ATTR_IDN##_uname, index, 0, &value); \ + ufshcd_rpm_put_sync(hba); \ + if (ret) { \ + ret = -EINVAL; \ + goto out; \ + } \ + dec_value = value; \ + if (ufshcd_is_temp_attrs(QUERY_ATTR_IDN##_uname)) { \ + if (!ufshcd_temp_legal(hba, QUERY_ATTR_IDN##_uname, \ + value)) { \ + ret = -EINVAL; \ + goto out; \ + } \ + dec_value -= 80; \ + } \ + ret = sysfs_emit(buf, "%d\n", dec_value); \ +out: \ + up(&hba->host_sem); \ + return ret; \ +} \ +static DEVICE_ATTR_RO(_name) + #define UFS_ATTRIBUTE(_name, _uname) \ static ssize_t _name##_show(struct device *dev, \ struct device_attribute *attr, char *buf) \ @@ -1100,6 +1180,9 @@ UFS_ATTRIBUTE(wb_avail_buf, _AVAIL_WB_BUFF_SIZE); UFS_ATTRIBUTE(wb_life_time_est, _WB_BUFF_LIFE_TIME_EST); UFS_ATTRIBUTE(wb_cur_buf, _CURR_WB_BUFF_SIZE); +UFS_ATTRIBUTE_DEC(case_rough_temp, _CASE_ROUGH_TEMP); +UFS_ATTRIBUTE_DEC(high_temp_bound, _HIGH_TEMP_BOUND); +UFS_ATTRIBUTE_DEC(low_temp_bound, _LOW_TEMP_BOUND); static struct attribute *ufs_sysfs_attributes[] = { &dev_attr_boot_lun_enabled.attr, @@ -1119,6 +1202,9 @@ static struct attribute *ufs_sysfs_attributes[] = { &dev_attr_ffu_status.attr, &dev_attr_psa_state.attr, &dev_attr_psa_data_size.attr, + &dev_attr_case_rough_temp.attr, + &dev_attr_high_temp_bound.attr, + &dev_attr_low_temp_bound.attr, &dev_attr_wb_flush_status.attr, &dev_attr_wb_avail_buf.attr, &dev_attr_wb_life_time_est.attr, diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h index 4f2a2fe0c84a..03d08fc1bd68 100644 --- a/drivers/scsi/ufs/ufs.h +++ b/drivers/scsi/ufs/ufs.h @@ -152,6 +152,9 @@ enum attr_idn { QUERY_ATTR_IDN_PSA_STATE = 0x15, QUERY_ATTR_IDN_PSA_DATA_SIZE = 0x16, QUERY_ATTR_IDN_REF_CLK_GATING_WAIT_TIME = 0x17, + QUERY_ATTR_IDN_CASE_ROUGH_TEMP = 0x18, + QUERY_ATTR_IDN_HIGH_TEMP_BOUND = 0x19, + QUERY_ATTR_IDN_LOW_TEMP_BOUND = 0x1A, QUERY_ATTR_IDN_WB_FLUSH_STATUS = 0x1C, QUERY_ATTR_IDN_AVAIL_WB_BUFF_SIZE = 0x1D, QUERY_ATTR_IDN_WB_BUFF_LIFE_TIME_EST = 0x1E,