[PATCH] drm/panfrost: Add "compute shader only" hint

Rob Herring robh at kernel.org
Tue Aug 6 20:01:27 UTC 2019


On Tue, Aug 6, 2019 at 1:53 PM Alyssa Rosenzweig
<alyssa.rosenzweig at collabora.com> wrote:
>
> Midgard contains two job slots capable of compute jobs, JS1 and JS2. As
> an optimization, it is preferable to schedule compute-only workloads to
> JS2, although compute jobs are functionally able to be scheduled to JS1
> (barring an obscure errata).
>
> Accordingly, we reserve a compute-only hint in the UABI to allow future
> compute-equipped userspace and future compute-optimized kernelspace to
> hint towards JS2. At the moment, the hint is ignored, but this is
> harmless.

Why don't we just go ahead and enable JS2?

> I have verified compute jobs can be successfully submitted and executed
> with an appropriate userspace against a 5.1 kernel without this hint.
>
> Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
> ---
>  drivers/gpu/drm/panfrost/TODO           | 3 ---
>  drivers/gpu/drm/panfrost/panfrost_job.c | 4 +++-
>  include/uapi/drm/panfrost_drm.h         | 8 ++++++++
>  3 files changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/panfrost/TODO b/drivers/gpu/drm/panfrost/TODO
> index c2e44add3..8c367a5a6 100644
> --- a/drivers/gpu/drm/panfrost/TODO
> +++ b/drivers/gpu/drm/panfrost/TODO
> @@ -20,8 +20,5 @@
>
>  - Support for madvise and a shrinker.
>
> -- Compute job support. So called 'compute only' jobs need to be plumbed up to
> -  userspace.
> -
>  - Performance counter support. (Boris)
>
> diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c
> index 9bb9260d9..3e1385a3b 100644
> --- a/drivers/gpu/drm/panfrost/panfrost_job.c
> +++ b/drivers/gpu/drm/panfrost/panfrost_job.c
> @@ -108,7 +108,9 @@ static int panfrost_job_get_slot(struct panfrost_job *job)
>         if (job->requirements & PANFROST_JD_REQ_FS)
>                 return 0;
>
> -/* Not exposed to userspace yet */
> +        /* Compute jobs can run on JS1, so compute-only jobs can run with this
> +         * simple implementations (useful for backwards compatibility). As an
> +         * optimization, we will eventually want to schedule to JS2. */
>  #if 0
>         if (job->requirements & PANFROST_JD_REQ_ONLY_COMPUTE) {
>                 if ((job->requirements & PANFROST_JD_REQ_CORE_GRP_MASK) &&
> diff --git a/include/uapi/drm/panfrost_drm.h b/include/uapi/drm/panfrost_drm.h
> index b5d370638..25acde34b 100644
> --- a/include/uapi/drm/panfrost_drm.h
> +++ b/include/uapi/drm/panfrost_drm.h
> @@ -38,6 +38,14 @@ extern "C" {
>  #define DRM_IOCTL_PANFROST_PERFCNT_DUMP                DRM_IOW(DRM_COMMAND_BASE + DRM_PANFROST_PERFCNT_DUMP, struct drm_panfrost_perfcnt_dump)
>
>  #define PANFROST_JD_REQ_FS (1 << 0)
> +
> +/* Optional (mandatory for T600 r0p0 15dev0 due to errata #8987) hint to the
> + * kernel that the commands only contain JOB_TYPE_COMPUTE jobs, without
> + * vertex/tiler/fragment jobs. If present, the kernel may use this as an
> + * optimization, but it is not strictly necessary. */
> +
> +#define PANFROST_JD_REQ_ONLY_COMPUTE (1 << 1)
> +
>  /**
>   * struct drm_panfrost_submit - ioctl argument for submitting commands to the 3D
>   * engine.
> --
> 2.20.1
>


More information about the dri-devel mailing list