public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Alexandre Courbot" <acourbot@nvidia.com>
To: "John Hubbard" <jhubbard@nvidia.com>,
	"Danilo Krummrich" <dakr@kernel.org>
Cc: "Alexandre Courbot" <acourbot@nvidia.com>,
	"Joel Fernandes" <joelagnelf@nvidia.com>,
	"Timur Tabi" <ttabi@nvidia.com>,
	"Alistair Popple" <apopple@nvidia.com>,
	"Edwin Peer" <epeer@nvidia.com>, "Zhi Wang" <zhiw@nvidia.com>,
	"David Airlie" <airlied@gmail.com>,
	"Simona Vetter" <simona@ffwll.ch>,
	"Bjorn Helgaas" <bhelgaas@google.com>,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Alex Gaynor" <alex.gaynor@gmail.com>,
	"Boqun Feng" <boqun.feng@gmail.com>,
	"Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Benno Lossin" <lossin@kernel.org>,
	"Andreas Hindborg" <a.hindborg@kernel.org>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"Trevor Gross" <tmgross@umich.edu>,
	nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org,
	LKML <linux-kernel@vger.kernel.org>,
	Nouveau <nouveau-bounces@lists.freedesktop.org>
Subject: Re: [PATCH v5 1/3] gpu: nova-core: prepare Spec and Revision types for boot0/boot42
Date: Thu, 06 Nov 2025 16:45:25 +0900	[thread overview]
Message-ID: <DE1G0R9W3JS9.INLIKG0AXGES@nvidia.com> (raw)
In-Reply-To: <20251106012754.139713-2-jhubbard@nvidia.com>

On Thu Nov 6, 2025 at 10:27 AM JST, John Hubbard wrote:
> 1) Implement Display for Spec. This simplifies the dev_info!() code for
>    printing banners such as:
>
>     NVIDIA (Chipset: GA104, Architecture: Ampere, Revision: a.1)
>
> 2) Decouple Revision from boot0.
>
> 3) Enhance Revision, which in turn simplifies Spec::new().
>
> 4) Also, slightly enhance the comment about Spec, to be more precise.

A bullet-list in a patch description is a sure sign you will be asked to
split things up. :)

And in this case I think it makes all the more sense, since all these
things taken separately ought to be simple, but having them in the same
diff makes it confusing to review.

Although it's mostly the `Display` implementation that at the very least
should be its own patch, the rest can probably be kept together as it is
related, and adding an intermediate patch would require temporary code
to build Revision. The diff becomes much clearer once the impl blocks
are moved where they should be (please see below).

The comment update can be squashed together with the Revision/Spec
patch.

