From nobody Sun Feb 8 02:41:26 2026 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3DF01A76CB for ; Thu, 19 Dec 2024 19:21:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734636116; cv=none; b=E+wvoLcJNCQ6rCpe0M4ykfe9VxKbrhE4QPuuAU0EzYMFtuulCdT60/lFxfCmVFA5IPaToFlYAmJtzLR1lbQcm9gHEpo/NltUBC4sgDgIlEPY0UDvnO3dDHsGwP/uwt+SqR7sUxdnfp28exQkJe4w/CzX4hf/AcOglCQwtML8nMg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734636116; c=relaxed/simple; bh=cFOZEW7bW7hijkJbEkuiT+veherkKLz3/wXF8DZQgnI=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=BhA1fkvB+TeCi66P+5Np9hhfU2D0pe1ltkbwpOKlnwxAgrzNDXSYORZ2IpGD/4nTx4ciqFNFNbFJOqj9ktziFJbIyc8G/WKXDD+wB+BA1tMBoeReIsjZzKnrV1v0jpaE/LI0tmb/UaTu+yDdnw1Q3cmwldkMy8NwiHM1bwizt90= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=9elements.com; spf=pass smtp.mailfrom=9elements.com; dkim=pass (2048-bit key) header.d=9elements.com header.i=@9elements.com header.b=d/3E2lyb; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=9elements.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=9elements.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=9elements.com header.i=@9elements.com header.b="d/3E2lyb" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-3862d6d5765so754175f8f.3 for ; Thu, 19 Dec 2024 11:21:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=9elements.com; s=google; t=1734636113; x=1735240913; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=UnWI2zj2aMIKQzCXIjdxrWPl8CZX1JzCR1K4TNUFlMQ=; b=d/3E2lybLc7EBIoSitWTmilQFuHe5C4xtd6eYsJHa7QdwPBZ6VrBKJb8Ks2iHmF6GS AukXPd8MXUBiUT8GSW/O3r/+PrBGEaOPrvjwhGZy2Qbe+9xJKRDYeXYo8ok/MJRqVNDX I24hsU52a6+aV3g2HsOJEf5AmV8HbpFZMXZmf/r+YnH1WKinZQzGYjnWfyXsi5Z9xxT0 iEFbRYO8+kiQQVSOQDBbpG+GA5Tfxj+b0YFoIaGby0xVcsiCgOawDRIciK4Dj55kY7aB 2Ve8/ORbocS1lJ0iSGSXCsR56yaXI0Ym6HdYZR8xdyXkZtsJMziiI7OYvtzEOtRpe3Jp n9ZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734636113; x=1735240913; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=UnWI2zj2aMIKQzCXIjdxrWPl8CZX1JzCR1K4TNUFlMQ=; b=Vt3Vj9Nmj+Odazewd5kJ2APCzMQD39410PdorcMxvobp68vwhDTzSEHvg7yxOxeTh7 EgPbFo4wqSG5nNJ7DxxOUlRVvBUcxI47YrNzaQtAYGZt4IYUSg5BmT7/Q9SnMSur1V1K NAox1SzoN+tRvEOJ21D62HYsHwEsm77oF0Te5BLbwayUbkD0OAmUY7ZrnPgne4lMSZl1 TGQtMnebYSv8ryreC2NasI0SrQK1U+qktSwKp+S20AeMw89FOZzG8hXQ+LmoKwP2bzZh wZsBWze0HOCsqzg0/qaNZckwCRs90hpmmpuB+Mrs8PlujrrtRBO9buCC97D9j0XwoiLX k/zg== X-Forwarded-Encrypted: i=1; AJvYcCUzg05tSSPc/Xz0a++NrQWWY8z/dj+kMM8IzzVCqsRxbWT2x/RQf9yxUSH7wviRFRb6iK1q3X+Tf46CoIY=@vger.kernel.org X-Gm-Message-State: AOJu0Yy0EPbjsY94nnvQdNMduMyiMdjlKVcKend0RLUZloXOyL2d5hz8 lHtC+ydyHAeh9RNorf3raTprDS1CAAhj5leSM84rvyE8b5fpIwIFp+AcEtcOB/Q= X-Gm-Gg: ASbGncvpbketyI6evpz1mOnAketijU6DWhKPO8MI8xsKYpojMbLDjYvOAjfFa7EO22i PHn/uA24DWXj8M7tXTuTi7Z64Ql9/zOnWuq/X2lybRpZfMEZpc2gbNUyKyoPpuR3tbGi4d/0JwW z3rQqpoNe7FlgEktUNnEEwbCt3s0AzaygUoDFITYJ4FBEZKQL2YyBARd2FydATaXTUPwTfpm3Ut Jy5uPxYoz+54wnDwtE7D/bNQP5XzifdelSarbSHUWBQeKaU4WYG87SNt4eor5B1Hn098t7rjHaY xD3Og0E9VUjJruovBsQ9Jx8XWnfXM7aja4ZOMRsK49VEToRcMwVE X-Google-Smtp-Source: AGHT+IH6vI4r48pSPALL4h5MSC1XqGE47m7al/T6HesGimHeD/QbRmrOA+YwT6DOvCJYxBZ2ru/NYw== X-Received: by 2002:a5d:5e09:0:b0:385:f1df:24ea with SMTP id ffacd0b85a97d-38a223ffa3amr317939f8f.40.1734636112779; Thu, 19 Dec 2024 11:21:52 -0800 (PST) Received: from stroh80.lab.9e.network (ip-078-094-000-050.um19.pools.vodafone-ip.de. [78.94.0.50]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38a1c8acabbsm2190052f8f.93.2024.12.19.11.21.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 19 Dec 2024 11:21:52 -0800 (PST) From: Naresh Solanki To: Huang Rui , "Gautham R. Shenoy" , Mario Limonciello , Perry Yuan , "Rafael J. Wysocki" , Viresh Kumar , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Naresh Solanki Subject: [PATCH v2] cpufreq/amd-pstate: Refactor max frequency calculation Date: Fri, 20 Dec 2024 00:51:43 +0530 Message-ID: <20241219192144.2744863-1-naresh.solanki@9elements.com> X-Mailer: git-send-email 2.42.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The previous approach introduced roundoff errors during division when calculating the boost ratio. This, in turn, affected the maximum frequency calculation, often resulting in reporting lower frequency values. For example, on the Glinda SoC based board with the following parameters: max_perf =3D 208 nominal_perf =3D 100 nominal_freq =3D 2600 MHz The Linux kernel previously calculated the frequency as: freq =3D ((max_perf * 1024 / nominal_perf) * nominal_freq) / 1024 freq =3D 5405 MHz // Integer arithmetic. With the updated formula: freq =3D (max_perf * nominal_freq) / nominal_perf freq =3D 5408 MHz This change ensures more accurate frequency calculations by eliminating unnecessary shifts and divisions, thereby improving precision. Signed-off-by: Naresh Solanki Changes in V2: 1. Rebase on superm1.git/linux-next branch --- drivers/cpufreq/amd-pstate.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/cpufreq/amd-pstate.c b/drivers/cpufreq/amd-pstate.c index d7b1de97727a..02a851f93fd6 100644 --- a/drivers/cpufreq/amd-pstate.c +++ b/drivers/cpufreq/amd-pstate.c @@ -908,9 +908,9 @@ static int amd_pstate_init_freq(struct amd_cpudata *cpu= data) { int ret; u32 min_freq, max_freq; - u32 nominal_perf, nominal_freq; + u32 highest_perf, nominal_perf, nominal_freq; u32 lowest_nonlinear_perf, lowest_nonlinear_freq; - u32 boost_ratio, lowest_nonlinear_ratio; + u32 lowest_nonlinear_ratio; struct cppc_perf_caps cppc_perf; =20 ret =3D cppc_get_perf_caps(cpudata->cpu, &cppc_perf); @@ -927,10 +927,9 @@ static int amd_pstate_init_freq(struct amd_cpudata *cp= udata) else nominal_freq =3D cppc_perf.nominal_freq; =20 + highest_perf =3D READ_ONCE(cpudata->highest_perf); nominal_perf =3D READ_ONCE(cpudata->nominal_perf); - - boost_ratio =3D div_u64(cpudata->highest_perf << SCHED_CAPACITY_SHIFT, no= minal_perf); - max_freq =3D (nominal_freq * boost_ratio >> SCHED_CAPACITY_SHIFT); + max_freq =3D div_u64((u64)highest_perf * nominal_freq, nominal_perf); =20 lowest_nonlinear_perf =3D READ_ONCE(cpudata->lowest_nonlinear_perf); lowest_nonlinear_ratio =3D div_u64(lowest_nonlinear_perf << SCHED_CAPACIT= Y_SHIFT, --=20 2.42.0