gpu: nova-core: gsp: move Cmdq's DMA handle to a struct member
The command-queue structure has a `dma_handle` method that returns the DMA handle to the memory segment shared with the GSP. This works, but is not ideal for the following reasons: - That method is effectively only ever called once, and is technically an accessor method since the handle doesn't change over time, - It feels a bit out-of-place with the other methods of `Cmdq` which only deal with the sending or receiving of messages, - The method has `pub(crate)` visibility, allowing other driver code to access this highly-sensitive handle. Address all these issues by turning `dma_handle` into a struct member with `pub(super)` visibility. This keeps the method space focused, and also ensures the member is not visible outside of the modules that need it. Reviewed-by: Eliot Courtney <ecourtney@nvidia.com> Reviewed-by: Danilo Krummrich <dakr@kernel.org> Link: https://patch.msgid.link/20260319-b4-cmdq-dma-handle-v1-1-57840b4a4f90@nvidia.com Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>master
parent
55fd681cdd
commit
651c27d6a7
|
|
@ -30,6 +30,8 @@ use continuation::{
|
|||
SplitState, //
|
||||
};
|
||||
|
||||
use pin_init::pin_init_scope;
|
||||
|
||||
use crate::{
|
||||
driver::Bar0,
|
||||
gsp::{
|
||||
|
|
@ -452,6 +454,8 @@ pub(crate) struct Cmdq {
|
|||
/// Inner mutex-protected state.
|
||||
#[pin]
|
||||
inner: Mutex<CmdqInner>,
|
||||
/// DMA handle of the command queue's shared memory region.
|
||||
pub(super) dma_handle: DmaAddress,
|
||||
}
|
||||
|
||||
impl Cmdq {
|
||||
|
|
@ -476,12 +480,17 @@ impl Cmdq {
|
|||
|
||||
/// Creates a new command queue for `dev`.
|
||||
pub(crate) fn new(dev: &device::Device<device::Bound>) -> impl PinInit<Self, Error> + '_ {
|
||||
try_pin_init!(Self {
|
||||
inner <- new_mutex!(CmdqInner {
|
||||
dev: dev.into(),
|
||||
gsp_mem: DmaGspMem::new(dev)?,
|
||||
seq: 0,
|
||||
}),
|
||||
pin_init_scope(move || {
|
||||
let gsp_mem = DmaGspMem::new(dev)?;
|
||||
|
||||
Ok(try_pin_init!(Self {
|
||||
dma_handle: gsp_mem.0.dma_handle(),
|
||||
inner <- new_mutex!(CmdqInner {
|
||||
dev: dev.into(),
|
||||
gsp_mem,
|
||||
seq: 0,
|
||||
}),
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -567,11 +576,6 @@ impl Cmdq {
|
|||
{
|
||||
self.inner.lock().receive_msg(timeout)
|
||||
}
|
||||
|
||||
/// Returns the DMA handle of the command queue's shared memory region.
|
||||
pub(crate) fn dma_handle(&self) -> DmaAddress {
|
||||
self.inner.lock().gsp_mem.0.dma_handle()
|
||||
}
|
||||
}
|
||||
|
||||
/// Inner mutex protected state of [`Cmdq`].
|
||||
|
|
|
|||
|
|
@ -912,7 +912,7 @@ impl MessageQueueInitArguments {
|
|||
#[allow(non_snake_case)]
|
||||
fn new(cmdq: &Cmdq) -> impl Init<Self> + '_ {
|
||||
init!(MessageQueueInitArguments {
|
||||
sharedMemPhysAddr: cmdq.dma_handle(),
|
||||
sharedMemPhysAddr: cmdq.dma_handle,
|
||||
pageTableEntryCount: num::usize_into_u32::<{ Cmdq::NUM_PTES }>(),
|
||||
cmdQueueOffset: num::usize_as_u64(Cmdq::CMDQ_OFFSET),
|
||||
statQueueOffset: num::usize_as_u64(Cmdq::STATQ_OFFSET),
|
||||
|
|
|
|||
Loading…
Reference in New Issue