mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 07:47:50 +00:00
gpu: nova-core: Clarify sysmembar operations
sysmembar is a critical operation that the GSP falcon needs to perform in the reset sequence. Add some code comments to clarify. [acourbot@nvdidia.com: move relevant documentation to SysmemFlush type] Signed-off-by: Joel Fernandes <joelagnelf@nvidia.com> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com> Link: https://lore.kernel.org/r/20250708-nova-docs-v4-2-9d188772c4c7@nvidia.com [ Minor grammar fix in the PFB register documentation. - Danilo ] Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
committed by
Danilo Krummrich
parent
4a4d4e320a
commit
4d3e891388
@@ -17,6 +17,16 @@ mod hal;
|
||||
/// Type holding the sysmem flush memory page, a page of memory to be written into the
|
||||
/// `NV_PFB_NISO_FLUSH_SYSMEM_ADDR*` registers and used to maintain memory coherency.
|
||||
///
|
||||
/// A system memory page is required for `sysmembar`, which is a GPU-initiated hardware
|
||||
/// memory-barrier operation that flushes all pending GPU-side memory writes that were done through
|
||||
/// PCIE to system memory. It is required for falcons to be reset as the reset operation involves a
|
||||
/// reset handshake. When the falcon acknowledges a reset, it writes into system memory. To ensure
|
||||
/// this write is visible to the host and prevent driver timeouts, the falcon must perform a
|
||||
/// sysmembar operation to flush its writes.
|
||||
///
|
||||
/// Because of this, the sysmem flush memory page must be registered as early as possible during
|
||||
/// driver initialization, and before any falcon is reset.
|
||||
///
|
||||
/// Users are responsible for manually calling [`Self::unregister`] before dropping this object,
|
||||
/// otherwise the GPU might still use it even after it has been freed.
|
||||
pub(crate) struct SysmemFlush {
|
||||
|
||||
@@ -170,7 +170,7 @@ pub(crate) struct Gpu {
|
||||
bar: Devres<Bar0>,
|
||||
fw: Firmware,
|
||||
/// System memory page required for flushing all pending GPU-side memory writes done through
|
||||
/// PCIE into system memory.
|
||||
/// PCIE into system memory, via sysmembar (A GPU-initiated HW memory-barrier operation).
|
||||
sysmem_flush: SysmemFlush,
|
||||
}
|
||||
|
||||
@@ -283,7 +283,6 @@ impl Gpu {
|
||||
gfw::wait_gfw_boot_completion(bar)
|
||||
.inspect_err(|_| dev_err!(pdev.as_ref(), "GFW boot did not complete"))?;
|
||||
|
||||
// System memory page required for sysmembar to properly flush into system memory.
|
||||
let sysmem_flush = SysmemFlush::register(pdev.as_ref(), bar, spec.chipset)?;
|
||||
|
||||
let gsp_falcon = Falcon::<Gsp>::new(
|
||||
|
||||
@@ -51,6 +51,9 @@ register!(NV_PBUS_SW_SCRATCH_0E@0x00001438 {
|
||||
|
||||
/* PFB */
|
||||
|
||||
// The following two registers together hold the physical system memory address that is used by the
|
||||
// GPU to perform sysmembar operations (see `fb::SysmemFlush`).
|
||||
|
||||
register!(NV_PFB_NISO_FLUSH_SYSMEM_ADDR @ 0x00100c10 {
|
||||
31:0 adr_39_08 as u32;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user