From: Deborah Brouwer <deborah.brouwer@collabora.com>
To: Daniel Almeida <daniel.almeida@collabora.com>
Cc: "Boris Brezillon" <boris.brezillon@collabora.com>,
dri-devel@lists.freedesktop.org, rust-for-linux@vger.kernel.org,
"Danilo Krummrich" <dakr@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Maxime Ripard" <mripard@kernel.org>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>,
"Miguel Ojeda" <ojeda@kernel.org>, "Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Trevor Gross" <tmgross@umich.edu>,
"Steven Price" <steven.price@arm.com>,
"Dirk Behme" <dirk.behme@gmail.com>,
"Alexandre Courbot" <acourbot@nvidia.com>,
"Boqun Feng" <boqun@kernel.org>
Subject: Re: [PATCH v2 1/5] drm/tyr: Use register! macro for GPU_CONTROL
Date: Fri, 13 Mar 2026 12:13:45 -0700 [thread overview]
Message-ID: <abRh6cZIDN1V_jQ5@um790> (raw)
In-Reply-To: <FC466045-4D34-4100-B0BA-E0B2AFE66435@collabora.com>
On Fri, Mar 13, 2026 at 03:29:03PM -0300, Daniel Almeida wrote:
>
> >> @@ -182,37 +105,67 @@ struct GpuModels {
> >> prod_major: 7,
> >> }];
> >>
> >> -#[allow(dead_code)]
> >> -pub(crate) struct GpuId {
> >> - pub(crate) arch_major: u32,
> >> - pub(crate) arch_minor: u32,
> >> - pub(crate) arch_rev: u32,
> >> - pub(crate) prod_major: u32,
> >> - pub(crate) ver_major: u32,
> >> - pub(crate) ver_minor: u32,
> >> - pub(crate) ver_status: u32,
> >> -}
> >> -
> >> -impl From<u32> for GpuId {
> >> - fn from(value: u32) -> Self {
> >> - GpuId {
> >> - arch_major: (value & genmask_u32(28..=31)) >> 28,
> >> - arch_minor: (value & genmask_u32(24..=27)) >> 24,
> >> - arch_rev: (value & genmask_u32(20..=23)) >> 20,
> >> - prod_major: (value & genmask_u32(16..=19)) >> 16,
> >> - ver_major: (value & genmask_u32(12..=15)) >> 12,
> >> - ver_minor: (value & genmask_u32(4..=11)) >> 4,
> >> - ver_status: value & genmask_u32(0..=3),
> >> - }
> >> - }
> >> +pub(crate) fn gpu_info_log(dev: &Device<Bound>, iomem: &Devres<IoMem>) -> Result {
> >> + let io = (*iomem).access(dev)?;
> >> + let gpu_id = io.read(GPU_ID);
> >> +
> >> + let model_name = if let Some(model) = GPU_MODELS.iter().find(|&f| {
> >> + f.arch_major == gpu_id.arch_major().get() && f.prod_major == gpu_id.prod_major().get()
> >> + }) {
> >> + model.name
> >> + } else {
> >> + "unknown"
> >> + };
> >> +
> >> + // Create canonical product ID with only arch/product fields, excluding version
> >> + // fields. This ensures the same product at different revisions has the same ID.
> >> + let id = GPU_ID::zeroed()
> >> + .with_arch_major(gpu_id.arch_major())
> >> + .with_arch_minor(gpu_id.arch_minor())
> >> + .with_arch_rev(gpu_id.arch_rev())
> >> + .with_prod_major(gpu_id.prod_major())
> >> + .into_raw();
> >> +
> >> + dev_info!(
> >> + dev,
> >> + "mali-{} id 0x{:x} major 0x{:x} minor 0x{:x} status 0x{:x}",
> >> + model_name,
> >> + id,
> >
> > This was previously right-shifted by 16. Now, I'm questioning this
> > decision to filter out the version fields. I think it'd be better to
> > print the raw ID directly. We're already extracting and printing the
> > arch major.minor and version status, but if there's anything else
> > we want to clearly extract from this raw ID, we could add more.
> >
> > TLDR; that's probably one place where I think it's not such a bad idea
> > to diverge from Panthor and print an unmodified GPU_ID. Maybe s/id/raw
> > GPU ID/ to make the distincting clear. None of this should happen in
> > this commit though. Either we do that in a preliminary commit that
> > drops the `>> 16`, or we keep the `>> 16` here, and change that in a
> > follow-up.
>
> IIRC, Onur recently cleaned this up, hasn’t he?
Onur's patch fixes the model name detection and it's in drm-rust-next:
289cf6f91459 drm/tyr: gpu: fix GpuInfo::log model/version decoding
But it doesn't touch the generation of the id. So, in v3 I'll add a
separate commit to print the GPU_ID without filtering.
>
> >
> >> + gpu_id.ver_major().get(),
> >> + gpu_id.ver_minor().get(),
> >> + gpu_id.ver_status().get()
> >> + );
> >
> > [...]
> >
> >> +
> >> + impl GPU_COMMAND {
> >> + /// No operation. This is the default value.
> >> + pub(crate) const NOP: u32 = 0;
> >> + /// Reset the GPU.
> >> + pub(crate) const RESET: u32 = 1;
> >> + /// Flush caches.
> >> + pub(crate) const FLUSH_CACHES: u32 = 4;
> >> + /// Clear GPU faults.
> >> + pub(crate) const CLEAR_FAULT: u32 = 7;
> >> + }
> >> +
> >> + register! {
> >> + /// GPU command register in reset mode.
> >> + /// Set command to [`GPU_COMMAND::RESET`] to set reset_mode.
> >> + pub(crate) GPU_COMMAND_RESET (u32) => GPU_COMMAND {
> >> + 7:0 command;
> >
> > Alexandre, dunno how hard it would be to extend this alias syntax to
> > provide auto-initialization/expected-value of certain fields, like:
> >
> > pub(crate) GPU_COMMAND_RESET (u32) => GPU_COMMAND {
> > 7:0 command <- GPU_COMMAND::RESET;
> > 11:8 reset_mode;
> > }
> >
>
> +1 to the syntax above. This looks quite ergonomic IMHO.
>
> > so that when you instantiate a GPU_COMMAND_RESET, all you have to set is
> > reset_mode and the command gets set to GPU_COMMAND::RESET for you.
> > (that's for the write path, for the read path, you'll need some sort of
> > match to do the re-interpretation anyway).
> >
> > Just to be clear, I'm not asking for any of that in the current
> > register!() patchset. It's more a suggestion for a potential future
> > improvement.
> >
> >> + 11:8 reset_mode;
> >> + }
> >> + }
>
> — Daniel
next prev parent reply other threads:[~2026-03-13 19:14 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-11 23:03 [PATCH v2 0/5] drm/tyr: Use register! macro Deborah Brouwer
2026-03-11 23:03 ` [PATCH v2 1/5] drm/tyr: Use register! macro for GPU_CONTROL Deborah Brouwer
2026-03-12 8:39 ` Boris Brezillon
2026-03-12 13:25 ` Alexandre Courbot
2026-03-13 18:29 ` Daniel Almeida
2026-03-13 19:13 ` Deborah Brouwer [this message]
2026-03-12 9:14 ` Boris Brezillon
2026-03-13 18:26 ` Daniel Almeida
2026-03-18 3:14 ` Alexandre Courbot
2026-03-20 0:15 ` Deborah Brouwer
2026-03-11 23:03 ` [PATCH v2 2/5] drm/tyr: Set interconnect coherency during probe Deborah Brouwer
2026-03-12 9:07 ` Boris Brezillon
2026-03-11 23:04 ` [PATCH v2 3/5] drm/tyr: Use register! macro for JOB_CONTROL Deborah Brouwer
2026-03-13 19:12 ` Daniel Almeida
2026-03-11 23:04 ` [PATCH v2 4/5] drm/tyr: Use register! macro for MMU_CONTROL Deborah Brouwer
2026-03-12 8:59 ` Boris Brezillon
2026-03-13 19:17 ` Daniel Almeida
2026-03-11 23:04 ` [PATCH v2 5/5] drm/tyr: Remove custom register struct Deborah Brouwer
2026-03-13 19:18 ` Daniel Almeida
2026-03-11 23:09 ` [PATCH v2 0/5] drm/tyr: Use register! macro Deborah Brouwer
2026-03-12 8:43 ` Boris Brezillon
2026-03-12 8:50 ` Boris Brezillon
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=abRh6cZIDN1V_jQ5@um790 \
--to=deborah.brouwer@collabora.com \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--cc=airlied@gmail.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=boris.brezillon@collabora.com \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=dirk.behme@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=gary@garyguo.net \
--cc=lossin@kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=simona@ffwll.ch \
--cc=steven.price@arm.com \
--cc=tmgross@umich.edu \
--cc=tzimmermann@suse.de \
/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