From nobody Wed Dec 17 08:56:11 2025 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (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 2EAC4279330 for ; Fri, 9 May 2025 09:41:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746783697; cv=none; b=lMlocwD+rI6P7pyKb9h2+FLaNDwzGGa+g14bAIpR1UFdQpU06qGeU1Sxv9rjfNCF20fJG8rwvJC9Fgqvop57LpRb7CvKs1lCjJC6i2z3dUeS32KivV+A8LCkAQ0UJ/nq1IkpKxakNRTEQSSGIMdykckv6u40ncdpgBcRYunE9LE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746783697; c=relaxed/simple; bh=plbpc31rVrOD0KMkWiMy9DSCysG2bPp4EWpOgbNVk+g=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=bMupkwtSyY1uLqdJPvaQ4gx3ZTh4udXEzktWz9ee28HutzfuQtMUlq45EwDORRM199vQm0WCSEj4hxaKG7l6vmm7lCUdTAsKFT3Gu+28qAzvoOt16HgruJ8x6ZldHUHF+L3GzAzhocG9KJJfT9K5H3ZdtZrDNeYiBNZqqBmO4NY= 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=P3b6Lxal; arc=none smtp.client-ip=209.85.214.179 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="P3b6Lxal" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-22e6a088e16so14629315ad.1 for ; Fri, 09 May 2025 02:41:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1746783695; x=1747388495; 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=P3b6Lxal12gJVlPgV30LrHtHHKxGSI2qlZmaCjf7FwEHT1OMF5rXySPhf6j4flADkE 7R9X2gWmOWN2OwNXTuErJWMFenx1BpukNZH3vfkxikf1T6s8/UpaQgddI45UQlyTAhJv ZOeMfaodPWyxcrvcSornFVqQoYvWIY3xwSpkWTB28zPRG5PQLjJRm7Fzgl894IhlEBbd AxoNX62oECDFtzrLUJUKnHtSx06ezCLANDq+SSN/Tg2XHhzdN+gaIARgSmY3UF3DfnIN +rMs5QyKvdYP1JrxZBbK7MsjmKGfzds2xRpJoXVr6jblAA5589wCsnivXNAe5jHtNU3C uJxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746783695; x=1747388495; 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=EUDKilOz2IB2+FUK3RdYMIrLUvsGDHWbXvEzqNYwrM5NSuclDWG9tf0nMW5t6JMOn3 y0xg7Gu8dzBOSEtlkWHQC1rDlQu6cqCCqQrN0PE69luXQ0sCXOf+FvI3ta/92MnYDUki V+U0oHcFYFC6LGIIedC8pN9dCM/tX9VDDmOV5dvZXC2poFY18OgCM1XyjMFTLXNtox1W BGEipSz2doggJ7MzQKN/ff4cT87doqFjGE/kWL+4ZTmqwxOsZD88Xhxz5H6rWlsY/mo9 y/YDpWvBrRv62covoiCpCcVMSL8nS1QfD5qbKhbsq/SLUnDKPDZFvjbRPNd4GMDaWYMp QXJw== X-Forwarded-Encrypted: i=1; AJvYcCWGHajtP5/3thql5n/9R1q29I7A+u54wfgFXs2dguDXs6xD5uja2i17TY6oC9wCOkRBQ6i6ET0heeOfnlM=@vger.kernel.org X-Gm-Message-State: AOJu0YzYO95A83qedKfvqGHXNV9CyUmCIg+3xVIANuu3pR5NlIsgPlJq 6sFDlXiFkabMetBAUp0GyJ7iR23gL3iU2E11exnW7Nv7bZNdo7YWPV0BG9WS2B/hrb3HST7yUES WU6VKCA== X-Gm-Gg: ASbGnctAQwAbrS3jpIeq8OJTocQO51A8043gQhyaQIQbTY13bxlXqogAODdkanmIT3q HmgjuIk5oQef2eVAXhSiW5Fy8lZTsVdQK1InRtLkZCRnBJZG8UjCr5Z4PhheYsf72+6idt6qicM SseZoz4IUhPYeVOXU7v6C+desYFIIxySGGUp+BmMFSrtDWQg1/LDyTSQ7AR7reaQb9tjg0igx5p hcawtvgUD0toWYkliWjnraal9/SdMcZoz9ymFqIL/8J7GUtga2yZN/KMH432jQUU51G1IRVuhFk Oun+fvNVlaRzyZXrYenE07MHR5RKv2irSueP8JoIyjS6/ImXoiMPje40sI2V0YVDQT4hfFoYeKC RAQ== X-Google-Smtp-Source: AGHT+IEgalPQ22cx7DiKoLmOGrrO9ni0jyC4XIPIwGEyDn4n6J78lWHZEvPtJShZItbWPQLmYJ0Xvg== X-Received: by 2002:a17:902:f602:b0:220:fe36:650c with SMTP id d9443c01a7336-22fc93e3d82mr42864265ad.23.1746783695428; Fri, 09 May 2025 02:41:35 -0700 (PDT) Received: from hsinchu36-syssw02.internal.sifive.com ([210.176.154.34]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22fc8271c38sm13271035ad.119.2025.05.09.02.41.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 May 2025 02:41:35 -0700 (PDT) From: Nylon Chen To: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-pwm@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Cc: conor@kernel.org, robh@kernel.org, krzk+dt@kernel.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, samuel.holland@sifive.com, Nylon Chen , Conor Dooley , Vincent Chen Subject: [PATCH v14 1/5] riscv: dts: sifive: unleashed/unmatched: Remove PWM controlled LED's active-low properties Date: Fri, 9 May 2025 17:52:30 +0800 Message-Id: <20250509095234.643890-2-nylon.chen@sifive.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250509095234.643890-1-nylon.chen@sifive.com> References: <20250509095234.643890-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 Wed Dec 17 08:56:11 2025 Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.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 A5B8B279330 for ; Fri, 9 May 2025 09:41:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746783703; cv=none; b=cnv7uKZzmr3ff5nJrDkKtN1fMywfIiVuh1/1dVQjc+kZKoGPiW2yD8MSwYE8hKBHduKr79eJS4O5Rpc7G1oE+nJgr2sP+oDGgyFMeHZWKRmrS8BFaYw01cLTED0eDropInAgyVmIm3QYKoFI0H6KzL3cMMMIwartqSAzCTegteE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746783703; c=relaxed/simple; bh=AhRbnxt00FmE/WhEN1u8zVz8q5gXEKLj1JYmMYck0AA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=RCH9CDY54LY3M6G8YJ+U8JiFNCl2ZHLgJ9GNvOHUEmCBP+JYbGGGC+KMNbHJOK2gZEnNze20ItiEypuoZrB27b4O0fHg9IK3Qg7LPFHGyxpDqiJfsSmXXCWHM1ZevAOMnjo0NJv2XOkFuvClP1B5bvGfyDSkHCXO2iNhqekh8ac= 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=gnk6RZ/K; arc=none smtp.client-ip=209.85.214.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="gnk6RZ/K" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-22e76850b80so14803245ad.1 for ; Fri, 09 May 2025 02:41:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1746783701; x=1747388501; 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=gnk6RZ/KgoV7HPxvwotAKtrfohVED2CYX0BLPhyouCfXpb8ssaUAlQDC+EBsk1tMx9 lpC1PLO9KsV3ivvqwjECKDhEeX4b3O9eSzpQCc/9gVwaWHzsaFZjBNWA+bKXPGzOhSnP 2W5A1MJHmb5FfY0isBTbwsyljaZXyC0Rrq1E+P9PmvpZBgr4VCzicsD96EY6w6aiTcxt 1Izos8yH5u5ubAdLtskPdkfuVduY88PTVihQc8XtRJlFLAyKDcus65p2JR3qVizNH+fH eAfUgY7ysmu6xuNNwqlLdJAYiYNhxeA1rl1q7pKydqwdTU9HYtdHBs7xh2CRSbTZDi2Z uflQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746783701; x=1747388501; 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=Pf8sgqQzKppoFKF3cVtVpxqfyn41Ara1akjtPAjgOUn7u+UwdkFNz1jYXUNUT1Omu0 YOjF/WhjaUGQ4RzwNMTyw1Nc+oL6wXYXtEUjRDQMI3ye7YQrD0W1RpHuXaC6I8Qb5rGs paZwhUGrqyc8yz09q+r35oaro36WZ/OmYNUXaPEEQD/tgaD10j16ZAidv7mYohBra5sy /zvf38sJCXiTWW7gaQY48Fbac7kPyqWpToV0WVMgs2UoeLCy+dAM7/trIIb3+QNQCLsg Wa4chwR1tFzMvqfgH3ToVpTNJeCJK0JoOQWcKBkjtLlcnBKMlmz5YtUugsTqE6bge+dk GcAA== X-Forwarded-Encrypted: i=1; AJvYcCVDaraId3QUzUtWSKus89dGEzftH7GStmm1ENM66FHO9xyL8O/vLwVa9XPL8d+hb1MoJyk/vH+XPFjRoWA=@vger.kernel.org X-Gm-Message-State: AOJu0YzXhKMvZc0hnCeAx3Sx6Y+ojw8ooHMKyoJuW1Z1dmjhGixQh42D NML6u+yePGevsPRnGsfqIsGt9g113xMjNawfCY3IVPiD+fGl8wa/Tq3euvDvUM8= X-Gm-Gg: ASbGncveo2IW/sha8R9LewPYz4xDaoq5UZHe5fcVPcdU5IYMGxI/+89XKYl1pxk8att fUl6ncGq8P2NvCz9xGN4RC1ttb4duOQ3FWos5rzr8zhG1PssI/JMklYQkFKTsfxNx3N88zrj6wV tfyXT+9KrjYqFK23vh0zsVqsoxcIwQhwiwNeX+hoIO+d2s8d8UKulptBCqhSbJ0PcsMjGWgl/6c neg++cgudIA/ZKNLKJfB1hxsE5XZwV7vRAV+qaYq1ClyCTalevmHS7ZWJSup4ZgDikAZ7QYsn26 8r+eemS6F6Y97C6m2cYBN0M7J1UFU8oruf1UMg/aeY80s+xchldVuYs8ogPG47e7cbf/P5uUBOg guQ== X-Google-Smtp-Source: AGHT+IH6CJp7geNRf/gfDN17FTLMQyKVaZTxIXnNcwyUwIxRi1b6xhJMl5CuSsuy0q5Q7sBCMcAAog== X-Received: by 2002:a17:902:f644:b0:224:a74:28d2 with SMTP id d9443c01a7336-22fc8b76ab5mr41666335ad.26.1746783701043; Fri, 09 May 2025 02:41:41 -0700 (PDT) Received: from hsinchu36-syssw02.internal.sifive.com ([210.176.154.34]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22fc8271c38sm13271035ad.119.2025.05.09.02.41.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 May 2025 02:41:40 -0700 (PDT) From: Nylon Chen To: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-pwm@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Cc: conor@kernel.org, robh@kernel.org, krzk+dt@kernel.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, samuel.holland@sifive.com, Nylon Chen , Zong Li , Vincent Chen Subject: [PATCH v14 2/5] pwm: sifive: change the PWM algorithm Date: Fri, 9 May 2025 17:52:31 +0800 Message-Id: <20250509095234.643890-3-nylon.chen@sifive.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250509095234.643890-1-nylon.chen@sifive.com> References: <20250509095234.643890-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 Wed Dec 17 08:56:11 2025 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.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 31DE628D837 for ; Fri, 9 May 2025 09:41:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746783709; cv=none; b=LDmZfqewP+UEhLrn6FrVyjklW8qXlxHn8hiB63TyQekaQ5TyJPGjvwfKR7k1EWMe0IdmDLroHLyTjpPO4VuKwI8LjIc2RoiW432mx/CSzVgWjUqe3NvUr4gawLJRR5Xky59bhW/22UuqZAghl/1Pvywk0jBFHRBrplA6kxknAZ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746783709; c=relaxed/simple; bh=glrL9frKUynd0eooWslKXIli7Wwl1Of8mWNqeP69AkU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=kFlz2FlK62DBX9WgcpsUIhS10ZoijY7YcHXomc6Io7cNicl0pqsIpLAW5ZOlqY8L5Zbu2k2t9SSwOVlHMJF2QBJnf7rxDdWnRQY1bmVxQ8BIiqIvTceiZci/vipnMz3pC7p7xczRYvP05u/SyS0Py0X0yTrkzfcZOcTRAyhVADo= 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=aqia2S7P; arc=none smtp.client-ip=209.85.214.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="aqia2S7P" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-22e4d235811so28645905ad.2 for ; Fri, 09 May 2025 02:41:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1746783707; x=1747388507; 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=aqia2S7Pqari63bQ2xUwRnkInMjdARyyb6Iz1BVyc9mcTkLYDMWaPbNPsl8xACTHNA DQnDPos1vxPyxYcFDYbjCoIspR7xH09sW8IL/ow/7OBV1znqYRDELPd/nZSrzKDlP1HR y94b5fDkt5I/WMqlvCdjI8VER2osa5FsZkXI/KgNhMJfPvk2dJcGkMYUO+9D28ngwAhe MAbj7dUozNK4OIxfBW/spV3rTyh2wYYGP0pov3ZOOLb6LIhWaDlh0sMiwgvAuHeXwznr +s3AEyXj/r7lviD7wIUubxwpsRT3zFvP90ioOBYZEXP9/rakaRP8NVGKDFbLnOvL+x5c MwTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746783707; x=1747388507; 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=c3a8XugGeWK9mtdPtwSCrymLNM/ntUsIutpzujAwHTE+Q5ssu/NlCeN5ohxRhFTnHr d6S9MGXpPDCRbt4SbJLCWd5LazVIToylbyb9HCHBYIi2Mzy9cyS5ptMLSIgv2Ws0KtQc i7y2UEPbFs3th67zGcb23CNWPCi0EYwuaGAjY6VyzYtbELPZw3yFIflPbcEPUTzLE7o9 4zs1oYMkk/dnyRWEk/YYh063kBUQHuNXdARg+2SLPh4532UEbjwfAE58jrh5hrGH9c21 PL2HdbNsMLiIC7Pa4HIpQqXWalORmjofo/pgCfdnNa1GVJuxEmb/+KtEzBa5Y2oioPpk IJaw== X-Forwarded-Encrypted: i=1; AJvYcCWVbLY60a0KcZBmC9Oa9wsj0WXo14L4hXppMrPvLjYnHMr4MZotpF27YHP3ItHtNCv+mBWKkNcr/G56A6s=@vger.kernel.org X-Gm-Message-State: AOJu0YzJUjw4vLvFWSXUwC7f64KVmWKMHhtRrRQIMUptigFTkHXtxi7I yX2sbKhzDTWRtCuceQLTCyMi/DU9mw+q9LHWfc6gkbP9FwGkHIal+DsT8favBwE= X-Gm-Gg: ASbGncuwZl8v+KfG7TCgas4EYYNtzLu+bxd6tIgd4WCIF1wZnOKvD+UCRrbWzjN+KOq /3twFdpateRXMaQEIzZtqLS+LZtD2P5crtSLgd1ZXh3CoeNcr/5FvZMd5Cs/BW5zxsOmkMSs6WK jNiCWjeqPTCqXq/2+fiF/NqcnOjdpC56gdmdpv/HIgQPmvTI+eCyCQ4PLIaAeGwDfYp+1CvUp/R 2GbX3+6W/ywTkpkiufEAjtk3SHCU+7mInVMs1MUGynEV/HJnVvRwPHfmSTr84dpoxoepl8LkMqM bUNN98h23WhfLg0dd9fAuFWPyRKp8ZrYX0oFfYLgCDOGoOW0t2o7AZIotwJZ0FM4uViW+faNgqN 28A== X-Google-Smtp-Source: AGHT+IFkTuXt01agQ1105zn1T3rz6uGwTacZ4V6TXQQSitMoy+sXg1uhaf6FBpjek3MEYU8Zsgr4Hw== X-Received: by 2002:a17:903:1a2c:b0:22e:50f6:b95b with SMTP id d9443c01a7336-22fc8b3d8a7mr40565465ad.11.1746783707291; Fri, 09 May 2025 02:41:47 -0700 (PDT) Received: from hsinchu36-syssw02.internal.sifive.com ([210.176.154.34]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22fc8271c38sm13271035ad.119.2025.05.09.02.41.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 May 2025 02:41:47 -0700 (PDT) From: Nylon Chen To: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-pwm@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Cc: conor@kernel.org, robh@kernel.org, krzk+dt@kernel.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, samuel.holland@sifive.com, Nylon Chen , Zong Li Subject: [PATCH v14 3/5] pwm: sifive: Fix the error in the idempotent test within the pwm_apply_state_debug function Date: Fri, 9 May 2025 17:52:32 +0800 Message-Id: <20250509095234.643890-4-nylon.chen@sifive.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250509095234.643890-1-nylon.chen@sifive.com> References: <20250509095234.643890-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 Wed Dec 17 08:56:11 2025 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 CC44828D8D4 for ; Fri, 9 May 2025 09:41:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746783715; cv=none; b=I0Fu3frbDs/7cDXACGBrLUyFWL6QRzlMflHGYO/YavToEgVs7jmx7PbbX5SA83KKugtBpNzhzwFqrUhpGcZ8gNBuNE+D4qLSyCI8Nsf5sg8ICStFBiKwLSYf0ABa1h51eXZi2BpB+iN7AHhDqorbUWQJijHgM31Uiu/wjcHmqt8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746783715; c=relaxed/simple; bh=5Fho6oc6oCSAcMIq7sBJ+jJgp2mgJUTo8ceJNyolcho=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=aCiKvz4HqRZZQWz5Xh4L2/OIHoQzJl0hPUsqm2p2kt+74gaQifQBwv6OIhMEz90ouOkqrPxQNIwsaaV8EczJrk5DLGGprOZmbZVJ+UVWZJolJIMFdFeRN4C5im/43fYPAA34BDjqhcQDSfCA1RKDef0+fsHdyf5MTSXMryxETgk= 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=kHdChev1; arc=none smtp.client-ip=209.85.214.182 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="kHdChev1" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-22c33677183so18834445ad.2 for ; Fri, 09 May 2025 02:41:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1746783713; x=1747388513; 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=ugS8tql+ZkgpltWYLoVv6syziSyX6JXa04P6wg0Uox8=; b=kHdChev1wskK6yqwWjc+uqHTpFb+3/dS87tx0oepj28/fVmx+ougmKYFRDUE4GrAvO H0D1gWmp0WPhXXiRZMKu/9H/S3ifoeBugb267EjL9vy7ndvjJ7xc6UAtLmWl0IRZD+XZ w2N1Q2nYGUZMk5Ytu6E8IrDna/vu/6nDLYXvSq+H/bFI7jt1dzdFYlO7qI7rUdSjwb9X 1yOATX7ORkA/wWUhrwJCDkRb6iZjbwBt3n1Lj/Abnx5CQvZGPAwkmC88aCt8zA/aak+K gyvSmdL3vA9dJ9NN0QTt38O+JZTB6fyEx4yn2yoCiprj691fHlAsXSDP66cNBZMcY+hk ZFEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746783713; x=1747388513; 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=ugS8tql+ZkgpltWYLoVv6syziSyX6JXa04P6wg0Uox8=; b=JUOV70pfMs49r4qcH3G89rO+cWPuGtrklrY9LLTzW2UDKnC+Uh5CJ0p4yc/lFV49Z3 /Jim2Vb5gbdQCLEgW8pSxHbS4W24DgvBY51lnFx6ikTrvBCmPTI3XfGwXPsIGjJEn5wZ XCWsbDgAZOLh5TCay9vp0K5aREVyvVgt3q6a1HDqPMiiEJLMC/UfvSw7NWStTQaAYce2 F0wtmtbC6bvS4pT7r8GTChNam8OLsxT602nVo5nMcl2T3+ni2U+nC033u9C6zKUKWmAD wfSPyEXrNn6JPzq0UZNyX50XYeNFjy7HPM0x6XSObVjrN8kL3f935T41YtGXjimGUAZj hkjw== X-Forwarded-Encrypted: i=1; AJvYcCWl7zq9RPLMvSk16oZFCN9Vrwzp2OcXIsSudb4CyQ2Rprv7Jz5PCowvnYx98wxk0XHjI+/aZAMMiXuux+k=@vger.kernel.org X-Gm-Message-State: AOJu0YxHwBDgMe0IiqTxsZ3RkiadvQMPaklfIzerUX6g/K7kexfG0oLk vp0vI6t6/Yk4E6RMWrXAf/IOLkpwIX+9MV0WjnuOc9k3UMgRpPaCyQZ5XwAIPcA= X-Gm-Gg: ASbGncsyf1tNcNeP8Vt3KzDX5rydpq8k54tVg0fzq99N07z2GIHHLA4iMb3Jtln4xis Adc+LUfHezcBDZ6iX0AZjiO7A7ZHLdPUxIsx55mi7YCKEPUBglIpEpha+fs6y6vtmbqQw9DVz5t Cl/YXXFGEVOBzFRvFWqqoSlPQXpXvro1PjyXugfnA9IqA/63wtVkTJgctNzTw+RioNZuNPaUj59 4WK7RfCrLeW5MHrcvMSSqubAGQ45AHDQRh1kIHBcWtw3N1F307GlfwsOyWKLHvW+UHwybFfg7Eb 6fYhE/3K55CGAXZgX6VmaYPgBuOCo4KzaDxkJn4ADtY1Fn71LthRJbngOH1ymSypmSsrc8ahml5 xJStyA4wdT4UK X-Google-Smtp-Source: AGHT+IFbQW40EyZrlZRGe5s6zM9YRrKDGJY5Na8xxo2g44zO+suwtj7zXhUWYQw4VTbBqnhb3rIQfg== X-Received: by 2002:a17:903:3ba3:b0:220:ca08:8986 with SMTP id d9443c01a7336-22fc8b3e338mr38936145ad.22.1746783712936; Fri, 09 May 2025 02:41:52 -0700 (PDT) Received: from hsinchu36-syssw02.internal.sifive.com ([210.176.154.34]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22fc8271c38sm13271035ad.119.2025.05.09.02.41.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 May 2025 02:41:52 -0700 (PDT) From: Nylon Chen To: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-pwm@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Cc: conor@kernel.org, robh@kernel.org, krzk+dt@kernel.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, samuel.holland@sifive.com, Nylon Chen , kernel test robot , Zong Li Subject: [PATCH v14 4/5] pwm: sifive: Fix rounding issues in apply and get_state functions Date: Fri, 9 May 2025 17:52:33 +0800 Message-Id: <20250509095234.643890-5-nylon.chen@sifive.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250509095234.643890-1-nylon.chen@sifive.com> References: <20250509095234.643890-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) Reported-by: kernel test robot Closes: https://lore.kernel.org/oe-kbuild-all/202505080303.dBfU5YMS-lkp@int= el.com/ Co-developed-by: Zong Li Signed-off-by: Zong Li Signed-off-by: Nylon Chen --- drivers/pwm/pwm-sifive.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/pwm/pwm-sifive.c b/drivers/pwm/pwm-sifive.c index 6259f8500f71..70cf644cde4a 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; @@ -138,7 +138,8 @@ 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, inactive; + u64 frac; + u32 inactive; =20 if (state->polarity !=3D PWM_POLARITY_NORMAL) return -EINVAL; @@ -157,9 +158,11 @@ static int pwm_sifive_apply(struct pwm_chip *chip, str= uct 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); + frac =3D min(frac, (u64)(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 From nobody Wed Dec 17 08:56:11 2025 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) (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 930B628D8D4 for ; Fri, 9 May 2025 09:41:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746783720; cv=none; b=rxUWKmzGwKyG3WYdC7im2uCibnPn5y234Nfv5t5Suq7ucEex1GuO3RykxUbl0IEvUm+euHd30NZLb9l472rtUjtpgdQTWyVcLRhQznkNIxjtUZwnOTxVA3leG6st0n/EpDdf4akYAD3rNtJmvzpREOXG9Xwae17bcWsTtwIJEhk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746783720; c=relaxed/simple; bh=to9iLI09IuUpk5B76wu/vxa60Ry89kvmQ/y3CQWanPs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Id45ksTUTIvz0G06SW+POXJ9daoxaTWhteDnmct8W2qcdgQe5ALB89ANmUHM3IYC0kCl+Go4UcM115MNefd6WsV9HL+rixonkGFgopqSdY+J3/oHSTI+tsZNigDSnUv4DpGE8lFJgzlAvO6b6Eht1DBIfEXmZVyCLpDf5W9ZW1I= 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=f0cHU1Fq; arc=none smtp.client-ip=209.85.210.170 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="f0cHU1Fq" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-7423fadbe77so389150b3a.3 for ; Fri, 09 May 2025 02:41:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1746783718; x=1747388518; 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=db3r56u6WbxunAQsqmv+qz1Bx6fNV6R3VtqVTo1N8lM=; b=f0cHU1FqsQM77D6YjCqt1Q7VxDzwAtqjLwRwNFDP3SyCh9VLzkZSCnV9RSGKH/eqzt nMfeazoI2Ryi8htOswiNeps7mLoY1eIS2q1yG8eQMjXQJwhvuRVuXg9eH+eFeXcV8MAu e2iAq0GZb/hgqAfSb3/gseSrneanO8q7VZ43cCz0qRhtnUEf0Xdg1S4OjLgnJIXAd0h3 Gzvuv+G0+oi+LhMJbc/K3kpA7+dytJs9+F/9bE5Cnn7ZiL44bY3HXl9bS4BVG3fDnM9H xj3b71GR0vFxbQTpbkuumJDTk/Tmuj55ZrAXWld7+B3Fsbfc3+Hus3EUyU4/SHSsBlcy NA5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746783718; x=1747388518; 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=db3r56u6WbxunAQsqmv+qz1Bx6fNV6R3VtqVTo1N8lM=; b=hqtJG0dYdJREAfnE8vIWlFlniLiNk/DbAJp9E/hkO0LU4UBbKMkbBVGp120/SqAyHm L3ClbERpnqChOV8LjexfJViNG9bjgIlZ8B0Tq2WuxsSAjBaTeHIPVPShbhRMJTnDdlo8 HDvj25mffPDQEVuj4EmwBw2oUmowZrIlA/VrszSIMCSLaFPeB9TTmvQBlMnhGSagqOqu VlnCRKxNccumEGTZGYbF3rncJ9sKjeSAVI8sf594WqLBYJxPoy6VtVOh93l8kxmYGit1 DInvDYU11mzt+vIoExO6XlxkUkJpv50ixfTZLvrp88aHJnIycgdWaGhvERpG1p4/ff/P NK+w== X-Forwarded-Encrypted: i=1; AJvYcCVCwXqA2N3neBuiAvG97tLPs9WRTLDUZdMLvB5L1Wn90BQPEW8TV8kX3tc42gvxBF0Oei3hdN6mQWhjz+8=@vger.kernel.org X-Gm-Message-State: AOJu0YwmgzmviUMvThGF/V1c49Mou4I+vObTvm9gtG5309a+N385JxKk 81o49UE/aYNWs7I0iWL0wO5eijVufd2q5IrV5ZjFW9YE0Y3tblAXATIPgQbvo3s= X-Gm-Gg: ASbGncsrX2rVCT5+HBNY8l6EdLoHayr2L5h4QqS4HU9z0mgSnkHBw39Rybt+WwipRi8 VEip27XcBV56JUc2zLWurE9U/YRSCVhGiIu7GnjqHxadNvYszueMV4f9mS3yrpvKfYrstJ0EO9i pnoOPvW0uHI7dMu6zctUXQW497WvzFtL6KjO65YtB0PaEwti64QHvfkjqyLnpl155cqIn9hwcWF MBajqPt/9bNF5/XyGoo+iY00sx2kxoFhKrEhaTr7gaGvkpwgHjU3f+XJc3YcXD5ky2tEH+wwk+O CpHteKWKAUlmWV+naTXjPD4JIi33amTiETom0waUO8hqGu5EXQhzo+LhuCitqja2F1vgsAX3KFe hsg== X-Google-Smtp-Source: AGHT+IH5OUjlU44wPTcS9YvNdweW8Hmi+ylHBcWO0ZjkJN+zsQnLZEzF4So5FHTc3N4rkAEKt0P6Pg== X-Received: by 2002:a17:902:e744:b0:22d:b240:34c9 with SMTP id d9443c01a7336-22fc91a9093mr48509735ad.53.1746783717970; Fri, 09 May 2025 02:41:57 -0700 (PDT) Received: from hsinchu36-syssw02.internal.sifive.com ([210.176.154.34]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22fc8271c38sm13271035ad.119.2025.05.09.02.41.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 May 2025 02:41:57 -0700 (PDT) From: Nylon Chen To: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-pwm@vger.kernel.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Cc: conor@kernel.org, robh@kernel.org, krzk+dt@kernel.org, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, samuel.holland@sifive.com, Nylon Chen , Zong Li Subject: [PATCH v14 5/5] pwm: sifive: clarify inverted compare logic in comments Date: Fri, 9 May 2025 17:52:34 +0800 Message-Id: <20250509095234.643890-6-nylon.chen@sifive.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250509095234.643890-1-nylon.chen@sifive.com> References: <20250509095234.643890-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 | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/pwm/pwm-sifive.c b/drivers/pwm/pwm-sifive.c index 70cf644cde4a..4a07315b0744 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; --=20 2.34.1