From: "Uwe Kleine-König" <ukleinek@kernel.org>
To: Cosmin Tanislav <cosmin-gabriel.tanislav.xa@renesas.com>
Cc: Biju Das <biju.das.jz@bp.renesas.com>,
William Breathitt Gray <wbg@kernel.org>,
Lee Jones <lee@kernel.org>,
Thierry Reding <thierry.reding@gmail.com>,
linux-iio@vger.kernel.org, linux-renesas-soc@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org
Subject: Re: [PATCH 0/5] Renesas MTU3 PWM / counter fixes
Date: Thu, 5 Mar 2026 09:49:17 +0100 [thread overview]
Message-ID: <aak9_ran81EPmjpm@monoceros> (raw)
In-Reply-To: <20260130122353.2263273-1-cosmin-gabriel.tanislav.xa@renesas.com>
[-- Attachment #1: Type: text/plain, Size: 4691 bytes --]
On Fri, Jan 30, 2026 at 02:23:48PM +0200, Cosmin Tanislav wrote:
> The Renesas MTU3 PWM and counter drivers have some issues which have
> been observed while adding support for the Renesas RZ/T2H and RZ/N2H
> SoCs.
>
> This series fixes the most important issues which prevent normal
> functioning of the driver, while other less important issues will be
> handled in a future series.
>
> Questions for the PWM maintainer:
>
> 1)
>
> The handling introduced in patches 1 and 2 is similar to the approach
> taken in commits [1] and [2].
>
> Is this the right approach?
>
> This code snippet below extracted from drivers/pwm/pwm-rzg2l-gpt.c
> entirely prevents the period ticks from changing at all when two PWM
> channels backed by the same HW channel are in use.
Yes, this is a known issue. But there is no sane alternative I'm aware
of as one consumer must not change the settings affecting a different
consumer.
> if (rzg2l_gpt->channel_request_count[ch] > 1) {
> u8 sibling_ch = rzg2l_gpt_sibling(pwm->hwpwm);
>
> if (rzg2l_gpt_is_ch_enabled(rzg2l_gpt, sibling_ch)) {
> if (period_ticks < rzg2l_gpt->period_ticks[ch])
> return -EBUSY;
>
> period_ticks = rzg2l_gpt->period_ticks[ch];
> }
> }
>
> Same logic has been imposed in patches 1 and 2 as the HW limitation is
> similar.
>
> Based on the logic here, a second channel can be enabled as long as its
> period is larger than the period of the first enabled channel, and the
> period and duty cycle will be adjusted to be <= to the period of the
> first enabled channel.
>
> But once the second channel is enabled, there's no way to adjust the
> period of either channels anymore.
>
> Wouldn't a better solution be that the smallest period between the two
> channels is used, so that adjustment is still possible dynamically?
>
> Here is an example.
>
> echo 0 > /sys/class/pwm/pwmchip0/export
> echo 1 > /sys/class/pwm/pwmchip0/export
> echo 0xFFF000 > /sys/class/pwm/pwmchip0/pwm0/period
> echo 0x7FF800 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
> echo 0xFFF000 > /sys/class/pwm/pwmchip0/pwm1/period
> echo 0x7FF800 > /sys/class/pwm/pwmchip0/pwm1/duty_cycle
> echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
> echo 1 > /sys/class/pwm/pwmchip0/pwm1/enable
>
> Now both LEDs are on, let's increase the period.
>
> echo 0xFFFF000 > /sys/class/pwm/pwmchip0/pwm0/period
> echo 0x7FFF800 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
>
> The effective period did not change.
Yeah, so pwm0 still runs at 0xFFF000. And setting the duty_cycle to
0x7FFF800 also results in it being 0xFFF000.
> echo 0xFFFF000 > /sys/class/pwm/pwmchip0/pwm1/period
> echo 0x7FFF800 > /sys/class/pwm/pwmchip0/pwm1/duty_cycle
>
> The effective period didn't change now either.
>
> echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable
> echo 0 > /sys/class/pwm/pwmchip0/pwm1/enable
>
> echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
> echo 1 > /sys/class/pwm/pwmchip0/pwm1/enable
>
> After turning the PWMs off and on again, the effective period is
> updated.
Yes, let's note that the sysfs API is strange.
> If we were to change the period dynamically to the smallest one, the
> LEDs would have changed their effective period without needing to be
> turned off and on again.
Not all consumers only care about the relative duty cycle. So changing
the period behind the back of a consumer even when keeping the relative
duty cycle is a no go.
> Would this approach be better than the current approach? I can see that
> other drivers just refuse updating the period entirely when the PWM
> channels must share the same period.
>
>
> 2)
>
> Another issue that I've encountered is that PWM is left enabled even if
> the channel is unexported.
>
> Here is an example.
>
> echo 0 > /sys/class/pwm/pwmchip0/export
> echo 0xFFFF000 > /sys/class/pwm/pwmchip0/pwm0/period
> echo 0x7FFF800 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
> echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
> echo 0 > /sys/class/pwm/pwmchip0/unexport
>
> The connected LED is kept blinking as 0 was not written to enable.
>
> Is this intended? Or should the PWM turn off on unexport?
For in-kernel users of a PWM it's the consumer's responsibility to
disable a PWM before pwm_put(). I think it's more natural to have the
same for /sys (and also the chardev interface).
> 3)
>
> Should the .get_state() ops read the period and duty cycle from the
> hardware if the PWM is not enabled?
It doesn't need to.
> Currently the MTU3 driver guards reading period and duty cycle based on
> whether the PWM is enabled.
Best regards
Uwe
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2026-03-05 8:49 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-30 12:23 [PATCH 0/5] Renesas MTU3 PWM / counter fixes Cosmin Tanislav
2026-01-30 12:23 ` [PATCH 1/5] pwm: rz-mtu3: fix prescale check when enabling 2nd channel Cosmin Tanislav
2026-03-05 8:57 ` Uwe Kleine-König
2026-03-05 21:59 ` Cosmin-Gabriel Tanislav
2026-03-06 9:29 ` Uwe Kleine-König
2026-03-06 13:26 ` Cosmin-Gabriel Tanislav
2026-03-16 15:49 ` Cosmin-Gabriel Tanislav
2026-03-16 18:26 ` Geert Uytterhoeven
2026-03-16 19:12 ` Cosmin-Gabriel Tanislav
2026-03-17 8:23 ` Geert Uytterhoeven
2026-03-17 9:11 ` Uwe Kleine-König
2026-03-17 23:02 ` Cosmin-Gabriel Tanislav
2026-01-30 12:23 ` [PATCH 2/5] pwm: rz-mtu3: impose period restrictions Cosmin Tanislav
2026-01-30 12:23 ` [PATCH 3/5] pwm: rz-mtu3: correctly enable HW channel 4 and 7 Cosmin Tanislav
2026-01-30 12:23 ` [PATCH 4/5] counter: rz-mtu3-cnt: prevent counter from being toggled multiple times Cosmin Tanislav
2026-01-30 12:23 ` [PATCH 5/5] counter: rz-mtu3-cnt: do not use struct rz_mtu3_channel's dev member Cosmin Tanislav
2026-03-22 6:58 ` William Breathitt Gray
2026-03-22 18:57 ` Cosmin-Gabriel Tanislav
2026-03-05 8:49 ` Uwe Kleine-König [this message]
2026-03-22 7:11 ` (subset) [PATCH 0/5] Renesas MTU3 PWM / counter fixes William Breathitt Gray
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aak9_ran81EPmjpm@monoceros \
--to=ukleinek@kernel.org \
--cc=biju.das.jz@bp.renesas.com \
--cc=cosmin-gabriel.tanislav.xa@renesas.com \
--cc=lee@kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pwm@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=thierry.reding@gmail.com \
--cc=wbg@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox