From: Igor Korotin <igor.korotin.linux@gmail.com>
To: ojeda@kernel.org, alex.gaynor@gmail.com, rafael@kernel.org,
gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org,
rust-for-linux@vger.kernel.org, linux-acpi@vger.kernel.org
Cc: boqun.feng@gmail.com, gary@garyguo.net, bjorn3_gh@protonmail.com,
benno.lossin@proton.me, a.hindborg@kernel.org,
aliceryhl@google.com, tmgross@umich.edu, dakr@kernel.org,
lenb@kernel.org, wedsonaf@gmail.com, viresh.kumar@linaro.org,
alex.hung@amd.com, dingxiangfei2009@gmail.com
Subject: [PATCH v3 4/4] samples: rust: add ACPI match table example to platform driver
Date: Fri, 6 Jun 2025 18:10:33 +0100 [thread overview]
Message-ID: <20250606171033.3882079-1-igor.korotin.linux@gmail.com> (raw)
In-Reply-To: <20250606170341.3880941-1-igor.korotin.linux@gmail.com>
Extend the Rust sample platform driver to probe using device/driver name
matching, OF ID table matching, or ACPI ID table matching.
Signed-off-by: Igor Korotin <igor.korotin.linux@gmail.com>
---
samples/rust/rust_driver_platform.rs | 96 +++++++++++++++++++++++++++-
1 file changed, 95 insertions(+), 1 deletion(-)
diff --git a/samples/rust/rust_driver_platform.rs b/samples/rust/rust_driver_platform.rs
index e3992e7a71e9..be7c311dca07 100644
--- a/samples/rust/rust_driver_platform.rs
+++ b/samples/rust/rust_driver_platform.rs
@@ -17,10 +17,104 @@ struct SampleDriver {
[(of::DeviceId::new(c_str!("test,rust-device")), Info(42))]
);
+// ACPI match table test
+//
+// This demonstrates how to test an ACPI-based Rust platform driver using QEMU
+// with a custom SSDT.
+//
+// Steps:
+//
+// 1. **Create an SSDT source file** (`ssdt.dsl`) with the following content:
+//
+// ```asl
+// DefinitionBlock ("", "SSDT", 2, "TEST", "VIRTACPI", 0x00000001)
+// {
+// Scope (\_SB)
+// {
+// Device (T432)
+// {
+// Name (_HID, "TEST4321") // ACPI hardware ID to match
+// Name (_UID, 1)
+// Name (_STA, 0x0F) // Device present, enabled
+// Name (_CRS, ResourceTemplate ()
+// {
+// Memory32Fixed (ReadWrite, 0xFED00000, 0x1000)
+// })
+// }
+// }
+// }
+// ```
+//
+// 2. **Compile the table**:
+//
+// ```sh
+// iasl -tc ssdt.dsl
+// ```
+//
+// This generates `ssdt.aml`
+//
+// 3. **Run QEMU** with the compiled AML file:
+//
+// ```sh
+// qemu-system-x86_64 -m 512M \
+// -enable-kvm \
+// -kernel path/to/bzImage \
+// -append "root=/dev/sda console=ttyS0" \
+// -hda rootfs.img \
+// -serial stdio \
+// -acpitable file=ssdt.aml
+// ```
+//
+// Requirements:
+// - The `rust_driver_platform` must be present either:
+// - built directly into the kernel (`bzImage`), or
+// - available as a `.ko` file and loadable from `rootfs.img`
+//
+// 4. **Verify it worked** by checking `dmesg`:
+//
+// ```
+// rust_driver_platform TEST4321:00: Probed with info: '0'.
+// ```
+//
+// This demonstrates ACPI table matching using a custom ID in QEMU with a minimal SSDT
+
+kernel::acpi_device_table!(
+ ACPI_TABLE,
+ MODULE_ACPI_TABLE,
+ <SampleDriver as platform::Driver>::IdInfo,
+ [(acpi::DeviceId::new(c_str!("TEST4321")), Info(0))]
+);
+
+/// OF/ACPI match tables for Platform Driver implementation
+///
+/// The platform::Driver requires declaration of both OF_ID_TABLE and
+/// ACPI_ID_TABLE, but if driver is not going to use either of them
+/// it can implement one of them or both as None.
+///
+/// # Example:
+///
+/// ```ignore
+/// impl platform::Driver for SampleDriver {
+/// type IdInfo = ();
+/// const OF_ID_TABLE: Option<of::IdTable<Self::IdInfo>> = None;
+/// const ACPI_ID_TABLE: Option<acpi::IdTable<Self::IdInfo>> = None;
+///
+/// fn probe(
+/// pdev: &platform::Device<Core>,
+/// _info: Option<&Self::IdInfo>,
+/// ) -> Result<Pin<KBox<Self>>> {
+/// dev_dbg!(pdev.as_ref(), "Probe Rust Platform driver sample.\n");
+///
+/// let drvdata = KBox::new(Self { pdev: pdev.into() }, GFP_KERNEL)?;
+///
+/// Ok(drvdata.into())
+/// }
+/// }
+/// ```
impl platform::Driver for SampleDriver {
type IdInfo = Info;
const OF_ID_TABLE: Option<of::IdTable<Self::IdInfo>> = Some(&OF_TABLE);
- const ACPI_ID_TABLE: Option<acpi::IdTable<Self::IdInfo>> = None;
+ const ACPI_ID_TABLE: Option<acpi::IdTable<Self::IdInfo>> = Some(&ACPI_TABLE);
fn probe(
pdev: &platform::Device<Core>,
--
2.43.0
next prev parent reply other threads:[~2025-06-06 17:10 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-06 17:03 [PATCH v3 0/4] rust: Add ACPI match table support for Rust drivers Igor Korotin
2025-06-06 17:06 ` [PATCH v3 1/4] rust: acpi: add `acpi::DeviceId` abstraction Igor Korotin
2025-06-08 7:48 ` Benno Lossin
2025-06-08 10:42 ` Danilo Krummrich
2025-06-06 17:08 ` [PATCH v3 2/4] rust: driver: Add ACPI id table support to Adapter trait Igor Korotin
2025-06-08 7:54 ` Benno Lossin
2025-06-08 10:48 ` Danilo Krummrich
2025-06-08 11:46 ` Benno Lossin
2025-06-08 11:49 ` Danilo Krummrich
2025-06-09 13:09 ` Igor Korotin
2025-06-09 13:42 ` Miguel Ojeda
[not found] ` <CAG7QV91u4rVgAqDjKAofupASSk9q0uRKNtsrHg7Q6KExRMkFog@mail.gmail.com>
2025-06-09 14:06 ` Igor Korotin
2025-06-09 14:50 ` Miguel Ojeda
2025-06-09 14:44 ` Benno Lossin
2025-06-06 17:09 ` [PATCH v3 3/4] rust: platform: Add ACPI match table support to `Driver` trait Igor Korotin
2025-06-07 6:28 ` kernel test robot
2025-06-08 10:58 ` Danilo Krummrich
2025-06-06 17:10 ` Igor Korotin [this message]
2025-06-08 7:58 ` [PATCH v3 4/4] samples: rust: add ACPI match table example to platform driver Benno Lossin
2025-06-08 10:50 ` Danilo Krummrich
2025-06-08 11:08 ` Danilo Krummrich
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=20250606171033.3882079-1-igor.korotin.linux@gmail.com \
--to=igor.korotin.linux@gmail.com \
--cc=a.hindborg@kernel.org \
--cc=alex.gaynor@gmail.com \
--cc=alex.hung@amd.com \
--cc=aliceryhl@google.com \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=dingxiangfei2009@gmail.com \
--cc=gary@garyguo.net \
--cc=gregkh@linuxfoundation.org \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ojeda@kernel.org \
--cc=rafael@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tmgross@umich.edu \
--cc=viresh.kumar@linaro.org \
--cc=wedsonaf@gmail.com \
/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;
as well as URLs for NNTP newsgroup(s).