From: John Hubbard <jhubbard@nvidia.com>
To: Timur Tabi <ttabi@nvidia.com>, Danilo Krummrich <dakr@kernel.org>,
Alexandre Courbot <acourbot@nvidia.com>,
Joel Fernandes <joelagnelf@nvidia.com>,
nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org
Subject: Re: [PATCH v4 07/11] gpu: nova-core: Add basic Turing HAL
Date: Wed, 31 Dec 2025 14:54:34 -0800 [thread overview]
Message-ID: <31402838-162e-4e41-84df-49e6109a2e41@nvidia.com> (raw)
In-Reply-To: <20251218032955.979623-8-ttabi@nvidia.com>
On 12/17/25 7:29 PM, Timur Tabi wrote:
> Add the basic HAL for recognizing Turing GPUs. This isn't enough
> to support booting GSP-RM on Turing, but it's a start.
>
> Note that GA100, which boots using the same method as Turing, is not
> supported yet.
>
> Signed-off-by: Timur Tabi <ttabi@nvidia.com>
> ---
> drivers/gpu/nova-core/falcon/hal.rs | 4 ++
> drivers/gpu/nova-core/falcon/hal/tu102.rs | 73 +++++++++++++++++++++++
> drivers/gpu/nova-core/regs.rs | 14 +++++
> 3 files changed, 91 insertions(+)
> create mode 100644 drivers/gpu/nova-core/falcon/hal/tu102.rs
>
> diff --git a/drivers/gpu/nova-core/falcon/hal.rs b/drivers/gpu/nova-core/falcon/hal.rs
> index c77a1568ea96..c886ba03d1f6 100644
> --- a/drivers/gpu/nova-core/falcon/hal.rs
> +++ b/drivers/gpu/nova-core/falcon/hal.rs
> @@ -13,6 +13,7 @@
> };
>
> mod ga102;
> +mod tu102;
>
> /// Hardware Abstraction Layer for Falcon cores.
> ///
> @@ -60,6 +61,9 @@ pub(super) fn falcon_hal<E: FalconEngine + 'static>(
> use Chipset::*;
>
> let hal = match chipset {
> + TU102 | TU104 | TU106 | TU116 | TU117 => {
> + KBox::new(tu102::Tu102::<E>::new(), GFP_KERNEL)? as KBox<dyn FalconHal<E>>
> + }
> GA102 | GA103 | GA104 | GA106 | GA107 | AD102 | AD103 | AD104 | AD106 | AD107 => {
> KBox::new(ga102::Ga102::<E>::new(), GFP_KERNEL)? as KBox<dyn FalconHal<E>>
> }
> diff --git a/drivers/gpu/nova-core/falcon/hal/tu102.rs b/drivers/gpu/nova-core/falcon/hal/tu102.rs
> new file mode 100644
> index 000000000000..ac8f58ef6789
> --- /dev/null
> +++ b/drivers/gpu/nova-core/falcon/hal/tu102.rs
> @@ -0,0 +1,73 @@
> +// SPDX-License-Identifier: GPL-2.0
> +
> +use core::marker::PhantomData;
> +
> +use kernel::{
> + io::poll::read_poll_timeout,
> + prelude::*,
> + time::delay::fsleep,
> + time::Delta, //
> +};
> +
> +use crate::driver::Bar0;
> +use crate::falcon::{Falcon, FalconBromParams, FalconEngine};
> +use crate::regs;
This needs to be formatted like this:
use crate::{
driver::Bar0,
falcon::{
Falcon,
FalconBromParams,
FalconEngine, //
},
regs, //
};
With that applied, please feel free to add:
Reviewed-by: John Hubbard <jhubbard@nvidia.com>
thanks,
--
John Hubbard
> +
> +use super::FalconHal;
> +
> +pub(super) struct Tu102<E: FalconEngine>(PhantomData<E>);
> +
> +impl<E: FalconEngine> Tu102<E> {
> + pub(super) fn new() -> Self {
> + Self(PhantomData)
> + }
> +}
> +
> +impl<E: FalconEngine> FalconHal<E> for Tu102<E> {
> + fn select_core(&self, _falcon: &Falcon<E>, _bar: &Bar0) -> Result {
> + Ok(())
> + }
> +
> + fn signature_reg_fuse_version(
> + &self,
> + _falcon: &Falcon<E>,
> + _bar: &Bar0,
> + _engine_id_mask: u16,
> + _ucode_id: u8,
> + ) -> Result<u32> {
> + Ok(0)
> + }
> +
> + fn program_brom(&self, _falcon: &Falcon<E>, _bar: &Bar0, _params: &FalconBromParams) -> Result {
> + Ok(())
> + }
> +
> + fn is_riscv_active(&self, bar: &Bar0) -> bool {
> + let cpuctl = regs::NV_PRISCV_RISCV_CORE_SWITCH_RISCV_STATUS::read(bar, &E::ID);
> + cpuctl.active_stat()
> + }
> +
> + fn reset_wait_mem_scrubbing(&self, bar: &Bar0) -> Result {
> + // TIMEOUT: memory scrubbing should complete in less than 10ms.
> + read_poll_timeout(
> + || Ok(regs::NV_PFALCON_FALCON_DMACTL::read(bar, &E::ID)),
> + |r| r.mem_scrubbing_done(),
> + Delta::ZERO,
> + Delta::from_millis(10),
> + )
> + .map(|_| ())
> + }
> +
> + fn reset_eng(&self, bar: &Bar0) -> Result {
> + regs::NV_PFALCON_FALCON_ENGINE::update(bar, &E::ID, |v| v.set_reset(true));
> +
> + // TIMEOUT: falcon engine should not take more than 10us to reset.
> + fsleep(Delta::from_micros(10));
> +
> + regs::NV_PFALCON_FALCON_ENGINE::update(bar, &E::ID, |v| v.set_reset(false));
> +
> + self.reset_wait_mem_scrubbing(bar)?;
> +
> + Ok(())
> + }
> +}
> diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs
> index c049f5aaf2f2..8188a566e1ae 100644
> --- a/drivers/gpu/nova-core/regs.rs
> +++ b/drivers/gpu/nova-core/regs.rs
> @@ -307,6 +307,13 @@ pub(crate) fn mem_scrubbing_done(self) -> bool {
> 7:7 secure_stat as bool;
> });
>
> +impl NV_PFALCON_FALCON_DMACTL {
> + /// Returns `true` if memory scrubbing is completed.
> + pub(crate) fn mem_scrubbing_done(self) -> bool {
> + !self.dmem_scrubbing() && !self.imem_scrubbing()
> + }
> +}
> +
> register!(NV_PFALCON_FALCON_DMATRFBASE @ PFalconBase[0x00000110] {
> 31:0 base as u32;
> });
> @@ -389,6 +396,13 @@ pub(crate) fn with_falcon_mem(self, mem: FalconMem) -> Self {
>
> // PRISCV
>
> +// RISC-V status register for debug (Turing and GA100 only).
> +// Reflects current RISC-V core status.
> +register!(NV_PRISCV_RISCV_CORE_SWITCH_RISCV_STATUS @ PFalcon2Base[0x00000240] {
> + 0:0 active_stat as bool, "RISC-V core active/inactive status";
> +});
> +
> +// GA102 and later
> register!(NV_PRISCV_RISCV_CPUCTL @ PFalcon2Base[0x00000388] {
> 0:0 halted as bool;
> 7:7 active_stat as bool;
next prev parent reply other threads:[~2025-12-31 22:55 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-18 3:29 [PATCH v4 00/11] gpu: nova-core: add Turing support Timur Tabi
2025-12-18 3:29 ` [PATCH v4 01/11] gpu: nova-core: rename Imem to ImemSecure Timur Tabi
2025-12-31 19:29 ` John Hubbard
2025-12-18 3:29 ` [PATCH v4 02/11] gpu: nova-core: add ImemNonSecure section infrastructure Timur Tabi
2025-12-31 19:35 ` John Hubbard
2025-12-18 3:29 ` [PATCH v4 03/11] gpu: nova-core: support header parsing on Turing/GA100 Timur Tabi
2025-12-31 19:58 ` John Hubbard
2025-12-18 3:29 ` [PATCH v4 04/11] gpu: nova-core: add support for Turing/GA100 fwsignature Timur Tabi
2025-12-31 19:28 ` John Hubbard
2025-12-18 3:29 ` [PATCH v4 05/11] gpu: nova-core: add NV_PFALCON_FALCON_DMATRFCMD::with_falcon_mem() Timur Tabi
2025-12-18 11:24 ` Alexandre Courbot
2025-12-31 21:35 ` John Hubbard
2025-12-18 3:29 ` [PATCH v4 06/11] gpu: nova-core: move some functions into the HAL Timur Tabi
2025-12-18 11:25 ` Alexandre Courbot
2025-12-31 22:07 ` John Hubbard
2025-12-18 3:29 ` [PATCH v4 07/11] gpu: nova-core: Add basic Turing HAL Timur Tabi
2025-12-31 22:54 ` John Hubbard [this message]
2025-12-18 3:29 ` [PATCH v4 08/11] gpu: nova-core: add Falcon HAL method supports_dma() Timur Tabi
2025-12-18 7:48 ` Alexandre Courbot
2025-12-19 12:49 ` Alexandre Courbot
2025-12-18 3:29 ` [PATCH v4 09/11] gpu: nova-core: add FalconUCodeDescV2 support Timur Tabi
2025-12-18 8:01 ` Alexandre Courbot
2025-12-18 3:29 ` [PATCH v4 10/11] gpu: nova-core: align LibosMemoryRegionInitArgument size to page size Timur Tabi
2025-12-18 11:54 ` Alexandre Courbot
2025-12-18 22:51 ` Timur Tabi
2025-12-19 3:43 ` Alexandre Courbot
2025-12-19 4:34 ` Timur Tabi
2025-12-19 5:55 ` Alexandre Courbot
2025-12-18 3:29 ` [PATCH v4 11/11] gpu: nova-core: add PIO support for loading firmware images Timur Tabi
2025-12-18 12:59 ` Alexandre Courbot
2025-12-30 22:56 ` Timur Tabi
2025-12-31 23:22 ` Timur Tabi
2025-12-31 21:30 ` Timur Tabi
2025-12-28 17:45 ` [PATCH v4 00/11] gpu: nova-core: add Turing support Ewan Chorynski
2025-12-30 21:42 ` Timur Tabi
2026-01-04 10:21 ` Ewan Chorynski
2026-01-04 15:01 ` Timur Tabi
2025-12-31 2:58 ` John Hubbard
2025-12-31 4:26 ` Timur Tabi
2025-12-31 6:17 ` John Hubbard
2025-12-31 16:33 ` Timur Tabi
2025-12-31 17:29 ` John Hubbard
2025-12-31 19:15 ` John Hubbard
2025-12-31 19:23 ` Timur Tabi
2025-12-31 20:06 ` John Hubbard
2025-12-31 20:11 ` Timur Tabi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=31402838-162e-4e41-84df-49e6109a2e41@nvidia.com \
--to=jhubbard@nvidia.com \
--cc=acourbot@nvidia.com \
--cc=dakr@kernel.org \
--cc=joelagnelf@nvidia.com \
--cc=nouveau@lists.freedesktop.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=ttabi@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.