>
> Cc: Alexandre Courbot <acourbot@nvidia.com>
> Cc: Danilo Krummrich <dakr@kernel.org>
> Cc: Timur Tabi <ttabi@nvidia.com>
> Signed-off-by: John Hubbard <jhubbard@nvidia.com>
> ---
>  drivers/gpu/nova-core/gpu.rs  | 45 +++++++++++++++++++----------------
>  drivers/gpu/nova-core/regs.rs |  8 +++++++
>  2 files changed, 33 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs
> index 9d182bffe8b4..8173cdcd8378 100644
> --- a/drivers/gpu/nova-core/gpu.rs
> +++ b/drivers/gpu/nova-core/gpu.rs
> @@ -130,16 +130,18 @@ fn try_from(value: u8) -> Result<Self> {
>  }
>  
>  pub(crate) struct Revision {
> -    major: u8,
> -    minor: u8,
> +    pub(crate) major: u8,
> +    pub(crate) minor: u8,
>  }
>  
> -impl Revision {
> -    fn from_boot0(boot0: regs::NV_PMC_BOOT_0) -> Self {
> -        Self {
> -            major: boot0.major_revision(),
> -            minor: boot0.minor_revision(),
> -        }
> +impl TryFrom<regs::NV_PMC_BOOT_0> for Spec {
> +    type Error = Error;
> +
> +    fn try_from(boot0: regs::NV_PMC_BOOT_0) -> Result<Self> {
> +        Ok(Self {
> +            chipset: boot0.chipset()?,
> +            revision: boot0.revision(),
> +        })

This impl block for `Revision` gets replaced by a block for `Spec`,
which is only declared later. Can you move it (and the one for BOOT_42
in the third patch) to the right place, next to the other impl blocks
for `Spec`?

>      }
>  }
>  
> @@ -149,7 +151,7 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
>      }
>  }
>  
> -/// Structure holding the metadata of the GPU.
> +/// Structure holding a basic description of the GPU: Architecture, Chipset and Revision.
>  pub(crate) struct Spec {
>      chipset: Chipset,
>      /// The revision of the chipset.
> @@ -160,10 +162,19 @@ impl Spec {
>      fn new(bar: &Bar0) -> Result<Spec> {
>          let boot0 = regs::NV_PMC_BOOT_0::read(bar);
>  
> -        Ok(Self {
> -            chipset: boot0.chipset()?,
> -            revision: Revision::from_boot0(boot0),
> -        })
> +        Spec::try_from(boot0)
> +    }
> +}
> +
> +impl fmt::Display for Spec {
> +    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
> +        write!(
> +            f,
> +            "Chipset: {}, Architecture: {:?}, Revision: {}",
> +            self.chipset,
> +            self.chipset.arch(),
> +            self.revision
> +        )
>      }
>  }
>  
> @@ -193,13 +204,7 @@ pub(crate) fn new<'a>(
>      ) -> impl PinInit<Self, Error> + 'a {
>          try_pin_init!(Self {
>              spec: Spec::new(bar).inspect(|spec| {
> -                dev_info!(
> -                    pdev.as_ref(),
> -                    "NVIDIA (Chipset: {}, Architecture: {:?}, Revision: {})\n",
> -                    spec.chipset,
> -                    spec.chipset.arch(),
> -                    spec.revision
> -                );
> +                dev_info!(pdev.as_ref(),"NVIDIA ({})\n", spec);
>              })?,
>  
>              // We must wait for GFW_BOOT completion before doing any significant setup on the GPU.
> diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs
> index 206dab2e1335..207b865335af 100644
> --- a/drivers/gpu/nova-core/regs.rs
> +++ b/drivers/gpu/nova-core/regs.rs
> @@ -41,6 +41,14 @@ pub(crate) fn chipset(self) -> Result<Chipset> {
>              })
>              .and_then(Chipset::try_from)
>      }
> +
> +    /// Returns the revision information of the chip.
> +    pub(crate) fn revision(self) -> crate::gpu::Revision {
> +        crate::gpu::Revision {

nit: let's import `Revision`, or at least `gpu`, to align with what we
do with the other structures.

  reply	other threads:[~2025-11-06  7:45 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-06  1:27 [PATCH v5 0/3] gpu: nova: add boot42 support for next-gen GPUs John Hubbard
2025-11-06  1:27 ` [PATCH v5 1/3] gpu: nova-core: prepare Spec and Revision types for boot0/boot42 John Hubbard
2025-11-06  7:45   ` Alexandre Courbot [this message]
2025-11-06 21:12     ` John Hubbard
2025-11-06  1:27 ` [PATCH v5 2/3] gpu: nova-core: make Architecture behave as a u8 type John Hubbard
2025-11-06  1:27 ` [PATCH v5 3/3] gpu: nova-core: add boot42 support for next-gen GPUs John Hubbard
2025-11-06  7:24   ` Alexandre Courbot
2025-11-06 21:27     ` John Hubbard
2025-11-07  0:15       ` John Hubbard

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=DE1G0R9W3JS9.INLIKG0AXGES@nvidia.com \
    --to=acourbot@nvidia.com \
    --cc=a.hindborg@kernel.org \
    --cc=airlied@gmail.com \
    --cc=alex.gaynor@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=apopple@nvidia.com \
    --cc=bhelgaas@google.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=dakr@kernel.org \
    --cc=epeer@nvidia.com \
    --cc=gary@garyguo.net \
    --cc=jhubbard@nvidia.com \
    --cc=joelagnelf@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lossin@kernel.org \
    --cc=nouveau-bounces@lists.freedesktop.org \
    --cc=nouveau@lists.freedesktop.org \
    --cc=ojeda@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=simona@ffwll.ch \
    --cc=tmgross@umich.edu \
    --cc=ttabi@nvidia.com \
    --cc=zhiw@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox