From b136c6a4f2bd05685bd6697740ed55fbc852517c Mon Sep 17 00:00:00 2001 From: Sven Van Asbroeck Date: Thu, 13 May 2021 14:00:24 -0400 Subject: [PATCH] Add minimal platform driver for bcm2835-rng Implements the bare minimum for a platform driver to register itself with the core. It won't be able to do anything, except show up in sysfs. Signed-off-by: Sven Van Asbroeck --- drivers/char/hw_random/Kconfig | 13 +++++++++ drivers/char/hw_random/Makefile | 1 + drivers/char/hw_random/bcm2835_rng_rust.rs | 31 ++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 drivers/char/hw_random/bcm2835_rng_rust.rs diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig index 1fe006f3f12fab..50a516ce0b4f49 100644 --- a/drivers/char/hw_random/Kconfig +++ b/drivers/char/hw_random/Kconfig @@ -98,6 +98,19 @@ config HW_RANDOM_BCM2835 If unsure, say Y. +config HW_RANDOM_BCM2835_RUST + tristate "Rust implementation of Broadcom BCM2835 Random Number Generator" + depends on HAS_RUST && ARCH_BCM2835 + help + This driver provides alternative Rust-based kernel-side support + for the Random Number Generator hardware found on the Broadcom + BCM2835 SoC. + + To compile this driver as a module, choose M here: the + module will be called bcm2835_rng_rust + + If unsure, say N. + config HW_RANDOM_IPROC_RNG200 tristate "Broadcom iProc/STB RNG200 support" depends on ARCH_BCM_IPROC || ARCH_BCM2835 || ARCH_BRCMSTB diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile index 8933fada74f2fb..3e14586f2b3f29 100644 --- a/drivers/char/hw_random/Makefile +++ b/drivers/char/hw_random/Makefile @@ -31,6 +31,7 @@ obj-$(CONFIG_HW_RANDOM_PSERIES) += pseries-rng.o obj-$(CONFIG_HW_RANDOM_POWERNV) += powernv-rng.o obj-$(CONFIG_HW_RANDOM_HISI) += hisi-rng.o obj-$(CONFIG_HW_RANDOM_BCM2835) += bcm2835-rng.o +obj-$(CONFIG_HW_RANDOM_BCM2835_RUST) += bcm2835_rng_rust.o obj-$(CONFIG_HW_RANDOM_IPROC_RNG200) += iproc-rng200.o obj-$(CONFIG_HW_RANDOM_ST) += st-rng.o obj-$(CONFIG_HW_RANDOM_XGENE) += xgene-rng.o diff --git a/drivers/char/hw_random/bcm2835_rng_rust.rs b/drivers/char/hw_random/bcm2835_rng_rust.rs new file mode 100644 index 00000000000000..0a89dc0ba87828 --- /dev/null +++ b/drivers/char/hw_random/bcm2835_rng_rust.rs @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Broadcom BCM2835 Random Number Generator support. + +#![no_std] +#![feature(allocator_api, global_asm)] + +use alloc::boxed::Box; +use core::pin::Pin; +use kernel::prelude::*; +use kernel::{cstr, platdev}; + +module! { + type: RngModule, + name: b"bcm2835_rng_rust", + author: b"Rust for Linux Contributors", + description: b"BCM2835 Random Number Generator (RNG) driver", + license: b"GPL v2", +} + +struct RngModule { + _pdev: Pin>, +} + +impl KernelModule for RngModule { + fn init() -> Result { + let pdev = platdev::Registration::new_pinned(cstr!("bcm2835-rng-rust"), &THIS_MODULE)?; + + Ok(RngModule { _pdev: pdev }) + } +}