* [PATCH v3 0/5] Expand kernel-doc with more generic details and info about ring buffers
@ 2025-10-20 19:38 Rodrigo Siqueira
2025-10-20 19:38 ` [PATCH v3 1/5] drm/amdgpu: Expand kernel-doc in amdgpu_ring Rodrigo Siqueira
` (5 more replies)
0 siblings, 6 replies; 24+ messages in thread
From: Rodrigo Siqueira @ 2025-10-20 19:38 UTC (permalink / raw)
To: Alex Deucher, Christian König, Timur Kristóf
Cc: amd-gfx, kernel-dev, Rodrigo Siqueira
Lately, I have been part of multiple discussions around GPU recovery and
other concepts associated with GFX/Compute. Most of the debate is spread
around GitLab issues, emails, and some meeting conversations. This
patchset aims to consolidate all that information into a single
kernel-doc, which can be collaboratively improved and shared with other
people.
In this series, you will find new amdgpu glossary entries, more details
about the IPs' interconnections, and a description of the ring buffer.
This series includes multiple SVG diagrams; for this reason, it might be
good to apply this series locally. However, if you want to check all the
images quickly, check the links below:
- https://people.igalia.com/siqueira/kernel-doc-imgs/v3/amd_overview_block.svg
- https://people.igalia.com/siqueira/kernel-doc-imgs/v3/gfx_pipeline_seq.svg
- https://people.igalia.com/siqueira/kernel-doc-imgs/v3/no_enforce_isolation.svg
- https://people.igalia.com/siqueira/kernel-doc-imgs/v3/enforce_isolation.svg
- https://people.igalia.com/siqueira/kernel-doc-imgs/v3/ring_buffers.svg
Finally, keep in mind that I tried to fill in some gaps between
information, and hopefully, my description matches the reality.
Changes since V2:
- Remove the unnecessary diagram.
- Remove the excessive details about hardware behavior that are not
useful for a driver developer.
- Remove some wrong information.
- Rewrite many parts of the ring buffer description.
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Timur Kristóf <timur.kristof@gmail.com>
Thanks
Rodrigo Siqueira (5):
drm/amdgpu: Expand kernel-doc in amdgpu_ring
Documentation/gpu: Add new glossary entries from UMR
Documentation/gpu: Expand generic block information
Documentation/gpu: Add more information about GC
Documentation/gpu: Add documentation about ring buffer
.../gpu/amdgpu/amd_overview_block.svg | 674 +++++++
Documentation/gpu/amdgpu/amdgpu-glossary.rst | 24 +
Documentation/gpu/amdgpu/driver-core.rst | 25 +
.../gpu/amdgpu/enforce_isolation.svg | 654 +++++++
Documentation/gpu/amdgpu/gc/index.rst | 24 +-
Documentation/gpu/amdgpu/gfx_pipeline_seq.svg | 413 +++++
Documentation/gpu/amdgpu/index.rst | 1 +
.../gpu/amdgpu/no_enforce_isolation.svg | 707 +++++++
Documentation/gpu/amdgpu/ring-buffer.rst | 91 +
Documentation/gpu/amdgpu/ring_buffers.svg | 1633 +++++++++++++++++
Documentation/gpu/amdgpu/userq.rst | 2 +
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 15 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 2 +
13 files changed, 4251 insertions(+), 14 deletions(-)
create mode 100644 Documentation/gpu/amdgpu/amd_overview_block.svg
create mode 100644 Documentation/gpu/amdgpu/enforce_isolation.svg
create mode 100644 Documentation/gpu/amdgpu/gfx_pipeline_seq.svg
create mode 100644 Documentation/gpu/amdgpu/no_enforce_isolation.svg
create mode 100644 Documentation/gpu/amdgpu/ring-buffer.rst
create mode 100644 Documentation/gpu/amdgpu/ring_buffers.svg
--
2.51.0
^ permalink raw reply [flat|nested] 24+ messages in thread* [PATCH v3 1/5] drm/amdgpu: Expand kernel-doc in amdgpu_ring 2025-10-20 19:38 [PATCH v3 0/5] Expand kernel-doc with more generic details and info about ring buffers Rodrigo Siqueira @ 2025-10-20 19:38 ` Rodrigo Siqueira 2025-10-20 20:30 ` Alex Deucher ` (2 more replies) 2025-10-20 19:38 ` [PATCH v3 2/5] Documentation/gpu: Add new glossary entries from UMR Rodrigo Siqueira ` (4 subsequent siblings) 5 siblings, 3 replies; 24+ messages in thread From: Rodrigo Siqueira @ 2025-10-20 19:38 UTC (permalink / raw) To: Alex Deucher, Christian König, Timur Kristóf Cc: amd-gfx, kernel-dev, Rodrigo Siqueira Expand the kernel-doc about amdgpu_ring and add some tiny improvements. Cc: Alex Deucher <alexander.deucher@amd.com> Cc: Christian König <christian.koenig@amd.com> Cc: Timur Kristóf <timur.kristof@gmail.com> Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 15 ++++++++++++--- drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 2 ++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c index 5ec5c3ff22bb..29de8dbe2917 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c @@ -75,8 +75,16 @@ unsigned int amdgpu_ring_max_ibs(enum amdgpu_ring_type type) * @ring: amdgpu_ring structure holding ring information * @ndw: number of dwords to allocate in the ring buffer * - * Allocate @ndw dwords in the ring buffer (all asics). - * Returns 0 on success, error on failure. + * Allocate @ndw dwords in the ring buffer (it works in all ASICs). When + * inspecting the code, you may encounter places where this function is invoked + * like this: amdgpu_ring_alloc(ring, X + Y + Z), where X, Y, and Z are integer + * numbers. The idea of using each integer addition instead of the final result + * is to explicitly indicate each block of operation that will be inserted into + * the ring. + * + * Returns: + * 0 on success, otherwise -ENOMEM if it tries to allocate more than the + * maximum dword allowed for one submission. */ int amdgpu_ring_alloc(struct amdgpu_ring *ring, unsigned int ndw) { @@ -122,7 +130,8 @@ static void amdgpu_ring_alloc_reemit(struct amdgpu_ring *ring, unsigned int ndw) ring->funcs->begin_use(ring); } -/** amdgpu_ring_insert_nop - insert NOP packets +/** + * amdgpu_ring_insert_nop - insert NOP packets * * @ring: amdgpu_ring structure holding ring information * @count: the number of NOP packets to insert diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h index 87b962df5460..e83589619a92 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h @@ -62,6 +62,8 @@ enum amdgpu_ring_priority_level { #define AMDGPU_FENCE_FLAG_64BIT (1 << 0) #define AMDGPU_FENCE_FLAG_INT (1 << 1) #define AMDGPU_FENCE_FLAG_TC_WB_ONLY (1 << 2) + +/* Ensure the execution in case of preemption or reset */ #define AMDGPU_FENCE_FLAG_EXEC (1 << 3) #define to_amdgpu_ring(s) container_of((s), struct amdgpu_ring, sched) -- 2.51.0 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH v3 1/5] drm/amdgpu: Expand kernel-doc in amdgpu_ring 2025-10-20 19:38 ` [PATCH v3 1/5] drm/amdgpu: Expand kernel-doc in amdgpu_ring Rodrigo Siqueira @ 2025-10-20 20:30 ` Alex Deucher 2025-10-21 9:23 ` Timur Kristóf 2025-10-28 13:01 ` Christian König 2 siblings, 0 replies; 24+ messages in thread From: Alex Deucher @ 2025-10-20 20:30 UTC (permalink / raw) To: Rodrigo Siqueira Cc: Alex Deucher, Christian König, Timur Kristóf, amd-gfx, kernel-dev On Mon, Oct 20, 2025 at 4:06 PM Rodrigo Siqueira <siqueira@igalia.com> wrote: > > Expand the kernel-doc about amdgpu_ring and add some tiny improvements. > > Cc: Alex Deucher <alexander.deucher@amd.com> > Cc: Christian König <christian.koenig@amd.com> > Cc: Timur Kristóf <timur.kristof@gmail.com> > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 15 ++++++++++++--- > drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 2 ++ > 2 files changed, 14 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c > index 5ec5c3ff22bb..29de8dbe2917 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c > @@ -75,8 +75,16 @@ unsigned int amdgpu_ring_max_ibs(enum amdgpu_ring_type type) > * @ring: amdgpu_ring structure holding ring information > * @ndw: number of dwords to allocate in the ring buffer > * > - * Allocate @ndw dwords in the ring buffer (all asics). > - * Returns 0 on success, error on failure. > + * Allocate @ndw dwords in the ring buffer (it works in all ASICs). When > + * inspecting the code, you may encounter places where this function is invoked > + * like this: amdgpu_ring_alloc(ring, X + Y + Z), where X, Y, and Z are integer > + * numbers. The idea of using each integer addition instead of the final result > + * is to explicitly indicate each block of operation that will be inserted into > + * the ring. > + * > + * Returns: > + * 0 on success, otherwise -ENOMEM if it tries to allocate more than the > + * maximum dword allowed for one submission. > */ > int amdgpu_ring_alloc(struct amdgpu_ring *ring, unsigned int ndw) > { > @@ -122,7 +130,8 @@ static void amdgpu_ring_alloc_reemit(struct amdgpu_ring *ring, unsigned int ndw) > ring->funcs->begin_use(ring); > } > > -/** amdgpu_ring_insert_nop - insert NOP packets > +/** > + * amdgpu_ring_insert_nop - insert NOP packets > * > * @ring: amdgpu_ring structure holding ring information > * @count: the number of NOP packets to insert > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > index 87b962df5460..e83589619a92 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > @@ -62,6 +62,8 @@ enum amdgpu_ring_priority_level { > #define AMDGPU_FENCE_FLAG_64BIT (1 << 0) > #define AMDGPU_FENCE_FLAG_INT (1 << 1) > #define AMDGPU_FENCE_FLAG_TC_WB_ONLY (1 << 2) > + > +/* Ensure the execution in case of preemption or reset */ > #define AMDGPU_FENCE_FLAG_EXEC (1 << 3) > > #define to_amdgpu_ring(s) container_of((s), struct amdgpu_ring, sched) > -- > 2.51.0 > ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 1/5] drm/amdgpu: Expand kernel-doc in amdgpu_ring 2025-10-20 19:38 ` [PATCH v3 1/5] drm/amdgpu: Expand kernel-doc in amdgpu_ring Rodrigo Siqueira 2025-10-20 20:30 ` Alex Deucher @ 2025-10-21 9:23 ` Timur Kristóf 2025-10-21 13:11 ` Rodrigo Siqueira 2025-10-28 13:01 ` Christian König 2 siblings, 1 reply; 24+ messages in thread From: Timur Kristóf @ 2025-10-21 9:23 UTC (permalink / raw) To: Rodrigo Siqueira, Alex Deucher, Christian König; +Cc: amd-gfx, kernel-dev On 10/20/25 21:38, Rodrigo Siqueira wrote: > Expand the kernel-doc about amdgpu_ring and add some tiny improvements. > > Cc: Alex Deucher <alexander.deucher@amd.com> > Cc: Christian König <christian.koenig@amd.com> > Cc: Timur Kristóf <timur.kristof@gmail.com> > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 15 ++++++++++++--- > drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 2 ++ > 2 files changed, 14 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c > index 5ec5c3ff22bb..29de8dbe2917 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c > @@ -75,8 +75,16 @@ unsigned int amdgpu_ring_max_ibs(enum amdgpu_ring_type type) > * @ring: amdgpu_ring structure holding ring information > * @ndw: number of dwords to allocate in the ring buffer > * > - * Allocate @ndw dwords in the ring buffer (all asics). > - * Returns 0 on success, error on failure. > + * Allocate @ndw dwords in the ring buffer (it works in all ASICs). When > + * inspecting the code, you may encounter places where this function is invoked > + * like this: amdgpu_ring_alloc(ring, X + Y + Z), where X, Y, and Z are integer > + * numbers. The idea of using each integer addition instead of the final result > + * is to explicitly indicate each block of operation that will be inserted into > + * the ring. To clarify this further, I recommend using the term "packet" instead of "block of operation". > + * > + * Returns: > + * 0 on success, otherwise -ENOMEM if it tries to allocate more than the > + * maximum dword allowed for one submission. > */ > int amdgpu_ring_alloc(struct amdgpu_ring *ring, unsigned int ndw) > { > @@ -122,7 +130,8 @@ static void amdgpu_ring_alloc_reemit(struct amdgpu_ring *ring, unsigned int ndw) > ring->funcs->begin_use(ring); > } > > -/** amdgpu_ring_insert_nop - insert NOP packets > +/** > + * amdgpu_ring_insert_nop - insert NOP packets > * > * @ring: amdgpu_ring structure holding ring information > * @count: the number of NOP packets to insert > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > index 87b962df5460..e83589619a92 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > @@ -62,6 +62,8 @@ enum amdgpu_ring_priority_level { > #define AMDGPU_FENCE_FLAG_64BIT (1 << 0) > #define AMDGPU_FENCE_FLAG_INT (1 << 1) > #define AMDGPU_FENCE_FLAG_TC_WB_ONLY (1 << 2) > + > +/* Ensure the execution in case of preemption or reset */ > #define AMDGPU_FENCE_FLAG_EXEC (1 << 3) > > #define to_amdgpu_ring(s) container_of((s), struct amdgpu_ring, sched) ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 1/5] drm/amdgpu: Expand kernel-doc in amdgpu_ring 2025-10-21 9:23 ` Timur Kristóf @ 2025-10-21 13:11 ` Rodrigo Siqueira 0 siblings, 0 replies; 24+ messages in thread From: Rodrigo Siqueira @ 2025-10-21 13:11 UTC (permalink / raw) To: Timur Kristóf Cc: Alex Deucher, Christian König, amd-gfx, kernel-dev On 10/21, Timur Kristóf wrote: > > > On 10/20/25 21:38, Rodrigo Siqueira wrote: > > Expand the kernel-doc about amdgpu_ring and add some tiny improvements. > > > > Cc: Alex Deucher <alexander.deucher@amd.com> > > Cc: Christian König <christian.koenig@amd.com> > > Cc: Timur Kristóf <timur.kristof@gmail.com> > > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> > > --- > > drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 15 ++++++++++++--- > > drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 2 ++ > > 2 files changed, 14 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c > > index 5ec5c3ff22bb..29de8dbe2917 100644 > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c > > @@ -75,8 +75,16 @@ unsigned int amdgpu_ring_max_ibs(enum amdgpu_ring_type type) > > * @ring: amdgpu_ring structure holding ring information > > * @ndw: number of dwords to allocate in the ring buffer > > * > > - * Allocate @ndw dwords in the ring buffer (all asics). > > - * Returns 0 on success, error on failure. > > + * Allocate @ndw dwords in the ring buffer (it works in all ASICs). When > > + * inspecting the code, you may encounter places where this function is invoked > > + * like this: amdgpu_ring_alloc(ring, X + Y + Z), where X, Y, and Z are integer > > + * numbers. The idea of using each integer addition instead of the final result > > + * is to explicitly indicate each block of operation that will be inserted into > > + * the ring. > > To clarify this further, I recommend using the term "packet" instead of > "block of operation". I'll make this change for the V4 version. Thanks Alex and Tímur. > > > + * > > + * Returns: > > + * 0 on success, otherwise -ENOMEM if it tries to allocate more than the > > + * maximum dword allowed for one submission. > > */ > > int amdgpu_ring_alloc(struct amdgpu_ring *ring, unsigned int ndw) > > { > > @@ -122,7 +130,8 @@ static void amdgpu_ring_alloc_reemit(struct amdgpu_ring *ring, unsigned int ndw) > > ring->funcs->begin_use(ring); > > } > > -/** amdgpu_ring_insert_nop - insert NOP packets > > +/** > > + * amdgpu_ring_insert_nop - insert NOP packets > > * > > * @ring: amdgpu_ring structure holding ring information > > * @count: the number of NOP packets to insert > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > > index 87b962df5460..e83589619a92 100644 > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > > @@ -62,6 +62,8 @@ enum amdgpu_ring_priority_level { > > #define AMDGPU_FENCE_FLAG_64BIT (1 << 0) > > #define AMDGPU_FENCE_FLAG_INT (1 << 1) > > #define AMDGPU_FENCE_FLAG_TC_WB_ONLY (1 << 2) > > + > > +/* Ensure the execution in case of preemption or reset */ > > #define AMDGPU_FENCE_FLAG_EXEC (1 << 3) > > #define to_amdgpu_ring(s) container_of((s), struct amdgpu_ring, sched) > -- Rodrigo Siqueira ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 1/5] drm/amdgpu: Expand kernel-doc in amdgpu_ring 2025-10-20 19:38 ` [PATCH v3 1/5] drm/amdgpu: Expand kernel-doc in amdgpu_ring Rodrigo Siqueira 2025-10-20 20:30 ` Alex Deucher 2025-10-21 9:23 ` Timur Kristóf @ 2025-10-28 13:01 ` Christian König 2 siblings, 0 replies; 24+ messages in thread From: Christian König @ 2025-10-28 13:01 UTC (permalink / raw) To: Rodrigo Siqueira, Alex Deucher, Timur Kristóf; +Cc: amd-gfx, kernel-dev On 10/20/25 21:38, Rodrigo Siqueira wrote: > Expand the kernel-doc about amdgpu_ring and add some tiny improvements. > > Cc: Alex Deucher <alexander.deucher@amd.com> > Cc: Christian König <christian.koenig@amd.com> > Cc: Timur Kristóf <timur.kristof@gmail.com> > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 15 ++++++++++++--- > drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 2 ++ > 2 files changed, 14 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c > index 5ec5c3ff22bb..29de8dbe2917 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c > @@ -75,8 +75,16 @@ unsigned int amdgpu_ring_max_ibs(enum amdgpu_ring_type type) > * @ring: amdgpu_ring structure holding ring information > * @ndw: number of dwords to allocate in the ring buffer > * > - * Allocate @ndw dwords in the ring buffer (all asics). > - * Returns 0 on success, error on failure. > + * Allocate @ndw dwords in the ring buffer (it works in all ASICs). When I would ditch the "it works on all ASICs". That's something we did for radeon because we didn't had the seperation between backend (ASIC dependent) and frontend (ASIC independent code). You could maybe write "applicable" or "used on all ASICs". > + * inspecting the code, you may encounter places where this function is invoked > + * like this: amdgpu_ring_alloc(ring, X + Y + Z), where X, Y, and Z are integer > + * numbers. The idea of using each integer addition instead of the final result > + * is to explicitly indicate each block of operation that will be inserted into > + * the ring. That still sounds like overkill to me. Maybe instead write something like "The number of dwords should be the sum of all commands written to the ring". Regards, Christian. > + * > + * Returns: > + * 0 on success, otherwise -ENOMEM if it tries to allocate more than the > + * maximum dword allowed for one submission. > */ > int amdgpu_ring_alloc(struct amdgpu_ring *ring, unsigned int ndw) > { > @@ -122,7 +130,8 @@ static void amdgpu_ring_alloc_reemit(struct amdgpu_ring *ring, unsigned int ndw) > ring->funcs->begin_use(ring); > } > > -/** amdgpu_ring_insert_nop - insert NOP packets > +/** > + * amdgpu_ring_insert_nop - insert NOP packets > * > * @ring: amdgpu_ring structure holding ring information > * @count: the number of NOP packets to insert > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > index 87b962df5460..e83589619a92 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h > @@ -62,6 +62,8 @@ enum amdgpu_ring_priority_level { > #define AMDGPU_FENCE_FLAG_64BIT (1 << 0) > #define AMDGPU_FENCE_FLAG_INT (1 << 1) > #define AMDGPU_FENCE_FLAG_TC_WB_ONLY (1 << 2) > + > +/* Ensure the execution in case of preemption or reset */ > #define AMDGPU_FENCE_FLAG_EXEC (1 << 3) > > #define to_amdgpu_ring(s) container_of((s), struct amdgpu_ring, sched) ^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH v3 2/5] Documentation/gpu: Add new glossary entries from UMR 2025-10-20 19:38 [PATCH v3 0/5] Expand kernel-doc with more generic details and info about ring buffers Rodrigo Siqueira 2025-10-20 19:38 ` [PATCH v3 1/5] drm/amdgpu: Expand kernel-doc in amdgpu_ring Rodrigo Siqueira @ 2025-10-20 19:38 ` Rodrigo Siqueira 2025-10-20 20:17 ` Alex Deucher ` (2 more replies) 2025-10-20 19:38 ` [PATCH v3 3/5] Documentation/gpu: Expand generic block information Rodrigo Siqueira ` (3 subsequent siblings) 5 siblings, 3 replies; 24+ messages in thread From: Rodrigo Siqueira @ 2025-10-20 19:38 UTC (permalink / raw) To: Alex Deucher, Christian König, Timur Kristóf Cc: amd-gfx, kernel-dev, Rodrigo Siqueira When using UMR, a dashboard is available that displays the CPC, CPF, CPG, TCP, and UTCL utilization. This commit introduces the meanings of those acronyms (and others) to the glossary to improve the comprehension of the UMR dashboard. Cc: Alex Deucher <alexander.deucher@amd.com> Cc: Christian König <christian.koenig@amd.com> Cc: Timur Kristóf <timur.kristof@gmail.com> Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> --- Documentation/gpu/amdgpu/amdgpu-glossary.rst | 21 ++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Documentation/gpu/amdgpu/amdgpu-glossary.rst b/Documentation/gpu/amdgpu/amdgpu-glossary.rst index 30812d9d53c6..eb72e6f6d4f1 100644 --- a/Documentation/gpu/amdgpu/amdgpu-glossary.rst +++ b/Documentation/gpu/amdgpu/amdgpu-glossary.rst @@ -30,6 +30,15 @@ we have a dedicated glossary for Display Core at CP Command Processor + CPC + Command Processor Compute + + CPF + Command Processor Fetch + + CPG + Command Processor Graphics + CPLIB Content Protection Library @@ -78,6 +87,9 @@ we have a dedicated glossary for Display Core at GMC Graphic Memory Controller + GPR + General Purpose Register + GPUVM GPU Virtual Memory. This is the GPU's MMU. The GPU supports multiple virtual address spaces that can be in flight at any given time. These @@ -92,6 +104,9 @@ we have a dedicated glossary for Display Core at table for use by the kernel driver or into per process GPUVM page tables for application usage. + GWS + Global Wave Syncs + IH Interrupt Handler @@ -206,12 +221,18 @@ we have a dedicated glossary for Display Core at TC Texture Cache + TCP (AMDGPU) + Texture Cache Processing + TOC Table of Contents UMSCH User Mode Scheduler + UTCL + Universal Texture Cache Line + UVD Unified Video Decoder -- 2.51.0 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH v3 2/5] Documentation/gpu: Add new glossary entries from UMR 2025-10-20 19:38 ` [PATCH v3 2/5] Documentation/gpu: Add new glossary entries from UMR Rodrigo Siqueira @ 2025-10-20 20:17 ` Alex Deucher 2025-10-21 5:16 ` Lazar, Lijo 2025-10-28 13:10 ` Christian König 2 siblings, 0 replies; 24+ messages in thread From: Alex Deucher @ 2025-10-20 20:17 UTC (permalink / raw) To: Rodrigo Siqueira Cc: Alex Deucher, Christian König, Timur Kristóf, amd-gfx, kernel-dev On Mon, Oct 20, 2025 at 3:47 PM Rodrigo Siqueira <siqueira@igalia.com> wrote: > > When using UMR, a dashboard is available that displays the CPC, CPF, > CPG, TCP, and UTCL utilization. This commit introduces the meanings of > those acronyms (and others) to the glossary to improve the comprehension > of the UMR dashboard. > > Cc: Alex Deucher <alexander.deucher@amd.com> > Cc: Christian König <christian.koenig@amd.com> > Cc: Timur Kristóf <timur.kristof@gmail.com> > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> > --- > Documentation/gpu/amdgpu/amdgpu-glossary.rst | 21 ++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/Documentation/gpu/amdgpu/amdgpu-glossary.rst b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > index 30812d9d53c6..eb72e6f6d4f1 100644 > --- a/Documentation/gpu/amdgpu/amdgpu-glossary.rst > +++ b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > @@ -30,6 +30,15 @@ we have a dedicated glossary for Display Core at > CP > Command Processor > > + CPC > + Command Processor Compute > + > + CPF > + Command Processor Fetch > + > + CPG > + Command Processor Graphics > + > CPLIB > Content Protection Library > > @@ -78,6 +87,9 @@ we have a dedicated glossary for Display Core at > GMC > Graphic Memory Controller > > + GPR > + General Purpose Register > + > GPUVM > GPU Virtual Memory. This is the GPU's MMU. The GPU supports multiple > virtual address spaces that can be in flight at any given time. These > @@ -92,6 +104,9 @@ we have a dedicated glossary for Display Core at > table for use by the kernel driver or into per process GPUVM page tables > for application usage. > > + GWS > + Global Wave Syncs > + > IH > Interrupt Handler > > @@ -206,12 +221,18 @@ we have a dedicated glossary for Display Core at > TC > Texture Cache > > + TCP (AMDGPU) > + Texture Cache Processing I don't recall what the P stands for, but it might be worth calling out that the texture cache (old name) is basically the path to memory for shaders. So it's not just related to textures. The name is left over from old designs where shader stages had different cache designs. > + > TOC > Table of Contents > > UMSCH > User Mode Scheduler > > + UTCL > + Universal Texture Cache Line I think the L is Level. I.e., it's usually referenced as UTCL2 for example. Might want to drop the L? I think the U might also be Unified. Alex > + > UVD > Unified Video Decoder > > -- > 2.51.0 > ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 2/5] Documentation/gpu: Add new glossary entries from UMR 2025-10-20 19:38 ` [PATCH v3 2/5] Documentation/gpu: Add new glossary entries from UMR Rodrigo Siqueira 2025-10-20 20:17 ` Alex Deucher @ 2025-10-21 5:16 ` Lazar, Lijo 2025-10-21 13:25 ` Rodrigo Siqueira 2025-10-28 13:10 ` Christian König 2 siblings, 1 reply; 24+ messages in thread From: Lazar, Lijo @ 2025-10-21 5:16 UTC (permalink / raw) To: Rodrigo Siqueira, Alex Deucher, Christian König, Timur Kristóf Cc: amd-gfx, kernel-dev On 10/21/2025 1:08 AM, Rodrigo Siqueira wrote: > When using UMR, a dashboard is available that displays the CPC, CPF, > CPG, TCP, and UTCL utilization. This commit introduces the meanings of > those acronyms (and others) to the glossary to improve the comprehension > of the UMR dashboard. > > Cc: Alex Deucher <alexander.deucher@amd.com> > Cc: Christian König <christian.koenig@amd.com> > Cc: Timur Kristóf <timur.kristof@gmail.com> > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> > --- > Documentation/gpu/amdgpu/amdgpu-glossary.rst | 21 ++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/Documentation/gpu/amdgpu/amdgpu-glossary.rst b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > index 30812d9d53c6..eb72e6f6d4f1 100644 > --- a/Documentation/gpu/amdgpu/amdgpu-glossary.rst > +++ b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > @@ -30,6 +30,15 @@ we have a dedicated glossary for Display Core at > CP > Command Processor > > + CPC > + Command Processor Compute > + > + CPF > + Command Processor Fetch > + > + CPG > + Command Processor Graphics > + > CPLIB > Content Protection Library > > @@ -78,6 +87,9 @@ we have a dedicated glossary for Display Core at > GMC > Graphic Memory Controller > > + GPR > + General Purpose Register > + > GPUVM > GPU Virtual Memory. This is the GPU's MMU. The GPU supports multiple > virtual address spaces that can be in flight at any given time. These > @@ -92,6 +104,9 @@ we have a dedicated glossary for Display Core at > table for use by the kernel driver or into per process GPUVM page tables > for application usage. > > + GWS > + Global Wave Syncs Sync (s is not there). > + > IH > Interrupt Handler > > @@ -206,12 +221,18 @@ we have a dedicated glossary for Display Core at > TC > Texture Cache > > + TCP (AMDGPU) > + Texture Cache Processing Texture Cache per Pipe - terminology used for L1 cache in old architecture. > + > TOC > Table of Contents > > UMSCH > User Mode Scheduler > > + UTCL > + Universal Texture Cache Line Unified Translation Cache - equivalent of TLB. Has multiple levels, hence L may be dropped. Thanks, Lijo > + > UVD > Unified Video Decoder > ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 2/5] Documentation/gpu: Add new glossary entries from UMR 2025-10-21 5:16 ` Lazar, Lijo @ 2025-10-21 13:25 ` Rodrigo Siqueira 2025-10-21 14:46 ` Alex Deucher 0 siblings, 1 reply; 24+ messages in thread From: Rodrigo Siqueira @ 2025-10-21 13:25 UTC (permalink / raw) To: Lazar, Lijo Cc: Alex Deucher, Christian König, Timur Kristóf, amd-gfx, kernel-dev On 10/21, Lazar, Lijo wrote: > > > On 10/21/2025 1:08 AM, Rodrigo Siqueira wrote: > > When using UMR, a dashboard is available that displays the CPC, CPF, > > CPG, TCP, and UTCL utilization. This commit introduces the meanings of > > those acronyms (and others) to the glossary to improve the comprehension > > of the UMR dashboard. > > > > Cc: Alex Deucher <alexander.deucher@amd.com> > > Cc: Christian König <christian.koenig@amd.com> > > Cc: Timur Kristóf <timur.kristof@gmail.com> > > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> > > --- > > Documentation/gpu/amdgpu/amdgpu-glossary.rst | 21 ++++++++++++++++++++ > > 1 file changed, 21 insertions(+) > > > > diff --git a/Documentation/gpu/amdgpu/amdgpu-glossary.rst b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > > index 30812d9d53c6..eb72e6f6d4f1 100644 > > --- a/Documentation/gpu/amdgpu/amdgpu-glossary.rst > > +++ b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > > @@ -30,6 +30,15 @@ we have a dedicated glossary for Display Core at > > CP > > Command Processor > > + CPC > > + Command Processor Compute > > + > > + CPF > > + Command Processor Fetch > > + > > + CPG > > + Command Processor Graphics > > + > > CPLIB > > Content Protection Library > > @@ -78,6 +87,9 @@ we have a dedicated glossary for Display Core at > > GMC > > Graphic Memory Controller > > + GPR > > + General Purpose Register > > + > > GPUVM > > GPU Virtual Memory. This is the GPU's MMU. The GPU supports multiple > > virtual address spaces that can be in flight at any given time. These > > @@ -92,6 +104,9 @@ we have a dedicated glossary for Display Core at > > table for use by the kernel driver or into per process GPUVM page tables > > for application usage. > > + GWS > > + Global Wave Syncs > > Sync (s is not there). I'll fix it in the V4. > > + > > IH > > Interrupt Handler > > @@ -206,12 +221,18 @@ we have a dedicated glossary for Display Core at > > TC > > Texture Cache > > + TCP (AMDGPU) > > + Texture Cache Processing > > Texture Cache per Pipe - terminology used for L1 cache in old architecture. Alex, Lijo, How about the following modification for the V4: TCP (AMDGPU) Texture Cache per Pipe. Even though the name "Texture" is part of this acronym, the TCP represents the path to memory shaders; i.e., it is not related to texture. The name is a leftover from older designs where shader stages had different cache designs; it refers to the L1 cache in older architectures. > > > + > > TOC > > Table of Contents > > UMSCH > > User Mode Scheduler > > + UTCL > > + Universal Texture Cache Line > > Unified Translation Cache - equivalent of TLB. Has multiple levels, hence L > may be dropped. How about the following modification for the V4: UTC (AMDGPU) Unified Translation Cache. UTC is equivalent to TLB. You might see a variation of this acronym with L at the end, i.e., UTCL followed by a number; L means the cache level (e.g., UTCL1 and UTCL2). The reason that I kept the L explanation is that UTCL appears in some parts of the code and also in the UMR gui. Keeping this acronym here can facilitate code searches and also provide some extra background on the L part. Is it ok for you? Thanks Alex/Lijo. > > Thanks, > Lijo > > > + > > UVD > > Unified Video Decoder > -- Rodrigo Siqueira ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 2/5] Documentation/gpu: Add new glossary entries from UMR 2025-10-21 13:25 ` Rodrigo Siqueira @ 2025-10-21 14:46 ` Alex Deucher 0 siblings, 0 replies; 24+ messages in thread From: Alex Deucher @ 2025-10-21 14:46 UTC (permalink / raw) To: Rodrigo Siqueira Cc: Lazar, Lijo, Alex Deucher, Christian König, Timur Kristóf, amd-gfx, kernel-dev On Tue, Oct 21, 2025 at 9:25 AM Rodrigo Siqueira <siqueira@igalia.com> wrote: > > On 10/21, Lazar, Lijo wrote: > > > > > > On 10/21/2025 1:08 AM, Rodrigo Siqueira wrote: > > > When using UMR, a dashboard is available that displays the CPC, CPF, > > > CPG, TCP, and UTCL utilization. This commit introduces the meanings of > > > those acronyms (and others) to the glossary to improve the comprehension > > > of the UMR dashboard. > > > > > > Cc: Alex Deucher <alexander.deucher@amd.com> > > > Cc: Christian König <christian.koenig@amd.com> > > > Cc: Timur Kristóf <timur.kristof@gmail.com> > > > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> > > > --- > > > Documentation/gpu/amdgpu/amdgpu-glossary.rst | 21 ++++++++++++++++++++ > > > 1 file changed, 21 insertions(+) > > > > > > diff --git a/Documentation/gpu/amdgpu/amdgpu-glossary.rst b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > > > index 30812d9d53c6..eb72e6f6d4f1 100644 > > > --- a/Documentation/gpu/amdgpu/amdgpu-glossary.rst > > > +++ b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > > > @@ -30,6 +30,15 @@ we have a dedicated glossary for Display Core at > > > CP > > > Command Processor > > > + CPC > > > + Command Processor Compute > > > + > > > + CPF > > > + Command Processor Fetch > > > + > > > + CPG > > > + Command Processor Graphics > > > + > > > CPLIB > > > Content Protection Library > > > @@ -78,6 +87,9 @@ we have a dedicated glossary for Display Core at > > > GMC > > > Graphic Memory Controller > > > + GPR > > > + General Purpose Register > > > + > > > GPUVM > > > GPU Virtual Memory. This is the GPU's MMU. The GPU supports multiple > > > virtual address spaces that can be in flight at any given time. These > > > @@ -92,6 +104,9 @@ we have a dedicated glossary for Display Core at > > > table for use by the kernel driver or into per process GPUVM page tables > > > for application usage. > > > + GWS > > > + Global Wave Syncs > > > > Sync (s is not there). > > I'll fix it in the V4. > > > > + > > > IH > > > Interrupt Handler > > > @@ -206,12 +221,18 @@ we have a dedicated glossary for Display Core at > > > TC > > > Texture Cache > > > + TCP (AMDGPU) > > > + Texture Cache Processing > > > > Texture Cache per Pipe - terminology used for L1 cache in old architecture. > > Alex, Lijo, > > How about the following modification for the V4: > > TCP (AMDGPU) > Texture Cache per Pipe. Even though the name "Texture" is part of this > acronym, the TCP represents the path to memory shaders; i.e., it is not > related to texture. The name is a leftover from older designs where > shader stages had different cache designs; it refers to the L1 cache in > older architectures. > > > > > > + > > > TOC > > > Table of Contents > > > UMSCH > > > User Mode Scheduler > > > + UTCL > > > + Universal Texture Cache Line > > > > Unified Translation Cache - equivalent of TLB. Has multiple levels, hence L > > may be dropped. > > How about the following modification for the V4: > > UTC (AMDGPU) > Unified Translation Cache. UTC is equivalent to TLB. You might see a > variation of this acronym with L at the end, i.e., UTCL followed by a > number; L means the cache level (e.g., UTCL1 and UTCL2). > > The reason that I kept the L explanation is that UTCL appears in some > parts of the code and also in the UMR gui. Keeping this acronym here can > facilitate code searches and also provide some extra background on the L > part. Is it ok for you? Looks good to me. Thanks! Alex > > Thanks Alex/Lijo. > > > > > Thanks, > > Lijo > > > > > + > > > UVD > > > Unified Video Decoder > > > > -- > Rodrigo Siqueira ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 2/5] Documentation/gpu: Add new glossary entries from UMR 2025-10-20 19:38 ` [PATCH v3 2/5] Documentation/gpu: Add new glossary entries from UMR Rodrigo Siqueira 2025-10-20 20:17 ` Alex Deucher 2025-10-21 5:16 ` Lazar, Lijo @ 2025-10-28 13:10 ` Christian König 2025-10-28 14:36 ` Rodrigo Siqueira 2 siblings, 1 reply; 24+ messages in thread From: Christian König @ 2025-10-28 13:10 UTC (permalink / raw) To: Rodrigo Siqueira, Alex Deucher, Timur Kristóf; +Cc: amd-gfx, kernel-dev On 10/20/25 21:38, Rodrigo Siqueira wrote: > When using UMR, a dashboard is available that displays the CPC, CPF, > CPG, TCP, and UTCL utilization. This commit introduces the meanings of > those acronyms (and others) to the glossary to improve the comprehension > of the UMR dashboard. > > Cc: Alex Deucher <alexander.deucher@amd.com> > Cc: Christian König <christian.koenig@amd.com> > Cc: Timur Kristóf <timur.kristof@gmail.com> > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> > --- > Documentation/gpu/amdgpu/amdgpu-glossary.rst | 21 ++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/Documentation/gpu/amdgpu/amdgpu-glossary.rst b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > index 30812d9d53c6..eb72e6f6d4f1 100644 > --- a/Documentation/gpu/amdgpu/amdgpu-glossary.rst > +++ b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > @@ -30,6 +30,15 @@ we have a dedicated glossary for Display Core at > CP > Command Processor > > + CPC > + Command Processor Compute > + > + CPF > + Command Processor Fetch > + > + CPG > + Command Processor Graphics > + > CPLIB > Content Protection Library > > @@ -78,6 +87,9 @@ we have a dedicated glossary for Display Core at > GMC > Graphic Memory Controller > > + GPR > + General Purpose Register > + > GPUVM > GPU Virtual Memory. This is the GPU's MMU. The GPU supports multiple > virtual address spaces that can be in flight at any given time. These > @@ -92,6 +104,9 @@ we have a dedicated glossary for Display Core at > table for use by the kernel driver or into per process GPUVM page tables > for application usage. > > + GWS > + Global Wave Syncs > + > IH > Interrupt Handler > BTW we are missing an entry for "IV Interrupt Vector (the bytes written by the GPU into IH ring buffer)". > @@ -206,12 +221,18 @@ we have a dedicated glossary for Display Core at > TC > Texture Cache > > + TCP (AMDGPU) > + Texture Cache Processing > + > TOC > Table of Contents > > UMSCH > User Mode Scheduler > > + UTCL > + Universal Texture Cache Line > + Mhm, UTCL0 UTCL1 and UTCL2 are usually Universal Translation Cache Layer 0-2. That is not even remotely related to texturing (well UTC requests also go through the TC on some HW generations, but that's basically it). Regards, Christian. > UVD > Unified Video Decoder > ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 2/5] Documentation/gpu: Add new glossary entries from UMR 2025-10-28 13:10 ` Christian König @ 2025-10-28 14:36 ` Rodrigo Siqueira 0 siblings, 0 replies; 24+ messages in thread From: Rodrigo Siqueira @ 2025-10-28 14:36 UTC (permalink / raw) To: Christian König Cc: Alex Deucher, Timur Kristóf, amd-gfx, kernel-dev On 10/28, Christian König wrote: > On 10/20/25 21:38, Rodrigo Siqueira wrote: > > When using UMR, a dashboard is available that displays the CPC, CPF, > > CPG, TCP, and UTCL utilization. This commit introduces the meanings of > > those acronyms (and others) to the glossary to improve the comprehension > > of the UMR dashboard. > > > > Cc: Alex Deucher <alexander.deucher@amd.com> > > Cc: Christian König <christian.koenig@amd.com> > > Cc: Timur Kristóf <timur.kristof@gmail.com> > > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> > > --- > > Documentation/gpu/amdgpu/amdgpu-glossary.rst | 21 ++++++++++++++++++++ > > 1 file changed, 21 insertions(+) > > > > diff --git a/Documentation/gpu/amdgpu/amdgpu-glossary.rst b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > > index 30812d9d53c6..eb72e6f6d4f1 100644 > > --- a/Documentation/gpu/amdgpu/amdgpu-glossary.rst > > +++ b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > > @@ -30,6 +30,15 @@ we have a dedicated glossary for Display Core at > > CP > > Command Processor > > > > + CPC > > + Command Processor Compute > > + > > + CPF > > + Command Processor Fetch > > + > > + CPG > > + Command Processor Graphics > > + > > CPLIB > > Content Protection Library > > > > @@ -78,6 +87,9 @@ we have a dedicated glossary for Display Core at > > GMC > > Graphic Memory Controller > > > > + GPR > > + General Purpose Register > > + > > GPUVM > > GPU Virtual Memory. This is the GPU's MMU. The GPU supports multiple > > virtual address spaces that can be in flight at any given time. These > > @@ -92,6 +104,9 @@ we have a dedicated glossary for Display Core at > > table for use by the kernel driver or into per process GPUVM page tables > > for application usage. > > > > + GWS > > + Global Wave Syncs > > + > > IH > > Interrupt Handler > > > > BTW we are missing an entry for "IV Interrupt Vector (the bytes written by the GPU into IH ring buffer)". > > > @@ -206,12 +221,18 @@ we have a dedicated glossary for Display Core at > > TC > > Texture Cache > > > > + TCP (AMDGPU) > > + Texture Cache Processing > > + > > TOC > > Table of Contents > > > > UMSCH > > User Mode Scheduler > > > > + UTCL > > + Universal Texture Cache Line > > + > > Mhm, UTCL0 UTCL1 and UTCL2 are usually Universal Translation Cache Layer 0-2. > > That is not even remotely related to texturing (well UTC requests also go through the TC on some HW generations, but that's basically it). Hi Christian, I addressed this issue in the V4 version of this series: https://patchwork.freedesktop.org/patch/683171/?series=153014&rev=4 Thanks > > Regards, > Christian. > > > UVD > > Unified Video Decoder > > > -- Rodrigo Siqueira ^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH v3 3/5] Documentation/gpu: Expand generic block information 2025-10-20 19:38 [PATCH v3 0/5] Expand kernel-doc with more generic details and info about ring buffers Rodrigo Siqueira 2025-10-20 19:38 ` [PATCH v3 1/5] drm/amdgpu: Expand kernel-doc in amdgpu_ring Rodrigo Siqueira 2025-10-20 19:38 ` [PATCH v3 2/5] Documentation/gpu: Add new glossary entries from UMR Rodrigo Siqueira @ 2025-10-20 19:38 ` Rodrigo Siqueira 2025-10-20 20:28 ` Alex Deucher 2025-10-21 5:24 ` Lazar, Lijo 2025-10-20 19:38 ` [PATCH v3 4/5] Documentation/gpu: Add more information about GC Rodrigo Siqueira ` (2 subsequent siblings) 5 siblings, 2 replies; 24+ messages in thread From: Rodrigo Siqueira @ 2025-10-20 19:38 UTC (permalink / raw) To: Alex Deucher, Christian König, Timur Kristóf Cc: amd-gfx, kernel-dev, Rodrigo Siqueira This commit expands the overall explanation about AMD GPU IPs by adding more details about their interconnection. Note that this commit includes a diagram that provides additional information. Cc: Alex Deucher <alexander.deucher@amd.com> Cc: Christian König <christian.koenig@amd.com> Cc: Timur Kristóf <timur.kristof@gmail.com> Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> --- .../gpu/amdgpu/amd_overview_block.svg | 674 ++++++++++++++++++ Documentation/gpu/amdgpu/amdgpu-glossary.rst | 3 + Documentation/gpu/amdgpu/driver-core.rst | 25 + 3 files changed, 702 insertions(+) create mode 100644 Documentation/gpu/amdgpu/amd_overview_block.svg diff --git a/Documentation/gpu/amdgpu/amd_overview_block.svg b/Documentation/gpu/amdgpu/amd_overview_block.svg new file mode 100644 index 000000000000..8d9ae95bd9a5 --- /dev/null +++ b/Documentation/gpu/amdgpu/amd_overview_block.svg @@ -0,0 +1,674 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="237.4014mm" + height="160.98259mm" + viewBox="0 0 237.4014 160.98259" + version="1.1" + id="svg1" + inkscape:version="1.4 (e7c3feb100, 2024-10-09)" + sodipodi:docname="amd_overview_block.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview1" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + inkscape:zoom="2" + inkscape:cx="436.25" + inkscape:cy="313.75" + inkscape:window-width="3072" + inkscape:window-height="1651" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="layer1" /> + <defs + id="defs1"> + <marker + style="overflow:visible" + id="ArrowWideHeavy" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Wide, heavy arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + style="fill:context-stroke;fill-rule:evenodd;stroke:none" + d="m 1,0 -3,3 h -2 l 3,-3 -3,-3 h 2 z" + id="path3" /> + </marker> + <marker + style="overflow:visible" + id="ArrowWideRounded" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Wide, rounded arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:round" + d="M 3,-3 0,0 3,3" + transform="rotate(180,0.125,0)" + sodipodi:nodetypes="ccc" + id="path2" /> + </marker> + </defs> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(9.9255824,-64.69615)"> + <rect + style="fill:#ffffff;stroke:none;stroke-width:0.999747" + id="rect5" + width="239.13895" + height="162.38739" + x="-10.311751" + y="63.871342" /> + <rect + style="fill:#ffffff;stroke:#000000;stroke-width:0.79375" + id="rect1" + width="174.55814" + height="140.23256" + x="22.263056" + y="65.093025" /> + <rect + style="fill:#ffffff;stroke:#008033;stroke-width:1;stroke-dasharray:none" + id="rect2" + width="5.0232558" + height="104.23256" + x="28.674419" + y="72.418602" /> + <rect + style="fill:#ffffff;stroke:#008033;stroke-width:1;stroke-dasharray:none" + id="rect3" + width="5.0232558" + height="104.23256" + x="185.44186" + y="72.418602" /> + <rect + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" + id="rect8-5" + width="3.8659263" + height="4.2845292" + x="48.522045" + y="75.819946" /> + <rect + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" + id="rect9" + width="3.8659263" + height="4.2845292" + x="168.14684" + y="75.68573" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.9389px;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O';text-align:start;letter-spacing:4.91331px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#00d400;stroke:#00d400;stroke-width:1;stroke-dasharray:none" + x="45.418606" + y="216.62791" + id="text12"><tspan + sodipodi:role="line" + id="tspan12" + style="stroke-width:1" + x="45.418606" + y="216.62791" /></text> + <g + id="g34"> + <rect + style="fill:#ffffff;stroke:#008033;stroke-width:1;stroke-dasharray:none" + id="rect7" + width="19.539951" + height="6.9818101" + x="22.811832" + y="210.3201" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008033;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="52.663685" + y="216.07796" + id="text68"><tspan + sodipodi:role="line" + x="52.663685" + y="216.07796" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#008033;stroke-width:0.0690111" + id="tspan68">UMC</tspan></text> + </g> + <g + id="g29" + transform="translate(-0.52916667)"> + <rect + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" + id="rect8" + width="3.8659263" + height="4.2845292" + x="22.782616" + y="220.36148" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="48.966854" + y="224.15474" + id="text13"><tspan + sodipodi:role="line" + x="48.966854" + y="224.15474" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#00ff00;stroke-width:0.0690111" + id="tspan13">Memory hub</tspan></text> + </g> + <rect + style="fill:#ffffff;stroke:#0000ff;stroke-width:1;stroke-dasharray:none" + id="rect13" + width="28.674419" + height="11.302325" + x="43.988369" + y="192.98618" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="58.325581" + y="200.90428" + id="text14"><tspan + sodipodi:role="line" + x="58.325581" + y="200.90428" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan14">DCN</tspan></text> + <g + id="g12" + transform="translate(-1.8520837,2.3812496)"> + <g + id="g13"> + <rect + style="fill:#ffffff;stroke:#ffd42a;stroke-width:1;stroke-dasharray:none" + id="rect15" + width="28.674419" + height="11.302325" + x="114.87544" + y="169.54433" + ry="2.6458333" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="129.06978" + y="177.46243" + id="text15"><tspan + sodipodi:role="line" + x="129.06978" + y="177.46243" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan15">PSP</tspan></text> + </g> + </g> + <path + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" + d="m 73.88372,201.92338 h 43.74419 V 184.5631" + id="path16" + sodipodi:nodetypes="ccc" /> + <rect + style="fill:#ffffff;stroke:#00ccff;stroke-width:1;stroke-dasharray:none" + id="rect16" + width="40.220226" + height="11.1272" + x="150.82011" + y="193.07373" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="170.78101" + y="200.90428" + id="text16"><tspan + sodipodi:role="line" + x="170.78101" + y="200.90428" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan16">PCIe (NBIO)</tspan></text> + <g + id="g11" + transform="translate(-5.0270833,-8.8635417)"> + <rect + style="fill:#ffffff;stroke:#5f5fd3;stroke-width:1;stroke-dasharray:none" + id="rect19" + width="28.674419" + height="11.302325" + x="146.1279" + y="132.70711" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="160.75085" + y="140.62521" + id="text19"><tspan + sodipodi:role="line" + x="160.75085" + y="140.62521" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan19">VCN</tspan></text> + </g> + <g + id="g5" + transform="translate(0,5.8208336)"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="110.18288" + y="73.872185" + id="text14-7"><tspan + sodipodi:role="line" + x="110.18288" + y="73.872185" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan14-7">Graphics & Compute (GC)</tspan></text> + <g + id="g4" + transform="translate(10.583333)"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="58.022533" + y="83.518799" + id="text14-7-5"><tspan + sodipodi:role="line" + x="58.022533" + y="83.518799" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan14-7-6">Shader</tspan><tspan + sodipodi:role="line" + x="58.022533" + y="90.574348" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan20">Engine(SE)</tspan><tspan + sodipodi:role="line" + x="58.022533" + y="97.629898" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan21">#1</tspan></text> + <rect + style="fill:none;stroke:#aa0000;stroke-width:1.01356;stroke-dasharray:none;stroke-dashoffset:0" + id="rect20" + width="31.954243" + height="22.038303" + x="42.18652" + y="77.410309" /> + </g> + <g + id="g3" + transform="translate(14.287499,-0.66146851)"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="97.020706" + y="91.105995" + id="text24"><tspan + sodipodi:role="line" + x="97.020706" + y="91.105995" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan24">SE #2</tspan></text> + <rect + style="fill:none;stroke:#aa0000;stroke-width:1.01356;stroke-dasharray:none;stroke-dashoffset:0" + id="rect24" + width="31.954243" + height="22.038303" + x="81.080269" + y="78.071777" /> + </g> + <g + id="g2" + transform="translate(-3.96875)"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="158.03574" + y="90.444527" + id="text30"><tspan + sodipodi:role="line" + x="158.03574" + y="90.444527" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan30">SE #N</tspan></text> + <rect + style="fill:none;stroke:#aa0000;stroke-width:1.01356;stroke-dasharray:none;stroke-dashoffset:0" + id="rect30" + width="31.954243" + height="22.038303" + x="141.93443" + y="77.410309" /> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="132.011" + y="88.873962" + id="text4"><tspan + sodipodi:role="line" + x="132.011" + y="88.873962" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan4">...</tspan></text> + <rect + style="fill:none;stroke:#ff8080;stroke-width:1;stroke-dasharray:none" + id="rect4" + width="126.7475" + height="35.863121" + x="46.912045" + y="68.129692" /> + </g> + <g + id="g10" + transform="translate(-8.807217,1.0583333)"> + <rect + style="fill:#ffffff;stroke:#ff6600;stroke-width:1;stroke-dasharray:none" + id="rect10" + width="50.551014" + height="10.992874" + x="65.641136" + y="122.93423" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="91.040474" + y="130.69762" + id="text10"><tspan + sodipodi:role="line" + x="91.040474" + y="130.69762" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan10">SMU</tspan></text> + </g> + <rect + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" + id="rect14" + width="3.8659263" + height="4.2845292" + x="164.57497" + y="125.16281" /> + <rect + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" + id="rect18" + width="3.8659263" + height="4.2845292" + x="67.340591" + y="194.48364" /> + <g + id="g25" + transform="translate(165.76146,89.164578)"> + <g + id="g17" + transform="translate(-127.72192,-84.269792)"> + <rect + style="fill:#ffffff;stroke:#ff00ff;stroke-width:1;stroke-dasharray:none" + id="rect17" + width="50.551014" + height="10.992874" + x="83.42868" + y="140.39673" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="108.55814" + y="148.16011" + id="text17"><tspan + sodipodi:role="line" + x="108.55814" + y="148.16011" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan17">SDMA</tspan></text> + </g> + <g + id="g24"> + <rect + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" + id="rect21" + width="3.8659263" + height="4.2845292" + x="0.79788309" + y="57.429478" /> + </g> + </g> + <path + style="fill:none;stroke:#ff6600;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0;marker-end:url(#ArrowWideRounded)" + d="M 56.046208,126.07948 H 51.151416 V 110.60136" + id="path21" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#ff6600;stroke-width:1;stroke-dasharray:1,1;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 107.63996,129.38677 h 31.91723" + id="path22" /> + <g + id="g26" + transform="translate(103.05521,-16.801041)"> + <path + style="fill:none;stroke:#ff6600;stroke-width:0.684499;stroke-dasharray:0.684499, 0.684499;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="M 14.374335,237.26538 H 29.87027" + id="path23" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="41.690811" + y="239.50058" + id="text23"><tspan + sodipodi:role="line" + x="41.690811" + y="239.50058" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.0690111" + id="tspan23">Reset</tspan></text> + </g> + <path + style="fill:none;stroke:#ff6600;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0;marker-end:url(#ArrowWideRounded)" + d="m 56.046208,133.69217 h -4.894792 v 58.07604" + id="path24" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#ff6600;stroke-width:1;stroke-dasharray:1,1;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 95.977781,134.7651 v 15.92063 l 23.944789,0.007" + id="path25" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" + d="m 116.34935,212.1162 h 16.22753" + id="path26" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="159.95955" + y="214.49745" + id="text26"><tspan + sodipodi:role="line" + x="159.95955" + y="214.49745" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ffd42a;stroke-width:0.0690111" + id="tspan26">PSP Interaction</tspan></text> + <path + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" + d="m 142.93997,177.05254 12.78794,1e-5 v -20.13841" + id="path27" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" + d="m 154.31705,177.05254 24.03273,1e-5 v -47.79807 h -6.87917" + id="path28" + sodipodi:nodetypes="cccc" /> + <rect + style="fill:#008033;stroke:#008033;stroke-width:1.12152;stroke-dasharray:none" + id="rect31" + width="28.449656" + height="23.148542" + x="-9.3648224" + y="152.25124" /> + <rect + style="fill:#008033;stroke:#008033;stroke-width:1.12152;stroke-dasharray:none" + id="rect32" + width="28.449656" + height="23.148542" + x="-9.3648224" + y="71.817902" /> + <rect + style="fill:#008033;stroke:#008033;stroke-width:1.12152;stroke-dasharray:none" + id="rect33" + width="28.449656" + height="23.148542" + x="198.46539" + y="152.25124" /> + <rect + style="fill:#008033;stroke:#008033;stroke-width:1.12152;stroke-dasharray:none" + id="rect34" + width="28.449656" + height="23.148542" + x="198.46539" + y="71.817902" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008033;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="-124.65836" + y="32.94923" + id="text34" + transform="rotate(-90)"><tspan + sodipodi:role="line" + x="-124.65836" + y="32.94923" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.93889px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#008033;stroke-width:0.0690111" + id="tspan34">UMC</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008033;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="-124.65836" + y="189.71486" + id="text35" + transform="rotate(-90)"><tspan + sodipodi:role="line" + x="-124.65836" + y="189.71486" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.93889px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#008033;stroke-width:0.0690111" + id="tspan35">UMC</tspan></text> + <path + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" + d="M 69.069766,195.36981 V 166.59317 H 34.403946" + id="path35" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" + d="M 69.167488,195.36981 V 166.59317 H 184.79581" + id="path36" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" + d="m 33.58103,118.30671 h 141.39539 v 30.03021" + id="path37" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" + d="m 166.53415,126.77338 h 19.0256" + id="path38" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" + d="m 166.53415,148.99838 h 19.0256" + id="path39" + sodipodi:nodetypes="cc" /> + <g + id="g40" + transform="translate(0,-1.8520833)"> + <circle + style="fill:#ff8080;stroke:#ff2a2a;stroke-width:0.7;stroke-dasharray:none;stroke-dashoffset:0" + id="path40" + cx="7.2723336" + cy="194.07741" + r="10.186459" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="7.1728497" + y="195.6649" + id="text40"><tspan + sodipodi:role="line" + x="7.1728492" + y="195.6649" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan40">Firmware</tspan></text> + </g> + <path + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" + d="m 34.063928,174.00984 78.801482,0.26458" + id="path41" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" + d="M 8.1347613,181.0213 27.537285,174.27442" + id="path42" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="4.5742564" + y="84.897125" + id="text42"><tspan + sodipodi:role="line" + x="4.5742559" + y="84.897125" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan42">Memory</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="4.5742564" + y="165.33046" + id="text43"><tspan + sodipodi:role="line" + x="4.5742559" + y="165.33046" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan43">Memory</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="212.40446" + y="165.33046" + id="text44"><tspan + sodipodi:role="line" + x="212.40446" + y="165.33046" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan44">Memory</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" + x="212.40446" + y="84.897125" + id="text45"><tspan + sodipodi:role="line" + x="212.40446" + y="84.897125" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" + id="tspan45">Memory</tspan></text> + <path + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" + d="m 171.56123,77.957755 13.99852,0" + id="path45" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" + d="m 34.639355,77.957755 h 13.99852" + id="path46" + sodipodi:nodetypes="cc" /> + </g> +</svg> diff --git a/Documentation/gpu/amdgpu/amdgpu-glossary.rst b/Documentation/gpu/amdgpu/amdgpu-glossary.rst index eb72e6f6d4f1..a3f9565d655b 100644 --- a/Documentation/gpu/amdgpu/amdgpu-glossary.rst +++ b/Documentation/gpu/amdgpu/amdgpu-glossary.rst @@ -227,6 +227,9 @@ we have a dedicated glossary for Display Core at TOC Table of Contents + UMC + Unified Memory Controller + UMSCH User Mode Scheduler diff --git a/Documentation/gpu/amdgpu/driver-core.rst b/Documentation/gpu/amdgpu/driver-core.rst index 3ce276272171..13f13e2e5497 100644 --- a/Documentation/gpu/amdgpu/driver-core.rst +++ b/Documentation/gpu/amdgpu/driver-core.rst @@ -77,6 +77,31 @@ VCN (Video Core Next) decode. It's exposed to userspace for user mode drivers (VA-API, OpenMAX, etc.) +It is important to note that these blocks can interact with each other. The +picture below illustrates some of the components and their interconnection: + +.. kernel-figure:: amd_overview_block.svg + +In the diagram, memory-related blocks are represented by a green color. Notice +that specific IPs have a green block that represents a small hardware block +named 'hub', which is responsible for interfacing with memory (pre-vega devices +have a dedicated block for that, named GMC). In the driver code, you can +identify this component by looking for the suffix hub, for example: gfxhub, +dchub, mmhub, vmhub, etc. All memory hubs are connected in the UMC, which in +turn is connected to memory blocks. + +There is some level of protection for certain elements in memory, and the PSP +plays an essential role in this area. For example, when a specific firmware is +loaded into the memory, PSP takes an action to ensure that the firmware has a +valid signature. Another use of PSP is to support the TA (e.g., HDCP) and +encrypted memory via TMZ. + +Another IP that deserves attention is the SMU, as it is connected to all the +other IPs. SMU will help put the GPU in optimal utilization by taking into +account performance and power consumption. SMU helps other blocks to set up a +proper clock configuration. Another feature of SMU is the support for resetting +every component. + .. _pipes-and-queues-description: GFX, Compute, and SDMA Overall Behavior -- 2.51.0 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH v3 3/5] Documentation/gpu: Expand generic block information 2025-10-20 19:38 ` [PATCH v3 3/5] Documentation/gpu: Expand generic block information Rodrigo Siqueira @ 2025-10-20 20:28 ` Alex Deucher 2025-10-21 9:30 ` Timur Kristóf 2025-10-21 14:55 ` Rodrigo Siqueira 2025-10-21 5:24 ` Lazar, Lijo 1 sibling, 2 replies; 24+ messages in thread From: Alex Deucher @ 2025-10-20 20:28 UTC (permalink / raw) To: Rodrigo Siqueira Cc: Alex Deucher, Christian König, Timur Kristóf, amd-gfx, kernel-dev On Mon, Oct 20, 2025 at 3:56 PM Rodrigo Siqueira <siqueira@igalia.com> wrote: > > This commit expands the overall explanation about AMD GPU IPs by adding > more details about their interconnection. Note that this commit includes > a diagram that provides additional information. > > Cc: Alex Deucher <alexander.deucher@amd.com> > Cc: Christian König <christian.koenig@amd.com> > Cc: Timur Kristóf <timur.kristof@gmail.com> > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> > --- > .../gpu/amdgpu/amd_overview_block.svg | 674 ++++++++++++++++++ > Documentation/gpu/amdgpu/amdgpu-glossary.rst | 3 + > Documentation/gpu/amdgpu/driver-core.rst | 25 + > 3 files changed, 702 insertions(+) > create mode 100644 Documentation/gpu/amdgpu/amd_overview_block.svg > > diff --git a/Documentation/gpu/amdgpu/amd_overview_block.svg b/Documentation/gpu/amdgpu/amd_overview_block.svg > new file mode 100644 > index 000000000000..8d9ae95bd9a5 > --- /dev/null > +++ b/Documentation/gpu/amdgpu/amd_overview_block.svg Got a link to the diagram anywhere? These looked good at XDC. > @@ -0,0 +1,674 @@ > +<?xml version="1.0" encoding="UTF-8" standalone="no"?> > +<!-- Created with Inkscape (http://www.inkscape.org/) --> > + > +<svg > + width="237.4014mm" > + height="160.98259mm" > + viewBox="0 0 237.4014 160.98259" > + version="1.1" > + id="svg1" > + inkscape:version="1.4 (e7c3feb100, 2024-10-09)" > + sodipodi:docname="amd_overview_block.svg" > + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" > + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" > + xmlns="http://www.w3.org/2000/svg" > + xmlns:svg="http://www.w3.org/2000/svg"> > + <sodipodi:namedview > + id="namedview1" > + pagecolor="#ffffff" > + bordercolor="#000000" > + borderopacity="0.25" > + inkscape:showpageshadow="2" > + inkscape:pageopacity="0.0" > + inkscape:pagecheckerboard="0" > + inkscape:deskcolor="#d1d1d1" > + inkscape:document-units="mm" > + inkscape:zoom="2" > + inkscape:cx="436.25" > + inkscape:cy="313.75" > + inkscape:window-width="3072" > + inkscape:window-height="1651" > + inkscape:window-x="0" > + inkscape:window-y="0" > + inkscape:window-maximized="1" > + inkscape:current-layer="layer1" /> > + <defs > + id="defs1"> > + <marker > + style="overflow:visible" > + id="ArrowWideHeavy" > + refX="0" > + refY="0" > + orient="auto-start-reverse" > + inkscape:stockid="Wide, heavy arrow" > + markerWidth="1" > + markerHeight="1" > + viewBox="0 0 1 1" > + inkscape:isstock="true" > + inkscape:collect="always" > + preserveAspectRatio="xMidYMid"> > + <path > + style="fill:context-stroke;fill-rule:evenodd;stroke:none" > + d="m 1,0 -3,3 h -2 l 3,-3 -3,-3 h 2 z" > + id="path3" /> > + </marker> > + <marker > + style="overflow:visible" > + id="ArrowWideRounded" > + refX="0" > + refY="0" > + orient="auto-start-reverse" > + inkscape:stockid="Wide, rounded arrow" > + markerWidth="1" > + markerHeight="1" > + viewBox="0 0 1 1" > + inkscape:isstock="true" > + inkscape:collect="always" > + preserveAspectRatio="xMidYMid"> > + <path > + style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:round" > + d="M 3,-3 0,0 3,3" > + transform="rotate(180,0.125,0)" > + sodipodi:nodetypes="ccc" > + id="path2" /> > + </marker> > + </defs> > + <g > + inkscape:label="Layer 1" > + inkscape:groupmode="layer" > + id="layer1" > + transform="translate(9.9255824,-64.69615)"> > + <rect > + style="fill:#ffffff;stroke:none;stroke-width:0.999747" > + id="rect5" > + width="239.13895" > + height="162.38739" > + x="-10.311751" > + y="63.871342" /> > + <rect > + style="fill:#ffffff;stroke:#000000;stroke-width:0.79375" > + id="rect1" > + width="174.55814" > + height="140.23256" > + x="22.263056" > + y="65.093025" /> > + <rect > + style="fill:#ffffff;stroke:#008033;stroke-width:1;stroke-dasharray:none" > + id="rect2" > + width="5.0232558" > + height="104.23256" > + x="28.674419" > + y="72.418602" /> > + <rect > + style="fill:#ffffff;stroke:#008033;stroke-width:1;stroke-dasharray:none" > + id="rect3" > + width="5.0232558" > + height="104.23256" > + x="185.44186" > + y="72.418602" /> > + <rect > + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" > + id="rect8-5" > + width="3.8659263" > + height="4.2845292" > + x="48.522045" > + y="75.819946" /> > + <rect > + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" > + id="rect9" > + width="3.8659263" > + height="4.2845292" > + x="168.14684" > + y="75.68573" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.9389px;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O';text-align:start;letter-spacing:4.91331px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#00d400;stroke:#00d400;stroke-width:1;stroke-dasharray:none" > + x="45.418606" > + y="216.62791" > + id="text12"><tspan > + sodipodi:role="line" > + id="tspan12" > + style="stroke-width:1" > + x="45.418606" > + y="216.62791" /></text> > + <g > + id="g34"> > + <rect > + style="fill:#ffffff;stroke:#008033;stroke-width:1;stroke-dasharray:none" > + id="rect7" > + width="19.539951" > + height="6.9818101" > + x="22.811832" > + y="210.3201" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008033;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="52.663685" > + y="216.07796" > + id="text68"><tspan > + sodipodi:role="line" > + x="52.663685" > + y="216.07796" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#008033;stroke-width:0.0690111" > + id="tspan68">UMC</tspan></text> > + </g> > + <g > + id="g29" > + transform="translate(-0.52916667)"> > + <rect > + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" > + id="rect8" > + width="3.8659263" > + height="4.2845292" > + x="22.782616" > + y="220.36148" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="48.966854" > + y="224.15474" > + id="text13"><tspan > + sodipodi:role="line" > + x="48.966854" > + y="224.15474" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#00ff00;stroke-width:0.0690111" > + id="tspan13">Memory hub</tspan></text> > + </g> > + <rect > + style="fill:#ffffff;stroke:#0000ff;stroke-width:1;stroke-dasharray:none" > + id="rect13" > + width="28.674419" > + height="11.302325" > + x="43.988369" > + y="192.98618" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="58.325581" > + y="200.90428" > + id="text14"><tspan > + sodipodi:role="line" > + x="58.325581" > + y="200.90428" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan14">DCN</tspan></text> > + <g > + id="g12" > + transform="translate(-1.8520837,2.3812496)"> > + <g > + id="g13"> > + <rect > + style="fill:#ffffff;stroke:#ffd42a;stroke-width:1;stroke-dasharray:none" > + id="rect15" > + width="28.674419" > + height="11.302325" > + x="114.87544" > + y="169.54433" > + ry="2.6458333" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="129.06978" > + y="177.46243" > + id="text15"><tspan > + sodipodi:role="line" > + x="129.06978" > + y="177.46243" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan15">PSP</tspan></text> > + </g> > + </g> > + <path > + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" > + d="m 73.88372,201.92338 h 43.74419 V 184.5631" > + id="path16" > + sodipodi:nodetypes="ccc" /> > + <rect > + style="fill:#ffffff;stroke:#00ccff;stroke-width:1;stroke-dasharray:none" > + id="rect16" > + width="40.220226" > + height="11.1272" > + x="150.82011" > + y="193.07373" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="170.78101" > + y="200.90428" > + id="text16"><tspan > + sodipodi:role="line" > + x="170.78101" > + y="200.90428" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan16">PCIe (NBIO)</tspan></text> > + <g > + id="g11" > + transform="translate(-5.0270833,-8.8635417)"> > + <rect > + style="fill:#ffffff;stroke:#5f5fd3;stroke-width:1;stroke-dasharray:none" > + id="rect19" > + width="28.674419" > + height="11.302325" > + x="146.1279" > + y="132.70711" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="160.75085" > + y="140.62521" > + id="text19"><tspan > + sodipodi:role="line" > + x="160.75085" > + y="140.62521" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan19">VCN</tspan></text> > + </g> > + <g > + id="g5" > + transform="translate(0,5.8208336)"> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="110.18288" > + y="73.872185" > + id="text14-7"><tspan > + sodipodi:role="line" > + x="110.18288" > + y="73.872185" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan14-7">Graphics & Compute (GC)</tspan></text> > + <g > + id="g4" > + transform="translate(10.583333)"> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="58.022533" > + y="83.518799" > + id="text14-7-5"><tspan > + sodipodi:role="line" > + x="58.022533" > + y="83.518799" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan14-7-6">Shader</tspan><tspan > + sodipodi:role="line" > + x="58.022533" > + y="90.574348" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan20">Engine(SE)</tspan><tspan > + sodipodi:role="line" > + x="58.022533" > + y="97.629898" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan21">#1</tspan></text> > + <rect > + style="fill:none;stroke:#aa0000;stroke-width:1.01356;stroke-dasharray:none;stroke-dashoffset:0" > + id="rect20" > + width="31.954243" > + height="22.038303" > + x="42.18652" > + y="77.410309" /> > + </g> > + <g > + id="g3" > + transform="translate(14.287499,-0.66146851)"> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="97.020706" > + y="91.105995" > + id="text24"><tspan > + sodipodi:role="line" > + x="97.020706" > + y="91.105995" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan24">SE #2</tspan></text> > + <rect > + style="fill:none;stroke:#aa0000;stroke-width:1.01356;stroke-dasharray:none;stroke-dashoffset:0" > + id="rect24" > + width="31.954243" > + height="22.038303" > + x="81.080269" > + y="78.071777" /> > + </g> > + <g > + id="g2" > + transform="translate(-3.96875)"> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="158.03574" > + y="90.444527" > + id="text30"><tspan > + sodipodi:role="line" > + x="158.03574" > + y="90.444527" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan30">SE #N</tspan></text> > + <rect > + style="fill:none;stroke:#aa0000;stroke-width:1.01356;stroke-dasharray:none;stroke-dashoffset:0" > + id="rect30" > + width="31.954243" > + height="22.038303" > + x="141.93443" > + y="77.410309" /> > + </g> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="132.011" > + y="88.873962" > + id="text4"><tspan > + sodipodi:role="line" > + x="132.011" > + y="88.873962" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan4">...</tspan></text> > + <rect > + style="fill:none;stroke:#ff8080;stroke-width:1;stroke-dasharray:none" > + id="rect4" > + width="126.7475" > + height="35.863121" > + x="46.912045" > + y="68.129692" /> > + </g> > + <g > + id="g10" > + transform="translate(-8.807217,1.0583333)"> > + <rect > + style="fill:#ffffff;stroke:#ff6600;stroke-width:1;stroke-dasharray:none" > + id="rect10" > + width="50.551014" > + height="10.992874" > + x="65.641136" > + y="122.93423" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="91.040474" > + y="130.69762" > + id="text10"><tspan > + sodipodi:role="line" > + x="91.040474" > + y="130.69762" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan10">SMU</tspan></text> > + </g> > + <rect > + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" > + id="rect14" > + width="3.8659263" > + height="4.2845292" > + x="164.57497" > + y="125.16281" /> > + <rect > + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" > + id="rect18" > + width="3.8659263" > + height="4.2845292" > + x="67.340591" > + y="194.48364" /> > + <g > + id="g25" > + transform="translate(165.76146,89.164578)"> > + <g > + id="g17" > + transform="translate(-127.72192,-84.269792)"> > + <rect > + style="fill:#ffffff;stroke:#ff00ff;stroke-width:1;stroke-dasharray:none" > + id="rect17" > + width="50.551014" > + height="10.992874" > + x="83.42868" > + y="140.39673" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="108.55814" > + y="148.16011" > + id="text17"><tspan > + sodipodi:role="line" > + x="108.55814" > + y="148.16011" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan17">SDMA</tspan></text> > + </g> > + <g > + id="g24"> > + <rect > + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" > + id="rect21" > + width="3.8659263" > + height="4.2845292" > + x="0.79788309" > + y="57.429478" /> > + </g> > + </g> > + <path > + style="fill:none;stroke:#ff6600;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0;marker-end:url(#ArrowWideRounded)" > + d="M 56.046208,126.07948 H 51.151416 V 110.60136" > + id="path21" > + sodipodi:nodetypes="ccc" /> > + <path > + style="fill:none;stroke:#ff6600;stroke-width:1;stroke-dasharray:1,1;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" > + d="m 107.63996,129.38677 h 31.91723" > + id="path22" /> > + <g > + id="g26" > + transform="translate(103.05521,-16.801041)"> > + <path > + style="fill:none;stroke:#ff6600;stroke-width:0.684499;stroke-dasharray:0.684499, 0.684499;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" > + d="M 14.374335,237.26538 H 29.87027" > + id="path23" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="41.690811" > + y="239.50058" > + id="text23"><tspan > + sodipodi:role="line" > + x="41.690811" > + y="239.50058" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.0690111" > + id="tspan23">Reset</tspan></text> > + </g> > + <path > + style="fill:none;stroke:#ff6600;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0;marker-end:url(#ArrowWideRounded)" > + d="m 56.046208,133.69217 h -4.894792 v 58.07604" > + id="path24" > + sodipodi:nodetypes="ccc" /> > + <path > + style="fill:none;stroke:#ff6600;stroke-width:1;stroke-dasharray:1,1;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" > + d="m 95.977781,134.7651 v 15.92063 l 23.944789,0.007" > + id="path25" > + sodipodi:nodetypes="ccc" /> > + <path > + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" > + d="m 116.34935,212.1162 h 16.22753" > + id="path26" > + sodipodi:nodetypes="cc" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="159.95955" > + y="214.49745" > + id="text26"><tspan > + sodipodi:role="line" > + x="159.95955" > + y="214.49745" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ffd42a;stroke-width:0.0690111" > + id="tspan26">PSP Interaction</tspan></text> > + <path > + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" > + d="m 142.93997,177.05254 12.78794,1e-5 v -20.13841" > + id="path27" > + sodipodi:nodetypes="ccc" /> > + <path > + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" > + d="m 154.31705,177.05254 24.03273,1e-5 v -47.79807 h -6.87917" > + id="path28" > + sodipodi:nodetypes="cccc" /> > + <rect > + style="fill:#008033;stroke:#008033;stroke-width:1.12152;stroke-dasharray:none" > + id="rect31" > + width="28.449656" > + height="23.148542" > + x="-9.3648224" > + y="152.25124" /> > + <rect > + style="fill:#008033;stroke:#008033;stroke-width:1.12152;stroke-dasharray:none" > + id="rect32" > + width="28.449656" > + height="23.148542" > + x="-9.3648224" > + y="71.817902" /> > + <rect > + style="fill:#008033;stroke:#008033;stroke-width:1.12152;stroke-dasharray:none" > + id="rect33" > + width="28.449656" > + height="23.148542" > + x="198.46539" > + y="152.25124" /> > + <rect > + style="fill:#008033;stroke:#008033;stroke-width:1.12152;stroke-dasharray:none" > + id="rect34" > + width="28.449656" > + height="23.148542" > + x="198.46539" > + y="71.817902" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008033;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="-124.65836" > + y="32.94923" > + id="text34" > + transform="rotate(-90)"><tspan > + sodipodi:role="line" > + x="-124.65836" > + y="32.94923" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.93889px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#008033;stroke-width:0.0690111" > + id="tspan34">UMC</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008033;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="-124.65836" > + y="189.71486" > + id="text35" > + transform="rotate(-90)"><tspan > + sodipodi:role="line" > + x="-124.65836" > + y="189.71486" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.93889px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#008033;stroke-width:0.0690111" > + id="tspan35">UMC</tspan></text> > + <path > + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" > + d="M 69.069766,195.36981 V 166.59317 H 34.403946" > + id="path35" > + sodipodi:nodetypes="ccc" /> > + <path > + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" > + d="M 69.167488,195.36981 V 166.59317 H 184.79581" > + id="path36" > + sodipodi:nodetypes="ccc" /> > + <path > + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" > + d="m 33.58103,118.30671 h 141.39539 v 30.03021" > + id="path37" > + sodipodi:nodetypes="ccc" /> > + <path > + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" > + d="m 166.53415,126.77338 h 19.0256" > + id="path38" > + sodipodi:nodetypes="cc" /> > + <path > + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" > + d="m 166.53415,148.99838 h 19.0256" > + id="path39" > + sodipodi:nodetypes="cc" /> > + <g > + id="g40" > + transform="translate(0,-1.8520833)"> > + <circle > + style="fill:#ff8080;stroke:#ff2a2a;stroke-width:0.7;stroke-dasharray:none;stroke-dashoffset:0" > + id="path40" > + cx="7.2723336" > + cy="194.07741" > + r="10.186459" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="7.1728497" > + y="195.6649" > + id="text40"><tspan > + sodipodi:role="line" > + x="7.1728492" > + y="195.6649" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan40">Firmware</tspan></text> > + </g> > + <path > + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" > + d="m 34.063928,174.00984 78.801482,0.26458" > + id="path41" > + sodipodi:nodetypes="cc" /> > + <path > + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" > + d="M 8.1347613,181.0213 27.537285,174.27442" > + id="path42" > + sodipodi:nodetypes="cc" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="4.5742564" > + y="84.897125" > + id="text42"><tspan > + sodipodi:role="line" > + x="4.5742559" > + y="84.897125" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan42">Memory</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="4.5742564" > + y="165.33046" > + id="text43"><tspan > + sodipodi:role="line" > + x="4.5742559" > + y="165.33046" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan43">Memory</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="212.40446" > + y="165.33046" > + id="text44"><tspan > + sodipodi:role="line" > + x="212.40446" > + y="165.33046" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan44">Memory</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="212.40446" > + y="84.897125" > + id="text45"><tspan > + sodipodi:role="line" > + x="212.40446" > + y="84.897125" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan45">Memory</tspan></text> > + <path > + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" > + d="m 171.56123,77.957755 13.99852,0" > + id="path45" > + sodipodi:nodetypes="cc" /> > + <path > + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" > + d="m 34.639355,77.957755 h 13.99852" > + id="path46" > + sodipodi:nodetypes="cc" /> > + </g> > +</svg> > diff --git a/Documentation/gpu/amdgpu/amdgpu-glossary.rst b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > index eb72e6f6d4f1..a3f9565d655b 100644 > --- a/Documentation/gpu/amdgpu/amdgpu-glossary.rst > +++ b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > @@ -227,6 +227,9 @@ we have a dedicated glossary for Display Core at > TOC > Table of Contents > > + UMC > + Unified Memory Controller > + > UMSCH > User Mode Scheduler > > diff --git a/Documentation/gpu/amdgpu/driver-core.rst b/Documentation/gpu/amdgpu/driver-core.rst > index 3ce276272171..13f13e2e5497 100644 > --- a/Documentation/gpu/amdgpu/driver-core.rst > +++ b/Documentation/gpu/amdgpu/driver-core.rst > @@ -77,6 +77,31 @@ VCN (Video Core Next) > decode. It's exposed to userspace for user mode drivers (VA-API, > OpenMAX, etc.) > > +It is important to note that these blocks can interact with each other. The > +picture below illustrates some of the components and their interconnection: > + > +.. kernel-figure:: amd_overview_block.svg > + > +In the diagram, memory-related blocks are represented by a green color. Notice > +that specific IPs have a green block that represents a small hardware block > +named 'hub', which is responsible for interfacing with memory (pre-vega devices > +have a dedicated block for that, named GMC). In the driver code, you can > +identify this component by looking for the suffix hub, for example: gfxhub, > +dchub, mmhub, vmhub, etc. All memory hubs are connected in the UMC, which in All memory hubs are connected to the UMCs, which in > +turn is connected to memory blocks. > + > +There is some level of protection for certain elements in memory, and the PSP > +plays an essential role in this area. For example, when a specific firmware is > +loaded into the memory, PSP takes an action to ensure that the firmware has a > +valid signature. It also stores the firmware images in a protected memory area (TMR = Trusted Memory Area) so the OS or driver can't corrupt it at runtime after it's been validated. > Another use of PSP is to support the TA (e.g., HDCP) and TA = Trusted Application Basically small application that runs on the trusted processor and handles a trusted operation. > +encrypted memory via TMZ. TMZ (Trusted Memory Zone -- encrypted memory for content protection). > + > +Another IP that deserves attention is the SMU, as it is connected to all the > +other IPs. SMU will help put the GPU in optimal utilization by taking into > +account performance and power consumption. SMU helps other blocks to set up a > +proper clock configuration. Another feature of SMU is the support for resetting > +every component. How about something like: Another important IP is the SMU. It handles reset distribution as well as clock and power management for all of the IPs on the SoC. Alex > + > .. _pipes-and-queues-description: > > GFX, Compute, and SDMA Overall Behavior > -- > 2.51.0 > ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 3/5] Documentation/gpu: Expand generic block information 2025-10-20 20:28 ` Alex Deucher @ 2025-10-21 9:30 ` Timur Kristóf 2025-10-21 14:55 ` Rodrigo Siqueira 1 sibling, 0 replies; 24+ messages in thread From: Timur Kristóf @ 2025-10-21 9:30 UTC (permalink / raw) To: Alex Deucher, Rodrigo Siqueira Cc: Alex Deucher, Christian König, amd-gfx, kernel-dev On 10/20/25 22:28, Alex Deucher wrote: > On Mon, Oct 20, 2025 at 3:56 PM Rodrigo Siqueira <siqueira@igalia.com> wrote: >> >> This commit expands the overall explanation about AMD GPU IPs by adding >> more details about their interconnection. Note that this commit includes >> a diagram that provides additional information. >> >> Cc: Alex Deucher <alexander.deucher@amd.com> >> Cc: Christian König <christian.koenig@amd.com> >> Cc: Timur Kristóf <timur.kristof@gmail.com> >> Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> >> --- >> .../gpu/amdgpu/amd_overview_block.svg | 674 ++++++++++++++++++ >> Documentation/gpu/amdgpu/amdgpu-glossary.rst | 3 + >> Documentation/gpu/amdgpu/driver-core.rst | 25 + >> 3 files changed, 702 insertions(+) >> create mode 100644 Documentation/gpu/amdgpu/amd_overview_block.svg >> >> diff --git a/Documentation/gpu/amdgpu/amd_overview_block.svg b/Documentation/gpu/amdgpu/amd_overview_block.svg >> new file mode 100644 >> index 000000000000..8d9ae95bd9a5 >> --- /dev/null >> +++ b/Documentation/gpu/amdgpu/amd_overview_block.svg > > Got a link to the diagram anywhere? These looked good at XDC. > The cover letter of the series has links to all the diagrams. ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 3/5] Documentation/gpu: Expand generic block information 2025-10-20 20:28 ` Alex Deucher 2025-10-21 9:30 ` Timur Kristóf @ 2025-10-21 14:55 ` Rodrigo Siqueira 2025-10-21 21:34 ` Alex Deucher 1 sibling, 1 reply; 24+ messages in thread From: Rodrigo Siqueira @ 2025-10-21 14:55 UTC (permalink / raw) To: Alex Deucher, Lijo Lazar Cc: Alex Deucher, Christian König, Timur Kristóf, amd-gfx, kernel-dev Hi Alex/Lijo, On 10/20, Alex Deucher wrote: > On Mon, Oct 20, 2025 at 3:56 PM Rodrigo Siqueira <siqueira@igalia.com> wrote: > > > > This commit expands the overall explanation about AMD GPU IPs by adding > > more details about their interconnection. Note that this commit includes > > a diagram that provides additional information. > > > > Cc: Alex Deucher <alexander.deucher@amd.com> > > Cc: Christian König <christian.koenig@amd.com> > > Cc: Timur Kristóf <timur.kristof@gmail.com> > > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> > > --- > > .../gpu/amdgpu/amd_overview_block.svg | 674 ++++++++++++++++++ > > Documentation/gpu/amdgpu/amdgpu-glossary.rst | 3 + > > Documentation/gpu/amdgpu/driver-core.rst | 25 + > > 3 files changed, 702 insertions(+) > > create mode 100644 Documentation/gpu/amdgpu/amd_overview_block.svg > > > > diff --git a/Documentation/gpu/amdgpu/amd_overview_block.svg b/Documentation/gpu/amdgpu/amd_overview_block.svg > > new file mode 100644 > > index 000000000000..8d9ae95bd9a5 > > --- /dev/null > > +++ b/Documentation/gpu/amdgpu/amd_overview_block.svg > > Got a link to the diagram anywhere? These looked good at XDC. After reading your comment in the cover-letter about this diagram, I made the following modifications: 1. Connect PSP to UMC. 2. Connect PSP to GC. 3. Connect GC to UMC. 4. To avoid confusion, I moved the green block outside each specific IP. I also changed the explanation about these parts in the text, see it below. Here is the new version: https://people.igalia.com/siqueira/kernel-doc-imgs/v4/amd_overview_block.svg What do you think? > > > @@ -0,0 +1,674 @@ > > +<?xml version="1.0" encoding="UTF-8" standalone="no"?> > > +<!-- Created with Inkscape (http://www.inkscape.org/) --> > > + > > +<svg <snip> > > +</svg> > > diff --git a/Documentation/gpu/amdgpu/amdgpu-glossary.rst b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > > index eb72e6f6d4f1..a3f9565d655b 100644 > > --- a/Documentation/gpu/amdgpu/amdgpu-glossary.rst > > +++ b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > > @@ -227,6 +227,9 @@ we have a dedicated glossary for Display Core at > > TOC > > Table of Contents > > > > + UMC > > + Unified Memory Controller > > + > > UMSCH > > User Mode Scheduler > > > > diff --git a/Documentation/gpu/amdgpu/driver-core.rst b/Documentation/gpu/amdgpu/driver-core.rst > > index 3ce276272171..13f13e2e5497 100644 > > --- a/Documentation/gpu/amdgpu/driver-core.rst > > +++ b/Documentation/gpu/amdgpu/driver-core.rst > > @@ -77,6 +77,31 @@ VCN (Video Core Next) > > decode. It's exposed to userspace for user mode drivers (VA-API, > > OpenMAX, etc.) > > > > +It is important to note that these blocks can interact with each other. The > > +picture below illustrates some of the components and their interconnection: > > + > > +.. kernel-figure:: amd_overview_block.svg > > + > > +In the diagram, memory-related blocks are represented by a green color. Notice > > +that specific IPs have a green block that represents a small hardware block > > +named 'hub', which is responsible for interfacing with memory (pre-vega devices > > +have a dedicated block for that, named GMC). In the driver code, you can > > +identify this component by looking for the suffix hub, for example: gfxhub, > > +dchub, mmhub, vmhub, etc. All memory hubs are connected in the UMC, which in > > All memory hubs are connected to the UMCs, which in Based on Lijo's comment and Alex's comment in the cover-latter, I rewrote this paragraph to: In the diagram, memory-related blocks are shown in green. Notice that specific IPs have a green square that represents a small hardware block named 'hub', which is responsible for interfacing with memory. All memory hubs are connected in the UMCs, which in turn are connected to memory blocks. As a note, pre-vega devices have a dedicated block for the Graphic Memory Controller (GMC), which was replaced by UMC in new architectures. In the driver code, you can identify this component by looking for the suffix hub, for example: gfxhub, dchub, mmhub, vmhub, etc. Keep in mind that the component's interaction with the memory block may vary across architectures. For example, on Navi and newer, GC and SDMA are both attached to GCHUB; on pre-Navi, SDMA goes through MMHUB; VCN, JPEG, and VPE go through MMHUB; DCN goes through DCHUB. What do you think? Also, keep in mind that this text is part of the below page that already have some comments about GMC. https://origin.kernel.org/doc/html/latest/gpu/amdgpu/driver-core.html > > > +turn is connected to memory blocks. > > + > > +There is some level of protection for certain elements in memory, and the PSP > > +plays an essential role in this area. For example, when a specific firmware is > > +loaded into the memory, PSP takes an action to ensure that the firmware has a > > +valid signature. > > It also stores the firmware images in a protected memory area (TMR = > Trusted Memory Area) so the OS or driver can't corrupt it at runtime > after it's been validated. > > > Another use of PSP is to support the TA (e.g., HDCP) and > > TA = Trusted Application > Basically small application that runs on the trusted processor and > handles a trusted operation. > > > +encrypted memory via TMZ. > > TMZ (Trusted Memory Zone -- encrypted memory for content protection). > I also rewrote this paragraph to address both of your comments: There is some protection for certain memory elements, and the PSP plays an essential role in this area. When a specific firmware is loaded into memory, the PSP takes steps to ensure it has a valid signature. It also stores firmware images in a protected memory area named Trusted Memory Area (TMR), so the OS or driver can't corrupt them at runtime. Another use of PSP is to support the Trusted Application (TA), which is basically a small application that runs on the trusted processor and handles a trusted operation (e.g., HDCP). PSP is also used for encrypted memory for content protection via Trusted Memory Zone (TMZ). Does it looks good for a v4? > > + > > +Another IP that deserves attention is the SMU, as it is connected to all the > > +other IPs. SMU will help put the GPU in optimal utilization by taking into > > +account performance and power consumption. SMU helps other blocks to set up a > > +proper clock configuration. Another feature of SMU is the support for resetting > > +every component. > > How about something like: > > Another important IP is the SMU. It handles reset distribution as > well as clock and power management for all of the IPs on the SoC. Ok, how about this paragraph for the v4: Another critical IP is the SMU. It handles reset distribution as well as clock and power management for all of the IPs on the SoC. SMU also helps to optimize GPU utilization by balancing performance and power consumption. Finally, SMU also supports thermal management. Thanks Siqueira > > Alex > > > + > > .. _pipes-and-queues-description: > > > > GFX, Compute, and SDMA Overall Behavior > > -- > > 2.51.0 > > -- Rodrigo Siqueira ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 3/5] Documentation/gpu: Expand generic block information 2025-10-21 14:55 ` Rodrigo Siqueira @ 2025-10-21 21:34 ` Alex Deucher 0 siblings, 0 replies; 24+ messages in thread From: Alex Deucher @ 2025-10-21 21:34 UTC (permalink / raw) To: Rodrigo Siqueira Cc: Lijo Lazar, Alex Deucher, Christian König, Timur Kristóf, amd-gfx, kernel-dev On Tue, Oct 21, 2025 at 10:55 AM Rodrigo Siqueira <siqueira@igalia.com> wrote: > > Hi Alex/Lijo, > > On 10/20, Alex Deucher wrote: > > On Mon, Oct 20, 2025 at 3:56 PM Rodrigo Siqueira <siqueira@igalia.com> wrote: > > > > > > This commit expands the overall explanation about AMD GPU IPs by adding > > > more details about their interconnection. Note that this commit includes > > > a diagram that provides additional information. > > > > > > Cc: Alex Deucher <alexander.deucher@amd.com> > > > Cc: Christian König <christian.koenig@amd.com> > > > Cc: Timur Kristóf <timur.kristof@gmail.com> > > > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> > > > --- > > > .../gpu/amdgpu/amd_overview_block.svg | 674 ++++++++++++++++++ > > > Documentation/gpu/amdgpu/amdgpu-glossary.rst | 3 + > > > Documentation/gpu/amdgpu/driver-core.rst | 25 + > > > 3 files changed, 702 insertions(+) > > > create mode 100644 Documentation/gpu/amdgpu/amd_overview_block.svg > > > > > > diff --git a/Documentation/gpu/amdgpu/amd_overview_block.svg b/Documentation/gpu/amdgpu/amd_overview_block.svg > > > new file mode 100644 > > > index 000000000000..8d9ae95bd9a5 > > > --- /dev/null > > > +++ b/Documentation/gpu/amdgpu/amd_overview_block.svg > > > > Got a link to the diagram anywhere? These looked good at XDC. > > After reading your comment in the cover-letter about this diagram, I > made the following modifications: > > 1. Connect PSP to UMC. > 2. Connect PSP to GC. > 3. Connect GC to UMC. > 4. To avoid confusion, I moved the green block outside each specific IP. > I also changed the explanation about these parts in the text, see it > below. > > Here is the new version: > > https://people.igalia.com/siqueira/kernel-doc-imgs/v4/amd_overview_block.svg > > What do you think? Looks good! > > > > > > @@ -0,0 +1,674 @@ > > > +<?xml version="1.0" encoding="UTF-8" standalone="no"?> > > > +<!-- Created with Inkscape (http://www.inkscape.org/) --> > > > + > > > +<svg > > <snip> > > > > +</svg> > > > diff --git a/Documentation/gpu/amdgpu/amdgpu-glossary.rst b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > > > index eb72e6f6d4f1..a3f9565d655b 100644 > > > --- a/Documentation/gpu/amdgpu/amdgpu-glossary.rst > > > +++ b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > > > @@ -227,6 +227,9 @@ we have a dedicated glossary for Display Core at > > > TOC > > > Table of Contents > > > > > > + UMC > > > + Unified Memory Controller > > > + > > > UMSCH > > > User Mode Scheduler > > > > > > diff --git a/Documentation/gpu/amdgpu/driver-core.rst b/Documentation/gpu/amdgpu/driver-core.rst > > > index 3ce276272171..13f13e2e5497 100644 > > > --- a/Documentation/gpu/amdgpu/driver-core.rst > > > +++ b/Documentation/gpu/amdgpu/driver-core.rst > > > @@ -77,6 +77,31 @@ VCN (Video Core Next) > > > decode. It's exposed to userspace for user mode drivers (VA-API, > > > OpenMAX, etc.) > > > > > > +It is important to note that these blocks can interact with each other. The > > > +picture below illustrates some of the components and their interconnection: > > > + > > > +.. kernel-figure:: amd_overview_block.svg > > > + > > > +In the diagram, memory-related blocks are represented by a green color. Notice > > > +that specific IPs have a green block that represents a small hardware block > > > +named 'hub', which is responsible for interfacing with memory (pre-vega devices > > > +have a dedicated block for that, named GMC). In the driver code, you can > > > +identify this component by looking for the suffix hub, for example: gfxhub, > > > +dchub, mmhub, vmhub, etc. All memory hubs are connected in the UMC, which in > > > > All memory hubs are connected to the UMCs, which in > > Based on Lijo's comment and Alex's comment in the cover-latter, I > rewrote this paragraph to: > > In the diagram, memory-related blocks are shown in green. Notice that > specific IPs have a green square that represents a small hardware block > named 'hub', which is responsible for interfacing with memory. All > memory hubs are connected in the UMCs, which in turn are connected to > memory blocks. As a note, pre-vega devices have a dedicated block for > the Graphic Memory Controller (GMC), which was replaced by UMC in new > architectures. In the driver code, you can identify this component by GMC was replaced by UMC + hubs. > looking for the suffix hub, for example: gfxhub, dchub, mmhub, vmhub, > etc. Keep in mind that the component's interaction with the memory block > may vary across architectures. For example, on Navi and newer, GC and > SDMA are both attached to GCHUB; on pre-Navi, SDMA goes through MMHUB; > VCN, JPEG, and VPE go through MMHUB; DCN goes through DCHUB. > > What do you think? Looks good to me. > > Also, keep in mind that this text is part of the below page that already > have some comments about GMC. > > https://origin.kernel.org/doc/html/latest/gpu/amdgpu/driver-core.html > > > > > > +turn is connected to memory blocks. > > > + > > > +There is some level of protection for certain elements in memory, and the PSP > > > +plays an essential role in this area. For example, when a specific firmware is > > > +loaded into the memory, PSP takes an action to ensure that the firmware has a > > > +valid signature. > > > > It also stores the firmware images in a protected memory area (TMR = > > Trusted Memory Area) so the OS or driver can't corrupt it at runtime > > after it's been validated. > > > > > Another use of PSP is to support the TA (e.g., HDCP) and > > > > TA = Trusted Application > > Basically small application that runs on the trusted processor and > > handles a trusted operation. > > > > > +encrypted memory via TMZ. > > > > TMZ (Trusted Memory Zone -- encrypted memory for content protection). > > > > I also rewrote this paragraph to address both of your comments: > > There is some protection for certain memory elements, and the PSP plays > an essential role in this area. When a specific firmware is loaded into > memory, the PSP takes steps to ensure it has a valid signature. It also > stores firmware images in a protected memory area named Trusted > Memory Area (TMR), so the OS or driver can't corrupt them at runtime. Another > use of PSP is to support the Trusted Application (TA), which is > basically a small application that runs on the trusted processor and use of PSP is to support Trusted Applications (TA), which are basically small applications that run on the trusted processor and > handles a trusted operation (e.g., HDCP). PSP is also used for encrypted > memory for content protection via Trusted Memory Zone (TMZ). > > Does it looks good for a v4? > > > > + > > > +Another IP that deserves attention is the SMU, as it is connected to all the > > > +other IPs. SMU will help put the GPU in optimal utilization by taking into > > > +account performance and power consumption. SMU helps other blocks to set up a > > > +proper clock configuration. Another feature of SMU is the support for resetting > > > +every component. > > > > How about something like: > > > > Another important IP is the SMU. It handles reset distribution as > > well as clock and power management for all of the IPs on the SoC. > > Ok, how about this paragraph for the v4: > > Another critical IP is the SMU. It handles reset distribution as well as > clock and power management for all of the IPs on the SoC. SMU also helps > to optimize GPU utilization by balancing performance and power > consumption. Finally, SMU also supports thermal management. I would include thermal in the first sentence. E.g., "clock, thermal, and power management" Also, the use of "utilization" seems weird. I think of utilization as the resources used on the GPU. Use of the GPU resources is managed by the scheduler and the driver. The SMU tries to align performance with demand. Thanks, Alex > > Thanks > Siqueira > > > > > Alex > > > > > + > > > .. _pipes-and-queues-description: > > > > > > GFX, Compute, and SDMA Overall Behavior > > > -- > > > 2.51.0 > > > > > -- > Rodrigo Siqueira ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 3/5] Documentation/gpu: Expand generic block information 2025-10-20 19:38 ` [PATCH v3 3/5] Documentation/gpu: Expand generic block information Rodrigo Siqueira 2025-10-20 20:28 ` Alex Deucher @ 2025-10-21 5:24 ` Lazar, Lijo 1 sibling, 0 replies; 24+ messages in thread From: Lazar, Lijo @ 2025-10-21 5:24 UTC (permalink / raw) To: Rodrigo Siqueira, Alex Deucher, Christian König, Timur Kristóf Cc: amd-gfx, kernel-dev On 10/21/2025 1:08 AM, Rodrigo Siqueira wrote: > This commit expands the overall explanation about AMD GPU IPs by adding > more details about their interconnection. Note that this commit includes > a diagram that provides additional information. > > Cc: Alex Deucher <alexander.deucher@amd.com> > Cc: Christian König <christian.koenig@amd.com> > Cc: Timur Kristóf <timur.kristof@gmail.com> > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> > --- > .../gpu/amdgpu/amd_overview_block.svg | 674 ++++++++++++++++++ > Documentation/gpu/amdgpu/amdgpu-glossary.rst | 3 + > Documentation/gpu/amdgpu/driver-core.rst | 25 + > 3 files changed, 702 insertions(+) > create mode 100644 Documentation/gpu/amdgpu/amd_overview_block.svg > > diff --git a/Documentation/gpu/amdgpu/amd_overview_block.svg b/Documentation/gpu/amdgpu/amd_overview_block.svg > new file mode 100644 > index 000000000000..8d9ae95bd9a5 > --- /dev/null > +++ b/Documentation/gpu/amdgpu/amd_overview_block.svg > @@ -0,0 +1,674 @@ > +<?xml version="1.0" encoding="UTF-8" standalone="no"?> > +<!-- Created with Inkscape (http://www.inkscape.org/) --> > + > +<svg > + width="237.4014mm" > + height="160.98259mm" > + viewBox="0 0 237.4014 160.98259" > + version="1.1" > + id="svg1" > + inkscape:version="1.4 (e7c3feb100, 2024-10-09)" > + sodipodi:docname="amd_overview_block.svg" > + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" > + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" > + xmlns="http://www.w3.org/2000/svg" > + xmlns:svg="http://www.w3.org/2000/svg"> > + <sodipodi:namedview > + id="namedview1" > + pagecolor="#ffffff" > + bordercolor="#000000" > + borderopacity="0.25" > + inkscape:showpageshadow="2" > + inkscape:pageopacity="0.0" > + inkscape:pagecheckerboard="0" > + inkscape:deskcolor="#d1d1d1" > + inkscape:document-units="mm" > + inkscape:zoom="2" > + inkscape:cx="436.25" > + inkscape:cy="313.75" > + inkscape:window-width="3072" > + inkscape:window-height="1651" > + inkscape:window-x="0" > + inkscape:window-y="0" > + inkscape:window-maximized="1" > + inkscape:current-layer="layer1" /> > + <defs > + id="defs1"> > + <marker > + style="overflow:visible" > + id="ArrowWideHeavy" > + refX="0" > + refY="0" > + orient="auto-start-reverse" > + inkscape:stockid="Wide, heavy arrow" > + markerWidth="1" > + markerHeight="1" > + viewBox="0 0 1 1" > + inkscape:isstock="true" > + inkscape:collect="always" > + preserveAspectRatio="xMidYMid"> > + <path > + style="fill:context-stroke;fill-rule:evenodd;stroke:none" > + d="m 1,0 -3,3 h -2 l 3,-3 -3,-3 h 2 z" > + id="path3" /> > + </marker> > + <marker > + style="overflow:visible" > + id="ArrowWideRounded" > + refX="0" > + refY="0" > + orient="auto-start-reverse" > + inkscape:stockid="Wide, rounded arrow" > + markerWidth="1" > + markerHeight="1" > + viewBox="0 0 1 1" > + inkscape:isstock="true" > + inkscape:collect="always" > + preserveAspectRatio="xMidYMid"> > + <path > + style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:round" > + d="M 3,-3 0,0 3,3" > + transform="rotate(180,0.125,0)" > + sodipodi:nodetypes="ccc" > + id="path2" /> > + </marker> > + </defs> > + <g > + inkscape:label="Layer 1" > + inkscape:groupmode="layer" > + id="layer1" > + transform="translate(9.9255824,-64.69615)"> > + <rect > + style="fill:#ffffff;stroke:none;stroke-width:0.999747" > + id="rect5" > + width="239.13895" > + height="162.38739" > + x="-10.311751" > + y="63.871342" /> > + <rect > + style="fill:#ffffff;stroke:#000000;stroke-width:0.79375" > + id="rect1" > + width="174.55814" > + height="140.23256" > + x="22.263056" > + y="65.093025" /> > + <rect > + style="fill:#ffffff;stroke:#008033;stroke-width:1;stroke-dasharray:none" > + id="rect2" > + width="5.0232558" > + height="104.23256" > + x="28.674419" > + y="72.418602" /> > + <rect > + style="fill:#ffffff;stroke:#008033;stroke-width:1;stroke-dasharray:none" > + id="rect3" > + width="5.0232558" > + height="104.23256" > + x="185.44186" > + y="72.418602" /> > + <rect > + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" > + id="rect8-5" > + width="3.8659263" > + height="4.2845292" > + x="48.522045" > + y="75.819946" /> > + <rect > + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" > + id="rect9" > + width="3.8659263" > + height="4.2845292" > + x="168.14684" > + y="75.68573" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.9389px;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O';text-align:start;letter-spacing:4.91331px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#00d400;stroke:#00d400;stroke-width:1;stroke-dasharray:none" > + x="45.418606" > + y="216.62791" > + id="text12"><tspan > + sodipodi:role="line" > + id="tspan12" > + style="stroke-width:1" > + x="45.418606" > + y="216.62791" /></text> > + <g > + id="g34"> > + <rect > + style="fill:#ffffff;stroke:#008033;stroke-width:1;stroke-dasharray:none" > + id="rect7" > + width="19.539951" > + height="6.9818101" > + x="22.811832" > + y="210.3201" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008033;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="52.663685" > + y="216.07796" > + id="text68"><tspan > + sodipodi:role="line" > + x="52.663685" > + y="216.07796" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#008033;stroke-width:0.0690111" > + id="tspan68">UMC</tspan></text> > + </g> > + <g > + id="g29" > + transform="translate(-0.52916667)"> > + <rect > + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" > + id="rect8" > + width="3.8659263" > + height="4.2845292" > + x="22.782616" > + y="220.36148" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="48.966854" > + y="224.15474" > + id="text13"><tspan > + sodipodi:role="line" > + x="48.966854" > + y="224.15474" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#00ff00;stroke-width:0.0690111" > + id="tspan13">Memory hub</tspan></text> > + </g> > + <rect > + style="fill:#ffffff;stroke:#0000ff;stroke-width:1;stroke-dasharray:none" > + id="rect13" > + width="28.674419" > + height="11.302325" > + x="43.988369" > + y="192.98618" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="58.325581" > + y="200.90428" > + id="text14"><tspan > + sodipodi:role="line" > + x="58.325581" > + y="200.90428" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan14">DCN</tspan></text> > + <g > + id="g12" > + transform="translate(-1.8520837,2.3812496)"> > + <g > + id="g13"> > + <rect > + style="fill:#ffffff;stroke:#ffd42a;stroke-width:1;stroke-dasharray:none" > + id="rect15" > + width="28.674419" > + height="11.302325" > + x="114.87544" > + y="169.54433" > + ry="2.6458333" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="129.06978" > + y="177.46243" > + id="text15"><tspan > + sodipodi:role="line" > + x="129.06978" > + y="177.46243" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan15">PSP</tspan></text> > + </g> > + </g> > + <path > + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" > + d="m 73.88372,201.92338 h 43.74419 V 184.5631" > + id="path16" > + sodipodi:nodetypes="ccc" /> > + <rect > + style="fill:#ffffff;stroke:#00ccff;stroke-width:1;stroke-dasharray:none" > + id="rect16" > + width="40.220226" > + height="11.1272" > + x="150.82011" > + y="193.07373" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="170.78101" > + y="200.90428" > + id="text16"><tspan > + sodipodi:role="line" > + x="170.78101" > + y="200.90428" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan16">PCIe (NBIO)</tspan></text> > + <g > + id="g11" > + transform="translate(-5.0270833,-8.8635417)"> > + <rect > + style="fill:#ffffff;stroke:#5f5fd3;stroke-width:1;stroke-dasharray:none" > + id="rect19" > + width="28.674419" > + height="11.302325" > + x="146.1279" > + y="132.70711" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="160.75085" > + y="140.62521" > + id="text19"><tspan > + sodipodi:role="line" > + x="160.75085" > + y="140.62521" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan19">VCN</tspan></text> > + </g> > + <g > + id="g5" > + transform="translate(0,5.8208336)"> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="110.18288" > + y="73.872185" > + id="text14-7"><tspan > + sodipodi:role="line" > + x="110.18288" > + y="73.872185" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan14-7">Graphics & Compute (GC)</tspan></text> > + <g > + id="g4" > + transform="translate(10.583333)"> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="58.022533" > + y="83.518799" > + id="text14-7-5"><tspan > + sodipodi:role="line" > + x="58.022533" > + y="83.518799" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan14-7-6">Shader</tspan><tspan > + sodipodi:role="line" > + x="58.022533" > + y="90.574348" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan20">Engine(SE)</tspan><tspan > + sodipodi:role="line" > + x="58.022533" > + y="97.629898" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan21">#1</tspan></text> > + <rect > + style="fill:none;stroke:#aa0000;stroke-width:1.01356;stroke-dasharray:none;stroke-dashoffset:0" > + id="rect20" > + width="31.954243" > + height="22.038303" > + x="42.18652" > + y="77.410309" /> > + </g> > + <g > + id="g3" > + transform="translate(14.287499,-0.66146851)"> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="97.020706" > + y="91.105995" > + id="text24"><tspan > + sodipodi:role="line" > + x="97.020706" > + y="91.105995" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan24">SE #2</tspan></text> > + <rect > + style="fill:none;stroke:#aa0000;stroke-width:1.01356;stroke-dasharray:none;stroke-dashoffset:0" > + id="rect24" > + width="31.954243" > + height="22.038303" > + x="81.080269" > + y="78.071777" /> > + </g> > + <g > + id="g2" > + transform="translate(-3.96875)"> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="158.03574" > + y="90.444527" > + id="text30"><tspan > + sodipodi:role="line" > + x="158.03574" > + y="90.444527" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan30">SE #N</tspan></text> > + <rect > + style="fill:none;stroke:#aa0000;stroke-width:1.01356;stroke-dasharray:none;stroke-dashoffset:0" > + id="rect30" > + width="31.954243" > + height="22.038303" > + x="141.93443" > + y="77.410309" /> > + </g> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="132.011" > + y="88.873962" > + id="text4"><tspan > + sodipodi:role="line" > + x="132.011" > + y="88.873962" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan4">...</tspan></text> > + <rect > + style="fill:none;stroke:#ff8080;stroke-width:1;stroke-dasharray:none" > + id="rect4" > + width="126.7475" > + height="35.863121" > + x="46.912045" > + y="68.129692" /> > + </g> > + <g > + id="g10" > + transform="translate(-8.807217,1.0583333)"> > + <rect > + style="fill:#ffffff;stroke:#ff6600;stroke-width:1;stroke-dasharray:none" > + id="rect10" > + width="50.551014" > + height="10.992874" > + x="65.641136" > + y="122.93423" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="91.040474" > + y="130.69762" > + id="text10"><tspan > + sodipodi:role="line" > + x="91.040474" > + y="130.69762" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan10">SMU</tspan></text> > + </g> > + <rect > + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" > + id="rect14" > + width="3.8659263" > + height="4.2845292" > + x="164.57497" > + y="125.16281" /> > + <rect > + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" > + id="rect18" > + width="3.8659263" > + height="4.2845292" > + x="67.340591" > + y="194.48364" /> > + <g > + id="g25" > + transform="translate(165.76146,89.164578)"> > + <g > + id="g17" > + transform="translate(-127.72192,-84.269792)"> > + <rect > + style="fill:#ffffff;stroke:#ff00ff;stroke-width:1;stroke-dasharray:none" > + id="rect17" > + width="50.551014" > + height="10.992874" > + x="83.42868" > + y="140.39673" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="108.55814" > + y="148.16011" > + id="text17"><tspan > + sodipodi:role="line" > + x="108.55814" > + y="148.16011" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan17">SDMA</tspan></text> > + </g> > + <g > + id="g24"> > + <rect > + style="fill:#00d400;stroke:#00d400;stroke-width:0.348444;stroke-dasharray:none" > + id="rect21" > + width="3.8659263" > + height="4.2845292" > + x="0.79788309" > + y="57.429478" /> > + </g> > + </g> > + <path > + style="fill:none;stroke:#ff6600;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0;marker-end:url(#ArrowWideRounded)" > + d="M 56.046208,126.07948 H 51.151416 V 110.60136" > + id="path21" > + sodipodi:nodetypes="ccc" /> > + <path > + style="fill:none;stroke:#ff6600;stroke-width:1;stroke-dasharray:1,1;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" > + d="m 107.63996,129.38677 h 31.91723" > + id="path22" /> > + <g > + id="g26" > + transform="translate(103.05521,-16.801041)"> > + <path > + style="fill:none;stroke:#ff6600;stroke-width:0.684499;stroke-dasharray:0.684499, 0.684499;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" > + d="M 14.374335,237.26538 H 29.87027" > + id="path23" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="41.690811" > + y="239.50058" > + id="text23"><tspan > + sodipodi:role="line" > + x="41.690811" > + y="239.50058" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.0690111" > + id="tspan23">Reset</tspan></text> > + </g> > + <path > + style="fill:none;stroke:#ff6600;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0;marker-end:url(#ArrowWideRounded)" > + d="m 56.046208,133.69217 h -4.894792 v 58.07604" > + id="path24" > + sodipodi:nodetypes="ccc" /> > + <path > + style="fill:none;stroke:#ff6600;stroke-width:1;stroke-dasharray:1,1;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" > + d="m 95.977781,134.7651 v 15.92063 l 23.944789,0.007" > + id="path25" > + sodipodi:nodetypes="ccc" /> > + <path > + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" > + d="m 116.34935,212.1162 h 16.22753" > + id="path26" > + sodipodi:nodetypes="cc" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="159.95955" > + y="214.49745" > + id="text26"><tspan > + sodipodi:role="line" > + x="159.95955" > + y="214.49745" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ffd42a;stroke-width:0.0690111" > + id="tspan26">PSP Interaction</tspan></text> > + <path > + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" > + d="m 142.93997,177.05254 12.78794,1e-5 v -20.13841" > + id="path27" > + sodipodi:nodetypes="ccc" /> > + <path > + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" > + d="m 154.31705,177.05254 24.03273,1e-5 v -47.79807 h -6.87917" > + id="path28" > + sodipodi:nodetypes="cccc" /> > + <rect > + style="fill:#008033;stroke:#008033;stroke-width:1.12152;stroke-dasharray:none" > + id="rect31" > + width="28.449656" > + height="23.148542" > + x="-9.3648224" > + y="152.25124" /> > + <rect > + style="fill:#008033;stroke:#008033;stroke-width:1.12152;stroke-dasharray:none" > + id="rect32" > + width="28.449656" > + height="23.148542" > + x="-9.3648224" > + y="71.817902" /> > + <rect > + style="fill:#008033;stroke:#008033;stroke-width:1.12152;stroke-dasharray:none" > + id="rect33" > + width="28.449656" > + height="23.148542" > + x="198.46539" > + y="152.25124" /> > + <rect > + style="fill:#008033;stroke:#008033;stroke-width:1.12152;stroke-dasharray:none" > + id="rect34" > + width="28.449656" > + height="23.148542" > + x="198.46539" > + y="71.817902" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008033;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="-124.65836" > + y="32.94923" > + id="text34" > + transform="rotate(-90)"><tspan > + sodipodi:role="line" > + x="-124.65836" > + y="32.94923" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.93889px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#008033;stroke-width:0.0690111" > + id="tspan34">UMC</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:4.93889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#008033;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="-124.65836" > + y="189.71486" > + id="text35" > + transform="rotate(-90)"><tspan > + sodipodi:role="line" > + x="-124.65836" > + y="189.71486" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.93889px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#008033;stroke-width:0.0690111" > + id="tspan35">UMC</tspan></text> > + <path > + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" > + d="M 69.069766,195.36981 V 166.59317 H 34.403946" > + id="path35" > + sodipodi:nodetypes="ccc" /> > + <path > + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" > + d="M 69.167488,195.36981 V 166.59317 H 184.79581" > + id="path36" > + sodipodi:nodetypes="ccc" /> > + <path > + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" > + d="m 33.58103,118.30671 h 141.39539 v 30.03021" > + id="path37" > + sodipodi:nodetypes="ccc" /> > + <path > + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" > + d="m 166.53415,126.77338 h 19.0256" > + id="path38" > + sodipodi:nodetypes="cc" /> > + <path > + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" > + d="m 166.53415,148.99838 h 19.0256" > + id="path39" > + sodipodi:nodetypes="cc" /> > + <g > + id="g40" > + transform="translate(0,-1.8520833)"> > + <circle > + style="fill:#ff8080;stroke:#ff2a2a;stroke-width:0.7;stroke-dasharray:none;stroke-dashoffset:0" > + id="path40" > + cx="7.2723336" > + cy="194.07741" > + r="10.186459" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="7.1728497" > + y="195.6649" > + id="text40"><tspan > + sodipodi:role="line" > + x="7.1728492" > + y="195.6649" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan40">Firmware</tspan></text> > + </g> > + <path > + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" > + d="m 34.063928,174.00984 78.801482,0.26458" > + id="path41" > + sodipodi:nodetypes="cc" /> > + <path > + style="fill:none;stroke:#ffd42a;stroke-width:1;stroke-dasharray:8, 1;stroke-dashoffset:0" > + d="M 8.1347613,181.0213 27.537285,174.27442" > + id="path42" > + sodipodi:nodetypes="cc" /> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="4.5742564" > + y="84.897125" > + id="text42"><tspan > + sodipodi:role="line" > + x="4.5742559" > + y="84.897125" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan42">Memory</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="4.5742564" > + y="165.33046" > + id="text43"><tspan > + sodipodi:role="line" > + x="4.5742559" > + y="165.33046" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan43">Memory</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="212.40446" > + y="165.33046" > + id="text44"><tspan > + sodipodi:role="line" > + x="212.40446" > + y="165.33046" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan44">Memory</tspan></text> > + <text > + xml:space="preserve" > + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111" > + x="212.40446" > + y="84.897125" > + id="text45"><tspan > + sodipodi:role="line" > + x="212.40446" > + y="84.897125" > + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.0690111" > + id="tspan45">Memory</tspan></text> > + <path > + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" > + d="m 171.56123,77.957755 13.99852,0" > + id="path45" > + sodipodi:nodetypes="cc" /> > + <path > + style="fill:none;stroke:#00d455;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0" > + d="m 34.639355,77.957755 h 13.99852" > + id="path46" > + sodipodi:nodetypes="cc" /> > + </g> > +</svg> > diff --git a/Documentation/gpu/amdgpu/amdgpu-glossary.rst b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > index eb72e6f6d4f1..a3f9565d655b 100644 > --- a/Documentation/gpu/amdgpu/amdgpu-glossary.rst > +++ b/Documentation/gpu/amdgpu/amdgpu-glossary.rst > @@ -227,6 +227,9 @@ we have a dedicated glossary for Display Core at > TOC > Table of Contents > > + UMC > + Unified Memory Controller > + > UMSCH > User Mode Scheduler > > diff --git a/Documentation/gpu/amdgpu/driver-core.rst b/Documentation/gpu/amdgpu/driver-core.rst > index 3ce276272171..13f13e2e5497 100644 > --- a/Documentation/gpu/amdgpu/driver-core.rst > +++ b/Documentation/gpu/amdgpu/driver-core.rst > @@ -77,6 +77,31 @@ VCN (Video Core Next) > decode. It's exposed to userspace for user mode drivers (VA-API, > OpenMAX, etc.) > > +It is important to note that these blocks can interact with each other. The > +picture below illustrates some of the components and their interconnection: > + > +.. kernel-figure:: amd_overview_block.svg > + > +In the diagram, memory-related blocks are represented by a green color. Notice > +that specific IPs have a green block that represents a small hardware block > +named 'hub', which is responsible for interfacing with memory (pre-vega devices > +have a dedicated block for that, named GMC). In the driver code, you can GMC is replaced by UMC and it's not a hub. > +identify this component by looking for the suffix hub, for example: gfxhub, > +dchub, mmhub, vmhub, etc. All memory hubs are connected in the UMC, which in > +turn is connected to memory blocks. > + > +There is some level of protection for certain elements in memory, and the PSP > +plays an essential role in this area. For example, when a specific firmware is > +loaded into the memory, PSP takes an action to ensure that the firmware has a > +valid signature. Another use of PSP is to support the TA (e.g., HDCP) and > +encrypted memory via TMZ. > + Overall, you may summarize as PSP takes care of security features - authenticating firmware, hardware access protection, content protection etc. > +Another IP that deserves attention is the SMU, as it is connected to all the > +other IPs. SMU will help put the GPU in optimal utilization by taking into > +account performance and power consumption. SMU helps other blocks to set up a > +proper clock configuration. Another feature of SMU is the support for resetting > +every component. SMU has a broader meaning. What is referred to as SMU in driver stands for power management controller which is responsible for resets, power and thermal management. Thanks, Lijo > + > .. _pipes-and-queues-description: > > GFX, Compute, and SDMA Overall Behavior ^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH v3 4/5] Documentation/gpu: Add more information about GC 2025-10-20 19:38 [PATCH v3 0/5] Expand kernel-doc with more generic details and info about ring buffers Rodrigo Siqueira ` (2 preceding siblings ...) 2025-10-20 19:38 ` [PATCH v3 3/5] Documentation/gpu: Expand generic block information Rodrigo Siqueira @ 2025-10-20 19:38 ` Rodrigo Siqueira 2025-10-20 20:30 ` Alex Deucher 2025-10-20 19:38 ` [PATCH v3 5/5] Documentation/gpu: Add documentation about ring buffer Rodrigo Siqueira 2025-10-21 12:52 ` [PATCH v3 0/5] Expand kernel-doc with more generic details and info about ring buffers Alex Deucher 5 siblings, 1 reply; 24+ messages in thread From: Rodrigo Siqueira @ 2025-10-20 19:38 UTC (permalink / raw) To: Alex Deucher, Christian König, Timur Kristóf Cc: amd-gfx, kernel-dev, Rodrigo Siqueira This commit introduces a diagram and a set of information that details the different sets of schedulers available in the SE. Cc: Alex Deucher <alexander.deucher@amd.com> Cc: Christian König <christian.koenig@amd.com> Cc: Timur Kristóf <timur.kristof@gmail.com> Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> --- Documentation/gpu/amdgpu/gc/index.rst | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Documentation/gpu/amdgpu/gc/index.rst b/Documentation/gpu/amdgpu/gc/index.rst index ff6e9ef5cbee..b6b583c9dc6a 100644 --- a/Documentation/gpu/amdgpu/gc/index.rst +++ b/Documentation/gpu/amdgpu/gc/index.rst @@ -7,19 +7,21 @@ The relationship between the CPU and GPU can be described as the producer-consumer problem, where the CPU fills out a buffer with operations (producer) to be executed by the GPU (consumer). The requested operations in -the buffer are called Command Packets, which can be summarized as a compressed -way of transmitting command information to the graphics controller. +the buffer are called **Command Packets**, which can be summarized as a +compressed way of transmitting command information to the graphics controller. The component that acts as the front end between the CPU and the GPU is called -the Command Processor (CP). This component is responsible for providing greater -flexibility to the GC since CP makes it possible to program various aspects of -the GPU pipeline. CP also coordinates the communication between the CPU and GPU -via a mechanism named **Ring Buffers**, where the CPU appends information to -the buffer while the GPU removes operations. It is relevant to highlight that a -CPU can add a pointer to the Ring Buffer that points to another region of -memory outside the Ring Buffer, and CP can handle it; this mechanism is called -**Indirect Buffer (IB)**. CP receives and parses the Command Streams (CS), and -writes the operations to the correct hardware blocks. +**Command Processor (CP)**. This component is responsible for providing greater +flexibility to the **Graphics and Compute (GC)** since CP makes it possible to +program various aspects of the GPU pipeline. CP also coordinates the +communication between the CPU and GPU via a mechanism named **Ring Buffers**, +where the CPU appends information to the buffer while the GPU removes +operations. CP is also responsible for handling **Indirect Buffers (IB)**. + +For reference, internally the CP consists of several sub-blocks (CPC - CP +compute, CPG - CP graphics, and CPF - CP fetcher). Some of these acronyms +appear in register names, but this is more of an implementation detail and not +something that directly impacts driver programming or debugging. Graphics (GFX) and Compute Microcontrollers ------------------------------------------- -- 2.51.0 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH v3 4/5] Documentation/gpu: Add more information about GC 2025-10-20 19:38 ` [PATCH v3 4/5] Documentation/gpu: Add more information about GC Rodrigo Siqueira @ 2025-10-20 20:30 ` Alex Deucher 0 siblings, 0 replies; 24+ messages in thread From: Alex Deucher @ 2025-10-20 20:30 UTC (permalink / raw) To: Rodrigo Siqueira Cc: Alex Deucher, Christian König, Timur Kristóf, amd-gfx, kernel-dev On Mon, Oct 20, 2025 at 3:47 PM Rodrigo Siqueira <siqueira@igalia.com> wrote: > > This commit introduces a diagram and a set of information that details > the different sets of schedulers available in the SE. > > Cc: Alex Deucher <alexander.deucher@amd.com> > Cc: Christian König <christian.koenig@amd.com> > Cc: Timur Kristóf <timur.kristof@gmail.com> > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> > --- > Documentation/gpu/amdgpu/gc/index.rst | 24 +++++++++++++----------- > 1 file changed, 13 insertions(+), 11 deletions(-) > > diff --git a/Documentation/gpu/amdgpu/gc/index.rst b/Documentation/gpu/amdgpu/gc/index.rst > index ff6e9ef5cbee..b6b583c9dc6a 100644 > --- a/Documentation/gpu/amdgpu/gc/index.rst > +++ b/Documentation/gpu/amdgpu/gc/index.rst > @@ -7,19 +7,21 @@ > The relationship between the CPU and GPU can be described as the > producer-consumer problem, where the CPU fills out a buffer with operations > (producer) to be executed by the GPU (consumer). The requested operations in > -the buffer are called Command Packets, which can be summarized as a compressed > -way of transmitting command information to the graphics controller. > +the buffer are called **Command Packets**, which can be summarized as a > +compressed way of transmitting command information to the graphics controller. > > The component that acts as the front end between the CPU and the GPU is called > -the Command Processor (CP). This component is responsible for providing greater > -flexibility to the GC since CP makes it possible to program various aspects of > -the GPU pipeline. CP also coordinates the communication between the CPU and GPU > -via a mechanism named **Ring Buffers**, where the CPU appends information to > -the buffer while the GPU removes operations. It is relevant to highlight that a > -CPU can add a pointer to the Ring Buffer that points to another region of > -memory outside the Ring Buffer, and CP can handle it; this mechanism is called > -**Indirect Buffer (IB)**. CP receives and parses the Command Streams (CS), and > -writes the operations to the correct hardware blocks. > +**Command Processor (CP)**. This component is responsible for providing greater > +flexibility to the **Graphics and Compute (GC)** since CP makes it possible to > +program various aspects of the GPU pipeline. CP also coordinates the > +communication between the CPU and GPU via a mechanism named **Ring Buffers**, > +where the CPU appends information to the buffer while the GPU removes > +operations. CP is also responsible for handling **Indirect Buffers (IB)**. > + > +For reference, internally the CP consists of several sub-blocks (CPC - CP > +compute, CPG - CP graphics, and CPF - CP fetcher). Some of these acronyms > +appear in register names, but this is more of an implementation detail and not > +something that directly impacts driver programming or debugging. > > Graphics (GFX) and Compute Microcontrollers > ------------------------------------------- > -- > 2.51.0 > ^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH v3 5/5] Documentation/gpu: Add documentation about ring buffer 2025-10-20 19:38 [PATCH v3 0/5] Expand kernel-doc with more generic details and info about ring buffers Rodrigo Siqueira ` (3 preceding siblings ...) 2025-10-20 19:38 ` [PATCH v3 4/5] Documentation/gpu: Add more information about GC Rodrigo Siqueira @ 2025-10-20 19:38 ` Rodrigo Siqueira 2025-10-20 20:53 ` Alex Deucher 2025-10-21 12:52 ` [PATCH v3 0/5] Expand kernel-doc with more generic details and info about ring buffers Alex Deucher 5 siblings, 1 reply; 24+ messages in thread From: Rodrigo Siqueira @ 2025-10-20 19:38 UTC (permalink / raw) To: Alex Deucher, Christian König, Timur Kristóf Cc: amd-gfx, kernel-dev, Rodrigo Siqueira AMDGPU heavily relies on ring buffers to manage its components; as a result, it has an elaborate mechanism of operation with multiple details around it. This commit introduces new documentation on ring buffers, detailing their management and expanding the explanation of Enforce isolation. Finally, this commit also adds the documentation available in the amdgpu_ring.c file to it. Cc: Alex Deucher <alexander.deucher@amd.com> Cc: Christian König <christian.koenig@amd.com> Cc: Timur Kristóf <timur.kristof@gmail.com> Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> --- .../gpu/amdgpu/enforce_isolation.svg | 654 +++++++ Documentation/gpu/amdgpu/gfx_pipeline_seq.svg | 413 +++++ Documentation/gpu/amdgpu/index.rst | 1 + .../gpu/amdgpu/no_enforce_isolation.svg | 707 +++++++ Documentation/gpu/amdgpu/ring-buffer.rst | 91 + Documentation/gpu/amdgpu/ring_buffers.svg | 1633 +++++++++++++++++ Documentation/gpu/amdgpu/userq.rst | 2 + 7 files changed, 3501 insertions(+) create mode 100644 Documentation/gpu/amdgpu/enforce_isolation.svg create mode 100644 Documentation/gpu/amdgpu/gfx_pipeline_seq.svg create mode 100644 Documentation/gpu/amdgpu/no_enforce_isolation.svg create mode 100644 Documentation/gpu/amdgpu/ring-buffer.rst create mode 100644 Documentation/gpu/amdgpu/ring_buffers.svg diff --git a/Documentation/gpu/amdgpu/enforce_isolation.svg b/Documentation/gpu/amdgpu/enforce_isolation.svg new file mode 100644 index 000000000000..2630681f1cb9 --- /dev/null +++ b/Documentation/gpu/amdgpu/enforce_isolation.svg @@ -0,0 +1,654 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="67.794067mm" + height="88.643349mm" + viewBox="0 0 67.794066 88.643348" + version="1.1" + id="svg1" + inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" + sodipodi:docname="enforce_isolation.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview1" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + inkscape:zoom="3.5754724" + inkscape:cx="200.95247" + inkscape:cy="182.77305" + inkscape:window-width="3840" + inkscape:window-height="2083" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="layer1" /> + <defs + id="defs1"> + <marker + style="overflow:visible" + id="ArrowWideHeavy" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Wide, heavy arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + style="fill:context-stroke;fill-rule:evenodd;stroke:none" + d="m 1,0 -3,3 h -2 l 3,-3 -3,-3 h 2 z" + id="path3" /> + </marker> + <marker + style="overflow:visible" + id="Dot" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Dot" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:none" + d="M 5,0 C 5,2.76 2.76,5 0,5 -2.76,5 -5,2.76 -5,0 c 0,-2.76 2.3,-5 5,-5 2.76,0 5,2.24 5,5 z" + sodipodi:nodetypes="sssss" + id="path98" /> + </marker> + <marker + style="overflow:visible" + id="marker99" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Dot" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:none" + d="M 5,0 C 5,2.76 2.76,5 0,5 -2.76,5 -5,2.76 -5,0 c 0,-2.76 2.3,-5 5,-5 2.76,0 5,2.24 5,5 z" + sodipodi:nodetypes="sssss" + id="path99" /> + </marker> + </defs> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(71.49059,-1.1271925)"> + <g + id="g15" + transform="matrix(0.42247861,0,0,0.42247861,-70.575576,-25.242317)"> + <path + id="path33" + style="fill:none;stroke:#000000;stroke-width:0.721067;stroke-dasharray:none" + d="M 30.278993,176.45537 A 22.905334,22.905334 0 0 0 7.3737955,199.36057 22.905334,22.905334 0 0 0 30.278993,222.26603 22.905334,22.905334 0 0 0 53.18445,199.36057 22.905334,22.905334 0 0 0 30.278993,176.45537 Z m 0,7.13274 a 15.772359,15.772359 0 0 1 15.77246,15.77246 15.772359,15.772359 0 0 1 -15.77246,15.77246 15.772359,15.772359 0 0 1 -15.772206,-15.77246 15.772359,15.772359 0 0 1 15.772206,-15.77246 z" /> + <g + id="g14"> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 46.31405,200.72093 h 6.430134" + id="path34" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 7.6848605,200.72093 H 14.114993" + id="path35" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 30.103415,176.7326 v 6.43014" + id="path36" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 30.103415,215.50586 V 221.936" + id="path37" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,214.1052 3.21507,5.56866" + id="path38" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,184.66805 3.21507,-5.56866" + id="path39" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,184.66805 -3.21507,-5.56866" + id="path40" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,214.05288 -3.21507,5.56866" + id="path41" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,208.65101 4.546794,4.5468" + id="path42" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,189.96525 4.546794,-4.5468" + id="path43" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 17.202394,189.96525 12.6556,185.41845" + id="path44-1" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 16.940766,208.65101 -4.546794,4.5468" + id="path45-8" + sodipodi:nodetypes="cc" /> + </g> + </g> + <rect + style="fill:#afe9c6;stroke:#16502d;stroke-width:0.257104;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + id="rect80" + width="25.076588" + height="10.493422" + x="-71.362038" + y="79.148567" + ry="1.4529352" /> + <rect + style="fill:#80e5ff;stroke:#00aad4;stroke-width:0.257104;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + id="rect81" + width="32.714355" + height="10.436013" + x="-40.481403" + y="79.177269" + ry="1.4449863" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.53042px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-59.013123" + y="86.726654" + id="text14-7"><tspan + sodipodi:role="line" + x="-59.013123" + y="86.726654" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.53042px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.102999" + id="tspan14-7">GFX</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.53042px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-24.387218" + y="85.975647" + id="text95"><tspan + sodipodi:role="line" + x="-24.387218" + y="85.975647" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.53042px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.102999" + id="tspan95">Compute</tspan></text> + <path + style="fill:#de8787;stroke:#000000;stroke-width:0.385656;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#Dot);marker-end:url(#marker99)" + d="M -58.079264,78.410023 V 69.962845" + id="path127" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.90242px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-61.752651" + y="3.1995225" + id="text112"><tspan + sodipodi:role="line" + x="-61.752651" + y="3.1995225" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.90242px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.102999" + id="tspan112">Processes</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.247306;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:1.48383, 1.48383;stroke-dashoffset:0" + id="rect113" + width="64.703476" + height="19.562067" + x="-68.52655" + y="4.468956" + ry="1.6976216" /> + <g + id="g84" + transform="matrix(0.25710378,0,0,0.25710378,0.68647434,8.7899633)"> + <g + id="g83"> + <circle + style="fill:#ffffff;stroke:#ff00ff;stroke-width:1.62704;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0" + id="circle137" + cx="-225.65012" + cy="20.747513" + r="30.822298" /> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:16.9333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="-225.65012" + y="26.8181" + id="text113"><tspan + sodipodi:role="line" + x="-225.65012" + y="26.8181" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.9333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.400612" + id="tspan113">A</tspan></text> + </g> + <g + id="g85" + transform="matrix(0.25710378,0,0,0.25710378,20.618429,8.7899633)"> + <circle + style="fill:#ffffff;stroke:#ff9955;stroke-width:1.62704;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0" + id="circle112" + cx="-207.94376" + cy="20.747513" + r="30.822298" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:16.9333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="-208.25702" + y="26.792702" + id="text114"><tspan + sodipodi:role="line" + x="-208.25702" + y="26.792702" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.9333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.400612" + id="tspan114">B</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-56.126556" + y="51.72607" + id="text6"><tspan + sodipodi:role="line" + x="-56.126556" + y="51.72607" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.102999" + id="tspan6">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.26752px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-57.861526" + y="58.416431" + id="text136"><tspan + sodipodi:role="line" + x="-57.861526" + y="58.416431" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.26752px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.102999" + id="tspan136">Ring</tspan><tspan + sodipodi:role="line" + x="-57.861526" + y="61.250832" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.26752px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.102999" + id="tspan137">Buffer</tspan></text> + <g + id="g80" + transform="matrix(0.42247861,0,0,0.42247861,-37.21188,-25.242317)"> + <path + id="path67" + style="fill:none;stroke:#000000;stroke-width:0.721067;stroke-dasharray:none" + d="M 30.278993,176.45537 A 22.905334,22.905334 0 0 0 7.3737955,199.36057 22.905334,22.905334 0 0 0 30.278993,222.26603 22.905334,22.905334 0 0 0 53.18445,199.36057 22.905334,22.905334 0 0 0 30.278993,176.45537 Z m 0,7.13274 a 15.772359,15.772359 0 0 1 15.77246,15.77246 15.772359,15.772359 0 0 1 -15.77246,15.77246 15.772359,15.772359 0 0 1 -15.772206,-15.77246 15.772359,15.772359 0 0 1 15.772206,-15.77246 z" /> + <g + id="g79"> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 46.31405,200.72093 h 6.430134" + id="path68" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 7.6848605,200.72093 H 14.114993" + id="path69" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 30.103415,176.7326 v 6.43014" + id="path70" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 30.103415,215.50586 V 221.936" + id="path71" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,214.1052 3.21507,5.56866" + id="path72" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,184.66805 3.21507,-5.56866" + id="path73" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,184.66805 -3.21507,-5.56866" + id="path74" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,214.05288 -3.21507,5.56866" + id="path75" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,208.65101 4.546794,4.5468" + id="path76" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,189.96525 4.546794,-4.5468" + id="path77" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 17.202394,189.96525 12.6556,185.41845" + id="path78" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 16.940766,208.65101 -4.546794,4.5468" + id="path79" + sodipodi:nodetypes="cc" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.26752px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-24.497828" + y="58.416431" + id="text81"><tspan + sodipodi:role="line" + x="-24.497828" + y="58.416431" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.26752px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.102999" + id="tspan80">Ring</tspan><tspan + sodipodi:role="line" + x="-24.497828" + y="61.250832" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.26752px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.102999" + id="tspan81">Buffer</tspan></text> + <path + style="fill:#de8787;stroke:#000000;stroke-width:0.385656;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#Dot);marker-end:url(#marker99)" + d="M -24.338879,78.410023 V 69.962845" + id="path81" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-52.574932" + y="53.340443" + id="text82"><tspan + sodipodi:role="line" + x="-52.574932" + y="53.340443" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.102999" + id="tspan82">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-50.045757" + y="57.376377" + id="text83"><tspan + sodipodi:role="line" + x="-50.045757" + y="57.376377" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.102999" + id="tspan83">A</tspan></text> + <g + id="g1" + transform="translate(0,-16.057901)"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-12.593401" + y="57.349865" + id="text83-59"><tspan + sodipodi:role="line" + x="-12.593401" + y="57.349865" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.102999" + id="tspan83-7">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-9.8666544" + y="57.349865" + id="text83-59-3"><tspan + sodipodi:role="line" + x="-9.8666544" + y="57.349865" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.102999" + id="tspan83-7-6">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-24.724035" + y="57.3466" + id="text83-5-9"><tspan + sodipodi:role="line" + x="-24.724035" + y="57.3466" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.102999" + id="tspan83-4-2">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-22.315107" + y="57.3466" + id="text83-5-9-9"><tspan + sodipodi:role="line" + x="-22.315107" + y="57.3466" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.102999" + id="tspan83-4-2-5">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-19.937738" + y="57.3466" + id="text83-5-9-9-7"><tspan + sodipodi:role="line" + x="-19.937738" + y="57.3466" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.102999" + id="tspan83-4-2-5-2">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-17.56146" + y="57.3466" + id="text83-5-9-9-7-0"><tspan + sodipodi:role="line" + x="-17.56146" + y="57.3466" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.102999" + id="tspan83-4-2-5-2-6">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-15.185183" + y="57.3466" + id="text83-5-9-9-7-0-4"><tspan + sodipodi:role="line" + x="-15.185183" + y="57.3466" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.102999" + id="tspan83-4-2-5-2-6-9">B</tspan></text> + </g> + <g + id="g2" + transform="translate(0,-16.057901)"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-46.032711" + y="57.349865" + id="text83-7"><tspan + sodipodi:role="line" + x="-46.032711" + y="57.349865" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.102999" + id="tspan83-8">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-42.773308" + y="57.349865" + id="text83-7-4"><tspan + sodipodi:role="line" + x="-42.773308" + y="57.349865" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.102999" + id="tspan83-8-3">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-55.041409" + y="57.3466" + id="text83-5"><tspan + sodipodi:role="line" + x="-55.041409" + y="57.3466" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.102999" + id="tspan83-4">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-57.982994" + y="57.3466" + id="text83-5-3"><tspan + sodipodi:role="line" + x="-57.982994" + y="57.3466" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.102999" + id="tspan83-4-5">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-52.099823" + y="57.3466" + id="text83-5-6"><tspan + sodipodi:role="line" + x="-52.099823" + y="57.3466" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.102999" + id="tspan83-4-9">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-49.158237" + y="57.3466" + id="text83-5-6-5"><tspan + sodipodi:role="line" + x="-49.158237" + y="57.3466" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.102999" + id="tspan83-4-9-2">C</tspan></text> + </g> + <g + id="g86" + transform="matrix(0.25710378,0,0,0.25710378,17.422136,8.7899633)"> + <circle + style="fill:#ffffff;stroke:#ff0000;stroke-width:1.62704;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0" + id="circle84" + cx="-121.9205" + cy="20.747513" + r="30.822298" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:16.9333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="-122.11524" + y="26.792702" + id="text84"><tspan + sodipodi:role="line" + x="-122.11524" + y="26.792702" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.9333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.400612" + id="tspan84">C</tspan></text> + </g> + <text + xml:space="preserve" + style="font-size:2.17681px;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O';text-align:start;letter-spacing:1.26323px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#000000;stroke-width:0.257104;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + x="-140.03215" + y="26.074423" + id="text86"><tspan + sodipodi:role="line" + id="tspan86" + style="stroke-width:0.257104" + x="-140.03215" + y="26.074423" /></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.463569;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + id="rect89" + width="62.753353" + height="10.962811" + x="-68.911674" + y="32.218185" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.26751px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-37.552006" + y="35.595592" + id="text89"><tspan + sodipodi:role="line" + x="-37.552006" + y="35.595592" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.26751px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.102999" + id="tspan89">Enforce Isolation</tspan></text> + <path + style="fill:#de8787;stroke:#000000;stroke-width:0.385656;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#Dot);marker-end:url(#marker99)" + d="M -57.807162,48.273529 V 44.392491" + id="path90" + sodipodi:nodetypes="cc" /> + <path + style="fill:#de8787;stroke:#000000;stroke-width:0.385656;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#Dot);marker-end:url(#marker99)" + d="M -24.512426,48.273529 V 44.392491" + id="path91" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#ff00ff;stroke-width:0.257104;stroke-linecap:square;stroke-dasharray:none;marker-end:url(#ArrowWideHeavy)" + d="m -57.329023,22.418572 v 9.208373" + id="path1" /> + <path + style="fill:#ff00ff;stroke:#ff9955;stroke-width:0.257104;stroke-linecap:square;stroke-dasharray:none;marker-end:url(#ArrowWideHeavy)" + d="m -32.844695,22.418572 v 9.208373" + id="path2" /> + <path + style="fill:#ff00ff;stroke:#ff0000;stroke-width:0.257104;stroke-linecap:square;stroke-dasharray:none;marker-end:url(#ArrowWideHeavy)" + d="m -13.924085,22.418572 v 9.208373" + id="path4" /> + <path + style="fill:none;stroke:#ff00ff;stroke-width:0.257104;stroke-linecap:square;stroke-dasharray:none;marker-end:url(#ArrowWideHeavy)" + d="m -57.329023,22.418572 v 5.174952 h 20.852017 v 4.033421" + id="path5" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#ff0000;stroke-width:0.257104;stroke-linecap:square;stroke-dasharray:none;marker-end:url(#ArrowWideHeavy)" + d="m -13.924085,22.418572 v 3.652908 h -34.777483 v 5.555465" + id="path6" + sodipodi:nodetypes="cccc" /> + </g> +</svg> diff --git a/Documentation/gpu/amdgpu/gfx_pipeline_seq.svg b/Documentation/gpu/amdgpu/gfx_pipeline_seq.svg new file mode 100644 index 000000000000..2f2c8fa98059 --- /dev/null +++ b/Documentation/gpu/amdgpu/gfx_pipeline_seq.svg @@ -0,0 +1,413 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="141.76276mm" + height="51.906979mm" + viewBox="0 0 141.76275 51.906979" + version="1.1" + id="svg1" + inkscape:version="1.4 (e7c3feb100, 2024-10-09)" + sodipodi:docname="gfx_pipeline_seq.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview1" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + inkscape:zoom="1.2641204" + inkscape:cx="470.28748" + inkscape:cy="63.680643" + inkscape:window-width="3072" + inkscape:window-height="1651" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="layer1" /> + <defs + id="defs1"> + <marker + style="overflow:visible" + id="ArrowWideHeavy" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Wide, heavy arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + style="fill:context-stroke;fill-rule:evenodd;stroke:none" + d="m 1,0 -3,3 h -2 l 3,-3 -3,-3 h 2 z" + id="path3" /> + </marker> + </defs> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(23.062206,-30.75877)"> + <rect + style="fill:#ffffff;stroke:none;stroke-width:0.694678;stroke-linecap:square;stroke-dasharray:4.16805, 4.16805" + id="rect1" + width="141.76276" + height="51.906979" + x="-23.062206" + y="30.75877" /> + <g + id="g28" + transform="matrix(1.0835493,0,0,1.0835493,-30.079831,-159.17628)"> + <path + id="path18" + style="fill:none;stroke:#000000;stroke-width:0.721067;stroke-dasharray:none" + d="M 30.278993,176.45537 A 22.905334,22.905334 0 0 0 7.3737955,199.36057 22.905334,22.905334 0 0 0 30.278993,222.26603 22.905334,22.905334 0 0 0 53.18445,199.36057 22.905334,22.905334 0 0 0 30.278993,176.45537 Z m 0,7.13274 a 15.772359,15.772359 0 0 1 15.77246,15.77246 15.772359,15.772359 0 0 1 -15.77246,15.77246 15.772359,15.772359 0 0 1 -15.772206,-15.77246 15.772359,15.772359 0 0 1 15.772206,-15.77246 z" /> + <g + id="g27"> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 46.31405,200.72093 h 6.430134" + id="path19" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 7.6848605,200.72093 H 14.114993" + id="path20" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 30.103415,176.7326 v 6.43014" + id="path21" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 30.103415,215.50586 V 221.936" + id="path22" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,214.1052 3.21507,5.56866" + id="path23" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,184.66805 3.21507,-5.56866" + id="path24" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,184.66805 -3.21507,-5.56866" + id="path25" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,214.05288 -3.21507,5.56866" + id="path26" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,208.65101 4.546794,4.5468" + id="path27" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,189.96525 4.546794,-4.5468" + id="path28" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 17.202394,189.96525 12.6556,185.41845" + id="path29" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 16.940766,208.65101 -4.546794,4.5468" + id="path30" + sodipodi:nodetypes="cc" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:3.92107px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.434083" + x="23.133495" + y="52.750404" + id="text24"><tspan + sodipodi:role="line" + x="23.133495" + y="52.750404" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.92107px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.434083" + id="tspan24">IB<tspan + style="font-size:3.92107px;baseline-shift:sub;fill:#ff9955;stroke-width:0.434083" + id="tspan27">b</tspan></tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.88054px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.434083" + x="2.4917324" + y="55.12072" + id="text139"><tspan + sodipodi:role="line" + x="2.4917324" + y="55.12072" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.88054px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.434083" + id="tspan138">Ring</tspan><tspan + sodipodi:role="line" + x="2.4917324" + y="63.721394" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.88054px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.434083" + id="tspan139">Buffer</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:3.92107px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.434083" + x="22.115709" + y="65.117416" + id="text18"><tspan + sodipodi:role="line" + x="22.115709" + y="65.117416" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.92107px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#87decd;stroke-width:0.434083" + id="tspan18">IB<tspan + style="font-size:3.92107px;baseline-shift:sub;fill:#87decd;stroke-width:0.434083" + id="tspan17">c</tspan></tspan></text> + <g + id="g62" + transform="matrix(0.69467788,0,0,0.69467788,-104.6214,-57.027324)"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#37abc8;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="221.50526" + y="173.96935" + id="text48"><tspan + sodipodi:role="line" + x="221.50526" + y="173.96935" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#37abc8;stroke-width:0.400612" + id="tspan48">SX</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#37abc8;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="238.1783" + y="173.96935" + id="text49"><tspan + sodipodi:role="line" + x="238.1783" + y="173.96935" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#37abc8;stroke-width:0.400612" + id="tspan49">GE</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#37abc8;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="255.66414" + y="173.96935" + id="text50"><tspan + sodipodi:role="line" + x="255.66414" + y="173.96935" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#37abc8;stroke-width:0.400612" + id="tspan50">SPI</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="273.01663" + y="173.96935" + id="text51"><tspan + sodipodi:role="line" + x="273.01663" + y="173.96935" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan51">SC</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="289.11816" + y="173.97888" + id="text52"><tspan + sodipodi:role="line" + x="289.11816" + y="173.97888" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan52">PA</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff2a2a;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="311.40778" + y="174.08365" + id="text53"><tspan + sodipodi:role="line" + x="311.40778" + y="174.08365" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff2a2a;stroke-width:0.400612" + id="tspan53">Cache</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 226.31089,171.70241 h 6.95598" + id="path53" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 242.81883,171.70241 h 6.95598" + id="path54" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 261.37781,171.70241 h 6.95598" + id="path55" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 277.50475,171.70241 h 6.95598" + id="path56" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 294.08254,171.70241 h 6.95598" + id="path57" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 189.90312,171.70241 h 26.34385" + id="path60" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 311.60514,176.14239 v 9.61994 H 184.98772" + id="path61" + sodipodi:nodetypes="ccc" /> + </g> + <path + style="fill:#37c871;stroke:#00d455;stroke-width:0.367601;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + d="m 40.698106,46.362333 4.844663,13.377322" + id="path62" + sodipodi:nodetypes="cc" /> + <path + style="fill:#37c871;stroke:#00d455;stroke-width:0.367601;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + d="m 52.62426,46.362333 4.844663,13.377322" + id="path63" + sodipodi:nodetypes="cc" /> + <path + style="fill:#37c871;stroke:#00d455;stroke-width:0.367601;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + d="m 64.55042,46.362333 4.844663,13.377322" + id="path64" + sodipodi:nodetypes="cc" /> + <path + style="fill:#37c871;stroke:#00d455;stroke-width:0.367601;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + d="m 75.962512,46.362333 4.844663,13.377322" + id="path65" + sodipodi:nodetypes="cc" /> + <path + style="fill:#37c871;stroke:#00d455;stroke-width:0.367601;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + d="m 87.580235,46.362333 4.844663,13.377322" + id="path66" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.4112px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#37abc8;fill-opacity:1;stroke:none;stroke-width:0.278297" + x="37.018822" + y="45.730473" + id="text2"><tspan + sodipodi:role="line" + x="37.018822" + y="45.730473" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.4112px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#37abc8;stroke-width:0.278297" + id="tspan2">SX</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.4112px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#37abc8;fill-opacity:1;stroke:none;stroke-width:0.278297" + x="48.601212" + y="45.730473" + id="text3"><tspan + sodipodi:role="line" + x="48.601212" + y="45.730473" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.4112px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#37abc8;stroke-width:0.278297" + id="tspan3">GE</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.4112px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#37abc8;fill-opacity:1;stroke:none;stroke-width:0.278297" + x="60.748234" + y="45.730473" + id="text4"><tspan + sodipodi:role="line" + x="60.748234" + y="45.730473" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.4112px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#37abc8;stroke-width:0.278297" + id="tspan4">SPI</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.4112px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.278297" + x="72.802635" + y="45.730473" + id="text11"><tspan + sodipodi:role="line" + x="72.802635" + y="45.730473" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.4112px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.278297" + id="tspan11">SC</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.4112px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.278297" + x="83.988014" + y="45.737099" + id="text13"><tspan + sodipodi:role="line" + x="83.988014" + y="45.737099" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.4112px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.278297" + id="tspan13">PA</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:4.4112px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff2a2a;fill-opacity:1;stroke:none;stroke-width:0.278297" + x="99.472122" + y="45.809875" + id="text14"><tspan + sodipodi:role="line" + x="99.472122" + y="45.809875" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.4112px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff2a2a;stroke-width:0.278297" + id="tspan14">Cache</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:0.367601;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 40.357179,44.155689 h 4.832165" + id="path44" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.367601;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 51.82488,44.155689 h 4.832165" + id="path45" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.367601;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 64.717393,44.155689 h 4.832165" + id="path46" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.367601;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 75.920422,44.155689 h 4.832165" + id="path47" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.367601;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 87.436645,44.155689 h 4.832166" + id="path48" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.367601;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 24.215741,44.155689 h 7.813702" + id="path58" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.367601;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)" + d="m 100.63732,46.931607 v 6.68276 H 29.848557" + id="path59" + sodipodi:nodetypes="ccc" /> + </g> +</svg> diff --git a/Documentation/gpu/amdgpu/index.rst b/Documentation/gpu/amdgpu/index.rst index 45523e9860fc..8732084186a4 100644 --- a/Documentation/gpu/amdgpu/index.rst +++ b/Documentation/gpu/amdgpu/index.rst @@ -8,6 +8,7 @@ Next (GCN), Radeon DNA (RDNA), and Compute DNA (CDNA) architectures. .. toctree:: driver-core + ring-buffer amd-hardware-list-info module-parameters gc/index diff --git a/Documentation/gpu/amdgpu/no_enforce_isolation.svg b/Documentation/gpu/amdgpu/no_enforce_isolation.svg new file mode 100644 index 000000000000..b224615e1611 --- /dev/null +++ b/Documentation/gpu/amdgpu/no_enforce_isolation.svg @@ -0,0 +1,707 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="68.949203mm" + height="86.909332mm" + viewBox="0 0 68.949202 86.909332" + version="1.1" + id="svg1" + inkscape:version="1.4 (e7c3feb100, 2024-10-09)" + sodipodi:docname="enforce_isolation.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview1" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + inkscape:zoom="1.7877362" + inkscape:cx="291.15034" + inkscape:cy="332.54347" + inkscape:window-width="3072" + inkscape:window-height="1651" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="g61" /> + <defs + id="defs1"> + <marker + style="overflow:visible" + id="ArrowWideHeavy" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Wide, heavy arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + style="fill:context-stroke;fill-rule:evenodd;stroke:none" + d="m 1,0 -3,3 h -2 l 3,-3 -3,-3 h 2 z" + id="path3" /> + </marker> + <marker + style="overflow:visible" + id="Dot" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Dot" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:none" + d="M 5,0 C 5,2.76 2.76,5 0,5 -2.76,5 -5,2.76 -5,0 c 0,-2.76 2.3,-5 5,-5 2.76,0 5,2.24 5,5 z" + sodipodi:nodetypes="sssss" + id="path98" /> + </marker> + <marker + style="overflow:visible" + id="marker99" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Dot" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:none" + d="M 5,0 C 5,2.76 2.76,5 0,5 -2.76,5 -5,2.76 -5,0 c 0,-2.76 2.3,-5 5,-5 2.76,0 5,2.24 5,5 z" + sodipodi:nodetypes="sssss" + id="path99" /> + </marker> + </defs> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(72.009598,0.94510132)"> + <g + id="g61"> + <rect + style="fill:#ffffff;stroke:none;stroke-width:0.25654;stroke-linecap:square;stroke-dasharray:none" + id="rect6" + width="68.949203" + height="86.909332" + x="-72.009598" + y="-0.94510132" /> + <g + id="g15" + transform="matrix(0.42247861,0,0,0.42247861,-70.575576,-29.756289)"> + <path + id="path33" + style="fill:none;stroke:#000000;stroke-width:0.721067;stroke-dasharray:none" + d="M 30.278993,176.45537 A 22.905334,22.905334 0 0 0 7.3737955,199.36057 22.905334,22.905334 0 0 0 30.278993,222.26603 22.905334,22.905334 0 0 0 53.18445,199.36057 22.905334,22.905334 0 0 0 30.278993,176.45537 Z m 0,7.13274 a 15.772359,15.772359 0 0 1 15.77246,15.77246 15.772359,15.772359 0 0 1 -15.77246,15.77246 15.772359,15.772359 0 0 1 -15.772206,-15.77246 15.772359,15.772359 0 0 1 15.772206,-15.77246 z" /> + <g + id="g14"> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 46.31405,200.72093 h 6.430134" + id="path34" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 7.6848605,200.72093 H 14.114993" + id="path35" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 30.103415,176.7326 v 6.43014" + id="path36" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 30.103415,215.50586 V 221.936" + id="path37" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,214.1052 3.21507,5.56866" + id="path38" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,184.66805 3.21507,-5.56866" + id="path39" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,184.66805 -3.21507,-5.56866" + id="path40" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,214.05288 -3.21507,5.56866" + id="path41" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,208.65101 4.546794,4.5468" + id="path42" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,189.96525 4.546794,-4.5468" + id="path43" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 17.202394,189.96525 12.6556,185.41845" + id="path44-1" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 16.940766,208.65101 -4.546794,4.5468" + id="path45-8" + sodipodi:nodetypes="cc" /> + </g> + </g> + <rect + style="fill:#afe9c6;stroke:#16502d;stroke-width:0.257104;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + id="rect80" + width="25.076588" + height="10.493422" + x="-71.362038" + y="74.63459" + ry="1.4529352" /> + <rect + style="fill:#80e5ff;stroke:#00aad4;stroke-width:0.257104;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + id="rect81" + width="32.714355" + height="10.436013" + x="-40.481403" + y="74.663292" + ry="1.4449863" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.53042px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-59.013123" + y="82.212669" + id="text14-7"><tspan + sodipodi:role="line" + x="-59.013123" + y="82.212669" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.53042px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.102999" + id="tspan14-7">GFX</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.53042px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-24.387218" + y="81.46167" + id="text95"><tspan + sodipodi:role="line" + x="-24.387218" + y="81.46167" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.53042px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.102999" + id="tspan95">Compute</tspan></text> + <path + style="fill:#de8787;stroke:#000000;stroke-width:0.385656;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#Dot);marker-end:url(#marker99)" + d="M -58.079264,73.89605 V 65.448872" + id="path127" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.90242px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-61.752651" + y="3.1995225" + id="text112"><tspan + sodipodi:role="line" + x="-61.752651" + y="3.1995225" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.90242px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.102999" + id="tspan112">Processes</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.247306;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:1.48383, 1.48383;stroke-dashoffset:0" + id="rect113" + width="64.703476" + height="19.562067" + x="-68.52655" + y="4.468956" + ry="1.6976216" /> + <g + id="g84" + transform="matrix(0.25710378,0,0,0.25710378,0.68647434,8.7899633)"> + <g + id="g83"> + <circle + style="fill:#ffffff;stroke:#ff00ff;stroke-width:1.62704;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0" + id="circle137" + cx="-225.65012" + cy="20.747513" + r="30.822298" /> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:16.9333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="-225.65012" + y="26.8181" + id="text113"><tspan + sodipodi:role="line" + x="-225.65012" + y="26.8181" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.9333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.400612" + id="tspan113">A</tspan></text> + </g> + <g + id="g85" + transform="matrix(0.25710378,0,0,0.25710378,20.618429,8.7899633)"> + <circle + style="fill:#ffffff;stroke:#ff9955;stroke-width:1.62704;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0" + id="circle112" + cx="-207.94376" + cy="20.747513" + r="30.822298" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:16.9333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="-208.25702" + y="26.792702" + id="text114"><tspan + sodipodi:role="line" + x="-208.25702" + y="26.792702" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.9333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.400612" + id="tspan114">B</tspan></text> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-56.126556" + y="47.212101" + id="text6"><tspan + sodipodi:role="line" + x="-56.126556" + y="47.212101" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.102999" + id="tspan6">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.26752px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-57.861526" + y="53.902462" + id="text136"><tspan + sodipodi:role="line" + x="-57.861526" + y="53.902462" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.26752px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.102999" + id="tspan136">Ring</tspan><tspan + sodipodi:role="line" + x="-57.861526" + y="56.736862" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.26752px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.102999" + id="tspan137">Buffer</tspan></text> + <g + id="g80" + transform="matrix(0.42247861,0,0,0.42247861,-37.21188,-29.756289)"> + <path + id="path67" + style="fill:none;stroke:#000000;stroke-width:0.721067;stroke-dasharray:none" + d="M 30.278993,176.45537 A 22.905334,22.905334 0 0 0 7.3737955,199.36057 22.905334,22.905334 0 0 0 30.278993,222.26603 22.905334,22.905334 0 0 0 53.18445,199.36057 22.905334,22.905334 0 0 0 30.278993,176.45537 Z m 0,7.13274 a 15.772359,15.772359 0 0 1 15.77246,15.77246 15.772359,15.772359 0 0 1 -15.77246,15.77246 15.772359,15.772359 0 0 1 -15.772206,-15.77246 15.772359,15.772359 0 0 1 15.772206,-15.77246 z" /> + <g + id="g79"> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 46.31405,200.72093 h 6.430134" + id="path68" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 7.6848605,200.72093 H 14.114993" + id="path69" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 30.103415,176.7326 v 6.43014" + id="path70" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 30.103415,215.50586 V 221.936" + id="path71" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,214.1052 3.21507,5.56866" + id="path72" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,184.66805 3.21507,-5.56866" + id="path73" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,184.66805 -3.21507,-5.56866" + id="path74" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,214.05288 -3.21507,5.56866" + id="path75" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,208.65101 4.546794,4.5468" + id="path76" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,189.96525 4.546794,-4.5468" + id="path77" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 17.202394,189.96525 12.6556,185.41845" + id="path78" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 16.940766,208.65101 -4.546794,4.5468" + id="path79" + sodipodi:nodetypes="cc" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.26752px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-24.497828" + y="53.902462" + id="text81"><tspan + sodipodi:role="line" + x="-24.497828" + y="53.902462" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.26752px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.102999" + id="tspan80">Ring</tspan><tspan + sodipodi:role="line" + x="-24.497828" + y="56.736862" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.26752px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.102999" + id="tspan81">Buffer</tspan></text> + <path + style="fill:#de8787;stroke:#000000;stroke-width:0.385656;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#Dot);marker-end:url(#marker99)" + d="M -24.338879,73.89605 V 65.448872" + id="path81" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-52.574932" + y="48.826473" + id="text82"><tspan + sodipodi:role="line" + x="-52.574932" + y="48.826473" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.102999" + id="tspan82">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-50.045757" + y="52.862404" + id="text83"><tspan + sodipodi:role="line" + x="-50.045757" + y="52.862404" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.102999" + id="tspan83">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-31.907158" + y="58.226768" + id="text83-59"><tspan + sodipodi:role="line" + x="-31.907158" + y="58.226768" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.102999" + id="tspan83-7">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-32.436516" + y="53.169308" + id="text83-59-3"><tspan + sodipodi:role="line" + x="-32.436516" + y="53.169308" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.102999" + id="tspan83-7-6">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-65.422112" + y="57.972916" + id="text83-7"><tspan + sodipodi:role="line" + x="-65.422112" + y="57.972916" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.102999" + id="tspan83-8">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-65.713165" + y="52.732723" + id="text83-7-4"><tspan + sodipodi:role="line" + x="-65.713165" + y="52.732723" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff00ff;stroke-width:0.102999" + id="tspan83-8-3">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-52.897129" + y="61.668709" + id="text83-5"><tspan + sodipodi:role="line" + x="-52.897129" + y="61.668709" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.102999" + id="tspan83-4">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-19.174068" + y="49.045818" + id="text83-5-9"><tspan + sodipodi:role="line" + x="-19.174068" + y="49.045818" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.102999" + id="tspan83-4-2">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-16.531792" + y="53.259804" + id="text83-5-9-9"><tspan + sodipodi:role="line" + x="-16.531792" + y="53.259804" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.102999" + id="tspan83-4-2-5">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-19.325029" + y="61.488995" + id="text83-5-9-9-7"><tspan + sodipodi:role="line" + x="-19.325029" + y="61.488995" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.102999" + id="tspan83-4-2-5-2">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-22.869593" + y="63.231686" + id="text83-5-9-9-7-0"><tspan + sodipodi:role="line" + x="-22.869593" + y="63.231686" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.102999" + id="tspan83-4-2-5-2-6">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-26.235374" + y="63.331181" + id="text83-5-9-9-7-0-4"><tspan + sodipodi:role="line" + x="-26.235374" + y="63.331181" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.102999" + id="tspan83-4-2-5-2-6-9">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-56.235538" + y="63.072704" + id="text83-5-6"><tspan + sodipodi:role="line" + x="-56.235538" + y="63.072704" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.102999" + id="tspan83-4-9">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:2.17681px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.102999" + x="-59.697765" + y="63.066635" + id="text83-5-6-5"><tspan + sodipodi:role="line" + x="-59.697765" + y="63.066635" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.17681px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.102999" + id="tspan83-4-9-2">C</tspan></text> + <circle + style="fill:#ffcc00;stroke:#00d455;stroke-width:0.213261;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + id="path83" + cx="-50.145481" + cy="57.387428" + r="1.0712636" /> + <circle + style="fill:#ffcc00;stroke:#00d455;stroke-width:0.213261;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + id="path83-7" + cx="-16.886913" + cy="57.596024" + r="1.0712636" /> + <circle + style="fill:#ffcc00;stroke:#00d455;stroke-width:0.213261;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + id="path83-7-7" + cx="-29.53648" + cy="60.832634" + r="1.0712636" /> + <circle + style="fill:#ffcc00;stroke:#00d455;stroke-width:0.213261;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + id="path83-7-7-9" + cx="-29.751556" + cy="48.260994" + r="1.0712636" /> + <circle + style="fill:#ffcc00;stroke:#00d455;stroke-width:0.213261;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + id="path83-4" + cx="-63.051891" + cy="60.73439" + r="1.0712636" /> + <circle + style="fill:#ffcc00;stroke:#00d455;stroke-width:0.213261;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + id="path83-4-2" + cx="-63.022129" + cy="48.24374" + r="1.0712636" /> + <g + id="g86" + transform="matrix(0.25710378,0,0,0.25710378,17.422136,8.7899633)"> + <circle + style="fill:#ffffff;stroke:#ff0000;stroke-width:1.62704;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0" + id="circle84" + cx="-121.9205" + cy="20.747513" + r="30.822298" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:16.9333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="-122.11524" + y="26.792702" + id="text84"><tspan + sodipodi:role="line" + x="-122.11524" + y="26.792702" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.9333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.400612" + id="tspan84">C</tspan></text> + </g> + <text + xml:space="preserve" + style="font-size:2.17681px;font-family:'Linux Libertine O';-inkscape-font-specification:'Linux Libertine O';text-align:start;letter-spacing:1.26323px;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#000000;stroke-width:0.257104;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + x="-140.03215" + y="26.074423" + id="text86"><tspan + sodipodi:role="line" + id="tspan86" + style="stroke-width:0.257104" + x="-140.03215" + y="26.074423" /></text> + <g + id="g90" + transform="matrix(0.25710378,0,0,0.25710378,18.175509,7.82134)"> + <rect + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + id="rect86" + width="92.604057" + height="26.883123" + x="-338.30258" + y="93.635468" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:8.81944px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="-291.13989" + y="110.58046" + id="text88"><tspan + sodipodi:role="line" + x="-291.13989" + y="110.58046" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:8.81944px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan88">Enforce Isolation</tspan></text> + </g> + <g + id="g89" + transform="matrix(0.25710378,0,0,0.25710378,18.606009,7.82134)"> + <rect + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + id="rect89" + width="119.67937" + height="26.749132" + x="-219.35185" + y="93.702461" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:8.81944px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="-159.57832" + y="110.40636" + id="text89"><tspan + sodipodi:role="line" + x="-159.57832" + y="110.40636" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:8.81944px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan89">Enforce Isolation</tspan></text> + </g> + <path + style="fill:#de8787;stroke:#000000;stroke-width:0.385656;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#Dot);marker-end:url(#marker99)" + d="M -57.807162,43.759556 V 39.878518" + id="path90" + sodipodi:nodetypes="cc" /> + <path + style="fill:#de8787;stroke:#000000;stroke-width:0.385656;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#Dot);marker-end:url(#marker99)" + d="M -24.512426,43.759556 V 39.878518" + id="path91" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#ff00ff;stroke-width:0.257104;stroke-linecap:square;stroke-dasharray:none;marker-end:url(#ArrowWideHeavy)" + d="m -57.329023,22.418572 v 9.208373" + id="path1" /> + <path + style="fill:#ff00ff;stroke:#ff9955;stroke-width:0.257104;stroke-linecap:square;stroke-dasharray:none;marker-end:url(#ArrowWideHeavy)" + d="m -32.844695,22.418572 v 9.208373" + id="path2" /> + <path + style="fill:#ff00ff;stroke:#ff0000;stroke-width:0.257104;stroke-linecap:square;stroke-dasharray:none;marker-end:url(#ArrowWideHeavy)" + d="m -13.924085,22.418572 v 9.208373" + id="path4" /> + <path + style="fill:none;stroke:#ff00ff;stroke-width:0.257104;stroke-linecap:square;stroke-dasharray:none;marker-end:url(#ArrowWideHeavy)" + d="m -57.329023,22.418572 v 5.174952 h 20.852017 v 4.033421" + id="path5" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#ff0000;stroke-width:0.257104;stroke-linecap:square;stroke-dasharray:none;marker-end:url(#ArrowWideHeavy)" + d="m -13.924085,22.418572 v 3.652908 h -34.777483 v 5.555465" + id="path6" + sodipodi:nodetypes="cccc" /> + </g> + </g> +</svg> diff --git a/Documentation/gpu/amdgpu/ring-buffer.rst b/Documentation/gpu/amdgpu/ring-buffer.rst new file mode 100644 index 000000000000..015d803541fe --- /dev/null +++ b/Documentation/gpu/amdgpu/ring-buffer.rst @@ -0,0 +1,91 @@ +============= + Ring Buffer +============= + +To handle communication between user space and kernel space, amdgpu adopts a +strategy based on a ring buffer, which is used by GFX, Compute, SDMA, UVD, VCE, +VCN, VPE, KIQ, MES, UMSCH, and CPER. See the figure below that illustrates how +this communication works: + +.. kernel-figure:: ring_buffers.svg + +Ring buffers in the amdgpu work as a producer-consumer problem, where userspace +acts as the producer, constantly filling the ring buffer with GPU commands to +be executed. Meanwhile, the GPU retrieves the information from the ring, parses +it, and distributes the specific set of instructions between the different +amdgpu blocks. Notice from the diagram that the ring has a Read Pointer (rptr) +that indicates where the GPU is currently reading, and there is a Write Pointer +(wptr) that indicates where the host has written the message. Note that every +time something is written to the ring, the wptr is incremented. Meanwhile, the +GPU constantly updates the rptr pointer, chasing the wptr until both pointers +are equal. The User space or the driver can utilize the rptr pointer to roughly +estimate how many instructions are still pending completion. + +Usually, ring buffers in the driver have a limited size (search for occurrences +of `amdgpu_ring_init()`). One of the reasons for the small ring buffer size is +that CP (Command Processor) is capable of following addresses inserted into the +ring; this is illustrated in the image by the reference to the IB (Indirect +Buffer). The IB gives userspace the possibility to have an area in memory that +CP can read and feed the hardware with extra instructions. + +All ASICs pre-GFX11 use what is called a kernel queue, which means +the ring is allocated in kernel space and has some restrictions, such as not +being able to be :ref:`preempted directly by the scheduler<amdgpu-mes>`. GFX11 +and newer support kernel queues, but also provide a new mechanism named +:ref:`user queues<amdgpu-userq>`, where the queue is moved to the user space +and can be mapped and unmapped via the scheduler. In practice, both queues +insert user-space-generated GPU commands from different jobs into the requested +component ring. + +Enforce Isolation +================= + +Before examining the Enforce Isolation mechanism in the ring buffer context, it +is helpful to briefly discuss how instructions from the ring buffer are +processed in the graphics pipeline. Let’s expand on this topic by checking the +diagram below that illustrates the graphics pipeline: + +.. kernel-figure:: gfx_pipeline_seq.svg + +In terms of executing instructions, the GFX pipeline follows the sequence: +Shader Export (SX), Geometry Engine (GE), Shader Process or Input (SPI), Scan +Converter (SC), Primitive Assembler (PA), and cache manipulation (which may +vary across ASICs). Another common way to describe the pipeline is to use Pixel +Shader (PS), raster, and Vertex Shader (VS) to symbolize the two shader stages. +Now, with this pipeline in mind, let's assume that Job B causes a hang issue, +but Job C's instruction might already be executing, leading developers to +incorrectly identify Job C as the problematic one. This problem can be +mitigated on multiple levels; the diagram below illustrates how to minimize +part of this problem: + +.. kernel-figure:: no_enforce_isolation.svg + +Note from the diagram that there is no guarantee of order or a clear separation +between instructions, which is not a problem most of the time, and is also good +for performance. Furthermore, notice some circles between jobs in the diagram +that represent a **fence wait** used to avoid overlapping work in the ring. At +the end of the fence, a cache flush occurs, ensuring that when the next job +starts, it begins in a clean state and, if issues arise, the developer can +pinpoint the problematic process more precisely. + +To increase the level of isolation between jobs, there is the "Enforce +Isolation" method described in the picture below: + +.. kernel-figure:: enforce_isolation.svg + +As shown in the diagram, enforcing isolation introduces ordering between +submissions, since the access to GFX/Compute/Other is serialized. Notice that +this approach has a significant performance impact, as it allows only one job +to submit commands at a time. However, this option can help pinpoint the job +that caused the problem. Although enforcing isolation improves the situation, +it does not fully resolve the issue of precisely pinpointing bad jobs, since +isolation might mask the problem. In summary, identifying which job caused the +issue may not be precise, but enforcing isolation might help with the +debugging. + +Ring Operations +=============== + +.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c + :internal: + diff --git a/Documentation/gpu/amdgpu/ring_buffers.svg b/Documentation/gpu/amdgpu/ring_buffers.svg new file mode 100644 index 000000000000..7a6fcb19e151 --- /dev/null +++ b/Documentation/gpu/amdgpu/ring_buffers.svg @@ -0,0 +1,1633 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="588.32483mm" + height="341.81656mm" + viewBox="0 0 588.32483 341.81656" + version="1.1" + id="svg1" + inkscape:version="1.4 (e7c3feb100, 2024-10-09)" + sodipodi:docname="RING_BUFFER.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview1" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + inkscape:zoom="0.89386809" + inkscape:cx="1106.9866" + inkscape:cy="729.97348" + inkscape:window-width="3072" + inkscape:window-height="1651" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="layer1" /> + <defs + id="defs1"> + <marker + style="overflow:visible" + id="marker154" + refX="2" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Empty semicircle" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:1.08" + d="m -0.7647042,-3.0274156 c 1.656,0 3,1.344 3,3 0,1.656 -1.344,3 -3,3" + id="path154" /> + </marker> + <marker + style="overflow:visible" + id="ArrowTriangleStylized" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Stylized triangle arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt" + d="m 6,0 c -3,1 -7,3 -9,5 0,0 0,-4 2,-5 -2,-1 -2,-5 -2,-5 2,2 6,4 9,5 z" + id="path135" /> + </marker> + <marker + style="overflow:visible" + id="marker132" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Diamond" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.45)" + style="fill:context-stroke;fill-rule:evenodd;stroke:none" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path132" /> + </marker> + <marker + style="overflow:visible" + id="Diamond" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Diamond" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.45)" + style="fill:context-stroke;fill-rule:evenodd;stroke:none" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path131" /> + </marker> + <marker + style="overflow:visible" + id="ArrowWide" + refX="0" + refY="0" + orient="auto-start-reverse" + inkscape:stockid="Wide arrow" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt" + d="M 3,-3 0,0 3,3" + transform="rotate(180,0.125,0)" + sodipodi:nodetypes="ccc" + id="path81" /> + </marker> + <marker + style="overflow:visible" + id="marker99" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Dot" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:none" + d="M 5,0 C 5,2.76 2.76,5 0,5 -2.76,5 -5,2.76 -5,0 c 0,-2.76 2.3,-5 5,-5 2.76,0 5,2.24 5,5 z" + sodipodi:nodetypes="sssss" + id="path99" /> + </marker> + <marker + style="overflow:visible" + id="Dot" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Dot" + markerWidth="1" + markerHeight="1" + viewBox="0 0 1 1" + inkscape:isstock="true" + inkscape:collect="always" + preserveAspectRatio="xMidYMid"> + <path + transform="scale(0.5)" + style="fill:context-stroke;fill-rule:evenodd;stroke:none" + d="M 5,0 C 5,2.76 2.76,5 0,5 -2.76,5 -5,2.76 -5,0 c 0,-2.76 2.3,-5 5,-5 2.76,0 5,2.24 5,5 z" + sodipodi:nodetypes="sssss" + id="path98" /> + </marker> + </defs> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(123.51219,3.0159921)"> + <rect + style="fill:#ffffff;stroke:none;stroke-width:1;stroke-linecap:square;stroke-dasharray:1, 2;stroke-dashoffset:0" + id="rect167" + width="595.25238" + height="349.86984" + x="-128.24815" + y="-8.0479612" /> + <rect + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:1, 2;stroke-dashoffset:0" + id="rect111" + width="500.64935" + height="63.365536" + x="-65.219322" + y="168.41347" + ry="5.4989429" /> + <path + style="fill:none;stroke:#917c6f;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#marker154)" + d="M 24.09216,175.30492 V 125.06784 H 47.447018 V 83.98949" + id="path151" + sodipodi:nodetypes="cccc" /> + <g + id="g15" + transform="translate(-4.735971)"> + <path + id="path1" + style="fill:none;stroke:#000000;stroke-width:0.721067;stroke-dasharray:none" + d="M 30.278993,176.45537 A 22.905334,22.905334 0 0 0 7.3737955,199.36057 22.905334,22.905334 0 0 0 30.278993,222.26603 22.905334,22.905334 0 0 0 53.18445,199.36057 22.905334,22.905334 0 0 0 30.278993,176.45537 Z m 0,7.13274 a 15.772359,15.772359 0 0 1 15.77246,15.77246 15.772359,15.772359 0 0 1 -15.77246,15.77246 15.772359,15.772359 0 0 1 -15.772206,-15.77246 15.772359,15.772359 0 0 1 15.772206,-15.77246 z" /> + <g + id="g14"> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 46.31405,200.72093 h 6.430134" + id="path3" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 7.6848605,200.72093 H 14.114993" + id="path4" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 30.103415,176.7326 v 6.43014" + id="path5" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 30.103415,215.50586 V 221.936" + id="path6" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,214.1052 3.21507,5.56866" + id="path7" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,184.66805 3.21507,-5.56866" + id="path8" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,184.66805 -3.21507,-5.56866" + id="path9" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,214.05288 -3.21507,5.56866" + id="path10" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,208.65101 4.546794,4.5468" + id="path11" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,189.96525 4.546794,-4.5468" + id="path12" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 17.202394,189.96525 12.6556,185.41845" + id="path13" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 16.940766,208.65101 -4.546794,4.5468" + id="path14" + sodipodi:nodetypes="cc" /> + </g> + </g> + <g + id="g28" + transform="translate(46.175717)"> + <path + id="path15" + style="fill:none;stroke:#000000;stroke-width:0.721067;stroke-dasharray:none" + d="M 30.278993,176.45537 A 22.905334,22.905334 0 0 0 7.3737955,199.36057 22.905334,22.905334 0 0 0 30.278993,222.26603 22.905334,22.905334 0 0 0 53.18445,199.36057 22.905334,22.905334 0 0 0 30.278993,176.45537 Z m 0,7.13274 a 15.772359,15.772359 0 0 1 15.77246,15.77246 15.772359,15.772359 0 0 1 -15.77246,15.77246 15.772359,15.772359 0 0 1 -15.772206,-15.77246 15.772359,15.772359 0 0 1 15.772206,-15.77246 z" /> + <g + id="g27"> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 46.31405,200.72093 h 6.430134" + id="path16" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 7.6848605,200.72093 H 14.114993" + id="path17" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 30.103415,176.7326 v 6.43014" + id="path18" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 30.103415,215.50586 V 221.936" + id="path19" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,214.1052 3.21507,5.56866" + id="path20" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,184.66805 3.21507,-5.56866" + id="path21" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,184.66805 -3.21507,-5.56866" + id="path22" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,214.05288 -3.21507,5.56866" + id="path23" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,208.65101 4.546794,4.5468" + id="path24" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,189.96525 4.546794,-4.5468" + id="path25" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 17.202394,189.96525 12.6556,185.41845" + id="path26" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 16.940766,208.65101 -4.546794,4.5468" + id="path27" + sodipodi:nodetypes="cc" /> + </g> + </g> + <g + id="g41" + transform="translate(102.62407)"> + <path + id="path28" + style="fill:none;stroke:#000000;stroke-width:0.721067;stroke-dasharray:none" + d="M 30.278993,176.45537 A 22.905334,22.905334 0 0 0 7.3737955,199.36057 22.905334,22.905334 0 0 0 30.278993,222.26603 22.905334,22.905334 0 0 0 53.18445,199.36057 22.905334,22.905334 0 0 0 30.278993,176.45537 Z m 0,7.13274 a 15.772359,15.772359 0 0 1 15.77246,15.77246 15.772359,15.772359 0 0 1 -15.77246,15.77246 15.772359,15.772359 0 0 1 -15.772206,-15.77246 15.772359,15.772359 0 0 1 15.772206,-15.77246 z" /> + <g + id="g40"> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 46.31405,200.72093 h 6.430134" + id="path29" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 7.6848605,200.72093 H 14.114993" + id="path30" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 30.103415,176.7326 v 6.43014" + id="path31" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 30.103415,215.50586 V 221.936" + id="path32" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,214.1052 3.21507,5.56866" + id="path33" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,184.66805 3.21507,-5.56866" + id="path34" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,184.66805 -3.21507,-5.56866" + id="path35" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,214.05288 -3.21507,5.56866" + id="path36" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,208.65101 4.546794,4.5468" + id="path37" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,189.96525 4.546794,-4.5468" + id="path38" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 17.202394,189.96525 12.6556,185.41845" + id="path39" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 16.940766,208.65101 -4.546794,4.5468" + id="path40" + sodipodi:nodetypes="cc" /> + </g> + </g> + <g + id="g54" + transform="translate(154.12775)"> + <path + id="path41" + style="fill:none;stroke:#000000;stroke-width:0.721067;stroke-dasharray:none" + d="M 30.278993,176.45537 A 22.905334,22.905334 0 0 0 7.3737955,199.36057 22.905334,22.905334 0 0 0 30.278993,222.26603 22.905334,22.905334 0 0 0 53.18445,199.36057 22.905334,22.905334 0 0 0 30.278993,176.45537 Z m 0,7.13274 a 15.772359,15.772359 0 0 1 15.77246,15.77246 15.772359,15.772359 0 0 1 -15.77246,15.77246 15.772359,15.772359 0 0 1 -15.772206,-15.77246 15.772359,15.772359 0 0 1 15.772206,-15.77246 z" /> + <g + id="g53"> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 46.31405,200.72093 h 6.430134" + id="path42" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 7.6848605,200.72093 H 14.114993" + id="path43" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 30.103415,176.7326 v 6.43014" + id="path44" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 30.103415,215.50586 V 221.936" + id="path45" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,214.1052 3.21507,5.56866" + id="path46" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,184.66805 3.21507,-5.56866" + id="path47" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,184.66805 -3.21507,-5.56866" + id="path48" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,214.05288 -3.21507,5.56866" + id="path49" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,208.65101 4.546794,4.5468" + id="path50" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,189.96525 4.546794,-4.5468" + id="path51" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 17.202394,189.96525 12.6556,185.41845" + id="path52" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 16.940766,208.65101 -4.546794,4.5468" + id="path53" + sodipodi:nodetypes="cc" /> + </g> + </g> + <g + id="g67" + transform="translate(205.37341)"> + <path + id="path54" + style="fill:none;stroke:#000000;stroke-width:0.721067;stroke-dasharray:none" + d="M 30.278993,176.45537 A 22.905334,22.905334 0 0 0 7.3737955,199.36057 22.905334,22.905334 0 0 0 30.278993,222.26603 22.905334,22.905334 0 0 0 53.18445,199.36057 22.905334,22.905334 0 0 0 30.278993,176.45537 Z m 0,7.13274 a 15.772359,15.772359 0 0 1 15.77246,15.77246 15.772359,15.772359 0 0 1 -15.77246,15.77246 15.772359,15.772359 0 0 1 -15.772206,-15.77246 15.772359,15.772359 0 0 1 15.772206,-15.77246 z" /> + <g + id="g66"> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 46.31405,200.72093 h 6.430134" + id="path55" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 7.6848605,200.72093 H 14.114993" + id="path56" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 30.103415,176.7326 v 6.43014" + id="path57" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 30.103415,215.50586 V 221.936" + id="path58" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,214.1052 3.21507,5.56866" + id="path59" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,184.66805 3.21507,-5.56866" + id="path60" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,184.66805 -3.21507,-5.56866" + id="path61" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,214.05288 -3.21507,5.56866" + id="path62" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,208.65101 4.546794,4.5468" + id="path63" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,189.96525 4.546794,-4.5468" + id="path64" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 17.202394,189.96525 12.6556,185.41845" + id="path65" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 16.940766,208.65101 -4.546794,4.5468" + id="path66" + sodipodi:nodetypes="cc" /> + </g> + </g> + <g + id="g80" + transform="translate(256.63043)"> + <path + id="path67" + style="fill:none;stroke:#000000;stroke-width:0.721067;stroke-dasharray:none" + d="M 30.278993,176.45537 A 22.905334,22.905334 0 0 0 7.3737955,199.36057 22.905334,22.905334 0 0 0 30.278993,222.26603 22.905334,22.905334 0 0 0 53.18445,199.36057 22.905334,22.905334 0 0 0 30.278993,176.45537 Z m 0,7.13274 a 15.772359,15.772359 0 0 1 15.77246,15.77246 15.772359,15.772359 0 0 1 -15.77246,15.77246 15.772359,15.772359 0 0 1 -15.772206,-15.77246 15.772359,15.772359 0 0 1 15.772206,-15.77246 z" /> + <g + id="g79"> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 46.31405,200.72093 h 6.430134" + id="path68" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 7.6848605,200.72093 H 14.114993" + id="path69" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 30.103415,176.7326 v 6.43014" + id="path70" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 30.103415,215.50586 V 221.936" + id="path71" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,214.1052 3.21507,5.56866" + id="path72" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,184.66805 3.21507,-5.56866" + id="path73" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,184.66805 -3.21507,-5.56866" + id="path74" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,214.05288 -3.21507,5.56866" + id="path75" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,208.65101 4.546794,4.5468" + id="path76" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,189.96525 4.546794,-4.5468" + id="path77" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 17.202394,189.96525 12.6556,185.41845" + id="path78" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 16.940766,208.65101 -4.546794,4.5468" + id="path79" + sodipodi:nodetypes="cc" /> + </g> + </g> + <rect + style="fill:#afe9c6;stroke:#16502d;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + id="rect80" + width="97.534882" + height="40.813953" + x="2.9731095" + y="288.36279" + ry="5.6511626" /> + <rect + style="fill:#80e5ff;stroke:#00aad4;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + id="rect81" + width="199.46111" + height="40.391335" + x="110.41494" + y="288.57413" + ry="5.5926461" /> + <rect + style="fill:#de8787;stroke:#a02c2c;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + id="rect82" + width="81.028717" + height="40.88369" + x="321.87186" + y="288.32794" + ry="5.6608181" /> + <g + id="g95" + transform="translate(332.1071)"> + <path + id="path82" + style="fill:none;stroke:#000000;stroke-width:0.721067;stroke-dasharray:none" + d="M 30.278993,176.45537 A 22.905334,22.905334 0 0 0 7.3737955,199.36057 22.905334,22.905334 0 0 0 30.278993,222.26603 22.905334,22.905334 0 0 0 53.18445,199.36057 22.905334,22.905334 0 0 0 30.278993,176.45537 Z m 0,7.13274 a 15.772359,15.772359 0 0 1 15.77246,15.77246 15.772359,15.772359 0 0 1 -15.77246,15.77246 15.772359,15.772359 0 0 1 -15.772206,-15.77246 15.772359,15.772359 0 0 1 15.772206,-15.77246 z" /> + <g + id="g94"> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 46.31405,200.72093 h 6.430134" + id="path83" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 7.6848605,200.72093 H 14.114993" + id="path84" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 30.103415,176.7326 v 6.43014" + id="path85" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 30.103415,215.50586 V 221.936" + id="path86" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,214.1052 3.21507,5.56866" + id="path87" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 36.501694,184.66805 3.21507,-5.56866" + id="path88" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,184.66805 -3.21507,-5.56866" + id="path89" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 23.652811,214.05288 -3.21507,5.56866" + id="path90" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,208.65101 4.546794,4.5468" + id="path91" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 43.31839,189.96525 4.546794,-4.5468" + id="path92" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M 17.202394,189.96525 12.6556,185.41845" + id="path93" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff00ff;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="m 16.940766,208.65101 -4.546794,4.5468" + id="path94" + sodipodi:nodetypes="cc" /> + </g> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:25.4px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="51.003948" + y="317.83759" + id="text14-7"><tspan + sodipodi:role="line" + x="51.003948" + y="317.83759" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:25.4px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan14-7">GFX</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:25.4px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="209.95499" + y="314.9166" + id="text95"><tspan + sodipodi:role="line" + x="209.95499" + y="314.9166" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:25.4px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan95">Compute</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:25.4px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="361.80203" + y="317.83759" + id="text96"><tspan + sodipodi:role="line" + x="361.80203" + y="317.83759" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:25.4px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan96">SDMA</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:36.862px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="429.28961" + y="313.10159" + id="text97"><tspan + sodipodi:role="line" + x="429.28961" + y="313.10159" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:36.862px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan97">...</tspan></text> + <path + style="fill:#de8787;stroke:#000000;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#Dot);marker-end:url(#marker99)" + d="M 25.543152,285.49025 V 224.58863" + id="path97" + sodipodi:nodetypes="cc" /> + <path + style="fill:#de8787;stroke:#000000;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#Dot);marker-end:url(#marker99)" + d="M 76.45484,285.49025 V 224.58863" + id="path100" + sodipodi:nodetypes="cc" /> + <path + style="fill:#de8787;stroke:#000000;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#Dot);marker-end:url(#marker99)" + d="M 132.90319,285.49025 V 224.58863" + id="path101" + sodipodi:nodetypes="cc" /> + <path + style="fill:#de8787;stroke:#000000;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#Dot);marker-end:url(#marker99)" + d="M 184.40687,285.49025 V 224.58863" + id="path102" + sodipodi:nodetypes="cc" /> + <path + style="fill:#de8787;stroke:#000000;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#Dot);marker-end:url(#marker99)" + d="M 235.65253,285.49025 V 224.58863" + id="path103" + sodipodi:nodetypes="cc" /> + <path + style="fill:#de8787;stroke:#000000;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#Dot);marker-end:url(#marker99)" + d="M 286.90955,285.49025 V 224.58863" + id="path104" + sodipodi:nodetypes="cc" /> + <path + style="fill:#de8787;stroke:#000000;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#Dot);marker-end:url(#marker99)" + d="M 362.38622,285.49025 V 224.58863" + id="path105" + sodipodi:nodetypes="cc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:36.862px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="261.28104" + y="259.52591" + id="text105"><tspan + sodipodi:role="line" + x="261.28104" + y="259.52591" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:36.862px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan105">...</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:36.862px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="50.998993" + y="259.52591" + id="text106"><tspan + sodipodi:role="line" + x="50.998993" + y="259.52591" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:36.862px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan106">...</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:36.862px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="382.22592" + y="259.52591" + id="text107"><tspan + sodipodi:role="line" + x="382.22592" + y="259.52591" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:36.862px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan107">...</tspan></text> + <path + style="fill:#de8787;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none" + d="M -65.568535,148.88709 H 459.54211" + id="path107" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:19.7556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="415.21619" + y="166.24187" + id="text108"><tspan + sodipodi:role="line" + x="415.21619" + y="166.24187" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.7556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan108">Kernel</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:19.7556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="414.91986" + y="138.75868" + id="text109"><tspan + sodipodi:role="line" + x="414.91986" + y="138.75868" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:19.7556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan109">Userspace</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.2889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="-44.396496" + y="199.94142" + id="text110"><tspan + sodipodi:role="line" + x="-44.396496" + y="199.94142" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.2889px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan110">Kernel</tspan><tspan + sodipodi:role="line" + x="-44.396496" + y="214.05255" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.2889px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan111">Queue</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.2889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="-30.39555" + y="53.215206" + id="text112"><tspan + sodipodi:role="line" + x="-30.39555" + y="53.215206" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.2889px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan112">Processes</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:9, 9;stroke-dashoffset:0" + id="rect113" + width="452.2225" + height="75.723717" + x="-60.944237" + y="11.868809" + ry="6.5714021" /> + <circle + style="fill:#ffffff;stroke:#917c6f;stroke-width:1.62704;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0" + id="path111" + cx="47.507706" + cy="49.241512" + r="30.822298" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:16.9333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#917c6f;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="47.50771" + y="55.312099" + id="text113"><tspan + sodipodi:role="line" + x="47.50771" + y="55.312099" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.9333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#917c6f;stroke-width:0.400612" + id="tspan113">A</tspan></text> + <circle + style="fill:#ffffff;stroke:#ff9955;stroke-width:1.62704;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0" + id="circle112" + cx="176.56291" + cy="49.241512" + r="30.822298" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:16.9333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="176.24965" + y="55.286701" + id="text114"><tspan + sodipodi:role="line" + x="176.24965" + y="55.286701" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.9333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.400612" + id="tspan114">B</tspan></text> + <circle + style="fill:#ffffff;stroke:#55ddff;stroke-width:1.62704;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0" + id="circle113" + cx="305.61813" + cy="49.241512" + r="30.822298" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:16.9333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#55ddff;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="305.42337" + y="55.286701" + id="text115"><tspan + sodipodi:role="line" + x="305.42337" + y="55.286701" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.9333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#55ddff;stroke-width:0.400612" + id="tspan115">C</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:1.5;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:5.99998, 2.99999, 1.5, 2.99999;stroke-dashoffset:0" + id="rect117" + width="515.65753" + height="59.528286" + x="-65.221695" + y="278.51898" + ry="5.1659417" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:11.2889px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="-44.396496" + y="312.30948" + id="text118"><tspan + sodipodi:role="line" + x="-44.396496" + y="312.30948" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.2889px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan118">GPU</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="-17.792967" + y="194.41469" + id="text4"><tspan + sodipodi:role="line" + x="-17.792967" + y="194.41469" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.400612" + id="tspan4">wptr</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="36.248669" + y="163.10979" + id="text5"><tspan + sodipodi:role="line" + x="36.248669" + y="163.10979" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#00ff00;stroke-width:0.400612" + id="tspan5">rptr</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ac9d93;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="28.952087" + y="182.41843" + id="text6"><tspan + sodipodi:role="line" + x="28.952087" + y="182.41843" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ac9d93;stroke-width:0.400612" + id="tspan6">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ac9d93;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="37.832031" + y="186.1924" + id="text7"><tspan + sodipodi:role="line" + x="37.832031" + y="186.1924" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ac9d93;stroke-width:0.400612" + id="tspan7">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ac9d93;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="37.98003" + y="216.31021" + id="text8"><tspan + sodipodi:role="line" + x="37.98003" + y="216.31021" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ac9d93;stroke-width:0.400612" + id="tspan8">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ac9d93;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="8.1582127" + y="208.54025" + id="text9"><tspan + sodipodi:role="line" + x="8.1582127" + y="208.54025" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ac9d93;stroke-width:0.400612" + id="tspan9">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ac9d93;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="114.03775" + y="196.40289" + id="text10"><tspan + sodipodi:role="line" + x="114.03775" + y="196.40289" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ac9d93;stroke-width:0.400612" + id="tspan10">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ac9d93;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="366.5202" + y="220.80096" + id="text11"><tspan + sodipodi:role="line" + x="366.5202" + y="220.80096" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ac9d93;stroke-width:0.400612" + id="tspan11">A</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="95.389114" + y="196.60231" + id="text12"><tspan + sodipodi:role="line" + x="95.389114" + y="196.60231" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.400612" + id="tspan12">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="171.62987" + y="186.67509" + id="text13"><tspan + sodipodi:role="line" + x="171.62987" + y="186.67509" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.400612" + id="tspan13">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="358.23288" + y="220.44789" + id="text14"><tspan + sodipodi:role="line" + x="358.23288" + y="220.44789" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.400612" + id="tspan14">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#55ddff;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="94.24794" + y="208.68309" + id="text15"><tspan + sodipodi:role="line" + x="94.24794" + y="208.68309" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#55ddff;stroke-width:0.400612" + id="tspan15">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#55ddff;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="43.869183" + y="196.65234" + id="text16"><tspan + sodipodi:role="line" + x="43.869183" + y="196.65234" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#55ddff;stroke-width:0.400612" + id="tspan16">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#00ccff;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="188.07849" + y="181.51845" + id="text17"><tspan + sodipodi:role="line" + x="188.07849" + y="181.51845" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#00ccff;stroke-width:0.400612" + id="tspan17"><tspan + style="font-size:4.93889px;fill:#00ccff" + id="tspan26">IB</tspan><tspan + style="font-size:3.52778px;baseline-shift:sub;fill:#00ccff" + id="tspan25">c</tspan></tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#55ddff;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="349.12769" + y="216.0551" + id="text18"><tspan + sodipodi:role="line" + x="349.12769" + y="216.0551" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#55ddff;stroke-width:0.400612" + id="tspan18">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="43.394695" + y="208.58258" + id="text19"><tspan + sodipodi:role="line" + x="43.394695" + y="208.58258" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.400612" + id="tspan19">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="29.580742" + y="220.72212" + id="text20"><tspan + sodipodi:role="line" + x="29.580742" + y="220.72212" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.400612" + id="tspan20">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="13.045858" + y="216.32677" + id="text21"><tspan + sodipodi:role="line" + x="13.045858" + y="216.32677" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.400612" + id="tspan21">B</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#55ddff;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="21.055231" + y="220.72211" + id="text22"><tspan + sodipodi:role="line" + x="21.055231" + y="220.72211" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#55ddff;stroke-width:0.400612" + id="tspan22">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#55ddff;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="179.01208" + y="182.54855" + id="text23"><tspan + sodipodi:role="line" + x="179.01208" + y="182.54855" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#55ddff;stroke-width:0.400612" + id="tspan23">C</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="88.379082" + y="185.52925" + id="text24"><tspan + sodipodi:role="line" + x="88.379082" + y="185.52925" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.400612" + id="tspan24"><tspan + style="font-size:4.93889px;fill:#ff9955" + id="tspan28">IB</tspan><tspan + style="font-size:3.52778px;baseline-shift:sub;fill:#ff9955" + id="tspan27">b</tspan></tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="97.027405" + y="163.10979" + id="text29"><tspan + sodipodi:role="line" + x="97.027405" + y="163.10979" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#00ff00;stroke-width:0.400612" + id="tspan29">rptr</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="102.24193" + y="229.5128" + id="text30"><tspan + sodipodi:role="line" + x="102.24193" + y="229.5128" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.400612" + id="tspan30">wptr</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="116.89307" + y="163.58255" + id="text31"><tspan + sodipodi:role="line" + x="116.89307" + y="163.58255" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.400612" + id="tspan31">wptr</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="104.55666" + y="178.91209" + id="text32"><tspan + sodipodi:role="line" + x="104.55666" + y="178.91209" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#00ff00;stroke-width:0.400612" + id="tspan32">rptr</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="169.33571" + y="163.10979" + id="text33"><tspan + sodipodi:role="line" + x="169.33571" + y="163.10979" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#00ff00;stroke-width:0.400612" + id="tspan33">rptr</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="198.10239" + y="164.21048" + id="text34"><tspan + sodipodi:role="line" + x="198.10239" + y="164.21048" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.400612" + id="tspan34">wptr</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="321.48608" + y="209.17052" + id="text35"><tspan + sodipodi:role="line" + x="321.48608" + y="209.17052" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff0000;stroke-width:0.400612" + id="tspan35">wptr</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="381.35901" + y="239.92375" + id="text36"><tspan + sodipodi:role="line" + x="381.35901" + y="239.92375" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#00ff00;stroke-width:0.400612" + id="tspan36">rptr</tspan></text> + <path + style="fill:#00ff00;stroke:#00ff00;stroke-width:1;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWide)" + d="m 35.624746,164.89008 -2.762741,10.3107" + id="path80" /> + <path + style="fill:#ff0000;stroke:#ff0000;stroke-width:1;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWide)" + d="m -8.7253214,192.92597 h 10.67442" + id="path95" /> + <path + style="fill:#00ff00;stroke:#00ff00;stroke-width:1;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWide)" + d="M 96.12886,165.61875 92.526458,179.0631" + id="path96" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff0000;stroke:#ff0000;stroke-width:1;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWide)" + d="m 99.252771,223.75691 -6.710739,-5.14099" + id="path106" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#00ff00;stroke-width:1;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWide)" + d="m 104.23449,180.8622 v 13.29071 h 4.91861" + id="path108" + sodipodi:nodetypes="ccc" /> + <path + style="fill:#ff0000;stroke:#ff0000;stroke-width:1;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWide)" + d="m 117.92183,166.63928 v 12.97675" + id="path109" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff0000;stroke:#ff0000;stroke-width:1;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWide)" + d="m 198.50323,166.63928 v 12.97675" + id="path110" + sodipodi:nodetypes="cc" /> + <path + style="fill:#00ff00;stroke:#00ff00;stroke-width:1;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWide)" + d="m 169.22285,165.37383 v 13.91861" + id="path112" + sodipodi:nodetypes="cc" /> + <path + style="fill:#00ff00;stroke:#00ff00;stroke-width:1;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWide)" + d="m 379.21241,233.73729 -9.84194,-9.84195" + id="path113" + sodipodi:nodetypes="cc" /> + <path + style="fill:#ff0000;stroke:#ff0000;stroke-width:1;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWide)" + d="M 330.44909,207.68179 H 340.077" + id="path114" + sodipodi:nodetypes="cc" /> + <g + id="g127" + transform="translate(-243.31051,23.087859)"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:7.76111px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="135.71123" + y="112.41485" + id="text116"><tspan + sodipodi:role="line" + x="135.71123" + y="112.41485" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.76111px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan116">PM4<tspan + style="font-size:65%;baseline-shift:sub" + id="tspan117">1</tspan></tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:7.76111px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="135.39342" + y="122.44057" + id="text120"><tspan + sodipodi:role="line" + x="135.39342" + y="122.44057" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.76111px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan120">PM4<tspan + style="font-size:65%;baseline-shift:sub" + id="tspan123">2</tspan></tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:7.76111px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="135.49934" + y="136.68669" + id="text122"><tspan + sodipodi:role="line" + x="135.49934" + y="136.68669" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.76111px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan122">PM4<tspan + style="font-size:65%;baseline-shift:sub" + id="tspan124">n</tspan></tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:7.76111px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="135.65942" + y="128.1123" + id="text126"><tspan + sodipodi:role="line" + x="135.65942" + y="128.1123" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.76111px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan126">...</tspan></text> + <path + style="fill:none;stroke:#0000ff;stroke-width:2;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + d="m 126.12628,103.17346 h -5.32796 v 38.77576 h 5.32796" + id="path126" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#0000ff;stroke-width:2;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + d="m 143.29418,103.17346 h 5.32796 v 38.77576 h -5.32796" + id="path127" + sodipodi:nodetypes="cccc" /> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff9955;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="-7.0803289" + y="244.43291" + id="text129"><tspan + sodipodi:role="line" + x="-7.0803289" + y="244.43291" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#ff9955;stroke-width:0.400612" + id="tspan129"><tspan + style="font-size:7.05556px;fill:#ff9955" + id="tspan127">IB</tspan><tspan + style="font-size:3.52778px;baseline-shift:sub;fill:#ff9955" + id="tspan128">b</tspan></tspan></text> + <g + id="g130" + transform="translate(-0.5919954,-90.131448)"> + <rect + style="fill:#ffff00;stroke:#ffff00;stroke-width:0.743523;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" + id="rect130" + width="16.584557" + height="11.616416" + x="-21.840757" + y="358.62256" + ry="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:9.87778px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="-13.612684" + y="367.95712" + id="text130"><tspan + sodipodi:role="line" + x="-13.612684" + y="367.95712" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:9.87778px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan130">CP</tspan></text> + </g> + <path + style="fill:none;stroke:#00d4aa;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#marker132);marker-end:url(#Diamond)" + d="M -13.431733,265.14038 V 238.02343 H 76.45484" + id="path130" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#00d4aa;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#marker132);marker-end:url(#Diamond)" + d="m -108.62977,169.16297 v 103.37737 h 82.669238" + id="path133" + sodipodi:nodetypes="ccc" /> + <path + style="fill:none;stroke:#ff0000;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#ArrowTriangleStylized)" + d="M -107.14978,120.98926 V -2.5159921 H 176.92597 V 16.131894" + id="path134" + sodipodi:nodetypes="cccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="25.324078" + y="197.77319" + id="text136"><tspan + sodipodi:role="line" + x="25.324078" + y="197.77319" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan136">Ring</tspan><tspan + sodipodi:role="line" + x="25.324078" + y="205.71069" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan137">Buffer</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="76.235764" + y="197.77319" + id="text139"><tspan + sodipodi:role="line" + x="76.235764" + y="197.77319" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan138">Ring</tspan><tspan + sodipodi:role="line" + x="76.235764" + y="205.71069" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan139">Buffer</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="132.68411" + y="197.77319" + id="text141"><tspan + sodipodi:role="line" + x="132.68411" + y="197.77319" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan140">Ring</tspan><tspan + sodipodi:role="line" + x="132.68411" + y="205.71069" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan141">Buffer</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="184.18781" + y="197.77319" + id="text143"><tspan + sodipodi:role="line" + x="184.18781" + y="197.77319" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan142">Ring</tspan><tspan + sodipodi:role="line" + x="184.18781" + y="205.71069" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan143">Buffer</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="235.43346" + y="197.77319" + id="text147"><tspan + sodipodi:role="line" + x="235.43346" + y="197.77319" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan146">Ring</tspan><tspan + sodipodi:role="line" + x="235.43346" + y="205.71069" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan147">Buffer</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="286.69049" + y="197.77319" + id="text149"><tspan + sodipodi:role="line" + x="286.69049" + y="197.77319" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan148">Ring</tspan><tspan + sodipodi:role="line" + x="286.69049" + y="205.71069" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan149">Buffer</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="362.16714" + y="197.77319" + id="text151"><tspan + sodipodi:role="line" + x="362.16714" + y="197.77319" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan150">Ring</tspan><tspan + sodipodi:role="line" + x="362.16714" + y="205.71069" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan151">Buffer</tspan></text> + <path + style="fill:none;stroke:#917c6f;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#marker154)" + d="M 134.065,175.23092 V 125.06784 H 47.638527 V 89.317459" + id="path158" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#917c6f;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#marker154)" + d="M 365.79312,175.67492 V 125.06784 H 47.447018 V 81.621506" + id="path159" + sodipodi:nodetypes="cccc" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:7.76111px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.400612" + x="-68.488571" + y="250.37801" + id="text159"><tspan + sodipodi:role="line" + x="-68.488571" + y="250.37801" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.76111px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan159">CP is capable of</tspan><tspan + sodipodi:role="line" + x="-68.488571" + y="260.07941" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.76111px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan160">following the</tspan><tspan + sodipodi:role="line" + x="-68.488571" + y="269.78079" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.76111px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#1c241c;stroke-width:0.400612" + id="tspan161">IB address.</tspan></text> + <path + style="fill:none;stroke:#ff9955;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#marker154)" + d="M 38.977794,178.16115 V 132.60272 H 177.31847 V 80.437513" + id="path161" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#ff9955;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#marker154)" + d="M 76.233608,174.60301 V 132.60272 H 177.31847 V 80.733511" + id="path162" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#ff9955;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#marker154)" + d="m 185.48942,174.60301 v -42.00029 h -8.17095 V 81.325508" + id="path163" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#ff9955;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#marker154)" + d="M 353.76849,176.69603 V 132.60272 H 177.31847 V 82.657499" + id="path164" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#55ddff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#marker154)" + d="M 178.37314,176.69603 V 138.67068 H 307.08591 V 81.769505" + id="path165" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#55ddff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#marker154)" + d="M 84.837713,176.69603 V 138.67068 H 307.08591 V 81.769505" + id="path166" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#55ddff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-dasharray:none;marker-start:url(#marker154)" + d="m 346.50011,180.10001 v -41.42933 h -39.4142 V 81.769505" + id="path167" + sodipodi:nodetypes="cccc" /> + </g> +</svg> diff --git a/Documentation/gpu/amdgpu/userq.rst b/Documentation/gpu/amdgpu/userq.rst index ca3ea71f7888..88f54393b220 100644 --- a/Documentation/gpu/amdgpu/userq.rst +++ b/Documentation/gpu/amdgpu/userq.rst @@ -1,3 +1,5 @@ +.. _amdgpu-userq: + ================== User Mode Queues ================== -- 2.51.0 ^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH v3 5/5] Documentation/gpu: Add documentation about ring buffer 2025-10-20 19:38 ` [PATCH v3 5/5] Documentation/gpu: Add documentation about ring buffer Rodrigo Siqueira @ 2025-10-20 20:53 ` Alex Deucher 0 siblings, 0 replies; 24+ messages in thread From: Alex Deucher @ 2025-10-20 20:53 UTC (permalink / raw) To: Rodrigo Siqueira Cc: Alex Deucher, Christian König, Timur Kristóf, amd-gfx, kernel-dev On Mon, Oct 20, 2025 at 3:47 PM Rodrigo Siqueira <siqueira@igalia.com> wrote: > > AMDGPU heavily relies on ring buffers to manage its components; as a > result, it has an elaborate mechanism of operation with multiple details > around it. This commit introduces new documentation on ring buffers, > detailing their management and expanding the explanation of Enforce > isolation. Finally, this commit also adds the documentation available in > the amdgpu_ring.c file to it. > > Cc: Alex Deucher <alexander.deucher@amd.com> > Cc: Christian König <christian.koenig@amd.com> > Cc: Timur Kristóf <timur.kristof@gmail.com> > Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com> > --- > .../gpu/amdgpu/enforce_isolation.svg | 654 +++++++ > Documentation/gpu/amdgpu/gfx_pipeline_seq.svg | 413 +++++ > Documentation/gpu/amdgpu/index.rst | 1 + > .../gpu/amdgpu/no_enforce_isolation.svg | 707 +++++++ > Documentation/gpu/amdgpu/ring-buffer.rst | 91 + > Documentation/gpu/amdgpu/ring_buffers.svg | 1633 +++++++++++++++++ > Documentation/gpu/amdgpu/userq.rst | 2 + > 7 files changed, 3501 insertions(+) > create mode 100644 Documentation/gpu/amdgpu/enforce_isolation.svg > create mode 100644 Documentation/gpu/amdgpu/gfx_pipeline_seq.svg > create mode 100644 Documentation/gpu/amdgpu/no_enforce_isolation.svg > create mode 100644 Documentation/gpu/amdgpu/ring-buffer.rst > create mode 100644 Documentation/gpu/amdgpu/ring_buffers.svg Got a link to the images? <snip> > diff --git a/Documentation/gpu/amdgpu/ring-buffer.rst b/Documentation/gpu/amdgpu/ring-buffer.rst > new file mode 100644 > index 000000000000..015d803541fe > --- /dev/null > +++ b/Documentation/gpu/amdgpu/ring-buffer.rst > @@ -0,0 +1,91 @@ > +============= > + Ring Buffer > +============= > + > +To handle communication between user space and kernel space, amdgpu adopts a > +strategy based on a ring buffer, which is used by GFX, Compute, SDMA, UVD, VCE, > +VCN, VPE, KIQ, MES, UMSCH, and CPER. To handle communication between user space and kernel space, AMD GPUs use a ring buffer design to feed the engines (GFX, Compute, SDMA, UVD, VCE, VCN, VPE, etc.). > See the figure below that illustrates how > +this communication works: > + > +.. kernel-figure:: ring_buffers.svg > + > +Ring buffers in the amdgpu work as a producer-consumer problem, where userspace Ring buffers in the amdgpu work as a producer-consumer model, where software > +acts as the producer, constantly filling the ring buffer with GPU commands to > +be executed. Meanwhile, the GPU retrieves the information from the ring, parses > +it, and distributes the specific set of instructions between the different > +amdgpu blocks. > Notice from the diagram that the ring has a Read Pointer (rptr) > +that indicates where the GPU is currently reading, and there is a Write Pointer > +(wptr) that indicates where the host has written the message. Note that every > +time something is written to the ring, the wptr is incremented. Meanwhile, the > +GPU constantly updates the rptr pointer, chasing the wptr until both pointers > +are equal. The User space or the driver can utilize the rptr pointer to roughly > +estimate how many instructions are still pending completion. The ring has a Read Pointer (rptr), which indicates where the engine is currently reading packets from the ring, and a Write Pointer which indicates how many packets software has added to the ring. When the rptr and wptr are equal, the ring is idle. When software adds packets to the ring, it updates the wptr, this causes the engine to start fetching and processing packets. As the engine processes packets, the rptr gets updates until the rptr catches up to the wptr and they are equal again. > + > +Usually, ring buffers in the driver have a limited size (search for occurrences > +of `amdgpu_ring_init()`). One of the reasons for the small ring buffer size is > +that CP (Command Processor) is capable of following addresses inserted into the > +ring; this is illustrated in the image by the reference to the IB (Indirect > +Buffer). The IB gives userspace the possibility to have an area in memory that > +CP can read and feed the hardware with extra instructions. > + > +All ASICs pre-GFX11 use what is called a kernel queue, which means > +the ring is allocated in kernel space and has some restrictions, such as not > +being able to be :ref:`preempted directly by the scheduler<amdgpu-mes>`. GFX11 > +and newer support kernel queues, but also provide a new mechanism named > +:ref:`user queues<amdgpu-userq>`, where the queue is moved to the user space > +and can be mapped and unmapped via the scheduler. In practice, both queues > +insert user-space-generated GPU commands from different jobs into the requested > +component ring. > + > +Enforce Isolation > +================= > + Might want to cross link to the other process isolation documentation at Documentation/gpu/amdgpu/process-isolation.rst > +Before examining the Enforce Isolation mechanism in the ring buffer context, it > +is helpful to briefly discuss how instructions from the ring buffer are > +processed in the graphics pipeline. Let’s expand on this topic by checking the > +diagram below that illustrates the graphics pipeline: > + > +.. kernel-figure:: gfx_pipeline_seq.svg > + > +In terms of executing instructions, the GFX pipeline follows the sequence: > +Shader Export (SX), Geometry Engine (GE), Shader Process or Input (SPI), Scan > +Converter (SC), Primitive Assembler (PA), and cache manipulation (which may > +vary across ASICs). Another common way to describe the pipeline is to use Pixel > +Shader (PS), raster, and Vertex Shader (VS) to symbolize the two shader stages. > +Now, with this pipeline in mind, let's assume that Job B causes a hang issue, > +but Job C's instruction might already be executing, leading developers to > +incorrectly identify Job C as the problematic one. This problem can be > +mitigated on multiple levels; the diagram below illustrates how to minimize > +part of this problem: > + > +.. kernel-figure:: no_enforce_isolation.svg > + > +Note from the diagram that there is no guarantee of order or a clear separation > +between instructions, which is not a problem most of the time, and is also good > +for performance. Furthermore, notice some circles between jobs in the diagram > +that represent a **fence wait** used to avoid overlapping work in the ring. At > +the end of the fence, a cache flush occurs, ensuring that when the next job > +starts, it begins in a clean state and, if issues arise, the developer can > +pinpoint the problematic process more precisely. > + > +To increase the level of isolation between jobs, there is the "Enforce > +Isolation" method described in the picture below: > + > +.. kernel-figure:: enforce_isolation.svg > + > +As shown in the diagram, enforcing isolation introduces ordering between > +submissions, since the access to GFX/Compute/Other is serialized. Notice that enforce isolation only affects GFX and compute. It's probably easier to think about it as single process at a time mode for gfx/compute. Alex > +this approach has a significant performance impact, as it allows only one job > +to submit commands at a time. However, this option can help pinpoint the job > +that caused the problem. Although enforcing isolation improves the situation, > +it does not fully resolve the issue of precisely pinpointing bad jobs, since > +isolation might mask the problem. In summary, identifying which job caused the > +issue may not be precise, but enforcing isolation might help with the > +debugging. > + > +Ring Operations > +=============== > + > +.. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c > + :internal: > + ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 0/5] Expand kernel-doc with more generic details and info about ring buffers 2025-10-20 19:38 [PATCH v3 0/5] Expand kernel-doc with more generic details and info about ring buffers Rodrigo Siqueira ` (4 preceding siblings ...) 2025-10-20 19:38 ` [PATCH v3 5/5] Documentation/gpu: Add documentation about ring buffer Rodrigo Siqueira @ 2025-10-21 12:52 ` Alex Deucher 5 siblings, 0 replies; 24+ messages in thread From: Alex Deucher @ 2025-10-21 12:52 UTC (permalink / raw) To: Rodrigo Siqueira Cc: Alex Deucher, Christian König, Timur Kristóf, amd-gfx, kernel-dev On Mon, Oct 20, 2025 at 3:47 PM Rodrigo Siqueira <siqueira@igalia.com> wrote: > > Lately, I have been part of multiple discussions around GPU recovery and > other concepts associated with GFX/Compute. Most of the debate is spread > around GitLab issues, emails, and some meeting conversations. This > patchset aims to consolidate all that information into a single > kernel-doc, which can be collaboratively improved and shared with other > people. > > In this series, you will find new amdgpu glossary entries, more details > about the IPs' interconnections, and a description of the ring buffer. > This series includes multiple SVG diagrams; for this reason, it might be > good to apply this series locally. However, if you want to check all the > images quickly, check the links below: > > - https://people.igalia.com/siqueira/kernel-doc-imgs/v3/amd_overview_block.svg Looks good. For completeness, maybe add a path from PSP to the UMC on the right side? Also, I'm not sure it matters for the sake of the drawing, but the memory hubs are not really part of the IPs per se. For example, on navi and newer, GC and SDMA are both attached to GCHUB. On pre-Navi, SDMA goes through MMHUB. VCN, JPEG, and VPE go through MMHUB. DCN goes through DCHUB. > - https://people.igalia.com/siqueira/kernel-doc-imgs/v3/gfx_pipeline_seq.svg > - https://people.igalia.com/siqueira/kernel-doc-imgs/v3/no_enforce_isolation.svg > - https://people.igalia.com/siqueira/kernel-doc-imgs/v3/enforce_isolation.svg > - https://people.igalia.com/siqueira/kernel-doc-imgs/v3/ring_buffers.svg These look good. Thanks! > > Finally, keep in mind that I tried to fill in some gaps between > information, and hopefully, my description matches the reality. > > Changes since V2: > - Remove the unnecessary diagram. > - Remove the excessive details about hardware behavior that are not > useful for a driver developer. > - Remove some wrong information. > - Rewrite many parts of the ring buffer description. > > Cc: Alex Deucher <alexander.deucher@amd.com> > Cc: Christian König <christian.koenig@amd.com> > Cc: Timur Kristóf <timur.kristof@gmail.com> > > Thanks > > Rodrigo Siqueira (5): > drm/amdgpu: Expand kernel-doc in amdgpu_ring > Documentation/gpu: Add new glossary entries from UMR > Documentation/gpu: Expand generic block information > Documentation/gpu: Add more information about GC > Documentation/gpu: Add documentation about ring buffer > > .../gpu/amdgpu/amd_overview_block.svg | 674 +++++++ > Documentation/gpu/amdgpu/amdgpu-glossary.rst | 24 + > Documentation/gpu/amdgpu/driver-core.rst | 25 + > .../gpu/amdgpu/enforce_isolation.svg | 654 +++++++ > Documentation/gpu/amdgpu/gc/index.rst | 24 +- > Documentation/gpu/amdgpu/gfx_pipeline_seq.svg | 413 +++++ > Documentation/gpu/amdgpu/index.rst | 1 + > .../gpu/amdgpu/no_enforce_isolation.svg | 707 +++++++ > Documentation/gpu/amdgpu/ring-buffer.rst | 91 + > Documentation/gpu/amdgpu/ring_buffers.svg | 1633 +++++++++++++++++ > Documentation/gpu/amdgpu/userq.rst | 2 + > drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 15 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 2 + > 13 files changed, 4251 insertions(+), 14 deletions(-) > create mode 100644 Documentation/gpu/amdgpu/amd_overview_block.svg > create mode 100644 Documentation/gpu/amdgpu/enforce_isolation.svg > create mode 100644 Documentation/gpu/amdgpu/gfx_pipeline_seq.svg > create mode 100644 Documentation/gpu/amdgpu/no_enforce_isolation.svg > create mode 100644 Documentation/gpu/amdgpu/ring-buffer.rst > create mode 100644 Documentation/gpu/amdgpu/ring_buffers.svg > > -- > 2.51.0 > ^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2025-10-28 14:37 UTC | newest] Thread overview: 24+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-10-20 19:38 [PATCH v3 0/5] Expand kernel-doc with more generic details and info about ring buffers Rodrigo Siqueira 2025-10-20 19:38 ` [PATCH v3 1/5] drm/amdgpu: Expand kernel-doc in amdgpu_ring Rodrigo Siqueira 2025-10-20 20:30 ` Alex Deucher 2025-10-21 9:23 ` Timur Kristóf 2025-10-21 13:11 ` Rodrigo Siqueira 2025-10-28 13:01 ` Christian König 2025-10-20 19:38 ` [PATCH v3 2/5] Documentation/gpu: Add new glossary entries from UMR Rodrigo Siqueira 2025-10-20 20:17 ` Alex Deucher 2025-10-21 5:16 ` Lazar, Lijo 2025-10-21 13:25 ` Rodrigo Siqueira 2025-10-21 14:46 ` Alex Deucher 2025-10-28 13:10 ` Christian König 2025-10-28 14:36 ` Rodrigo Siqueira 2025-10-20 19:38 ` [PATCH v3 3/5] Documentation/gpu: Expand generic block information Rodrigo Siqueira 2025-10-20 20:28 ` Alex Deucher 2025-10-21 9:30 ` Timur Kristóf 2025-10-21 14:55 ` Rodrigo Siqueira 2025-10-21 21:34 ` Alex Deucher 2025-10-21 5:24 ` Lazar, Lijo 2025-10-20 19:38 ` [PATCH v3 4/5] Documentation/gpu: Add more information about GC Rodrigo Siqueira 2025-10-20 20:30 ` Alex Deucher 2025-10-20 19:38 ` [PATCH v3 5/5] Documentation/gpu: Add documentation about ring buffer Rodrigo Siqueira 2025-10-20 20:53 ` Alex Deucher 2025-10-21 12:52 ` [PATCH v3 0/5] Expand kernel-doc with more generic details and info about ring buffers Alex Deucher
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox