mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 18:43:33 +02:00
drm/tyr: Clarify driver/device type names
Currently the `TyrDriver` struct implements both `platform::Driver` and `drm::Driver`. For clarity, split up these two roles: - Introduce `TyrPlatformDriverData` to implement `platform::Driver`, and - Introduce `TyrDrmDriver` to implement `drm::Driver`. Also rename other variables to reflect their roles in the DRM context: - Rename `TyrDevice` to `TyrDrmDevice` - Rename `TyrData` to `TyrDrmDeviceData` - Rename `File` to `TyrDrmFileData` - Rename `DrmFile` to `TyrDrmFile` No functional changes are intended. Co-developed-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Deborah Brouwer <deborah.brouwer@collabora.com> Link: https://patch.msgid.link/20260224002314.344675-1-deborah.brouwer@collabora.com Signed-off-by: Alice Ryhl <aliceryhl@google.com>
This commit is contained in:
parent
6ca4bcc23a
commit
15da5bc9f3
|
|
@ -30,7 +30,7 @@
|
|||
};
|
||||
|
||||
use crate::{
|
||||
file::File,
|
||||
file::TyrDrmFileData,
|
||||
gem::TyrObject,
|
||||
gpu,
|
||||
gpu::GpuInfo,
|
||||
|
|
@ -39,16 +39,18 @@
|
|||
|
||||
pub(crate) type IoMem = kernel::io::mem::IoMem<SZ_2M>;
|
||||
|
||||
pub(crate) struct TyrDrmDriver;
|
||||
|
||||
/// Convenience type alias for the DRM device type for this driver.
|
||||
pub(crate) type TyrDevice = drm::Device<TyrDriver>;
|
||||
pub(crate) type TyrDrmDevice = drm::Device<TyrDrmDriver>;
|
||||
|
||||
#[pin_data(PinnedDrop)]
|
||||
pub(crate) struct TyrDriver {
|
||||
_device: ARef<TyrDevice>,
|
||||
pub(crate) struct TyrPlatformDriverData {
|
||||
_device: ARef<TyrDrmDevice>,
|
||||
}
|
||||
|
||||
#[pin_data(PinnedDrop)]
|
||||
pub(crate) struct TyrData {
|
||||
pub(crate) struct TyrDrmDeviceData {
|
||||
pub(crate) pdev: ARef<platform::Device>,
|
||||
|
||||
#[pin]
|
||||
|
|
@ -71,9 +73,9 @@ pub(crate) struct TyrData {
|
|||
// that it will be removed in a future patch.
|
||||
//
|
||||
// SAFETY: This will be removed in a future patch.
|
||||
unsafe impl Send for TyrData {}
|
||||
unsafe impl Send for TyrDrmDeviceData {}
|
||||
// SAFETY: This will be removed in a future patch.
|
||||
unsafe impl Sync for TyrData {}
|
||||
unsafe impl Sync for TyrDrmDeviceData {}
|
||||
|
||||
fn issue_soft_reset(dev: &Device<Bound>, iomem: &Devres<IoMem>) -> Result {
|
||||
regs::GPU_CMD.write(dev, iomem, regs::GPU_CMD_SOFT_RESET)?;
|
||||
|
|
@ -92,14 +94,14 @@ fn issue_soft_reset(dev: &Device<Bound>, iomem: &Devres<IoMem>) -> Result {
|
|||
kernel::of_device_table!(
|
||||
OF_TABLE,
|
||||
MODULE_OF_TABLE,
|
||||
<TyrDriver as platform::Driver>::IdInfo,
|
||||
<TyrPlatformDriverData as platform::Driver>::IdInfo,
|
||||
[
|
||||
(of::DeviceId::new(c"rockchip,rk3588-mali"), ()),
|
||||
(of::DeviceId::new(c"arm,mali-valhall-csf"), ())
|
||||
]
|
||||
);
|
||||
|
||||
impl platform::Driver for TyrDriver {
|
||||
impl platform::Driver for TyrPlatformDriverData {
|
||||
type IdInfo = ();
|
||||
const OF_ID_TABLE: Option<of::IdTable<Self::IdInfo>> = Some(&OF_TABLE);
|
||||
|
||||
|
|
@ -129,7 +131,7 @@ fn probe(
|
|||
|
||||
let platform: ARef<platform::Device> = pdev.into();
|
||||
|
||||
let data = try_pin_init!(TyrData {
|
||||
let data = try_pin_init!(TyrDrmDeviceData {
|
||||
pdev: platform.clone(),
|
||||
clks <- new_mutex!(Clocks {
|
||||
core: core_clk,
|
||||
|
|
@ -143,10 +145,10 @@ fn probe(
|
|||
gpu_info,
|
||||
});
|
||||
|
||||
let tdev: ARef<TyrDevice> = drm::Device::new(pdev.as_ref(), data)?;
|
||||
drm::driver::Registration::new_foreign_owned(&tdev, pdev.as_ref(), 0)?;
|
||||
let ddev: ARef<TyrDrmDevice> = drm::Device::new(pdev.as_ref(), data)?;
|
||||
drm::driver::Registration::new_foreign_owned(&ddev, pdev.as_ref(), 0)?;
|
||||
|
||||
let driver = TyrDriver { _device: tdev };
|
||||
let driver = TyrPlatformDriverData { _device: ddev };
|
||||
|
||||
// We need this to be dev_info!() because dev_dbg!() does not work at
|
||||
// all in Rust for now, and we need to see whether probe succeeded.
|
||||
|
|
@ -156,12 +158,12 @@ fn probe(
|
|||
}
|
||||
|
||||
#[pinned_drop]
|
||||
impl PinnedDrop for TyrDriver {
|
||||
impl PinnedDrop for TyrPlatformDriverData {
|
||||
fn drop(self: Pin<&mut Self>) {}
|
||||
}
|
||||
|
||||
#[pinned_drop]
|
||||
impl PinnedDrop for TyrData {
|
||||
impl PinnedDrop for TyrDrmDeviceData {
|
||||
fn drop(self: Pin<&mut Self>) {
|
||||
// TODO: the type-state pattern for Clks will fix this.
|
||||
let clks = self.clks.lock();
|
||||
|
|
@ -182,15 +184,15 @@ fn drop(self: Pin<&mut Self>) {
|
|||
};
|
||||
|
||||
#[vtable]
|
||||
impl drm::Driver for TyrDriver {
|
||||
type Data = TyrData;
|
||||
type File = File;
|
||||
impl drm::Driver for TyrDrmDriver {
|
||||
type Data = TyrDrmDeviceData;
|
||||
type File = TyrDrmFileData;
|
||||
type Object = drm::gem::Object<TyrObject>;
|
||||
|
||||
const INFO: drm::DriverInfo = INFO;
|
||||
|
||||
kernel::declare_drm_ioctls! {
|
||||
(PANTHOR_DEV_QUERY, drm_panthor_dev_query, ioctl::RENDER_ALLOW, File::dev_query),
|
||||
(PANTHOR_DEV_QUERY, drm_panthor_dev_query, ioctl::RENDER_ALLOW, TyrDrmFileData::dev_query),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,35 +7,32 @@
|
|||
uapi, //
|
||||
};
|
||||
|
||||
use crate::{
|
||||
driver::TyrDevice,
|
||||
TyrDriver, //
|
||||
};
|
||||
use crate::driver::TyrDrmDriver;
|
||||
|
||||
#[pin_data]
|
||||
pub(crate) struct File {}
|
||||
pub(crate) struct TyrDrmFileData {}
|
||||
|
||||
/// Convenience type alias for our DRM `File` type
|
||||
pub(crate) type DrmFile = drm::file::File<File>;
|
||||
pub(crate) type TyrDrmFile = drm::file::File<TyrDrmFileData>;
|
||||
|
||||
impl drm::file::DriverFile for File {
|
||||
type Driver = TyrDriver;
|
||||
impl drm::file::DriverFile for TyrDrmFileData {
|
||||
type Driver = TyrDrmDriver;
|
||||
|
||||
fn open(_dev: &drm::Device<Self::Driver>) -> Result<Pin<KBox<Self>>> {
|
||||
KBox::try_pin_init(try_pin_init!(Self {}), GFP_KERNEL)
|
||||
}
|
||||
}
|
||||
|
||||
impl File {
|
||||
impl TyrDrmFileData {
|
||||
pub(crate) fn dev_query(
|
||||
tdev: &TyrDevice,
|
||||
ddev: &drm::Device<TyrDrmDriver>,
|
||||
devquery: &mut uapi::drm_panthor_dev_query,
|
||||
_file: &DrmFile,
|
||||
_file: &TyrDrmFile,
|
||||
) -> Result<u32> {
|
||||
if devquery.pointer == 0 {
|
||||
match devquery.type_ {
|
||||
uapi::drm_panthor_dev_query_type_DRM_PANTHOR_DEV_QUERY_GPU_INFO => {
|
||||
devquery.size = core::mem::size_of_val(&tdev.gpu_info) as u32;
|
||||
devquery.size = core::mem::size_of_val(&ddev.gpu_info) as u32;
|
||||
Ok(0)
|
||||
}
|
||||
_ => Err(EINVAL),
|
||||
|
|
@ -49,7 +46,7 @@ pub(crate) fn dev_query(
|
|||
)
|
||||
.writer();
|
||||
|
||||
writer.write(&tdev.gpu_info)?;
|
||||
writer.write(&ddev.gpu_info)?;
|
||||
|
||||
Ok(0)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,19 +5,16 @@
|
|||
prelude::*, //
|
||||
};
|
||||
|
||||
use crate::driver::{
|
||||
TyrDevice,
|
||||
TyrDriver, //
|
||||
};
|
||||
use crate::driver::TyrDrmDriver;
|
||||
|
||||
/// GEM Object inner driver data
|
||||
#[pin_data]
|
||||
pub(crate) struct TyrObject {}
|
||||
|
||||
impl gem::DriverObject for TyrObject {
|
||||
type Driver = TyrDriver;
|
||||
type Driver = TyrDrmDriver;
|
||||
|
||||
fn new(_dev: &TyrDevice, _size: usize) -> impl PinInit<Self, Error> {
|
||||
fn new(_dev: &kernel::drm::Device<TyrDrmDriver>, _size: usize) -> impl PinInit<Self, Error> {
|
||||
try_pin_init!(TyrObject {})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
//! The name "Tyr" is inspired by Norse mythology, reflecting Arm's tradition of
|
||||
//! naming their GPUs after Nordic mythological figures and places.
|
||||
|
||||
use crate::driver::TyrDriver;
|
||||
use crate::driver::TyrPlatformDriverData;
|
||||
|
||||
mod driver;
|
||||
mod file;
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
mod regs;
|
||||
|
||||
kernel::module_platform_driver! {
|
||||
type: TyrDriver,
|
||||
type: TyrPlatformDriverData,
|
||||
name: "tyr",
|
||||
authors: ["The Tyr driver authors"],
|
||||
description: "Arm Mali Tyr DRM driver",
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user