mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

MES is an important firmware that lacks some essential documentation. This commit introduces an overview of it and how it works. Reviewed-by: Bagas Sanjaya <bagasdotme@gmail.com> Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
38 lines
1.8 KiB
ReStructuredText
38 lines
1.8 KiB
ReStructuredText
.. _amdgpu-mes:
|
|
|
|
=============================
|
|
MicroEngine Scheduler (MES)
|
|
=============================
|
|
|
|
.. note::
|
|
Queue and ring buffer are used as a synonymous.
|
|
|
|
.. note::
|
|
This section assumes that you are familiar with the concept of Pipes, Queues, and GC.
|
|
If not, check :ref:`GFX, Compute, and SDMA Overall Behavior<pipes-and-queues-description>`
|
|
and :ref:`drm/amdgpu - Graphics and Compute (GC) <amdgpu-gc>`.
|
|
|
|
Every GFX has a pipe component with one or more hardware queues. Pipes can
|
|
switch between queues depending on certain conditions, and one of the
|
|
components that can request a queue switch to a pipe is the MicroEngine
|
|
Scheduler (MES). Whenever the driver is initialized, it creates one MQD per
|
|
hardware queue, and then the MQDs are handed to the MES firmware for mapping
|
|
to:
|
|
|
|
1. Kernel Queues (legacy): This queue is statically mapped to HQDs and never
|
|
preempted. Even though this is a legacy feature, it is the current default, and
|
|
most existing hardware supports it. When an application submits work to the
|
|
kernel driver, it submits all of the application command buffers to the kernel
|
|
queues. The CS IOCTL takes the command buffer from the applications and
|
|
schedules them on the kernel queue.
|
|
|
|
2. User Queues: These queues are dynamically mapped to the HQDs. Regarding the
|
|
utilization of User Queues, the userspace application will create its user
|
|
queues and submit work directly to its user queues with no need to IOCTL for
|
|
each submission and no need to share a single kernel queue.
|
|
|
|
In terms of User Queues, MES can dynamically map them to the HQD. If there are
|
|
more MQDs than HQDs, the MES firmware will preempt other user queues to make
|
|
sure each queues get a time slice; in other words, MES is a microcontroller
|
|
that handles the mapping and unmapping of MQDs into HQDs, as well as the
|
|
priorities and oversubscription of MQDs.
|