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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.