[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250610151002.238890-1-igor.korotin.linux@gmail.com>
Date: Tue, 10 Jun 2025 16:10:02 +0100
From: Igor Korotin <igor.korotin.linux@...il.com>
To: ojeda@...nel.org,
alex.gaynor@...il.com,
rafael@...nel.org,
gregkh@...uxfoundation.org,
linux-kernel@...r.kernel.org,
rust-for-linux@...r.kernel.org,
linux-acpi@...r.kernel.org
Cc: boqun.feng@...il.com,
gary@...yguo.net,
bjorn3_gh@...tonmail.com,
benno.lossin@...ton.me,
a.hindborg@...nel.org,
aliceryhl@...gle.com,
tmgross@...ch.edu,
dakr@...nel.org,
lenb@...nel.org,
wedsonaf@...il.com,
viresh.kumar@...aro.org,
alex.hung@....com,
dingxiangfei2009@...il.com
Subject: [PATCH v4 5/5] samples: rust: add ACPI match table example to platform driver
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@...il.com>
---
samples/rust/rust_driver_platform.rs | 70 +++++++++++++++++++++++++++-
1 file changed, 69 insertions(+), 1 deletion(-)
diff --git a/samples/rust/rust_driver_platform.rs b/samples/rust/rust_driver_platform.rs
index e3992e7a71e9..35d5067aa023 100644
--- a/samples/rust/rust_driver_platform.rs
+++ b/samples/rust/rust_driver_platform.rs
@@ -17,10 +17,78 @@ 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))]
+);
+
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
Powered by blists - more mailing lists