Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp20475183rwd; Thu, 29 Jun 2023 02:50:45 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6PxZJ+7FArV+1hykKsSXIi3GdizN4TgF7h9PZutAAU7+5xtSyHZVklYGOPu90rM/gVwvgG X-Received: by 2002:aa7:88c7:0:b0:682:2fea:39f0 with SMTP id k7-20020aa788c7000000b006822fea39f0mr2735676pff.5.1688032245270; Thu, 29 Jun 2023 02:50:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688032245; cv=none; d=google.com; s=arc-20160816; b=l+emm0yalfi84o/7ivic4KxXPzAJtS+x0ILAwYn8mvmRbu2OvnM1Ehu25LnQdqPnGr 3SEuFChVNvI1E8bYYiO15RF3x8mWqE12uXCAwlxCDiu0sH43KzcLJKCIOYQ52GzN/JS9 KAdBt3VqpNgvT/rGmQKik0uggbfhSq27d+LCzpry8GywwImuop8ecXN/w2tMOysGF/LZ Bh3XblzfPOxqIHbjqGvUYSjZEJf9449elUkFCxt1EUq3WDTKhYcV8FpA+wr2KMjhG/7X 7Q035Ff/4CRdmzPXWOm2CPncQ6sB6JOkO7986TFjZFgCcuIergWWpOHJ/fhD1C13dF/N IrNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version; bh=+pHtnW4I+PNBuBPrnSBoO9yXgPqb2ECwdVn9RISX2Bc=; fh=opeZhvFY7+EcOthYLxq63a1hKfSR45C6YNGI5PFn8DQ=; b=KQRz+d+L2KUQN+FI5XBB5bZmrlYOZudh/DNY2mCLu7dHjr4PGjEJifvI/eQjPRR6GT 9gVNiELg1kYkDobPbKKKmhGL2MXVERPtBLSYE3Rlz8kBbVqy6C+43+bQ88V+E+cOw4Y0 DFDX9el6PIqxeAYfCxGrj3xBcbP3W6K1RK6Z7cbxXPQoJ7/fubLbXlszMon9B++uQJHj 1gHdbqA5u/nwxmQCEFD3VlFD4GzStts3jmEXkNhptLFbYPzRQhSs0WeL6hgJRKuO0o2J 0agee27UwkWUZN2IIWmpcDCyQSoihN5TBGUqSogFIx+j6QJmnpW4h427YsamTK6viPEj F5QQ== ARC-Authentication-Results: i=1; mx.google.com; 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=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bu4-20020a056a00410400b006761adef5ddsi8043224pfb.274.2023.06.29.02.50.31; Thu, 29 Jun 2023 02:50:45 -0700 (PDT) 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; 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=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231767AbjF2IyX convert rfc822-to-8bit (ORCPT + 99 others); Thu, 29 Jun 2023 04:54:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58930 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232023AbjF2IyO (ORCPT ); Thu, 29 Jun 2023 04:54:14 -0400 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 11F65132; Thu, 29 Jun 2023 01:54:13 -0700 (PDT) Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-98502b12fd4so11503366b.1; Thu, 29 Jun 2023 01:54:12 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688028851; x=1690620851; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=h81lSLoSxEDR7BgV0xLmtf+f7OOXbVC7LxGK66ZCiI4=; b=NUlCTNRrpMVlc3i5L6QWPIStSxjH39muAirh8zWoZRdLWGZ9WpArmSXjNRJ3rXIZ9P W0fS05UOfPnjun1UrhGF55QziI+QbxaNZo44NjXCYpqb6lt0oc27eMT3VyaWu4T2P8V4 Wabg1fH0J4qr2uR1aRXYmaQvHRacyGLP8idXSN8hyDkKJPgNEVntc8H8xc22F75kYKuT KYNb/30eLKu8A6BIogVoaIh60Eh7X6e63Q4RtWQH5gooc58ha+oqhqtu6ZH+bv26SL9D SYGu+9rB15m1KT1LdAMm64YVa+kdeK0hrUd3jT3hzdBkPD7P/MFW9w4SuSZN2xDyh6vM bPRA== X-Gm-Message-State: AC+VfDyHGGK8e5mV1zKB6CVhiwmTXZOYttXpPGhMGD6/E1ELGpOFMMeD Y4Rf+vcL4ftLUlrIItuuLGoFUKjlmYoLLPE4fgw= X-Received: by 2002:a17:906:64d5:b0:982:9a08:60 with SMTP id p21-20020a17090664d500b009829a080060mr1526508ejn.3.1688028851414; Thu, 29 Jun 2023 01:54:11 -0700 (PDT) MIME-Version: 1.0 References: <20230628225341.3718351-1-srinivas.pandruvada@linux.intel.com> In-Reply-To: <20230628225341.3718351-1-srinivas.pandruvada@linux.intel.com> From: "Rafael J. Wysocki" Date: Thu, 29 Jun 2023 10:54:00 +0200 Message-ID: Subject: Re: [PATCH] cpufreq: intel_pstate: Fix scaling for hybrid capable system with disabled E-cores To: Srinivas Pandruvada Cc: rafael@kernel.org, lenb@kernel.org, viresh.kumar@linaro.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT X-Spam-Status: No, score=-1.4 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE 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 On Thu, Jun 29, 2023 at 12:54 AM Srinivas Pandruvada wrote: > > Some system BIOS configuration may provide option to disable E-cores. > As part of this change, CPUID feature for hybrid (Leaf 7 sub leaf 0, > EDX[15] = 0) may not be set. But HWP performance limits will still be > using a scaling factor like any other hybrid enabled system. > > The current check for applying scaling factor will fail when hybrid > CPUID feature is not set. Only way to make sure that scaling should be > applied by checking CPPC nominal frequency and nominal performance. If > CPPC nominal frequency and nominal performance is defined and nominal > frequency is not in multiples of 100MHz of nominal performance, then use > hybrid scaling factor. > > The above check will fail for non hybrid capable systems as they don't > publish nominal frequency field in CPPC, so this function can be used > for all HWP systems without additional cpu model check. > > Signed-off-by: Srinivas Pandruvada > --- > drivers/cpufreq/intel_pstate.c | 59 ++++++++++++++++++++++++++++------ > 1 file changed, 49 insertions(+), 10 deletions(-) > > diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c > index 2548ec92faa2..b562ed7c4f37 100644 > --- a/drivers/cpufreq/intel_pstate.c > +++ b/drivers/cpufreq/intel_pstate.c > @@ -330,6 +330,13 @@ static bool intel_pstate_get_ppc_enable_status(void) > return acpi_ppc; > } > > +#define HYBRID_SCALING_FACTOR 78741 > + > +static inline int core_get_scaling(void) > +{ > + return 100000; > +} The above should be defined outside #ifdef CONFIG_ACPI. > + > #ifdef CONFIG_ACPI_CPPC_LIB > > /* The work item is needed to avoid CPU hotplug locking issues */ > @@ -400,10 +407,35 @@ static int intel_pstate_get_cppc_guaranteed(int cpu) > > return cppc_perf.nominal_perf; > } > + > +static int intel_pstate_cppc_get_scaling(int cpu) > +{ > + struct cppc_perf_caps cppc_perf; > + int ret; > + > + ret = cppc_get_perf_caps(cpu, &cppc_perf); > + > + /* > + * Check if nominal frequency is multiples of 100 MHz, if > + * not return hybrid scaling factor. > + */ > + if (!ret && cppc_perf.nominal_perf && cppc_perf.nominal_freq && > + (cppc_perf.nominal_perf * 100 != cppc_perf.nominal_freq)) > + return HYBRID_SCALING_FACTOR; > + > + return core_get_scaling(); > +} > + > #else /* CONFIG_ACPI_CPPC_LIB */ > static inline void intel_pstate_set_itmt_prio(int cpu) > { > } > + > +static int intel_pstate_cppc_get_scaling(int cpu) > +{ > + return core_get_scaling(); > +} > + > #endif /* CONFIG_ACPI_CPPC_LIB */ > > static void intel_pstate_init_acpi_perf_limits(struct cpufreq_policy *policy) > @@ -1895,11 +1927,6 @@ static int core_get_turbo_pstate(int cpu) > return ret; > } > > -static inline int core_get_scaling(void) > -{ > - return 100000; > -} > - > static u64 core_get_val(struct cpudata *cpudata, int pstate) > { > u64 val; > @@ -1936,16 +1963,29 @@ static void hybrid_get_type(void *data) > *cpu_type = get_this_hybrid_cpu_type(); > } > > -static int hybrid_get_cpu_scaling(int cpu) > +static int hwp_get_cpu_scaling(int cpu) > { > u8 cpu_type = 0; > > smp_call_function_single(cpu, hybrid_get_type, &cpu_type, 1); > /* P-cores have a smaller perf level-to-freqency scaling factor. */ > if (cpu_type == 0x40) > - return 78741; > + return HYBRID_SCALING_FACTOR; > > - return core_get_scaling(); > + /* Use default core scaling for E-cores */ > + if (cpu_type == 0x20) > + return core_get_scaling(); > + > + /* > + * If reached here, it means that, this system is either non > + * hybrid system (like Tiger Lake) or hybrid capable system (like > + * Alder Lake or Raptor Lake) with no E cores (CPUID for hybrid > + * support is 0). > + * All non hybrid systems, don't publish nominal_frequency > + * field (means nominal frequency = 0), In that case > + * the legacy core scaling is used. > + */ > + return intel_pstate_cppc_get_scaling(cpu); > } > > static void intel_pstate_set_pstate(struct cpudata *cpu, int pstate) > @@ -3393,8 +3433,7 @@ static int __init intel_pstate_init(void) > if (!default_driver) > default_driver = &intel_pstate; > > - if (boot_cpu_has(X86_FEATURE_HYBRID_CPU)) > - pstate_funcs.get_cpu_scaling = hybrid_get_cpu_scaling; > + pstate_funcs.get_cpu_scaling = hwp_get_cpu_scaling; > > goto hwp_cpu_matched; > } > -- > 2.31.1 >