From patchwork Sat Feb 4 13:43:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rajat Khandelwal X-Patchwork-Id: 52489 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp844827wrn; Fri, 3 Feb 2023 05:43:38 -0800 (PST) X-Google-Smtp-Source: AK7set9D4nIteP6wnrmwOwgtSfcGq8pZHuXqgXEq4r5omZjARJ9uxzOVW9vTwMR+KLG08nxtnZfw X-Received: by 2002:a17:90a:19c1:b0:230:8452:679e with SMTP id 1-20020a17090a19c100b002308452679emr274802pjj.27.1675431818619; Fri, 03 Feb 2023 05:43:38 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675431818; cv=none; d=google.com; s=arc-20160816; b=B9jUpm8u8T6VfaPYO8Y28N3xM4SIeee18rRH5+Xh4zxyS9QSwXDUJfp3dk26eTgc8Z v4Yd1BO6s923b0KzJU9TpcNhM3TbNd0C0LShzHtAQ4Lgfq2OK/kHvTs7XGTRST+9y2Kg Klm4aT4x4BvhYA0GzQHneyOwgmu6BqM8kwmbnhaH2MQGQ1f4yXM2Aw7fipN/80E1OyuQ +zY27hs81K6xfXIkrVGRrGuJjVTgTTPn89zcSICm6+m38P8h7Ui4s4s2Uw8yvmhDEbZx gDqOqbH6XJjhq5BA/OeKknXeObDU+QZCAiU3gQc+scEbCpW1P88owfcRgO8WuK+7A1QB Nn1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=7q/QiMO8Yx5DQ74zPRKL8JzgcWIf+Yt8pemzQrfJBa8=; b=yNKf3hVpnH4O8bLzNY0iNaTGFJ/TGH9ZzdXf/gha0gowcri/v9WCs9KmcEkbyNmLnY r69QpezqrAlEaVgOB/TLfos6g90unR53QTrCa4l9VeZuQVnb/yr5kbT70nUSJmryHY3f RyQ+jTQJzKGRJj1ILpjofPQKke5atEDJuOV7wGWUsKBpfOGEy2Vcs4XrRoDyRr7DNjs6 nGZ+XggJmmtaGwCDlL+y3J/0oWkHUZv5IkRRqt/JZxmqAyEWqCBvRwqkKK6RQAHHMvKq +ghvuie/Tr6K/GeNlLRTSyNWJHpkLMBDHvpPkIY1wgmllez9Ejo5lszbuXUZ/X6tNXYh I3ig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=hWyOFRHG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id r4-20020a638f44000000b004e931d76436si2679675pgn.681.2023.02.03.05.43.23; Fri, 03 Feb 2023 05:43:38 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=hWyOFRHG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232700AbjBCNlZ (ORCPT + 99 others); Fri, 3 Feb 2023 08:41:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54236 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231478AbjBCNlX (ORCPT ); Fri, 3 Feb 2023 08:41:23 -0500 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C5C0412F15; Fri, 3 Feb 2023 05:41:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1675431680; x=1706967680; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=3eYI3e/ZTu5G0g9in3jd2vyV9lR37cDnjIp0K+JxVrs=; b=hWyOFRHGSMoY0tkq8klcsGFLGDQM9wgmFuZ3/WwGaC5CbqPPCRlvMSNH S/McXtEEf2QFGnmytJyI0HRQO81ooOSO9rUKgOA3yh9bLwRLg7G8Zbp7y G8Pxlk07cfd+ZxEaNtj/25BOEhyVfID7kq/y4LfDNQ0UySJnjgNMwjVnV YDVUkc2tsJFCU1bU5+B1d2z6pnexYzKvxr2bPJVOnAqARsorzyG8MgVGp eY04X0Uyu5TZfsLyxkRKuyV9Mm80jEN32OEk0wjXyKmcFEnkyYKltSJZJ 1XnZTlIwdUDKdlPnD2HEeexfx2TNQzKOonMdZvBGWDrcADnewmMzkumhr A==; X-IronPort-AV: E=McAfee;i="6500,9779,10610"; a="312403648" X-IronPort-AV: E=Sophos;i="5.97,270,1669104000"; d="scan'208";a="312403648" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Feb 2023 05:41:20 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10610"; a="698071403" X-IronPort-AV: E=Sophos;i="5.97,270,1669104000"; d="scan'208";a="698071403" Received: from unknown (HELO rajath-NUC10i7FNH..) ([10.223.165.88]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Feb 2023 05:41:17 -0800 From: Rajat Khandelwal To: irenic.rajneesh@gmail.com, david.e.box@intel.com, hdegoede@redhat.com, markgross@kernel.org Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, rajat.khandelwal@intel.com, Rajat Khandelwal Subject: [PATCH v3] platform/x86/intel/pmc: core: Add support to show LTR-ignored components Date: Sat, 4 Feb 2023 19:13:27 +0530 Message-Id: <20230204134327.412086-1-rajat.khandelwal@linux.intel.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_00,DATE_IN_FUTURE_24_48, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,SPF_HELO_NONE, SPF_NONE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756817594556561137?= X-GMAIL-MSGID: =?utf-8?q?1756817594556561137?= Currently, 'ltr_ignore' sysfs attribute, when read, returns nothing, even if there are components whose LTR values have been ignored. This patch adds the feature to print out such components, if they exist. Signed-off-by: Rajat Khandelwal --- v3: Incorporated a mutex lock for accessing 'ltr_ignore_list' v2: kmalloc -> devm_kmalloc drivers/platform/x86/intel/pmc/core.c | 56 +++++++++++++++++++++------ drivers/platform/x86/intel/pmc/core.h | 2 +- 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/drivers/platform/x86/intel/pmc/core.c b/drivers/platform/x86/intel/pmc/core.c index 3a15d32d7644..31d649d8ce12 100644 --- a/drivers/platform/x86/intel/pmc/core.c +++ b/drivers/platform/x86/intel/pmc/core.c @@ -53,6 +53,17 @@ const struct pmc_bit_map msr_map[] = { {} }; +/* Mutual exclusion to access the list of LTR-ignored components */ +static DEFINE_MUTEX(ltr_entry_mutex); + +struct ltr_entry { + u32 comp_index; + const char *comp_name; + struct list_head node; +}; + +static LIST_HEAD(ltr_ignore_list); + static inline u32 pmc_core_reg_read(struct pmc_dev *pmcdev, int reg_offset) { return readl(pmcdev->regbase + reg_offset); @@ -435,27 +446,18 @@ static int pmc_core_pll_show(struct seq_file *s, void *unused) } DEFINE_SHOW_ATTRIBUTE(pmc_core_pll); -int pmc_core_send_ltr_ignore(struct pmc_dev *pmcdev, u32 value) +void pmc_core_send_ltr_ignore(struct pmc_dev *pmcdev, u32 value) { const struct pmc_reg_map *map = pmcdev->map; u32 reg; - int err = 0; mutex_lock(&pmcdev->lock); - if (value > map->ltr_ignore_max) { - err = -EINVAL; - goto out_unlock; - } - reg = pmc_core_reg_read(pmcdev, map->ltr_ignore_offset); reg |= BIT(value); pmc_core_reg_write(pmcdev, map->ltr_ignore_offset, reg); -out_unlock: mutex_unlock(&pmcdev->lock); - - return err; } static ssize_t pmc_core_ltr_ignore_write(struct file *file, @@ -464,6 +466,8 @@ static ssize_t pmc_core_ltr_ignore_write(struct file *file, { struct seq_file *s = file->private_data; struct pmc_dev *pmcdev = s->private; + const struct pmc_reg_map *map = pmcdev->map; + struct ltr_entry *entry; u32 buf_size, value; int err; @@ -473,13 +477,41 @@ static ssize_t pmc_core_ltr_ignore_write(struct file *file, if (err) return err; - err = pmc_core_send_ltr_ignore(pmcdev, value); + if (value > map->ltr_ignore_max) + return -EINVAL; + + mutex_lock(<r_entry_mutex); + + list_for_each_entry(entry, <r_ignore_list, node) { + if (entry->comp_index == value) + return -EEXIST; + } + + entry = devm_kmalloc(&pmcdev->pdev->dev, sizeof(*entry), GFP_KERNEL); + if (!entry) + return -ENOMEM; + + entry->comp_name = map->ltr_show_sts[value].name; + entry->comp_index = value; + list_add_tail(&entry->node, <r_ignore_list); - return err == 0 ? count : err; + mutex_unlock(<r_entry_mutex); + + pmc_core_send_ltr_ignore(pmcdev, value); + + return count; } static int pmc_core_ltr_ignore_show(struct seq_file *s, void *unused) { + struct ltr_entry *entry; + + mutex_lock(<r_entry_mutex); + list_for_each_entry(entry, <r_ignore_list, node) { + seq_printf(s, "%s\n", entry->comp_name); + } + mutex_unlock(<r_entry_mutex); + return 0; } diff --git a/drivers/platform/x86/intel/pmc/core.h b/drivers/platform/x86/intel/pmc/core.h index 810204d758ab..da35b0fcbe6e 100644 --- a/drivers/platform/x86/intel/pmc/core.h +++ b/drivers/platform/x86/intel/pmc/core.h @@ -396,7 +396,7 @@ extern const struct pmc_reg_map adl_reg_map; extern const struct pmc_reg_map mtl_reg_map; extern void pmc_core_get_tgl_lpm_reqs(struct platform_device *pdev); -extern int pmc_core_send_ltr_ignore(struct pmc_dev *pmcdev, u32 value); +extern void pmc_core_send_ltr_ignore(struct pmc_dev *pmcdev, u32 value); void spt_core_init(struct pmc_dev *pmcdev); void cnp_core_init(struct pmc_dev *pmcdev);