mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
drm/panthor: add sysfs knob for enabling job profiling
This commit introduces a DRM device sysfs attribute that lets UM control the job accounting status in the device. The knob variable had been brought in as part of a previous commit, but now we're able to fix it manually. As sysfs files are part of a driver's uAPI, describe its legitimate input values and output format in a documentation file. Signed-off-by: Adrián Larumbe <adrian.larumbe@collabora.com> Reviewed-by: Steven Price <steven.price@arm.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240923230912.2207320-6-adrian.larumbe@collabora.com
This commit is contained in:
parent
064bb57479
commit
6a797bdfde
3 changed files with 95 additions and 0 deletions
10
Documentation/ABI/testing/sysfs-driver-panthor-profiling
Normal file
10
Documentation/ABI/testing/sysfs-driver-panthor-profiling
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
What: /sys/bus/platform/drivers/panthor/.../profiling
|
||||||
|
Date: September 2024
|
||||||
|
KernelVersion: 6.11.0
|
||||||
|
Contact: Adrian Larumbe <adrian.larumbe@collabora.com>
|
||||||
|
Description:
|
||||||
|
Bitmask to enable drm fdinfo's job profiling measurements.
|
||||||
|
Valid values are:
|
||||||
|
0: Don't enable fdinfo job profiling sources.
|
||||||
|
1: Enable GPU cycle measurements for running jobs.
|
||||||
|
2: Enable GPU timestamp sampling for running jobs.
|
46
Documentation/gpu/panthor.rst
Normal file
46
Documentation/gpu/panthor.rst
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
.. SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
|
=========================
|
||||||
|
drm/Panthor CSF driver
|
||||||
|
=========================
|
||||||
|
|
||||||
|
.. _panfrost-usage-stats:
|
||||||
|
|
||||||
|
Panthor DRM client usage stats implementation
|
||||||
|
==============================================
|
||||||
|
|
||||||
|
The drm/Panthor driver implements the DRM client usage stats specification as
|
||||||
|
documented in :ref:`drm-client-usage-stats`.
|
||||||
|
|
||||||
|
Example of the output showing the implemented key value pairs and entirety of
|
||||||
|
the currently possible format options:
|
||||||
|
|
||||||
|
::
|
||||||
|
pos: 0
|
||||||
|
flags: 02400002
|
||||||
|
mnt_id: 29
|
||||||
|
ino: 491
|
||||||
|
drm-driver: panthor
|
||||||
|
drm-client-id: 10
|
||||||
|
drm-engine-panthor: 111110952750 ns
|
||||||
|
drm-cycles-panthor: 94439687187
|
||||||
|
drm-maxfreq-panthor: 1000000000 Hz
|
||||||
|
drm-curfreq-panthor: 1000000000 Hz
|
||||||
|
drm-total-memory: 16480 KiB
|
||||||
|
drm-shared-memory: 0
|
||||||
|
drm-active-memory: 16200 KiB
|
||||||
|
drm-resident-memory: 16480 KiB
|
||||||
|
drm-purgeable-memory: 0
|
||||||
|
|
||||||
|
Possible `drm-engine-` key names are: `panthor`.
|
||||||
|
`drm-curfreq-` values convey the current operating frequency for that engine.
|
||||||
|
|
||||||
|
Users must bear in mind that engine and cycle sampling are disabled by default,
|
||||||
|
because of power saving concerns. `fdinfo` users and benchmark applications which
|
||||||
|
query the fdinfo file must make sure to toggle the job profiling status of the
|
||||||
|
driver by writing into the appropriate sysfs node::
|
||||||
|
|
||||||
|
echo <N> > /sys/bus/platform/drivers/panthor/[a-f0-9]*.gpu/profiling
|
||||||
|
|
||||||
|
Where `N` is a bit mask where cycle and timestamp sampling are respectively
|
||||||
|
enabled by the first and second bits.
|
|
@ -1536,6 +1536,44 @@ static void panthor_remove(struct platform_device *pdev)
|
||||||
panthor_device_unplug(ptdev);
|
panthor_device_unplug(ptdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t profiling_show(struct device *dev,
|
||||||
|
struct device_attribute *attr,
|
||||||
|
char *buf)
|
||||||
|
{
|
||||||
|
struct panthor_device *ptdev = dev_get_drvdata(dev);
|
||||||
|
|
||||||
|
return sysfs_emit(buf, "%d\n", ptdev->profile_mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t profiling_store(struct device *dev,
|
||||||
|
struct device_attribute *attr,
|
||||||
|
const char *buf, size_t len)
|
||||||
|
{
|
||||||
|
struct panthor_device *ptdev = dev_get_drvdata(dev);
|
||||||
|
u32 value;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
err = kstrtou32(buf, 0, &value);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
if ((value & ~PANTHOR_DEVICE_PROFILING_ALL) != 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
ptdev->profile_mask = value;
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static DEVICE_ATTR_RW(profiling);
|
||||||
|
|
||||||
|
static struct attribute *panthor_attrs[] = {
|
||||||
|
&dev_attr_profiling.attr,
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
ATTRIBUTE_GROUPS(panthor);
|
||||||
|
|
||||||
static const struct of_device_id dt_match[] = {
|
static const struct of_device_id dt_match[] = {
|
||||||
{ .compatible = "rockchip,rk3588-mali" },
|
{ .compatible = "rockchip,rk3588-mali" },
|
||||||
{ .compatible = "arm,mali-valhall-csf" },
|
{ .compatible = "arm,mali-valhall-csf" },
|
||||||
|
@ -1555,6 +1593,7 @@ static struct platform_driver panthor_driver = {
|
||||||
.name = "panthor",
|
.name = "panthor",
|
||||||
.pm = pm_ptr(&panthor_pm_ops),
|
.pm = pm_ptr(&panthor_pm_ops),
|
||||||
.of_match_table = dt_match,
|
.of_match_table = dt_match,
|
||||||
|
.dev_groups = panthor_groups,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue