From nobody Tue Dec 16 16:01:24 2025 Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) (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 033801FCFEC for ; Fri, 21 Feb 2025 06:33:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740119637; cv=none; b=McnkCi7KT30URhwTZ7Ynmj/MycwED5ZpRG3OTtGnNW6bRCDJq1GkWwxS+3+Rjg3ioe+TGuklrlsWGPR72eb7Y36S/hXFWRXwcYwVCozz++5DFyroYCg7Mtl2lakHFpnlpK9fI1UNZOXRbGdzidufNckWt5vedBrP8g+bNvmfx1M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740119637; c=relaxed/simple; bh=XfNumtN4pntiPXT3WjU9gI4RSXkCFWq44vGld0DYJV4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=W1Qv5l1ZBr9xEZ/v/QkHXLlmXTcEuFPeaM06F58hkNQDpgfhmWgD2LmMX44rM3/A4voVYEBmlnrE00TPAczIrnLeY8NhYMAaXuyhIsHUewYhhtg78FP0m2zWgVHXFQGehhn+j6cDPwe56Ddz8rsQo7w7wPiK7jQ48OlDjiJ73YY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=KXF72MO5; arc=none smtp.client-ip=209.85.216.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="KXF72MO5" Received: by mail-pj1-f48.google.com with SMTP id 98e67ed59e1d1-2fc291f7ddbso2844414a91.1 for ; Thu, 20 Feb 2025 22:33:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1740119635; x=1740724435; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=t5JMkcIG3pfHnou11Qf01++3WTlk/gyrXuC/G/iyeFk=; b=KXF72MO588zZepgxPnbMpAl539iFBB8G8Kn1PC/DsqZqrHNCbaCY54JC4DV5jZCw1Q 8qs2uRodHRhAp/1oITAW4vyIrCe74XnTPpExHRXAZIgWtDFNrgukeDRP/vwArKMFGfZE H7u3xug5uHrHry5RFqsaMo9eYi/KE52gZHnjJio+hvJtU2FZ/zxY5hdYh06s0UWXH3GP XOeP0aEA44IZxRhrFY36G5syY4w8ayAgthXGh889jYQqvMYp9LxpxkI97XJU4/6YMQc6 XlmJMQSoFXLwZjzhuE0xJNnE5HfmT7eRcsO4GZJrbusPG0asAg1TZciXwcG3NB86JyFo xV5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740119635; x=1740724435; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=t5JMkcIG3pfHnou11Qf01++3WTlk/gyrXuC/G/iyeFk=; b=G5+e63PPE9XEa89N+1rAeFpjLFk+73HhKFkZvgXVYbpGMkqxau7dp7n1+jwbiVuVzw 0eZasvz1045fLvq+dDqfW+I2WXSMsa4/BgBTkYbgQGK6IX52OzJ3deE0R8KRPvUjaWPQ hd3sVVay0C3xn+FLszaw6P21on4cLicK2yjIKaKtCB+latHVDw/QQWmqZSsgNPW5n0TL CDNCIFosewPw/x7YXWbrYxhY2NsJ0zVViYYdcWyA4UCnSYi0Wt6PPG74Idjzwdk2Uy/o FtWDjVZcafJORXNE3IuSseOWFP1CX+aQotXCZme6j2gHZTolGNJ8w3d9NFu8g6AepnGQ UXaA== X-Forwarded-Encrypted: i=1; AJvYcCVlVckh7/gvBpN5xDqsth/hMm70Z1okkOeL6E2Kiug2yycfQXSvJbHK/Nmq0pU84207VGbiBM7an/9BOlQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwrTbYlKU3kJBkFQEJX3hGfoUDvv1CCVPKqPTMqrUFU8Hv5aivt kmJyzNytMhJJsPU/DklZuJbsXUKJzQUIuOyDO0zaURLKRuCyB3m3lJzGYrug8ns= X-Gm-Gg: ASbGncs2hp4hTGibzc7yuskPvDp5yJK7Ud3ZskmbQLG2g98xc85q1x6Pw54wp7iYoZZ JHBvoXc5vV1Heoo9i5CIWWn4wwTu0rsK1oM/ZefQfiusu+CQCu/jsaAPCi5MgkMTFGVSgvpoZhI UHPdUBGnxxbn5Fklz4sQ74gMtm3K20LoUXanUDv08W3CEQNdIyd4Uq8Ts3shoSDG6wAJcoPUbID 84E2zXPb5Y8IsOFNUsnwpgml5n4mA7UkL4L9zIgqkJj/5V8bJpPKvA90SXChImU6LvbD75FLI2q EZy+JezIcTE+GlATtUNZddQ/IXhJ X-Google-Smtp-Source: AGHT+IHFXK0jGPDKL1QAUurC6Uusa7DZsVN5fk1633DweZDhRI+yAiePHqHtVqL41XxmksffttTcAQ== X-Received: by 2002:a17:90b:56cd:b0:2ee:af31:a7bd with SMTP id 98e67ed59e1d1-2fce789b251mr3297120a91.5.1740119635456; Thu, 20 Feb 2025 22:33:55 -0800 (PST) Received: from localhost ([122.172.84.139]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2fceb04bf4dsm521568a91.18.2025.02.20.22.33.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 22:33:54 -0800 (PST) From: Viresh Kumar To: Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Michael Turquette , Stephen Boyd Cc: Viresh Kumar , Russell King , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org Subject: [PATCH V2 1/2] rust: Add clk helpers Date: Fri, 21 Feb 2025 12:03:38 +0530 Message-Id: <7e4e95e221569070d72bb45ea0922e76be7db2a3.1740118863.git.viresh.kumar@linaro.org> X-Mailer: git-send-email 2.31.1.272.g89b43f80a514 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In order to prepare for adding Rust abstractions for the clock APIs, this patch adds clock helpers required by the Rust implementation. Signed-off-by: Viresh Kumar Reviewed-by: Daniel Almeida --- MAINTAINERS | 1 + rust/bindings/bindings_helper.h | 1 + rust/helpers/clk.c | 57 +++++++++++++++++++++++++++++++++ rust/helpers/helpers.c | 1 + 4 files changed, 60 insertions(+) create mode 100644 rust/helpers/clk.c diff --git a/MAINTAINERS b/MAINTAINERS index 25c86f47353d..726110d3c988 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -5778,6 +5778,7 @@ F: include/dt-bindings/clock/ F: include/linux/clk-pr* F: include/linux/clk/ F: include/linux/of_clk.h +F: rust/helpers/clk.c X: drivers/clk/clkdev.c =20 COMMON INTERNET FILE SYSTEM CLIENT (CIFS and SMB3) diff --git a/rust/bindings/bindings_helper.h b/rust/bindings/bindings_helpe= r.h index 55354e4dec14..4e4e16c3b479 100644 --- a/rust/bindings/bindings_helper.h +++ b/rust/bindings/bindings_helper.h @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include diff --git a/rust/helpers/clk.c b/rust/helpers/clk.c new file mode 100644 index 000000000000..3c63b50ad6fb --- /dev/null +++ b/rust/helpers/clk.c @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include + +#ifndef CONFIG_HAVE_CLK +struct clk *rust_helper_clk_get(struct device *dev, const char *id) +{ + return clk_get(dev, id); +} + +void rust_helper_clk_put(struct clk *clk) +{ + clk_put(clk); +} + +int rust_helper_clk_enable(struct clk *clk) +{ + return clk_enable(clk); +} + +void rust_helper_clk_disable(struct clk *clk) +{ + clk_disable(clk); +} + +unsigned long rust_helper_clk_get_rate(struct clk *clk) +{ + return clk_get_rate(clk); +} + +int rust_helper_clk_set_rate(struct clk *clk, unsigned long rate) +{ + return clk_set_rate(clk, rate); +} +#endif + +#ifndef CONFIG_HAVE_CLK_PREPARE +int rust_helper_clk_prepare(struct clk *clk) +{ + return clk_prepare(clk); +} + +void rust_helper_clk_unprepare(struct clk *clk) +{ + clk_unprepare(clk); +} +#endif + +int rust_helper_clk_prepare_enable(struct clk *clk) +{ + return clk_prepare_enable(clk); +} + +void rust_helper_clk_disable_unprepare(struct clk *clk) +{ + clk_disable_unprepare(clk); +} diff --git a/rust/helpers/helpers.c b/rust/helpers/helpers.c index 0640b7e115be..4700ee7aaf85 100644 --- a/rust/helpers/helpers.c +++ b/rust/helpers/helpers.c @@ -11,6 +11,7 @@ #include "bug.c" #include "build_assert.c" #include "build_bug.c" +#include "clk.c" #include "cred.c" #include "device.c" #include "err.c" --=20 2.31.1.272.g89b43f80a514 From nobody Tue Dec 16 16:01:24 2025 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (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 06B901FECDF for ; Fri, 21 Feb 2025 06:33:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740119641; cv=none; b=oj2weCLqI4KSRZctSMgbJdPtIGCvscGr9NDNNwc46xhkk2ga3FRf4B9bNQUnw+Zka5aeBFznIu6qA2qhSJkaVWQTy5yrn9i/UWiaqZfNrJ2RIgwwI/vYg0O5HV6d9GfcFQmX1MdVhhdjekByOJJF8x//M7avw9R11bGwXsw0P/I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740119641; c=relaxed/simple; bh=QwtY0+2OsM6DemRSALyHBYrUGqwilbtsVhnN9LkG79k=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=O4P7F5B84z+UHidNRTT8IMSWjyhRY6R1guwogsa+HFdLCRrjfPOgaFuHutHIG2bM0+CAkNphZU4sQOP2lA41amewAiimUNOrNnUwO4EsT6+iexzS0EGJ+Cdnmxgl5DKMtIpdsMQKPLi8yFlN7uotjsk0k0yVux8DVY/EXnjAGkA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=T4PVf/RF; arc=none smtp.client-ip=209.85.214.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="T4PVf/RF" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-22100006bc8so30901265ad.0 for ; Thu, 20 Feb 2025 22:33:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1740119639; x=1740724439; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DNg/PQcPlHeI4lLEbliBR3X5bvZKY/k1Ucn2ATe8Pak=; b=T4PVf/RFeTUN8g4LsUskPEcpee7tS+Qs6FMH7RWIwPFwO6+zlLdKnP/ofv7bgsGlpb UG7WpGH3orBlDkX5vpjx/Gvn/Vn+Lfr143XK7mcb4beratv+7cEhG5LjUyED54ZhM5OI Xj7JlqljUkYNerBzI4qq+ZZ6zPGbfF1CY/ComJwMIAMhyOYiUCAr7v8gJUgudC9UVc/W EYAM3ickPmWQBmNB4qE+PuI2zWbGScuF2LtRMDDWkePAann4okgw2xGfB3aPiQOv2RjR r1SUIKe4YjNQ2cxfNaS01JZP2hzKWLITD7f/ooLUx3u1l3x6RtuAhzV4fUQVSkhYqwW/ xjPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740119639; x=1740724439; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DNg/PQcPlHeI4lLEbliBR3X5bvZKY/k1Ucn2ATe8Pak=; b=Nz89ETcakZgVqtyeQEqC6i53BFZzpf0S+gmj5zNb0gfd6l3fORaMGWMkTa26c5YlDT M9tNSTo0rXC5d0yDJIJxRY3/VokzIlNzZmxHnVs/uNVOHCz9go28j3UZ/kQ6QDFmu6fS HiHStTXv4ze7K6xb0RBB/Gsgn1LWEgSUpAmSUayeHW9D/+EZMkWXEIcMoOANUSyob9Ef m7kg3OW7xk8bnNCbFiKmnXLkcznxK7Ae8qSn3z9TIdBVM+XnzlZL84gcEpUwpnCuFKxI P8h4wdpayt8iN4jF3RTXC9xGNsRQxkXGVr6b7pF2CsSOUTWJ3tPFmbukOWGd/4PIpv8w oQZw== X-Forwarded-Encrypted: i=1; AJvYcCUJvqDFG41BRae76ItMESfIMaj8xBavhO8yGFs/5DV6Ae8A/5n7vksvAAGdWR73uhat/8WKS40y7Ley3lo=@vger.kernel.org X-Gm-Message-State: AOJu0YwDne7m7Dbmw97I26Wf+ijFcEHatIfeBmRaNo6rV05DgtD3E+b4 easkIFMqMoIgQL/8OzLBDurKPDs9ZL3DHPTKrMyyrfZRl7nqwGnDLZNTKkA1cL4= X-Gm-Gg: ASbGncsAg2gdjIHpYJMlsqGB9pW7mHrmPPEKdB0fX8H7DsL6dzkjT/OsuYM2ZcBc138 C7qZWZNVHuKgS+AfnB76LvRgU0LedAwYNXTNpUg1wqlLgillyF1FQQk4Pf/OF6jzH9LOV3LHzW1 jDBEay/XHoerWeuy9Lco9mEsIj0ksYTdAh4ypwR9stFBFP9CiTMH2Vc4wcrQq5L/psr7Hd83qbI bkoGw7BERLpm86kDfhUxF5lnVh3mv0Ybi12f2thQNpxeGzJTbj2XtnYpz/eroscEgpe3SEi2CWq YvUalECBLreSV6oYeE/0dVGpxuCm X-Google-Smtp-Source: AGHT+IGWN7LMDgKfbQIt8winmK79UQaYRMyPCFRcj2wUkH6XJiRNnCEc0FgdST1qCb93KqqidUdo8g== X-Received: by 2002:a05:6a20:ad0c:b0:1ee:aa76:2321 with SMTP id adf61e73a8af0-1eef3c588bbmr4075137637.1.1740119639285; Thu, 20 Feb 2025 22:33:59 -0800 (PST) Received: from localhost ([122.172.84.139]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-add0e439774sm11618432a12.0.2025.02.20.22.33.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 22:33:58 -0800 (PST) From: Viresh Kumar To: Michael Turquette , Stephen Boyd , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross Cc: Viresh Kumar , Russell King , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org Subject: [PATCH V2 2/2] rust: Add basic bindings for clk APIs Date: Fri, 21 Feb 2025 12:03:39 +0530 Message-Id: X-Mailer: git-send-email 2.31.1.272.g89b43f80a514 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add initial bindings for the clk APIs. These provide the minimal functionality needed for common use cases, making them straightforward to introduce in the first iteration. These will be used by Rust based cpufreq / OPP layers to begin with. Signed-off-by: Viresh Kumar Reviewed-by: Daniel Almeida Tested-by: Daniel Almeida --- MAINTAINERS | 1 + rust/kernel/clk.rs | 104 +++++++++++++++++++++++++++++++++++++++++++++ rust/kernel/lib.rs | 1 + 3 files changed, 106 insertions(+) create mode 100644 rust/kernel/clk.rs diff --git a/MAINTAINERS b/MAINTAINERS index 726110d3c988..96e2574f41c0 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -5779,6 +5779,7 @@ F: include/linux/clk-pr* F: include/linux/clk/ F: include/linux/of_clk.h F: rust/helpers/clk.c +F: rust/kernel/clk.rs X: drivers/clk/clkdev.c =20 COMMON INTERNET FILE SYSTEM CLIENT (CIFS and SMB3) diff --git a/rust/kernel/clk.rs b/rust/kernel/clk.rs new file mode 100644 index 000000000000..c212cd3167e1 --- /dev/null +++ b/rust/kernel/clk.rs @@ -0,0 +1,104 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Clock abstractions. +//! +//! C header: [`include/linux/clk.h`](srctree/include/linux/clk.h) + +use crate::{ + bindings, + device::Device, + error::{from_err_ptr, to_result, Result}, + prelude::*, +}; + +use core::ptr; + +/// A simple implementation of `struct clk` from the C code. +#[repr(transparent)] +pub struct Clk(*mut bindings::clk); + +impl Clk { + /// Creates `Clk` instance for a device and a connection id. + pub fn new(dev: &Device, name: Option<&CStr>) -> Result { + let con_id =3D if let Some(name) =3D name { + name.as_ptr() as *const _ + } else { + ptr::null() + }; + + // SAFETY: It is safe to call `clk_get()`, on a device pointer ear= lier received from the C + // code. + Ok(Self(from_err_ptr(unsafe { + bindings::clk_get(dev.as_raw(), con_id) + })?)) + } + + /// Obtain the raw `struct clk *`. + pub fn as_raw(&self) -> *mut bindings::clk { + self.0 + } + + /// Clock enable. + pub fn enable(&self) -> Result<()> { + // SAFETY: By the type invariants, we know that `self` owns a refe= rence, so it is safe to + // use it now. + to_result(unsafe { bindings::clk_enable(self.0) }) + } + + /// Clock disable. + pub fn disable(&self) { + // SAFETY: By the type invariants, we know that `self` owns a refe= rence, so it is safe to + // use it now. + unsafe { bindings::clk_disable(self.0) }; + } + + /// Clock prepare. + pub fn prepare(&self) -> Result<()> { + // SAFETY: By the type invariants, we know that `self` owns a refe= rence, so it is safe to + // use it now. + to_result(unsafe { bindings::clk_prepare(self.0) }) + } + + /// Clock unprepare. + pub fn unprepare(&self) { + // SAFETY: By the type invariants, we know that `self` owns a refe= rence, so it is safe to + // use it now. + unsafe { bindings::clk_unprepare(self.0) }; + } + + /// Clock prepare enable. + pub fn prepare_enable(&self) -> Result<()> { + // SAFETY: By the type invariants, we know that `self` owns a refe= rence, so it is safe to + // use it now. + to_result(unsafe { bindings::clk_prepare_enable(self.0) }) + } + + /// Clock disable unprepare. + pub fn disable_unprepare(&self) { + // SAFETY: By the type invariants, we know that `self` owns a refe= rence, so it is safe to + // use it now. + unsafe { bindings::clk_disable_unprepare(self.0) }; + } + + /// Clock get rate. + pub fn rate(&self) -> usize { + // SAFETY: By the type invariants, we know that `self` owns a refe= rence, so it is safe to + // use it now. + unsafe { bindings::clk_get_rate(self.0) } + } + + /// Clock set rate. + pub fn set_rate(&self, rate: usize) -> Result<()> { + // SAFETY: By the type invariants, we know that `self` owns a refe= rence, so it is safe to + // use it now. + to_result(unsafe { bindings::clk_set_rate(self.0, rate) }) + } +} + +impl Drop for Clk { + fn drop(&mut self) { + // SAFETY: By the type invariants, we know that `self` owns a refe= rence, so it is safe to + // relinquish it now. + unsafe { bindings::clk_put(self.0) }; + } +} diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs index 496ed32b0911..324b86f127a0 100644 --- a/rust/kernel/lib.rs +++ b/rust/kernel/lib.rs @@ -40,6 +40,7 @@ pub mod block; #[doc(hidden)] pub mod build_assert; +pub mod clk; pub mod cred; pub mod device; pub mod device_id; --=20 2.31.1.272.g89b43f80a514