From nobody Sun Feb 8 07:59:04 2026 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (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 DDF4225A642 for ; Tue, 22 Apr 2025 08:41:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745311316; cv=none; b=C57DJL1ao/A5T1N8RjfFF+6S7rHa/fQ+6fkzIFnak3B4i+AfupzFNYL1cFx+6lZML/OVRbj8zGYHWUMixb6/fzHAdLrpGM1lqx8rwxV3X/9/kS+HrUiWAmteEBM6Nz3sMLoE+RzgA2ExvR9Hxzmf2audzP3dETD5tIjzdbJfN2o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745311316; c=relaxed/simple; bh=plbpc31rVrOD0KMkWiMy9DSCysG2bPp4EWpOgbNVk+g=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=dFLVT22L61S8v3tu6P5b6wM2InbsVLFw0yv7vnyrpS4WWFRSSqE+C6nArWJ8mpsBTE4mq3CWQv/+a8dbANluw1fBG/t6DUcDs+PkKXhhrJs+X5g3uuq/FLmLoy6I3Thh0wFeUsCbNkPGtVSQ3U3wR2Bd00gBj7Q9jP2b4t/BpIs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com; spf=pass smtp.mailfrom=sifive.com; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b=MbUQVUCH; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sifive.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b="MbUQVUCH" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-224019ad9edso68712185ad.1 for ; Tue, 22 Apr 2025 01:41:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1745311314; x=1745916114; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=l3iCEA8tjYiThU7Rin4dKsTFv6XsSOzMIb0/FuGpw2E=; b=MbUQVUCHSysY+BlA82S9jWphlH5MgsbojF32v7wnCW9Gd9MJJDvr2pxkynY+uCRbjf ABIpiOJdFBZ4VUfe7mEGPEhn92yltZlFH9BRZgDrqugOyJF+uYJ2NuyFc/iWXCvxYaVQ HS+uGwkV12LLgV5jeBP/xYYJ1XSyvoikz9enmCaobSCryPTetMTvy8h52PmdrDGOzb1X vBMX4xw67rl8PfRZ7/F52V5DQNT0z9owDs1fAF0IKeuBeiX8D4i1HOziVsyQC2AiXCKg k9PDBnFRFuTir1wEahHE2rRvydWCAZpZavCmGOTRVCdi6Sy8AB6Ti8xiETmXIhA9u7ZN i7rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745311314; x=1745916114; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=l3iCEA8tjYiThU7Rin4dKsTFv6XsSOzMIb0/FuGpw2E=; b=GnNMcDM1UNUvI4z5go+RAxirjnH8NJXMnRhzq0nZPRhBfNcqWQQ91A4dG31naK2Lup V7DafjcsN8P+MZeudASjF/8P6OHXW6x+S2bjkK7yCbxWUNertDZk2oZY0VvvEld+iG6X ZJkYL7Ba/fv55mtU9u7dWFRGkoUxdfAdVGwArav3q3iikzhnsGmu4aCCGM+8BvsHD9Rf X1zeZH1WQqrwmAUVVrbIFxL2pEsR5MdUHV1RoO8NdAY7AIQX0APaU44Hjr9lCyZpZ4Hn 0oBuCMgy7OnmOT0SAF23W+unjPOJC4nYLcQ45842IdYh74QYu48K8wsw1akr/WPQlCGC XgYw== X-Forwarded-Encrypted: i=1; AJvYcCXaAwzKx5TqOh9KM9uhvIqIL+ubtIFaO3KY6ri1KVyXEQSx3bJ4ljMAg6KBp257hT+cBfBJy3Ug4tT8yOQ=@vger.kernel.org X-Gm-Message-State: AOJu0YylvbBcaV7TR8qBG5JGspZ+6TgY519/n2rM0xejU8rNde0qmsAG XkPOKtOxP85V/VbuhTi3UY5rl3ZIakACisKCWIq7ZFq8/HOAcDEQyy9b/f3z11g= X-Gm-Gg: ASbGnctfS+E9E6IiANaYecpeBrLOsN13SUd3OsTtMhH8ID829rrQXcThTPahAMRm0ch nfcKV4fTYBZjxdP/sP+lOnJAedhNgcluXH/GG2QNuj9qNxZDsIEnIcwkzIkFdcaOVZS6VRxvsEU kbhBWf4zwoIjIwjRoQch2Q1NnfskHh4/VsV25mE4mCvIgMye/kePw36CCeEEXRNbn3rQ8QR6dzy 7uQQh13D09dKkbXgd4XdlNktAWNptmjQ9em8szxWgogwVkLAsSTERA6V2LP6PCicIr/Xvs3HUdY uhxfWEYHT2HWhzPLfv7Bs4jnPf7X/sBOVvQhx2VwGH7T5sLD3KTBRSp/FlPwCVSI0csSuebPsRa v+u4kWIqUa4wD X-Google-Smtp-Source: AGHT+IFp00dnBQ86k04fdmbX8xvzwFEmfdHBx64nvu1PEvdvO50/UHtsOOWSOHg/3EGakH1tIpZc6g== X-Received: by 2002:a17:903:1249:b0:22c:336f:cb54 with SMTP id d9443c01a7336-22c535c9c28mr225400805ad.29.1745311313749; Tue, 22 Apr 2025 01:41:53 -0700 (PDT) Received: from hsinchu36-syssw02.internal.sifive.com ([210.176.154.34]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-73dbf90d7f7sm8038343b3a.82.2025.04.22.01.41.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Apr 2025 01:41:53 -0700 (PDT) From: Nylon Chen To: Conor Dooley , Rob Herring , Krzysztof Kozlowski , Paul Walmsley , Palmer Dabbelt , Albert Ou , Samuel Holland , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= Cc: linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org, Nylon Chen , Conor Dooley , Vincent Chen Subject: [PATCH v12 1/5] riscv: dts: sifive: unleashed/unmatched: Remove PWM controlled LED's active-low properties Date: Tue, 22 Apr 2025 16:53:08 +0800 Message-Id: <20250422085312.812877-2-nylon.chen@sifive.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250422085312.812877-1-nylon.chen@sifive.com> References: <20250422085312.812877-1-nylon.chen@sifive.com> 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" This removes the active-low properties of the PWM-controlled LEDs in the HiFive Unmatched device tree. The reference is hifive-unleashed-a00.pdf[0] and hifive-unmatched-schematic= s-v3.pdf[1]. Link: https://sifive.cdn.prismic.io/sifive/c52a8e32-05ce-4aaf-95c8-7bf8453f= 8698_hifive-unleashed-a00-schematics-1.pdf [0] Link: https://sifive.cdn.prismic.io/sifive/6a06d6c0-6e66-49b5-8e9e-e68ce76f= 4192_hifive-unmatched-schematics-v3.pdf [1] Acked-by: Conor Dooley Reviewed-by: Conor Dooley Signed-off-by: Vincent Chen Signed-off-by: Nylon Chen --- arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts | 12 ++++-------- arch/riscv/boot/dts/sifive/hifive-unmatched-a00.dts | 12 ++++-------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts b/arch/ris= cv/boot/dts/sifive/hifive-unleashed-a00.dts index 900a50526d77..06731b8c7bc3 100644 --- a/arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts +++ b/arch/riscv/boot/dts/sifive/hifive-unleashed-a00.dts @@ -49,32 +49,28 @@ led-controller { compatible =3D "pwm-leds"; =20 led-d1 { - pwms =3D <&pwm0 0 7812500 PWM_POLARITY_INVERTED>; - active-low; + pwms =3D <&pwm0 0 7812500 0>; color =3D ; max-brightness =3D <255>; label =3D "d1"; }; =20 led-d2 { - pwms =3D <&pwm0 1 7812500 PWM_POLARITY_INVERTED>; - active-low; + pwms =3D <&pwm0 1 7812500 0>; color =3D ; max-brightness =3D <255>; label =3D "d2"; }; =20 led-d3 { - pwms =3D <&pwm0 2 7812500 PWM_POLARITY_INVERTED>; - active-low; + pwms =3D <&pwm0 2 7812500 0>; color =3D ; max-brightness =3D <255>; label =3D "d3"; }; =20 led-d4 { - pwms =3D <&pwm0 3 7812500 PWM_POLARITY_INVERTED>; - active-low; + pwms =3D <&pwm0 3 7812500 0>; color =3D ; max-brightness =3D <255>; label =3D "d4"; diff --git a/arch/riscv/boot/dts/sifive/hifive-unmatched-a00.dts b/arch/ris= cv/boot/dts/sifive/hifive-unmatched-a00.dts index 72b87b08ab44..03ce2cee4e97 100644 --- a/arch/riscv/boot/dts/sifive/hifive-unmatched-a00.dts +++ b/arch/riscv/boot/dts/sifive/hifive-unmatched-a00.dts @@ -51,8 +51,7 @@ led-controller-1 { compatible =3D "pwm-leds"; =20 led-d12 { - pwms =3D <&pwm0 0 7812500 PWM_POLARITY_INVERTED>; - active-low; + pwms =3D <&pwm0 0 7812500 0>; color =3D ; max-brightness =3D <255>; label =3D "d12"; @@ -68,20 +67,17 @@ multi-led { label =3D "d2"; =20 led-red { - pwms =3D <&pwm0 2 7812500 PWM_POLARITY_INVERTED>; - active-low; + pwms =3D <&pwm0 2 7812500 0>; color =3D ; }; =20 led-green { - pwms =3D <&pwm0 1 7812500 PWM_POLARITY_INVERTED>; - active-low; + pwms =3D <&pwm0 1 7812500 0>; color =3D ; }; =20 led-blue { - pwms =3D <&pwm0 3 7812500 PWM_POLARITY_INVERTED>; - active-low; + pwms =3D <&pwm0 3 7812500 0>; color =3D ; }; }; --=20 2.34.1 From nobody Sun Feb 8 07:59:04 2026 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) (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 5CE6C25C6FE for ; Tue, 22 Apr 2025 08:41:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745311320; cv=none; b=Wc1SVLO95+5dr9VaHfZKNpind9Yhvh9IIfK1buNXEfgdpGJiN5/Xukn16cuPKyRnnowbj9H4a/8UzZfSap4S5X7WMYz9sNp7yem34niL2VayOWomf87J3nrWG+QRvEYPUZTYoki9IkwSRIY2Ib8zfds/7vRgWq6CwMycvLqz6qg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745311320; c=relaxed/simple; bh=AhRbnxt00FmE/WhEN1u8zVz8q5gXEKLj1JYmMYck0AA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=X2n2BuPlIikC7Raf8E0m2miMdsl0yso//Gq/sTxNH75aVzW6tyW8lcctorpzoKLdkVmkGJ7SBJQxkuIETq8KVJDCjiMhe0euj9owGyDiySHeaf96CKp7JkZMb07h0cp3rRjQAalKFnjQZ0PbzCSZEGBDGhY0V8UYT5x+8+a3Yu4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com; spf=pass smtp.mailfrom=sifive.com; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b=I+r9HcGV; arc=none smtp.client-ip=209.85.210.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sifive.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b="I+r9HcGV" Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-736c1cf75e4so4311287b3a.2 for ; Tue, 22 Apr 2025 01:41:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1745311318; x=1745916118; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dTYlTOXj1U7VnsAmcUnx1eYdk5rL5ZGZ7LNT8Q6B11E=; b=I+r9HcGV+iABKy4DaG0c045CG0YwQTWTa4bafq3dWTL3lYxp5PX6MkerrHE2icSFme rcWWJLIhCk6qOz4yCqOF39nN/tcGIIRMP87r+mFEw9oVuT8VG5RPEMydKlsVcNgam7yK baMQUSf2Bh6ZtrSToSuuRD/J4WSIywx+6jBwbw1wLYZNSR99A98rKDj0SBo07dkeASc2 9P9FWqg9TGKQ0hWkt6DRuH4EbynnoMGbR99FC0Pjxm0MWaozMEmsM9Hr5sprfSp1HHqC BmaLSpl8nRv1LMqvPzqwVnF8FID813TxbMWeirNjX/Gp1eAM25iKVp1i84Kgi0S+ccV6 hrvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745311318; x=1745916118; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dTYlTOXj1U7VnsAmcUnx1eYdk5rL5ZGZ7LNT8Q6B11E=; b=wR1q528iR7wLg6bSYmcJdsHPl+rwn6VhAu07HNQMXuwI0cPD7xNspk7UP/LNFeceky xIc0/z8Hm6GhXGQKoNARCjKoKdALyJAWWN6o6JxThTEc7i1zNMBWhiA0+yOUkTqW7PB/ eUJSWsCCZsaGHp6YIa5nlH5FuBwuupiz3lhY2yio3ZEUA72O5TDZykHr1+r+tm4GIRJ3 8w7IJ2XJ4S2riNe/ci2L7PLAMjkqQcy6xsLBeYRObvr+xJFK9e0cm1GLk3WAIrtxPfNe e9knmazCS53KoyVOJ/TceYTTgSfxHa2tZOB51VtumT13S7ByVRfmSLZ8Zwi/7N8TCwSb BgUw== X-Forwarded-Encrypted: i=1; AJvYcCUPQhRJF06cNcUyr2onKFdCLpOSfa3XnPcnnUBJFw7+wTAop0dPsDCmprWylb41CiN6pL9htlc/SLWCV6o=@vger.kernel.org X-Gm-Message-State: AOJu0Ywfw0TRbxG8KeYqW3oDitHxXW56SaoJvY+v0dUzR4zFInQH+iEG 7lLCCjSrugHxeUlZznNqdXGS9iFN2f65GC+Yr7pzfwjpRED2CjW/pnEku6j/fTw= X-Gm-Gg: ASbGncuGyKVru9wqj4XEHXmqKqqHPNIwt9PUNmS2s6OcGM1xEwudbUVvvdBAaMW7MJY hEJTQkI7b7t5b1do5AtwIUHAfL/xc1iGLBC0Uduyj4WT/Lw5Su92l6QlLn8gur7xfJHWRwGX33b ZiiwAIedeqR5qCOUo43uQFh7gsEl/U2CLRww2SMJuWCXXCql+9Fza0CJbtA+k335y9d6Wklocbb mRT+voj0aAM743ShUIYOVLviMlA/DvebCED25VQ9UK8ptJ7EEM2oN/9OsuawjkkHPb00rw6+oKX iANUTo5wODYQMOvGy3mMeebAOsL5lfQlsCi7NGy0iQIlmuJVLW5LCR2naK3GieWmoiyJoTHSUOF Wvg== X-Google-Smtp-Source: AGHT+IGfbihuBEBc/pdNIJMJF4VwDXG6UwENQDwhbQ6dawvH9aE1MJPeh2yhFP9zSoJtskbZsJMTIQ== X-Received: by 2002:a05:6a00:21c5:b0:736:2a73:675b with SMTP id d2e1a72fcca58-73dc1568a74mr20805479b3a.19.1745311318480; Tue, 22 Apr 2025 01:41:58 -0700 (PDT) Received: from hsinchu36-syssw02.internal.sifive.com ([210.176.154.34]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-73dbf90d7f7sm8038343b3a.82.2025.04.22.01.41.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Apr 2025 01:41:58 -0700 (PDT) From: Nylon Chen To: Conor Dooley , Rob Herring , Krzysztof Kozlowski , Paul Walmsley , Palmer Dabbelt , Albert Ou , Samuel Holland , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= Cc: linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org, Nylon Chen , Zong Li , Vincent Chen Subject: [PATCH v12 2/5] pwm: sifive: change the PWM algorithm Date: Tue, 22 Apr 2025 16:53:09 +0800 Message-Id: <20250422085312.812877-3-nylon.chen@sifive.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250422085312.812877-1-nylon.chen@sifive.com> References: <20250422085312.812877-1-nylon.chen@sifive.com> 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 `frac` variable represents the pulse inactive time, and the result of this algorithm is the pulse active time. Therefore, we must reverse the = result. The reference is SiFive FU740-C000 Manual[0] Link: https://sifive.cdn.prismic.io/sifive/1a82e600-1f93-4f41-b2d8-86ed8b16= acba_fu740-c000-manual-v1p6.pdf [0] Co-developed-by: Zong Li Signed-off-by: Zong Li Co-developed-by: Vincent Chen Signed-off-by: Vincent Chen Signed-off-by: Nylon Chen --- drivers/pwm/pwm-sifive.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/pwm/pwm-sifive.c b/drivers/pwm/pwm-sifive.c index d5b647e6be78..bb9146267bc5 100644 --- a/drivers/pwm/pwm-sifive.c +++ b/drivers/pwm/pwm-sifive.c @@ -110,9 +110,10 @@ static int pwm_sifive_get_state(struct pwm_chip *chip,= struct pwm_device *pwm, struct pwm_state *state) { struct pwm_sifive_ddata *ddata =3D pwm_sifive_chip_to_ddata(chip); - u32 duty, val; + u32 duty, val, inactive; =20 - duty =3D readl(ddata->regs + PWM_SIFIVE_PWMCMP(pwm->hwpwm)); + inactive =3D readl(ddata->regs + PWM_SIFIVE_PWMCMP(pwm->hwpwm)); + duty =3D (1U << PWM_SIFIVE_CMPWIDTH) - 1 - inactive; =20 state->enabled =3D duty > 0; =20 @@ -123,7 +124,7 @@ static int pwm_sifive_get_state(struct pwm_chip *chip, = struct pwm_device *pwm, state->period =3D ddata->real_period; state->duty_cycle =3D (u64)duty * ddata->real_period >> PWM_SIFIVE_CMPWIDTH; - state->polarity =3D PWM_POLARITY_INVERSED; + state->polarity =3D PWM_POLARITY_NORMAL; =20 return 0; } @@ -137,9 +138,9 @@ static int pwm_sifive_apply(struct pwm_chip *chip, stru= ct pwm_device *pwm, unsigned long long num; bool enabled; int ret =3D 0; - u32 frac; + u32 frac, inactive; =20 - if (state->polarity !=3D PWM_POLARITY_INVERSED) + if (state->polarity !=3D PWM_POLARITY_NORMAL) return -EINVAL; =20 cur_state =3D pwm->state; @@ -157,8 +158,9 @@ static int pwm_sifive_apply(struct pwm_chip *chip, stru= ct pwm_device *pwm, */ num =3D (u64)duty_cycle * (1U << PWM_SIFIVE_CMPWIDTH); frac =3D DIV64_U64_ROUND_CLOSEST(num, state->period); - /* The hardware cannot generate a 100% duty cycle */ + /* The hardware cannot generate a 0% duty cycle */ frac =3D min(frac, (1U << PWM_SIFIVE_CMPWIDTH) - 1); + inactive =3D (1U << PWM_SIFIVE_CMPWIDTH) - 1 - frac; =20 mutex_lock(&ddata->lock); if (state->period !=3D ddata->approx_period) { @@ -190,7 +192,7 @@ static int pwm_sifive_apply(struct pwm_chip *chip, stru= ct pwm_device *pwm, } } =20 - writel(frac, ddata->regs + PWM_SIFIVE_PWMCMP(pwm->hwpwm)); + writel(inactive, ddata->regs + PWM_SIFIVE_PWMCMP(pwm->hwpwm)); =20 if (!state->enabled) clk_disable(ddata->clk); --=20 2.34.1 From nobody Sun Feb 8 07:59:04 2026 Received: from mail-pf1-f171.google.com (mail-pf1-f171.google.com [209.85.210.171]) (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 24DA025D52B for ; Tue, 22 Apr 2025 08:42:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745311335; cv=none; b=hwSenM5V7Qe5xwfLBUvehnkJ5wvCyoLEfIBX3OFMHQ3qTtRa7oyyvg3U17QSky8R/vSKsoeDfENxo5a4Vhy6MXjB2au5jaXAOhde14ewGYoJKT9SLSMMvGoNKr/VhWQ9atOF/ZWfP0qT6zUOdd+HRALDdgpn4ahhlpuoVt5tkxw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745311335; c=relaxed/simple; bh=glrL9frKUynd0eooWslKXIli7Wwl1Of8mWNqeP69AkU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=refbxzhvoXI0rlWpcQGzb/Rh5cJa9iIwB7l1NrTPEJJiSaiW8bCaWnnNHBdYG8QgnVCHysf/TSnXlQJqP/clSH1THa9e+e9IqDrLTnI0WSWXe1zCc30hctNnEYKUMdleieMEv1KizvaVlnxZnypWubajVRY6ChgJwOmLtG83kfQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com; spf=pass smtp.mailfrom=sifive.com; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b=dEH6Y9vf; arc=none smtp.client-ip=209.85.210.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sifive.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b="dEH6Y9vf" Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-736e52948ebso5500023b3a.1 for ; Tue, 22 Apr 2025 01:42:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1745311333; x=1745916133; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/Cqj4QIom4PNiBzVEbYX0WUBXZ7DUraiDzK4MrzGYzY=; b=dEH6Y9vf6HnNx7Vxqb6i5y/DQP5YikqJpx0Zkc7VUzwlTEFvdtE09Gc+iHBGGVg4ws 5GMImkG0puJCtJN2dMqHKy9ZxY4O5OLrK6xGvSjuE9KZPi2dBLn6ZsGQ+gBL2Tj39/tv nPdzUgcg9Ys5L7jOgEcGwTmY31X4aSSUGJI6wM6F937aulAxzYvViWzLESqeJSZoCm99 y7ybHNlvWFku/nqvPNhibz2ADYSXGFxyiNJfZq9QQFonaROYmcV+0t3PuPCC+M5M8Bkv g9WaHL0DaUgO23TyCxG7R4s1QR2p+dD5TkgYggoRbfeDEaXzM/EVCuuFMp0ATKc8ragA RxJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745311333; x=1745916133; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/Cqj4QIom4PNiBzVEbYX0WUBXZ7DUraiDzK4MrzGYzY=; b=kbF1MSv8m2jBe6KtNRRcF2I+L4Y9guo72RLMOEvDamuE6SciHwMZfeyNMbptjT+wet dTHrCEjjyXS3aMG/i57E0vwhxoMoM7cW0gkfA00Ozp8HfRnqZocUm6o4+8opDvOEeVTM z/wAeFDNbJ9IkHVAhPnv/lxIC8IPKMyTfeTJK1HTCUR59cbiVEg/XYUhM2lly1oMnIuQ Rzdd52ywMzUvSkPYWxix2rSkljpuz+27BCgwJpztzivQkaJWWnhBpGAYu4pnXHge/V6A +xPqzcnrRTXuxms6y6RJhcN3xUUWTVdGz/DgYJnb8kCUG8Flnx3rMhhvK5FdPepXswfY /8yQ== X-Forwarded-Encrypted: i=1; AJvYcCVnn8QsWzlzaFC6UO4Bfb/5cg9hNFRW82v9eZBhna4NSHDcIyRxvwhCNiXL3Jsu1BBtQvRAtA0NsEtJ3Tw=@vger.kernel.org X-Gm-Message-State: AOJu0YzfinnH2Nn52YNPNzWeikpboVr49DC2+pxmA1/vhXLAXN7NYr6w Zc9Kdv9saUB8cEYiFikAJZbQIQlmA72cDpXJXTA6RqJ4BBpC76sBN2G/Wnhfqb0= X-Gm-Gg: ASbGncu5YBdIfNbSi9LCGUSlB95AGNDcJSKxMo+fqs2cpWab0lwncuKWOfe5nxFmecu eH4Qvk7yTgD1Wniv+IveEF1hiliNJ4B7WMCVIF6ajmtrewhktAlE1gL01MpOQNnTr2Sct58x+nB sidmF2Xy0HkxqnETiCejb99atF/HC9li7iL23qVt4WLTkbmnoWnjRCIAeI4gBQjUFMUUryZKGnl uEGe29gzEHIQaq1kUx+5gxQf79H+KwZwrqWIkJTnA5TNMN7Mz1s4yLmaEjEJFVQh/MutuV1S9gd +jUm3TrUisq3XN15pgHuEPHqpwqX9VpFwAbICco8U/6w+aAt0lwr7rt4WCUVXPh3E8Kj5nQCBJM oHA== X-Google-Smtp-Source: AGHT+IGh7II8uR39w+HecQJFOJfohPA9oxXMODo1KcS7MJ5fXvWrxBC4PwiVN5H5gCjQglmL+IpLdQ== X-Received: by 2002:a05:6a20:d48b:b0:1f5:931d:ca6d with SMTP id adf61e73a8af0-203cbc28a3emr23885458637.1.1745311333416; Tue, 22 Apr 2025 01:42:13 -0700 (PDT) Received: from hsinchu36-syssw02.internal.sifive.com ([210.176.154.34]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-73dbf90d7f7sm8038343b3a.82.2025.04.22.01.42.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Apr 2025 01:42:13 -0700 (PDT) From: Nylon Chen To: Conor Dooley , Rob Herring , Krzysztof Kozlowski , Paul Walmsley , Palmer Dabbelt , Albert Ou , Samuel Holland , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= Cc: linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org, Nylon Chen , Zong Li Subject: [PATCH v12 3/5] pwm: sifive: Fix the error in the idempotent test within the pwm_apply_state_debug function Date: Tue, 22 Apr 2025 16:53:10 +0800 Message-Id: <20250422085312.812877-4-nylon.chen@sifive.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250422085312.812877-1-nylon.chen@sifive.com> References: <20250422085312.812877-1-nylon.chen@sifive.com> 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" Round the result to the nearest whole number. This ensures that real_period is always a reasonable integer that is not lower than the actual value. e.g. $ echo 110 > /sys/devices/platform/led-controller-1/leds/d12/brightness $ .apply is not idempotent (ena=3D1 pol=3D0 1739692/4032985) -> (ena=3D1 po= l=3D0 1739630/4032985) Co-developed-by: Zong Li Signed-off-by: Zong Li Signed-off-by: Nylon Chen --- drivers/pwm/pwm-sifive.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/pwm/pwm-sifive.c b/drivers/pwm/pwm-sifive.c index bb9146267bc5..6259f8500f71 100644 --- a/drivers/pwm/pwm-sifive.c +++ b/drivers/pwm/pwm-sifive.c @@ -101,7 +101,7 @@ static void pwm_sifive_update_clock(struct pwm_sifive_d= data *ddata, =20 /* As scale <=3D 15 the shift operation cannot overflow. */ num =3D (unsigned long long)NSEC_PER_SEC << (PWM_SIFIVE_CMPWIDTH + scale); - ddata->real_period =3D div64_ul(num, rate); + ddata->real_period =3D DIV_ROUND_UP_ULL(num, rate); dev_dbg(ddata->parent, "New real_period =3D %u ns\n", ddata->real_period); } --=20 2.34.1 From nobody Sun Feb 8 07:59:04 2026 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (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 2007E25B687 for ; Tue, 22 Apr 2025 08:42:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745311343; cv=none; b=KkUBESdOISl4rVX/70ZCWVhQYJNTmEoMtWcfM6wICS0xpEscf6HK3TbSc57K3ioq85McGD5eQNH9ZlGG3tjbvMxqFUtl7McaZNrdKHx3EvzJtkSlEFm7NXhfU5QPksVhcH/ockDk1kD1GRkV7LbiXLiuQllktpD4nx/hbN/P+cI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745311343; c=relaxed/simple; bh=EzCnckv9uZo2HPeOYfcjt07O4220J44jVkWlG4oW530=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=WFoMAyk4cWQ8/Xjqj72T0aqpsQQGoJf136n3qjTF+jgoLcqIvak8BUPrKc2BEc/oCJ79swIytcPizR3LnCleOhR8Y189xOXR8Uk8EMNzA86qGsUoxFdtx50GpB0i+jhEJTsMClwYMh2sZRlDKcADN0vlwMua+3BA0bOpBoLWnCg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com; spf=pass smtp.mailfrom=sifive.com; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b=ZEdL+XXW; arc=none smtp.client-ip=209.85.210.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sifive.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b="ZEdL+XXW" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-739b3fe7ce8so3957542b3a.0 for ; Tue, 22 Apr 2025 01:42:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1745311341; x=1745916141; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+kd2q5FNIM78jM5HghPwsl1jyBcissy+tuMihRdmdhE=; b=ZEdL+XXWc38j0cl9qTgvCLaSKSqUXODHil5RYbnuk9uvEwoUrsCxQRWKk+Mz68x2xA Pljt/qutYYTRFWepTlcNhfc5DVDYa2qnNkeWGxiKcUS5hNzLGLfGgNId4JrrKKbxytJ8 bnZlgaDFlaW/Um/alnFdGBORJgeBrPs+B8hy+Jhf1e5pt8Nn10uqd1jo6LBlaik5gke1 ddjF3ELqVGnQnsK40aV5Z4qJY3UP7DGKbZTTcsfZGh02LvIvjNfu/nJh3IZ9l1ocGimI f/ubtfKYOEzZme1QGi5dxYyRLZco4ULfPsj158Nn0glAEzgFIHH7Gb1pSQmg3Wa2cWwV eOwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745311341; x=1745916141; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+kd2q5FNIM78jM5HghPwsl1jyBcissy+tuMihRdmdhE=; b=Qo3h97bsOjDTgMUNuZaialab8bcwFBV/zdGLGZM6Oynw7tu5ueGxzf4IbVn1NPSlW4 ixINQDCNWqlzo71pde1vymrRFDUNnmf4hHStqoubg3+jygMPPvX+Rn/AIuRoVJFAVwCj dhJ6DKoOPcTpX/UzYc+WZeQnGTb8+QYDOmlYIcuswLsJVOsEUPnIHj8G2BpWZpTisdK8 vc5XiHDn3BgTIzSRu6Ma53xPTzi69FUfwNUnsUxFZn6ZwqDaMYqYn+9oqdZnf9m0fdOp /AGqkw2vt/bBIxHn6U4/BmkQUd/xsUSoIfzo/HPBP7OJ9uuiyORRyKJUfwUcJhg5ocn+ rh9g== X-Forwarded-Encrypted: i=1; AJvYcCVLm7rnVrUfCVr/1XI63PAVJ0/5/auid5PtQDFGwPa0eS0vSylHtpsi8yqea50ShZxPWJRdYDbz5rx/DJA=@vger.kernel.org X-Gm-Message-State: AOJu0YzQ4zPVA/ytvZUSWphk8elbo4dyP1noHWHxkGMEANInF5CI/wh/ ba3Bjh+tYp14RcDwk1sC/W4COJm5OElPu8XVtL6SCp2tLw+pcAxze0JEkJ/jePk= X-Gm-Gg: ASbGncvjDhpL7us/qGvLl83KMJ2p79uBwN8dfOdZwshmWuq7HXaSQkPeUTVIfBpArJA fo3DxCY0gAg6e4O4YhbDnEr/Pgnw1v6Qc5YNF6rl4qgMuK88TR9VN6vm6yKSE0ercD0YVS5lfWM XV0KrKLvxYVCnfYp6vhnEYXTb+LsiCgNMIc+qqPql1WTjL8z5j41CPPQX0aBWBnsQj+7Z4Fmy5t HzpnU7vaU9+ScgV6CrJQjTAmCu2v2wgf+1PIEahaPjEPcsNVoD2d/8hKcZH6VDFWuScXelznC3g mViDAAtOqp0DRL2+NH5SQ0rMzoHYHIqql3DRaFqkeWCFsGHNIxVN9Z4vOkVyUqNJb21H+dYQlrw 5CA== X-Google-Smtp-Source: AGHT+IFXZZ39jj72YYhr/K/5oJ3Ngnd4eF5Q61F34OsaTVnM0ysvTXVv8micdw2peLTPVFWC++GWNQ== X-Received: by 2002:a05:6a20:9f07:b0:1ee:e96a:d9ed with SMTP id adf61e73a8af0-203cbc251cbmr24313065637.7.1745311341488; Tue, 22 Apr 2025 01:42:21 -0700 (PDT) Received: from hsinchu36-syssw02.internal.sifive.com ([210.176.154.34]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-73dbf90d7f7sm8038343b3a.82.2025.04.22.01.42.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Apr 2025 01:42:21 -0700 (PDT) From: Nylon Chen To: Conor Dooley , Rob Herring , Krzysztof Kozlowski , Paul Walmsley , Palmer Dabbelt , Albert Ou , Samuel Holland , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= Cc: linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org, Nylon Chen , Zong Li Subject: [PATCH v12 4/5] pwm: sifive: Fix rounding issues in apply and get_state functions Date: Tue, 22 Apr 2025 16:53:11 +0800 Message-Id: <20250422085312.812877-5-nylon.chen@sifive.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250422085312.812877-1-nylon.chen@sifive.com> References: <20250422085312.812877-1-nylon.chen@sifive.com> 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" Fix PWM apply and get_state rounding to ensure consistency between setting and reading values This fixes the reported errors: pwm-sifive 10021000.pwm: .apply is supposed to round down duty_cycle (requested: 360/504000, applied: 361/504124) pwm-sifive 10021000.pwm: .apply is supposed to round down period (requested: 504000, applied: 504124) Co-developed-by: Zong Li Signed-off-by: Zong Li Signed-off-by: Nylon Chen --- drivers/pwm/pwm-sifive.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/pwm/pwm-sifive.c b/drivers/pwm/pwm-sifive.c index 6259f8500f71..065d6d2b84bc 100644 --- a/drivers/pwm/pwm-sifive.c +++ b/drivers/pwm/pwm-sifive.c @@ -122,8 +122,8 @@ static int pwm_sifive_get_state(struct pwm_chip *chip, = struct pwm_device *pwm, state->enabled =3D false; =20 state->period =3D ddata->real_period; - state->duty_cycle =3D - (u64)duty * ddata->real_period >> PWM_SIFIVE_CMPWIDTH; + state->duty_cycle =3D DIV_ROUND_UP_ULL((u64)duty * ddata->real_period, + (1U << PWM_SIFIVE_CMPWIDTH)); state->polarity =3D PWM_POLARITY_NORMAL; =20 return 0; @@ -157,7 +157,8 @@ static int pwm_sifive_apply(struct pwm_chip *chip, stru= ct pwm_device *pwm, * consecutively */ num =3D (u64)duty_cycle * (1U << PWM_SIFIVE_CMPWIDTH); - frac =3D DIV64_U64_ROUND_CLOSEST(num, state->period); + frac =3D num; + do_div(frac, state->period; /* The hardware cannot generate a 0% duty cycle */ frac =3D min(frac, (1U << PWM_SIFIVE_CMPWIDTH) - 1); inactive =3D (1U << PWM_SIFIVE_CMPWIDTH) - 1 - frac; --=20 2.34.1 From nobody Sun Feb 8 07:59:04 2026 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (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 C264725B697 for ; Tue, 22 Apr 2025 08:42:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745311349; cv=none; b=UccKausJL+S0ZbF9qSLvbqOzQvYtK2egg3J44Up6RQm8is1gwNpQexjI3ZlvO2OHYcTBYwavikyYg3zHqzBx4h0kU0yU/w+WPhgdjRfCaXcvq7wGKv0zS7GJwi97Azo5uT6vZDfO+6z4m/P+cwp6E73HpzNoMM9dJf4MXtRfqf0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745311349; c=relaxed/simple; bh=K6w2WFh9gMEo/5yGUkNlU3R7QRO5KBl4M7IcHSkIgaE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=KhVqYLliKRa9ldErxKFaC/8f9YqJEE+4oKtwFC6pmPNs2/jpHMBZb3e0kIosYZTdEBEAzSLkMKqjOhF/USJ7IDqZz4XgdLas3uZcBXlCCfGrZa3cGGW82s9dj/sFuH5Qj77alW7+RzYOTto34PVzC+uzZwc/HXu72pD8WymgesM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com; spf=pass smtp.mailfrom=sifive.com; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b=Zdek5f3G; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=sifive.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sifive.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sifive.com header.i=@sifive.com header.b="Zdek5f3G" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-22928d629faso46171755ad.3 for ; Tue, 22 Apr 2025 01:42:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1745311347; x=1745916147; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=89q5KIPhl5BwNYn6HnfG+6c7PCM/cs0DxATEzoR1SG4=; b=Zdek5f3G6DqW/cq90zlMNzu40I0wOZDSfg5rtDi+cMm1Ta/YYoyhg7e7s+hOxbtwf+ AgUcbLeui3dZP3qxNzYMQC8VfwDyXnDJVUrDAzgwrDXofydUPtbUOdpBbIi7kgRWA3cW xqUxSqNstO5OfgmlY36cym1jGd5WOKOLUSVAc1IHTh8CoyoN1JPp+/5maQt20N7iqOO3 2pU0kH7NS/RHdnDtl0a/CLsGh6wJpmg+cNAJ2kLBJFNiaovCqK8zF82bAo8HfhA1OGL4 WnyHHz6LPMGMxROtKGDBs8j1JW6+QXDh07PRgt8jine9qGWWe0G2PjCxGOKvMxaUgl9a 1g6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745311347; x=1745916147; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=89q5KIPhl5BwNYn6HnfG+6c7PCM/cs0DxATEzoR1SG4=; b=d7VFApAworeK6mu0gYa34OOTV7YCaG3gMagAOiI63eBmKu3i2mFHRc8k2RQJlSvW+h Q5Fw/vwyCbKjMTxnJVDOFMiSXcqo5gaCS1S8dA7fMuSQKWlESK2OnVvy9Kbv/pF+vxLk /YesGKdUneSO2IlBa3hb/uLIFYfhFwkSfiJRl3JHCgclFPKR0HuUEFvbgUKBkYyv3i8T cVjiEMswg4Jl1hTRcLFVDNDVKT7An3irIFyztH9b9zMO+DZuo6cup2APwL/1fQTVjI7T Z5nrlZ6G1jVF4GkoxFpyqYE664orI+3zbRTzcUupFfG1oarrpvkGlAz5rSlzpru91/Dl NeKg== X-Forwarded-Encrypted: i=1; AJvYcCV9+VNJWzf3Md8q4eyVTHU0yAFw+VjPKmpMcq8qOiSNuYj5yCwKSTEzk/DmEXN8ON7ZSMveqS0vTzuXzzk=@vger.kernel.org X-Gm-Message-State: AOJu0Yx4HjkIYFtUzwR3rUIEBUELy9nJwQkrbZl4WXt8/2kJmFrtn5ls 6yRiu428728T2yh3vRWg/Lzan5EC753MLYne3xC249Cqjj8CTkyOnXsvSsyrVxKtWOEHTnRtpjY b X-Gm-Gg: ASbGncu0ylZwaL57WNWEvKgZLWZpy20u826MvtU52NDpIUTlo36LYy5ll96r6FxYFzZ heKqI120w6Qe9iC4wQIjUCpMR2TNjALbV9aSu0ppqfXO7qpr37bctcrL1EN7WYX2LNJnBBNSret PAR8xfaXQaSKi/BcGJe49m/hErN4jF4+DDq61U+8tvAhoeogSfFKdNUoyCRLTedMNqoOlDn/Jfr 0Er4J8y+BgquCoYOR2Nnqjw7Nnv1OFe0FblqDKEirnw22UMz9lYfO58j3FQIa/EA9jDtWI0Sx5P ylQwWmxAnfpwZ32Duzvj6KRBnmZ19FttRNhfMwtoTQkiQZczZK9zqeQoj3g67r380beF2RBWBlq tMA== X-Google-Smtp-Source: AGHT+IG6i6LASvzQIRsj01arYQDJviqBEn/oP/EmdDE8D+TJPVgUwa41kw2BKL7zCVHOsNc3CK8D2g== X-Received: by 2002:a17:902:cf07:b0:220:f140:f7be with SMTP id d9443c01a7336-22c53601243mr243185875ad.41.1745311347173; Tue, 22 Apr 2025 01:42:27 -0700 (PDT) Received: from hsinchu36-syssw02.internal.sifive.com ([210.176.154.34]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-73dbf90d7f7sm8038343b3a.82.2025.04.22.01.42.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Apr 2025 01:42:26 -0700 (PDT) From: Nylon Chen To: Conor Dooley , Rob Herring , Krzysztof Kozlowski , Paul Walmsley , Palmer Dabbelt , Albert Ou , Samuel Holland , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= Cc: linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org, Nylon Chen , Zong Li Subject: [PATCH v12 5/5] pwm: sifive: clarify inverted compare logic in comments Date: Tue, 22 Apr 2025 16:53:12 +0800 Message-Id: <20250422085312.812877-6-nylon.chen@sifive.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250422085312.812877-1-nylon.chen@sifive.com> References: <20250422085312.812877-1-nylon.chen@sifive.com> 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 reference manual says "pwms >=3D pwmcmpX -> HIGH", but in Figure 29 pwm= cmpXcenter is forced to 0 via an XOR, so hardware actually outputs HIGH when pwms < pw= mcmpX. Thus pwmcmp holds the off-period count, and the driver must invert it to expose a normal active-high interface. Co-developed-by: Zong Li Signed-off-by: Zong Li Signed-off-by: Nylon Chen --- drivers/pwm/pwm-sifive.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/drivers/pwm/pwm-sifive.c b/drivers/pwm/pwm-sifive.c index 065d6d2b84bc..a1f13801bca4 100644 --- a/drivers/pwm/pwm-sifive.c +++ b/drivers/pwm/pwm-sifive.c @@ -4,11 +4,28 @@ * For SiFive's PWM IP block documentation please refer Chapter 14 of * Reference Manual : https://static.dev.sifive.com/FU540-C000-v1.0.pdf * + * PWM output inversion: According to the SiFive Reference manual + * the output of each comparator is high whenever the value of pwms is + * greater than or equal to the corresponding pwmcmpX[Reference Manual]. + * + * Figure 29 in the same manual shows that the pwmcmpXcenter bit is + * hard-tied to 0 (XNOR), which effectively inverts the comparison so that + * the output goes HIGH when `pwms < pwmcmpX`. + * + * In other words, each pwmcmp register actually defines the **inactive** + * (low) period of the pulse, not the active time exactly opposite to what + * the documentation text implies. + * + * To compensate, this driver always **inverts** the duty value when readi= ng + * or writing pwmcmp registers , so that users interact with a conventional + * **active-high** PWM interface. + * + * * Limitations: * - When changing both duty cycle and period, we cannot prevent in * software that the output might produce a period with mixed * settings (new period length and old duty cycle). - * - The hardware cannot generate a 100% duty cycle. + * - The hardware cannot generate a 0% duty cycle. * - The hardware generates only inverted output. */ #include @@ -113,6 +130,10 @@ static int pwm_sifive_get_state(struct pwm_chip *chip,= struct pwm_device *pwm, u32 duty, val, inactive; =20 inactive =3D readl(ddata->regs + PWM_SIFIVE_PWMCMP(pwm->hwpwm)); + /* + * PWM hardware uses 'inactive' counts in pwmcmp, so invert to get actual= duty. + * Here, 'inactive' is the low time and we compute duty as max_count - in= active. + */ duty =3D (1U << PWM_SIFIVE_CMPWIDTH) - 1 - inactive; =20 state->enabled =3D duty > 0; @@ -161,6 +182,7 @@ static int pwm_sifive_apply(struct pwm_chip *chip, stru= ct pwm_device *pwm, do_div(frac, state->period; /* The hardware cannot generate a 0% duty cycle */ frac =3D min(frac, (1U << PWM_SIFIVE_CMPWIDTH) - 1); + /* pwmcmp register must be loaded with the inactive(invert the duty) */ inactive =3D (1U << PWM_SIFIVE_CMPWIDTH) - 1 - frac; =20 mutex_lock(&ddata->lock); --=20 2.34.1