On Fri, Jun 13, 2025 at 02:54:07PM +0100, Igor Korotin wrote: > Extend the Rust sample platform driver to probe using device/driver name > matching, OF ID table matching, or ACPI ID table matching. Can you please rebase onto driver-core-next? You may also want to add the three patches I sent as a reply to this one to your series. > Signed-off-by: Igor Korotin <igor.korotin.linux@xxxxxxxxx> > --- > samples/rust/rust_driver_platform.rs | 71 +++++++++++++++++++++++++++- > 1 file changed, 70 insertions(+), 1 deletion(-) > > diff --git a/samples/rust/rust_driver_platform.rs b/samples/rust/rust_driver_platform.rs > index 8b42b3cfb363..35d5067aa023 100644 > --- a/samples/rust/rust_driver_platform.rs > +++ b/samples/rust/rust_driver_platform.rs > @@ -2,7 +2,7 @@ > > //! Rust Platform driver sample. > > -use kernel::{c_str, device::Core, of, platform, prelude::*, types::ARef}; > +use kernel::{acpi, c_str, device::Core, of, platform, prelude::*, types::ARef}; > > struct SampleDriver { > pdev: ARef<platform::Device>, > @@ -17,9 +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 Can you please move this up into the module-level documentation? > +kernel::acpi_device_table!( > + ACPI_TABLE, > + MODULE_ACPI_TABLE, > + <SampleDriver as platform::Driver>::IdInfo, > + [(acpi::DeviceId::new(c_str!("TEST4321")), Info(0))] Let's use something like "SAMPLE_DRV0" instead. > +); > + > 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>> = Some(&ACPI_TABLE); > > fn probe( > pdev: &platform::Device<Core>, > -- > 2.43.0 >