From nobody Sat Feb 7 06:55:47 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1FD083161A8 for ; Mon, 5 Jan 2026 10:39:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767609602; cv=none; b=eXc0x5o923gArEb/Tq+CmcQF0NuuDa4026w1mm4Sn3MPZg6vmVy3qirmBaexrTUuTViQViWfZhaRKaGERyMrDIjHL/JV5uXBEh/UfLU4JsNIlU90kNwc1p3E0hjW7RQG1hCBQRmaGtiM791p3Zq33xVgsFwybFIXK83VePJeTw4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767609602; c=relaxed/simple; bh=iYABdkIGzyGoYhfLH9V0tmKXDo499up2rJn5D6C5Njo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=AC1YEIhjaYYQO4I/Y7IKHvPu7djUomQCk/EtJnmNfuuJgRbiKda1wybxX/VoFI29IK8vaD4dNmINVMuB3FZM9icjsYfiXcoqp42sUoW7ZviNmGl8lBfD1xgQeD/qp00owRCv3ZxXdB8/xiDItwujHqlIcKNSK2hIQQjb+5c2v+4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=E4w95ArU; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Z05SunUy; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="E4w95ArU"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Z05SunUy" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6055a8Im4032710 for ; Mon, 5 Jan 2026 10:39:57 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=qcppdkim1; bh=W6OEsqhTURLyjbRdZA3xDi nJ+/ccBBlqgXNuogfrel0=; b=E4w95ArU12W0tf50x4hzegSxtSr6bWCPNEkBn9 5/2wxeL0qhn/Z45gukBZlqNhvHBxG8zGhG+swigIA1pNi73DpBdN/wAbr9VlR0Cb ZsIpCcnMeclHQa7Lw8+WSf6MJltx+r6zRlngrL2MLQ259Dsf/VGa1gxK4alZpl4z Wt57TSt0DSx9f9TnLWNAsrVm8oMkkdFcmxxtsCv0D5+mk9oqOxfFTbQTbPtzTMMa cgWanEoHBsvcn/wwlsE73k90mv+YNvGSl7HTu9YhLIHjalKtjiqHvUrIcCLF0Q3c xytWgSBtH5dK+qMRit8HqaqRQmT+XoC/VQZU52nfTFi8EUtQ== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bg79ngw56-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 10:39:56 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2a0a4b748a0so330480155ad.1 for ; Mon, 05 Jan 2026 02:39:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767609596; x=1768214396; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=W6OEsqhTURLyjbRdZA3xDinJ+/ccBBlqgXNuogfrel0=; b=Z05SunUyWxlmItTjJOM+vK8AHksCFD3dkGyz0cRFxxCHv1hzfwKNyAuWeuDTcQL58P yphlh73uPJXnp72odGRQzVvrTji/iHYXuDNOpsmdqDWICaIW9MrDk1roG/nIiT8DZFbl 6zAw3QhQuzpAP2DC87JfOqkNZJeCsGmF2weO3Rm9xiCp7dfUu0zsOByXejRT30xnJGRp ltVpdRW0zgaErOdUOty6q7jy+Z1rWlVKRppXeDLOh5XVAL3LusEYHZJ1DNn1+SjSiKlZ 8er5Cd1L8RbrBU/RyojfdEIuwJejGHW8WpsrF9Hp46AqjNbFJD2OKaqHnAsFna5MKskZ v9mQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767609596; x=1768214396; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=W6OEsqhTURLyjbRdZA3xDinJ+/ccBBlqgXNuogfrel0=; b=dMHYmR0bEYgVH2diG1YIofCC/ZBe71ObF0AwTQais+tmHuEjwwQ58Hy43lwxr6B1sU C1pViUOnE0SskbTKA9JCp+JxFB56IBce14AAPR2Qk4dx+OzpOvkdePEP4ci+8SJh3bdI sHQaHlHmEjmEcFmoCQu9+Yqs0qZ8QFOWUpOmuz3B4OcqjuDaSKpIX0aZZpsy+euNM0rj KHD1fqHp46EsVBvvXTKd5Qmfp42A2aoxPfYUDUB9LKkKGAnVhWFwBQDEOYPBWxzw1itE Z9ODX7wHsfgmJBVSlbJvBImDtX7scGVEYfvRW/nrglQcRs9F/k9eUJ6NPpReokYXWuix UHPA== X-Forwarded-Encrypted: i=1; AJvYcCUs72se5zQwOUM81JuPxN0+8q+6ZxqB9LADgWLhdTzm0hsZqBcohNTpgDNOSMaAbnHNK6wuJw0FLh4fjco=@vger.kernel.org X-Gm-Message-State: AOJu0Yyw5Qd1svFpJWULhXziCupJfODCvIlr/XlcpxtI7xl4or67fECF ne8U8P7DTZTuJcnx62vH/nJxgAv3AnWL1fjgaEfEK/AS7la+1QGCh4d1/jzfN1YmpZ4xypgZIsI 4KCsvpyRovPNlcGpZQAwjQalw2rNp6xjgIHQxMItZu6D+pjEkevWq6kll/09kxL8/ScI= X-Gm-Gg: AY/fxX7SvouPLsUgc4iLnKAq0ABFXOUM/291C0ECi8wxfLhczFezThL6EjgrtyR6u1c g8f5/qExRo5/lNz/UfUpOQMb8qWcAu80reyjkmB+HCmwkkb2pDpWeUO/Rl33a+iRMAKpN21BvON vGShHfADYd2Px2juVIO4ckbUk/3yNMuWHoUd4iKQL3x3RzMXiG4oekHX4RZznVcurNCUFVD43xI BmjmQAY8pj2su/JmTP70NHVljsh1wkQi+YyiyEj2QJ5IVgVx5gELJsV31KAF0Fvr4rs0K/7YLCa NQYdW/f6w9UsTtpll04dzJj79Xcj0m4z89H6zPV7u7niSI8THUN7ZEFWJoKR2ZgPTl2dXR1J8QB naiEqTh2F6kr8HhY+d3YvDuREWGeuMBJZDQ== X-Received: by 2002:a17:903:3b86:b0:2a0:8966:7c9a with SMTP id d9443c01a7336-2a2f2c5e17cmr413761065ad.58.1767609595914; Mon, 05 Jan 2026 02:39:55 -0800 (PST) X-Google-Smtp-Source: AGHT+IHVjiLiSTCrOoXEpqBatBcTb1pPd1TrPv0DrgncFboyYAicxqqtYDHs5+4LkaH5FuCgC7JmXQ== X-Received: by 2002:a17:903:3b86:b0:2a0:8966:7c9a with SMTP id d9443c01a7336-2a2f2c5e17cmr413760935ad.58.1767609595488; Mon, 05 Jan 2026 02:39:55 -0800 (PST) Received: from hu-tdas-hyd.qualcomm.com ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a2f3d7111fsm440496075ad.85.2026.01.05.02.39.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 02:39:55 -0800 (PST) From: Taniya Das Date: Mon, 05 Jan 2026 16:09:50 +0530 Subject: [PATCH v2] clk: qcom: rcg2: compute 2d using duty fraction directly Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260105-duty_cycle_precision-v2-1-d1d466a6330a@oss.qualcomm.com> X-B4-Tracking: v=1; b=H4sIAPWUW2kC/4WNXQqDMBCEryL73IhZaq196j2KSH7WGlDTJhoaJ Hdv6gX6MvDNMDM7eHKGPNyKHRwF441dMuCpADWK5UnM6MyAFdYcEZne1tirqCbqX47UUWBNe6n PKAUpISFXczKYzzH76DKPxq/WxeMl8J/7ZzBwxpmstLhSO2ghm7v1vnxvYlJ2nsss0KWUvleaL Ka/AAAA X-Change-ID: 20251222-duty_cycle_precision-796542baecab To: Bjorn Andersson , Michael Turquette , Stephen Boyd , Taniya Das Cc: Ajit Pandey , Imran Shaik , Jagadeesh Kona , linux-arm-msm@vger.kernel.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, Taniya Das X-Mailer: b4 0.15-dev-aa3f6 X-Proofpoint-GUID: etkXmEkisEIrBUvZrQGddKBh1gjmwA01 X-Proofpoint-ORIG-GUID: etkXmEkisEIrBUvZrQGddKBh1gjmwA01 X-Authority-Analysis: v=2.4 cv=Y8P1cxeN c=1 sm=1 tr=0 ts=695b94fc cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=igsz0PQQFTjIY3ArcIwA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDA5MyBTYWx0ZWRfXzHWw5bXR0Bvv mOANP8wVOunJYWJooVrO4a6S75/DxFscgy92ej1oXeoSwhG4ExU+2P2Y+61barz7EYSN9qtepji aol76f+SQU03eoKAnKd/QZa+Jq0AmqGqYuLeKWcqCX91Xt00S85JsDpQfrzzgyD8MCddU8MF9xy q7Kj+e0BruyszyFlA7vfCTDV9wHfkTDYY8wdskRQ/jiw7HapsjEqZ6WnhOkHYmNh22IADIbSFVG DQOcHH3OeDdIkhKpZf4rbYIdatbn5trnY3xuNV1ARvm0OrdKNipFldWzjd3h+MG/55mmAng1N+P EMWJgD6gxUiFUdOzX28rOFtX/249icISwSm29Tft21V9Ky9aN9WUNJF48UsgMJWO+TGhbWAuALx zt0KsN82ceXHbOhLHM6efiec3BP5z7F2tCVyO30Wh7Evm0lv7xCleOQgpw+M+0l5bRB71NM32Cz oPRx0Ud0RUrNi6zuR4Q== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2025-12-31_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 phishscore=0 impostorscore=0 suspectscore=0 clxscore=1015 bulkscore=0 adultscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050093 The duty-cycle calculation in clk_rcg2_set_duty_cycle() currently derives an intermediate percentage `duty_per =3D (num * 100) / den` and then computes: d =3D DIV_ROUND_CLOSEST(n * duty_per * 2, 100); This introduces integer truncation at the percentage step (division by `den`) and a redundant scaling by 100, which can reduce precision for large `den` and skew the final rounding. Compute `2d` directly from the duty fraction to preserve precision and avoid the unnecessary scaling: d =3D DIV_ROUND_CLOSEST(n * duty->num * 2, duty->den); This keeps the intended formula `d =E2=89=88 n * 2 * (num/den)` while perfo= rming a single, final rounded division, improving accuracy especially for small duty cycles or large denominators. It also removes the unused `duty_per` variable, simplifying the code. There is no functional changes beyond improved numerical accuracy. Fixes: 7f891faf596ed ("clk: qcom: clk-rcg2: Add support for duty-cycle for = RCG") Signed-off-by: Taniya Das --- Changes in v2: - Update the author email to use OSS. - Link to v1: https://lore.kernel.org/r/20251222-duty_cycle_precision-v1-1-= b0da8e9fdab7@oss.qualcomm.com --- drivers/clk/qcom/clk-rcg2.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/clk/qcom/clk-rcg2.c b/drivers/clk/qcom/clk-rcg2.c index e18cb8807d73534c6437c08aeb524353a2eab06f..2838d4cb2d58ea1e351d6a55990= 45c72f4dc3801 100644 --- a/drivers/clk/qcom/clk-rcg2.c +++ b/drivers/clk/qcom/clk-rcg2.c @@ -755,7 +755,7 @@ static int clk_rcg2_get_duty_cycle(struct clk_hw *hw, s= truct clk_duty *duty) static int clk_rcg2_set_duty_cycle(struct clk_hw *hw, struct clk_duty *dut= y) { struct clk_rcg2 *rcg =3D to_clk_rcg2(hw); - u32 notn_m, n, m, d, not2d, mask, duty_per, cfg; + u32 notn_m, n, m, d, not2d, mask, cfg; int ret; =20 /* Duty-cycle cannot be modified for non-MND RCGs */ @@ -774,10 +774,8 @@ static int clk_rcg2_set_duty_cycle(struct clk_hw *hw, = struct clk_duty *duty) =20 n =3D (~(notn_m) + m) & mask; =20 - duty_per =3D (duty->num * 100) / duty->den; - /* Calculate 2d value */ - d =3D DIV_ROUND_CLOSEST(n * duty_per * 2, 100); + d =3D DIV_ROUND_CLOSEST(n * duty->num * 2, duty->den); =20 /* * Check bit widths of 2d. If D is too big reduce duty cycle. --- base-commit: cc3aa43b44bdb43dfbac0fcb51c56594a11338a8 change-id: 20251222-duty_cycle_precision-796542baecab Best regards, --=20 Taniya Das