[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <DAKFT7C8IRC4.2ID8TJIKN4Z5R@kernel.org>
Date: Thu, 12 Jun 2025 11:12:18 +0200
From: "Benno Lossin" <lossin@...nel.org>
To: "Michal Wilczynski" <m.wilczynski@...sung.com>,
Uwe Kleine-König <ukleinek@...nel.org>, "Miguel Ojeda"
<ojeda@...nel.org>, "Alex Gaynor" <alex.gaynor@...il.com>, "Boqun Feng"
<boqun.feng@...il.com>, "Gary Guo" <gary@...yguo.net>,
Björn Roy Baron <bjorn3_gh@...tonmail.com>, "Andreas
Hindborg" <a.hindborg@...nel.org>, "Alice Ryhl" <aliceryhl@...gle.com>,
"Trevor Gross" <tmgross@...ch.edu>, "Danilo Krummrich" <dakr@...nel.org>,
"Drew Fustini" <drew@...7.com>, "Guo Ren" <guoren@...nel.org>, "Fu Wei"
<wefu@...hat.com>, "Rob Herring" <robh@...nel.org>, "Krzysztof Kozlowski"
<krzk+dt@...nel.org>, "Conor Dooley" <conor+dt@...nel.org>, "Paul Walmsley"
<paul.walmsley@...ive.com>, "Palmer Dabbelt" <palmer@...belt.com>, "Albert
Ou" <aou@...s.berkeley.edu>, "Alexandre Ghiti" <alex@...ti.fr>, "Marek
Szyprowski" <m.szyprowski@...sung.com>, "Michael Turquette"
<mturquette@...libre.com>, "Stephen Boyd" <sboyd@...nel.org>
Cc: <linux-kernel@...r.kernel.org>, <linux-pwm@...r.kernel.org>,
<rust-for-linux@...r.kernel.org>, <linux-riscv@...ts.infradead.org>,
<devicetree@...r.kernel.org>, <linux-clk@...r.kernel.org>
Subject: Re: [PATCH v2 1/7] rust: Add basic PWM abstractions
On Tue Jun 10, 2025 at 2:52 PM CEST, Michal Wilczynski wrote:
> Introduce safe Rust abstractions for the Linux PWM subsystem. These
> abstractions provide ergonomic, lifetime managed wrappers around the
> core C data structures and functions, enabling the development of PWM
> chip drivers in safe Rust.
>
> This initial version provides the core building blocks for writing a PWM
> chip provider driver, with a focus on safety, resource management, and
> idiomatic Rust patterns.
>
> The main components are:
>
> Ownership and Lifetime Management:
> - The pwm::Chip type, an ARef managed wrapper for struct pwm_chip,
> correctly handles the object's lifetime by using the embedded struct
> device's reference counter.
> - A pwm::Registration RAII guard ensures that a call to register a
> chip (pwmchip_add) is always paired with a call to unregister it
> (pwmchip_remove), preventing resource leaks.
>
> Safe Type Wrappers:
> - Safe, idiomatic Rust types (Polarity, Waveform, State, Args,
> Device) are provided to abstract away the raw C structs and enums.
> The State wrapper holds its data by value, avoiding unnecessary
> heap allocations.
>
> Driver Operations (PwmOps):
> - A generic PwmOps trait allows drivers to implement the standard
> PWM operations. It uses an associated type (WfHw) for the driver's
> hardware specific waveform data, moving unsafe serialization logic into
> the abstraction layer.
> The trait exposes the modern waveform API (round_waveform_tohw,
> write_waveform, etc.) as well as the other standard kernel callbacks
> (get_state, request, apply).
> - A create_pwm_ops function generates a C-compatible vtable from a
> PwmOps implementor.
>
> This foundational layer is designed to be used by subsequent patches to
> implement specific PWM chip drivers in Rust.
>
> Signed-off-by: Michal Wilczynski <m.wilczynski@...sung.com>
> ---
> MAINTAINERS | 6 +
> drivers/pwm/Kconfig | 13 +
> rust/bindings/bindings_helper.h | 1 +
> rust/helpers/helpers.c | 1 +
> rust/helpers/pwm.c | 20 +
> rust/kernel/lib.rs | 2 +
> rust/kernel/pwm.rs | 864 ++++++++++++++++++++++++++++++++++++++++
> 7 files changed, 907 insertions(+)
Do you mind splitting this into smaller commits to make review easier?
---
Cheers,
Benno
Powered by blists - more mailing lists