From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-dy1-f179.google.com (mail-dy1-f179.google.com [74.125.82.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F400A28000F for ; Tue, 30 Jun 2026 21:04:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.179 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782853494; cv=none; b=tO9ZhDD+Ui61pDjH3J1sWAAR2sA/dCA5zVAaEx0/DpyPwNG/HJFQHftpk7JFD18C7dIU9iqgnoPv5cVnPC3iqMtrG4PgUjjTF4kfVbfydgzgPdrtxasjI23dkd5Bk92TZtP4JAAuqrLQYYKn9mr4fZpF7nX2OpcUHVsKI36NOCg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782853494; c=relaxed/simple; bh=L4s8+H0vNEw6Mpr5m9UXmuI/TNTLnF83kCfJnlhyWBg=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=q031ntCHBXaclDaBCIZwGI+VzEdYKNLj/2wF2qdzW8Q7ktUw//awvfkFX7tQYE5REBfKZpkhDqbeC13TNUIpMj95igPQxKgOqJqdQSBEL7zuFwpfzdhHmnYW4AcE86xPJcnvuDWeAkTpACOzRR+OP4AqMky6OPNb3zv/dc6j0TQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=l3t0VDd2; arc=none smtp.client-ip=74.125.82.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="l3t0VDd2" Received: by mail-dy1-f179.google.com with SMTP id 5a478bee46e88-3078e0dcd67so8542304eec.0 for ; Tue, 30 Jun 2026 14:04:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782853492; x=1783458292; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=eJX1L/9ll74nIauy0WzTLN96io2W3a6GrFJb/6SuBK0=; b=l3t0VDd2XUGlCl1NP4xrbfSjJ5tXaUdetIJsSuub9pWqHOu1jMkfuMsDfbAWUwy7wM X6ZDKo/+1i+FRI/Z/cd/45TnGLhhPTD9hl3veZ7gB8hNUw0eVaYkBVg4HTSclZ1oSRo5 10L6xRYfILiE8gXUSsgdJdDtLlZpPxoTD5FWvhSfSrJjAPaOUWraIcyu3q9+xVoootj1 f2bNucw2PEuw3ffw3f4bgQH/WIeulP+5e0Td79vo6jPB8ONwyqrm+y6rv2cojZPS4hWS YoqwyF4k0DtykKvvFDsfBxHxiNKpXCOOnGLoIYrw23NBXtJDn2iFBUm2FR18eB9pQysC uB5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782853492; x=1783458292; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=eJX1L/9ll74nIauy0WzTLN96io2W3a6GrFJb/6SuBK0=; b=tLPWW/dbreM67+dJ5TUVznPnQyg0Z6D0ULHWv8rJe3olcvG3yVO6EiJ1r0mT23J3+i AnFqgP/RLX+L1uQUjTssOZKLf3I3ZCNbJtDtizApb2yyDe1ywj5NRRCIifeTTILRcJhc UizvJt8oabCy9ERPm4cztgsffIG1fxCDuafJGVHR0V/HFwb498RCgHpZJqOJQHokNWfp cDbNrKqd4fFil9ZzihrYO9N/Gfb2yfmPUe5lYygUziEbA/ErA3VxSlDOShKCN57wuFT0 o9c3ZTTfcWKkIeXrONslZacM/UG4pFfKO/ZCFlRcf4/WSJXR7X860SglJFShfowbrnyo gNMA== X-Forwarded-Encrypted: i=1; AHgh+RoLmEbyYAC0jlg5TFs80ZD4L2jysR4M1cmhgVQ9QdXEeBD0McXj5F5Ph+Dgca9nHuvseHdIAsVi+yD73Zc=@vger.kernel.org X-Gm-Message-State: AOJu0YyYLAUU62sUlwHL7/H3JP3tHC7PVS25QBiVK3ObyIUNY3T6kKkP AgNsiPvjGf2mxr5ebauvmYNtkACyPKeVC911e98vTcVKSDRgSF5TqFwh X-Gm-Gg: AfdE7ckrcpi5ADrLNrkRp4R1X053wnDo5t6bHoots6OeNhvnODa+9LRSaI7Xr6wHI8t lvjIIcSPr5PLA8DdwR8vmp2BqHG4JDwkN9LDkfAsvnP5+0tpBlcWlwslphD2NLPMc8FCmH+uvkl uNUgXs20lbC7H5nPafxqm14hY0J/fJgrQBOO4b4EqzXhCOFuhgEsc7IECHQmU4c9TVNYTZlL0zB KeObIBpcCFmRmgg23mXTmYZmLeAx3dXb5kRAtVmGnNQidJJIkUtzWKl/Qcy8ypZfHHcAC1fL3I+ 8XTNKRJEVBPDfIK1Zk0bQgAlj5KBRj9cSB1BS24RBiOqkZETEmxURq1cqSLEK8P0dXK6qTCuwDQ Rh9S+XGnMr1kiedp7bIOnNFddmnayRi9hk1aPt3HX8uwuhxpALV4gJNnvubtm3AaEJ8oskKO0O+ 4M0CHL8Y0ga2Yg/+/HyKtzXS8BMwlR2EYHIFarffeTOB3XPSv4WHOc2IS53/WC+1hZjbE= X-Received: by 2002:a05:7300:d505:b0:30e:c71e:dbc with SMTP id 5a478bee46e88-30ef09c05dfmr1472628eec.30.1782853491807; Tue, 30 Jun 2026 14:04:51 -0700 (PDT) Received: from Biostar-A520MT.. ([187.94.15.127]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-30ee32519aesm10995383eec.27.2026.06.30.14.04.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jun 2026 14:04:51 -0700 (PDT) From: Breno Rodrigues Alves To: alexander.deucher@amd.com, gregkh@linuxfoundation.org, ojeda@kernel.org Cc: christian.koenig@amd.com, arnd@arndb.de, rust-for-linux@vger.kernel.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Breno Rodrigues Alves Subject: [PATCH v3] rust: core: implement rx580 state optimization engine and c-to-rust char dev Date: Tue, 30 Jun 2026 18:04:45 -0300 Message-ID: <20260630210445.23103-1-breno3011alves@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit This patch introduces an automated indexed state mechanism to optimize VRAM latency and command loops for the Radeon RX 580 architecture. Additionally, it provides a converted C-to-Rust sample char driver. Signed-off-by: Breno Rodrigues Alves --- Documentation/rust/alves_guidelines.rst | 3 ++ drivers/char/Kconfig | 7 +++++ drivers/char/alves_char_dev.rs | 31 +++++++++++++++++++ drivers/gpu/drm/amd/amdgpu/Makefile | 1 + drivers/gpu/drm/amd/amdgpu/alves_core.rs | 38 ++++++++++++++++++++++++ 5 files changed, 80 insertions(+) create mode 100644 Documentation/rust/alves_guidelines.rst create mode 100644 drivers/char/alves_char_dev.rs create mode 100644 drivers/gpu/drm/amd/amdgpu/alves_core.rs diff --git a/Documentation/rust/alves_guidelines.rst b/Documentation/rust/alves_guidelines.rst new file mode 100644 index 000000000..f6afa63de --- /dev/null +++ b/Documentation/rust/alves_guidelines.rst @@ -0,0 +1,3 @@ +# Rust for Linux - Core Guidelines +- Style: Linear, pragmatic, flat, Linus Torvalds style. +- Constraints: Zero-cost abstractions, strict RAII, no binary bloat. diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig index 9865227af..ace4df826 100644 --- a/drivers/char/Kconfig +++ b/drivers/char/Kconfig @@ -372,3 +372,10 @@ config ADI driver include crash and makedumpfile. endmenu +config ALVES_CHAR_DEV + tristate "Alves C-to-Rust Character Device Driver" + depends on RUST + help + This is a character device driver migrated from C to Rust. + It acts as a core showcase of 2% module conversions. + Say Y or M here if you want to test the Rust infrastructure. diff --git a/drivers/char/alves_char_dev.rs b/drivers/char/alves_char_dev.rs new file mode 100644 index 000000000..5ccb80ea4 --- /dev/null +++ b/drivers/char/alves_char_dev.rs @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0 OR MIT +//! Simple Character Device converted from legacy C to Rust using core Miscdev API. + +use kernel::prelude::*; +use kernel::miscdev; + +module! { + type: AlvesCharDevice, + name: "alves_char_dev", + author: "Breno Rodrigues Alves", + description: "Pragmatic C-to-Rust converted character device driver", + license: "GPL OR MIT", +} + +struct AlvesCharDevice { + _dev: miscdev::Registration, +} + +#[vtable] +impl miscdev::Options for AlvesCharDevice { + const NAME: \&"static CStr = c_str!("alves_char_dev"); +} + +impl kernel::Module for AlvesCharDevice { + fn init(module: \&"static ThisModule) -> Result { + pr_info!("Alves C-to-Rust module initialized successfully +"); + let dev = miscdev::Registration::new_reg(module)?; + Ok(AlvesCharDevice { _dev: dev }) + } +} diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile index ba80542ea..b9f98c3e4 100644 --- a/drivers/gpu/drm/amd/amdgpu/Makefile +++ b/drivers/gpu/drm/amd/amdgpu/Makefile @@ -349,3 +349,4 @@ include $(AMD_GPU_RAS_FULL_PATH)/Makefile amdgpu-y += $(AMD_GPU_RAS_FILES) obj-$(CONFIG_DRM_AMDGPU)+= amdgpu.o +amdgpu-y += alves_core.o diff --git a/drivers/gpu/drm/amd/amdgpu/alves_core.rs b/drivers/gpu/drm/amd/amdgpu/alves_core.rs new file mode 100644 index 000000000..aa436763e --- /dev/null +++ b/drivers/gpu/drm/amd/amdgpu/alves_core.rs @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: GPL-2.0 OR MIT +//! AMDGPU RX 580 State Optimization Engine (Turing-inspired state machine) +//! +//! Copyright (C) 2026 Breno Rodrigues Alves. + +use kernel::prelude::*; + +#[derive(Copy, Clone, PartialEq, Eq)] +#[repr(u8)] +enum GpuState { + Idling = 0, + LowPower = 1, + ComputeActive = 2, + VramMaxPerf = 3, +} + +struct Rx580Engine { + current_state: GpuState, +} + +impl Rx580Engine { + fn transition(&mut self, symbol: u8) { + self.current_state = match (self.current_state, symbol) { + (GpuState::Idling, 0x01) => GpuState::LowPower, + (GpuState::LowPower, 0x02) => GpuState::ComputeActive, + (GpuState::ComputeActive, 0x03) => GpuState::VramMaxPerf, + (GpuState::VramMaxPerf, 0x00) => GpuState::Idling, + (state, _) => state, + }; + } +} + +#[no_mangle] +pub extern "C" fn amdgpu_rust_rx580_optimize(register_sample: u32) { + let mut engine = Rx580Engine { current_state: GpuState::Idling }; + let symbol = (register_sample \& 0xFF) as u8; + engine.transition(symbol); +} -- 2.43.0