[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <0B70DC73-6796-4114-9C2B-6B1B9AD560A5@nvidia.com>
Date: Mon, 20 Oct 2025 19:48:32 +0000
From: Joel Fernandes <joelagnelf@...dia.com>
To: John Hubbard <jhubbard@...dia.com>
CC: "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"rust-for-linux@...r.kernel.org" <rust-for-linux@...r.kernel.org>,
"dri-devel@...ts.freedesktop.org" <dri-devel@...ts.freedesktop.org>,
"dakr@...nel.org" <dakr@...nel.org>, Alexandre Courbot <acourbot@...dia.com>,
Alistair Popple <apopple@...dia.com>, Miguel Ojeda <ojeda@...nel.org>, Alex
Gaynor <alex.gaynor@...il.com>, Boqun Feng <boqun.feng@...il.com>, Gary Guo
<gary@...yguo.net>, "bjorn3_gh@...tonmail.com" <bjorn3_gh@...tonmail.com>,
Benno Lossin <lossin@...nel.org>, Andreas Hindborg <a.hindborg@...nel.org>,
Alice Ryhl <aliceryhl@...gle.com>, Trevor Gross <tmgross@...ch.edu>, David
Airlie <airlied@...il.com>, Simona Vetter <simona@...ll.ch>, Maarten
Lankhorst <maarten.lankhorst@...ux.intel.com>, Maxime Ripard
<mripard@...nel.org>, Thomas Zimmermann <tzimmermann@...e.de>, Timur Tabi
<ttabi@...dia.com>, "joel@...lfernandes.org" <joel@...lfernandes.org>, Elle
Rhumsaa <elle@...thered-steel.dev>, Daniel Almeida
<daniel.almeida@...labora.com>, "nouveau@...ts.freedesktop.org"
<nouveau@...ts.freedesktop.org>
Subject: Re: [PATCH 4/7] docs: gpu: nova-core: Document the PRAMIN aperture
mechanism
> On Oct 20, 2025, at 3:36 PM, John Hubbard <jhubbard@...dia.com> wrote:
>
> On 10/20/25 11:55 AM, Joel Fernandes wrote:
> ...> +Logically, the PRAMIN aperture mechanism is implemented by the GPU's PBUS (PCIe Bus Controller Unit)
>> +and provides a CPU-accessible window into VRAM through the PCIe interface::
>> +
>> + +-----------------+ PCIe +------------------------------+
>> + | CPU |<----------->| GPU |
>> + +-----------------+ | |
>> + | +----------------------+ |
>> + | | PBUS | |
>> + | | (Bus Controller) | |
>> + | | | |
>> + | | +--------------.<------------ (window always starts at
>> + | | | PRAMIN | | | BAR0 + 0x700000)
>
> Quick question: does "window always starts at" actually mean "windows
> is always initialized to" ? Or something else?
It means start of the 1MB window (offset 0) is accessed from the BAR at that location.
Thanks.
>
>
> thanks,
> --
> John Hubbard
>
>> + | | | Window | | |
>> + | | | (1MB) | | |
>> + | | +--------------+ | |
>> + | | | | |
>> + | +---------|------------+ |
>> + | | |
>> + | v |
>> + | .----------------------.<------------ (Program PRAMIN to any
>> + | | VRAM | | 64KB VRAM physical boundary)
>> + | | (Several GBs) | |
>> + | | | |
>> + | | FB[0x000000000000] | |
>> + | | ... | |
>> + | | FB[0x7FFFFFFFFFF] | |
>> + | +----------------------+ |
>> + +------------------------------+
>> +
>> +PBUS (PCIe Bus Controller) among other things is responsible in the GPU for handling MMIO
>> +accesses to the BAR registers.
>> +
>> +PRAMIN Window Operation
>> +=======================
>> +
>> +The PRAMIN window provides a 1MB sliding aperture that can be repositioned over
>> +the entire VRAM address space using the NV_PBUS_BAR0_WINDOW register.
>> +
>> +Window Control Mechanism
>> +-------------------------
>> +
>> +The window position is controlled via the PBUS BAR0_WINDOW register::
>> +
>> + NV_PBUS_BAR0_WINDOW Register
>> + +-----+-----+--------------------------------------+
>> + |31-26|25-24| 23-0 |
>> + | |TARG | BASE_ADDR |
>> + | | ET | (bits 39:16 of VRAM address) |
>> + +-----+-----+--------------------------------------+
>> +
>> + TARGET field values:
>> + - 0x0: VID_MEM (Video Memory / VRAM)
>> + - 0x1: SYS_MEM_COHERENT (Coherent system memory)
>> + - 0x2: SYS_MEM_NONCOHERENT (Non-coherent system memory)
>> +
>> +64KB Alignment Requirement
>> +---------------------------
>> +
>> +The PRAMIN window must be aligned to 64KB boundaries in VRAM. This is enforced
>> +by the BASE_ADDR field representing bits [39:16] of the target address::
>> +
>> + VRAM Address Calculation:
>> + actual_vram_addr = (BASE_ADDR << 16) + pramin_offset
>> + Where:
>> + - BASE_ADDR: 24-bit value from NV_PBUS_BAR0_WINDOW[23:0]
>> + - pramin_offset: 20-bit offset within PRAMIN window [0x00000-0xFFFFF]
>> + Example Window Positioning:
>> + +---------------------------------------------------------+
>> + | VRAM Space |
>> + | |
>> + | 0x000000000 +-----------------+ <-- 64KB aligned |
>> + | | PRAMIN Window | |
>> + | | (1MB) | |
>> + | 0x0000FFFFF +-----------------+ |
>> + | |
>> + | | ^ |
>> + | | | Window can slide |
>> + | v | to any 64KB boundary |
>> + | |
>> + | 0x123400000 +-----------------+ <-- 64KB aligned |
>> + | | PRAMIN Window | |
>> + | | (1MB) | |
>> + | 0x1234FFFFF +-----------------+ |
>> + | |
>> + | ... |
>> + | |
>> + | 0x7FFFF0000 +-----------------+ <-- 64KB aligned |
>> + | | PRAMIN Window | |
>> + | | (1MB) | |
>> + | 0x7FFFFFFFF +-----------------+ |
>> + +---------------------------------------------------------+
>> diff --git a/Documentation/gpu/nova/index.rst b/Documentation/gpu/nova/index.rst
>> index 46302daace34..e77d3ee336a4 100644
>> --- a/Documentation/gpu/nova/index.rst
>> +++ b/Documentation/gpu/nova/index.rst
>> @@ -33,3 +33,4 @@ vGPU manager VFIO driver and the nova-drm driver.
>> core/fwsec
>> core/falcon
>> core/msgq
>> + core/pramin
>
>
Powered by blists - more mailing lists