Received: by 2002:a05:7412:251c:b0:e2:908c:2ebd with SMTP id w28csp1330213rda; Mon, 23 Oct 2023 09:16:06 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGPgOkgAujdPI6pmgqbE0JTfWB0eORh+CIYwek/XqZOwymNsiU2XeGeTEVttwGssxI203iM X-Received: by 2002:a92:2907:0:b0:357:a5cc:de86 with SMTP id l7-20020a922907000000b00357a5ccde86mr10376766ilg.23.1698077765998; Mon, 23 Oct 2023 09:16:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698077765; cv=none; d=google.com; s=arc-20160816; b=pzEKA30Jbi+4SM/tkxTDrBzq7YaNkIG+hQRRo9SkNwAz8yaLG3hn7hVJSDs2rFy5sC QkWPd7OwKqA3/ezVX/F6GQuokadrBwaxz1CrrFS2s5pQjxlQf7jBZmcAZQgAAxbLeRU2 qT1HwtnVNIe+SJW5dQ2Kf++5opAPbVvf1qSHNmpYGp7CJCmKkfvVX99r7OHP2aOKSdKR DyPixOL/Xd3K1gq7HYL+WkZCG8UlrPgbTs47kN/7xEXwlMgk/yW2aGGVg4JpUSVkA4L6 pYnHOSHWHgZc2AxqrmJ0dlTkIAx16EqlFpXFkNbh/mwCRkHEKbmHD9VwyBamfISq6qpb fdfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:message-id:in-reply-to :subject:cc:to:from:date:dkim-signature; bh=qDOIWXK2JBXmOK86hnOiCamMiC+8r8xzhyfkh9+WqKA=; fh=mOqrdtzLxfRdhx+JUcCLIFZwj5ZpRA4B+MTwRGfrWMA=; b=u1hOA6+khXS/k5O0bqm37ym3NIaYsXdSuVvUtMY/NAWr3m7TOlpdNWDpYR5++Yyvg1 /gwUbCnObsgBNnZw6tknPqQzoaGnmvodaHR8B0QQZ+tYNaBQr294BMzl2lhnO7tjuzFC 0Mw77MDYHuMIr3/UiqVtdUVK01RwFuj8qds7gEEsIvBXGRobR/x+ur5kiJDADx1l4QQD f9PvC6zv4LWlTBX0UOtW3MPWOxlwWYUuZ1jm+A7+kSc2D+GFW4p7a+faDKEYtQk6F06w VZBSpVd8gn1igEwjcGew5f1Wnb9E8QjJ5JovJRRIP82Qh7WlAkwLrMjDq1taTnIZKEUI xQcA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=A77BxqvY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id k3-20020a6568c3000000b005859b1b34f7si6661575pgt.862.2023.10.23.09.16.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Oct 2023 09:16:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=A77BxqvY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 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 (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 303FC807215F; Mon, 23 Oct 2023 09:15:47 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231732AbjJWQPm (ORCPT + 99 others); Mon, 23 Oct 2023 12:15:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45384 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233494AbjJWQPl (ORCPT ); Mon, 23 Oct 2023 12:15:41 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 19EDA10E; Mon, 23 Oct 2023 09:15:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1698077739; x=1729613739; h=date:from:to:cc:subject:in-reply-to:message-id: references:mime-version; bh=DxxNhBXgQp4ZWfJVx10BBIGtzohOy5sWX4vR/cTpJFE=; b=A77BxqvYQGZc9InKhrFT/PGTYtOXHY+JEeYe3+3g0HU/Be8zzZCzU6lw bBRQEbScbI044Rl6ATH0gkvR+QQlGDnUmWjbYZXiCrr4Qac+vPx66j68M RJQgrRiPNl2raIQwNl3MFaa6UVR361FoDlGQxw/j9HDp/h5eeOaPJhpu9 XVR0zzhM0OYDcaMgyqqAD403s3rgJqwJEg3D0o2Y1NwA29qqLcoXeKsnH UzEq8yaQPgR5gUmovtGfKC1EKEXEeNwYR1V/KecfHJA9UxCwlFvpPlWGA X07T/9x4NYGzPY7CzK0VXsuzhbO1kvb5JRYNsqWt4TDGrUhl7vIJpbMj/ w==; X-IronPort-AV: E=McAfee;i="6600,9927,10872"; a="389721528" X-IronPort-AV: E=Sophos;i="6.03,244,1694761200"; d="scan'208";a="389721528" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Oct 2023 09:15:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10872"; a="751679802" X-IronPort-AV: E=Sophos;i="6.03,244,1694761200"; d="scan'208";a="751679802" Received: from foliveix-mobl5.amr.corp.intel.com ([10.251.211.194]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Oct 2023 09:15:37 -0700 Date: Mon, 23 Oct 2023 19:15:34 +0300 (EEST) From: =?ISO-8859-15?Q?Ilpo_J=E4rvinen?= To: "David E. Box" cc: LKML , platform-driver-x86@vger.kernel.org, rajvi.jingar@linux.intel.com Subject: Re: [PATCH V4 13/17] platform/x86/intel/pmc: Display LPM requirements for multiple PMCs In-Reply-To: <20231018231624.1044633-14-david.e.box@linux.intel.com> Message-ID: <78f6742-af1e-4a33-a52a-b01dd69847d1@linux.intel.com> References: <20231018231624.1044633-1-david.e.box@linux.intel.com> <20231018231624.1044633-14-david.e.box@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE autolearn=ham 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-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 23 Oct 2023 09:15:47 -0700 (PDT) On Wed, 18 Oct 2023, David E. Box wrote: > From: Rajvi Jingar > > Update the substate_requirements attribute to display the requirements for > all the PMCs on a package. > > Signed-off-by: Rajvi Jingar > Signed-off-by: David E. Box > --- > V4 - No change > > V3 - Add missing submitter signoff > > V2 - no change > > drivers/platform/x86/intel/pmc/core.c | 129 ++++++++++++++------------ > 1 file changed, 71 insertions(+), 58 deletions(-) > > diff --git a/drivers/platform/x86/intel/pmc/core.c b/drivers/platform/x86/intel/pmc/core.c > index 3894119d61b0..fcb0dc702aea 100644 > --- a/drivers/platform/x86/intel/pmc/core.c > +++ b/drivers/platform/x86/intel/pmc/core.c > @@ -728,7 +728,7 @@ static int pmc_core_substate_l_sts_regs_show(struct seq_file *s, void *unused) > } > DEFINE_SHOW_ATTRIBUTE(pmc_core_substate_l_sts_regs); > > -static void pmc_core_substate_req_header_show(struct seq_file *s) > +static void pmc_core_substate_req_header_show(struct seq_file *s, int pmc_index) > { > struct pmc_dev *pmcdev = s->private; > int i, mode; > @@ -743,68 +743,81 @@ static void pmc_core_substate_req_header_show(struct seq_file *s) > static int pmc_core_substate_req_regs_show(struct seq_file *s, void *unused) > { > struct pmc_dev *pmcdev = s->private; > - struct pmc *pmc = pmcdev->pmcs[PMC_IDX_MAIN]; > - const struct pmc_bit_map **maps = pmc->map->lpm_sts; > - const struct pmc_bit_map *map; > - const int num_maps = pmc->map->lpm_num_maps; > - u32 sts_offset = pmc->map->lpm_status_offset; > - u32 *lpm_req_regs = pmc->lpm_req_regs; > - int mp; > - > - /* Display the header */ > - pmc_core_substate_req_header_show(s); > - > - /* Loop over maps */ > - for (mp = 0; mp < num_maps; mp++) { > - u32 req_mask = 0; > - u32 lpm_status; > - int mode, idx, i, len = 32; > - > - /* > - * Capture the requirements and create a mask so that we only > - * show an element if it's required for at least one of the > - * enabled low power modes > - */ > - pmc_for_each_mode(idx, mode, pmcdev) > - req_mask |= lpm_req_regs[mp + (mode * num_maps)]; > - > - /* Get the last latched status for this map */ > - lpm_status = pmc_core_reg_read(pmc, sts_offset + (mp * 4)); > - > - /* Loop over elements in this map */ > - map = maps[mp]; > - for (i = 0; map[i].name && i < len; i++) { > - u32 bit_mask = map[i].bit_mask; > - > - if (!(bit_mask & req_mask)) > - /* > - * Not required for any enabled states > - * so don't display > - */ > - continue; > - > - /* Display the element name in the first column */ > - seq_printf(s, "%30s |", map[i].name); > - > - /* Loop over the enabled states and display if required */ > - pmc_for_each_mode(idx, mode, pmcdev) { > - if (lpm_req_regs[mp + (mode * num_maps)] & bit_mask) > - seq_printf(s, " %9s |", > - "Required"); > + u32 sts_offset; > + u32 *lpm_req_regs; > + int num_maps, mp, pmc_index; > + > + for (pmc_index = 0; pmc_index < ARRAY_SIZE(pmcdev->pmcs); ++pmc_index) { > + struct pmc *pmc = pmcdev->pmcs[pmc_index]; > + const struct pmc_bit_map **maps; > + > + if (!pmc) > + continue; > + > + maps = pmc->map->lpm_sts; > + num_maps = pmc->map->lpm_num_maps; > + sts_offset = pmc->map->lpm_status_offset; > + lpm_req_regs = pmc->lpm_req_regs; > + > + if (!lpm_req_regs) > + continue; > + > + /* Display the header */ > + pmc_core_substate_req_header_show(s, pmc_index); > + > + /* Loop over maps */ > + for (mp = 0; mp < num_maps; mp++) { > + u32 req_mask = 0; > + u32 lpm_status; > + const struct pmc_bit_map *map; > + int mode, idx, i, len = 32; > + > + /* > + * Capture the requirements and create a mask so that we only > + * show an element if it's required for at least one of the > + * enabled low power modes > + */ > + pmc_for_each_mode(idx, mode, pmcdev) > + req_mask |= lpm_req_regs[mp + (mode * num_maps)]; > + > + /* Get the last latched status for this map */ > + lpm_status = pmc_core_reg_read(pmc, sts_offset + (mp * 4)); > + > + /* Loop over elements in this map */ > + map = maps[mp]; > + for (i = 0; map[i].name && i < len; i++) { > + u32 bit_mask = map[i].bit_mask; > + > + if (!(bit_mask & req_mask)) { > + /* > + * Not required for any enabled states > + * so don't display > + */ > + continue; > + } > + > + /* Display the element name in the first column */ > + seq_printf(s, "pmc%d: %26s |", pmc_index, map[i].name); > + > + /* Loop over the enabled states and display if required */ > + pmc_for_each_mode(idx, mode, pmcdev) { > + if (lpm_req_regs[mp + (mode * num_maps)] & bit_mask) > + seq_printf(s, " %9s |", > + "Required"); > + else > + seq_printf(s, " %9s |", " "); It would be better to not branch like this but alter param instead: bool required = lpm_req_regs[... seq_printf(s, " %9s |", required ? "Required" : " "); > + } > + > + /* In Status column, show the last captured state of this agent */ > + if (lpm_status & bit_mask) > + seq_printf(s, " %9s |", "Yes"); > else > seq_printf(s, " %9s |", " "); Likewise here although I know this comes from the original. -- i. > + > + seq_puts(s, "\n"); > } > - > - /* In Status column, show the last captured state of this agent */ > - if (lpm_status & bit_mask) > - seq_printf(s, " %9s |", "Yes"); > - else > - seq_printf(s, " %9s |", " "); > - > - seq_puts(s, "\n"); > } > } > - > return 0; > } > DEFINE_SHOW_ATTRIBUTE(pmc_core_substate_req_regs); >