[PATCH 7/7] gpu: nova-core: justify remaining uses of `as`

Alexandre Courbot posted 7 patches 3 months, 2 weeks ago
There is a newer version of this series
[PATCH 7/7] gpu: nova-core: justify remaining uses of `as`
Posted by Alexandre Courbot 3 months, 2 weeks ago
There are a few remaining cases where we *do* want to use `as`,
because we specifically want to strip the data that does not fit into
the destination type. Comment these uses to clear confusion about the
intent.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
---
 drivers/gpu/nova-core/falcon.rs       | 4 ++++
 drivers/gpu/nova-core/fb/hal/ga100.rs | 4 ++++
 2 files changed, 8 insertions(+)

diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon.rs
index a44df1ac8873..701c08d0cb2a 100644
--- a/drivers/gpu/nova-core/falcon.rs
+++ b/drivers/gpu/nova-core/falcon.rs
@@ -479,9 +479,13 @@ fn dma_wr<F: FalconFirmware<Target = E>>(
         // Set up the base source DMA address.
 
         regs::NV_PFALCON_FALCON_DMATRFBASE::default()
+            // `as u32` is used on purpose since we do want to strip the upper bits, which will be
+            // written to `NV_PFALCON_FALCON_DMATRFBASE1`.
             .set_base((dma_start >> 8) as u32)
             .write(bar, &E::ID);
         regs::NV_PFALCON_FALCON_DMATRFBASE1::default()
+            // `as u16` is used on purpose since the remaining bits are guaranteed to fit within a
+            // `u16`.
             .set_base((dma_start >> 40) as u16)
             .write(bar, &E::ID);
 
diff --git a/drivers/gpu/nova-core/fb/hal/ga100.rs b/drivers/gpu/nova-core/fb/hal/ga100.rs
index 871c42bf033a..6a59c96febc1 100644
--- a/drivers/gpu/nova-core/fb/hal/ga100.rs
+++ b/drivers/gpu/nova-core/fb/hal/ga100.rs
@@ -18,9 +18,13 @@ pub(super) fn read_sysmem_flush_page_ga100(bar: &Bar0) -> u64 {
 
 pub(super) fn write_sysmem_flush_page_ga100(bar: &Bar0, addr: u64) {
     regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR_HI::default()
+        // `as u32` is used on purpose since the remaining bits are guaranteed to fit within a
+        // `u32`.
         .set_adr_63_40((addr >> FLUSH_SYSMEM_ADDR_SHIFT_HI) as u32)
         .write(bar);
     regs::NV_PFB_NISO_FLUSH_SYSMEM_ADDR::default()
+        // `as u32` is used on purpose since we want to strip the upper bits that have been written
+        // to `NV_PFB_NISO_FLUSH_SYSMEM_ADDR_HI`.
         .set_adr_39_08((addr >> FLUSH_SYSMEM_ADDR_SHIFT) as u32)
         .write(bar);
 }

-- 
2.51.0
Re: [PATCH 7/7] gpu: nova-core: justify remaining uses of `as`
Posted by Miguel Ojeda 3 months, 2 weeks ago
On Sun, Oct 26, 2025 at 3:40 PM Alexandre Courbot <acourbot@nvidia.com> wrote:
>
> +            // `as u32` is used on purpose since we do want to strip the upper bits, which will be
> +            // written to `NV_PFALCON_FALCON_DMATRFBASE1`.
>              .set_base((dma_start >> 8) as u32)
>              .write(bar, &E::ID);

We are not very consistent on this yet, but I would suggest using `//
CAST:`. We are working on getting `// PANIC:` in Clippy, and we could
get others like this one eventually.

Cheers,
Miguel
Re: [PATCH 7/7] gpu: nova-core: justify remaining uses of `as`
Posted by Alexandre Courbot 3 months, 2 weeks ago
On Mon Oct 27, 2025 at 1:11 AM JST, Miguel Ojeda wrote:
> On Sun, Oct 26, 2025 at 3:40 PM Alexandre Courbot <acourbot@nvidia.com> wrote:
>>
>> +            // `as u32` is used on purpose since we do want to strip the upper bits, which will be
>> +            // written to `NV_PFALCON_FALCON_DMATRFBASE1`.
>>              .set_base((dma_start >> 8) as u32)
>>              .write(bar, &E::ID);
>
> We are not very consistent on this yet, but I would suggest using `//
> CAST:`. We are working on getting `// PANIC:` in Clippy, and we could
> get others like this one eventually.

Sounds great, will do!
Re: [PATCH 7/7] gpu: nova-core: justify remaining uses of `as`
Posted by Miguel Ojeda 3 months, 1 week ago
On Mon, Oct 27, 2025 at 1:07 PM Alexandre Courbot <acourbot@nvidia.com> wrote:
>
> Sounds great, will do!

Thanks!

For reference, the other day I opened a couple issues for this on Clippy:

    https://github.com/rust-lang/rust-clippy/issues/15963
    https://github.com/rust-lang/rust-clippy/issues/15964

and added them to our usual list:

    https://github.com/Rust-for-Linux/linux/issues/349

Cheers,
Miguel