* [PATCH v7 0/8] drm/amdgpu: add MMIO-remap singleton BO for HDP flush v7
@ 2025-09-02 14:52 Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 1/8] drm/ttm: Bump TTM_NUM_MEM_TYPES to 9 (Prep for AMDGPU_PL_MMIO_REMAP) Srinivasan Shanmugam
` (7 more replies)
0 siblings, 8 replies; 13+ messages in thread
From: Srinivasan Shanmugam @ 2025-09-02 14:52 UTC (permalink / raw)
To: Christian König, Alex Deucher; +Cc: amd-gfx, Srinivasan Shanmugam
This series introduces a kernel-managed singleton BO representing the MMIO-remap (HDP flush) page and exposes it to userspace through a new GEM domain.
Design
------
- A tiny (1-page) TTM bucket is introduced for AMDGPU_PL_MMIO_REMAP
(mirroring doorbells).
- A singleton BO is created during amdgpu_ttm_init() and freed at
fini().
- The BO is kernel-owned and never evicted.
- amdgpu_gem_create_ioctl() recognizes the new GEM domain bit
(AMDGPU_GEM_DOMAIN_MMIO_REMAP) and returns a handle to the pre-created singleton BO, enforcing size/alignment checks.
- Userspace thus gets a stable GEM handle and can mmap it to issue HDP
flushes.
v2: Updated review comments from v1. (Alex/Christian)
v3: Updated review comments from v2. (Alex/Christian)
[RFC,v2,1/8] drm/amdgpu/uapi: Introduce AMDGPU_GEM_DOMAIN_MMIO_REMAP | https://patchwork.freedesktop.org/patch/670410/
[RFC,v2,2/8] drm/amdgpu/ttm: Add New AMDGPU_PL_MMIO_REMAP Placement | https://patchwork.freedesktop.org/patch/670411/
[RFC,v2,3/8] drm/amdgpu: Wire up MMIO_REMAP placement and User-visible strings | https://patchwork.freedesktop.org/patch/670412/
[RFC,v2,4/8] drm/amdgpu: Add mmio_remap bookkeeping to amdgpu_device | https://patchwork.freedesktop.org/patch/670415/
[RFC,v2,5/8] drm/amdgpu: Implement TTM handling for MMIO_REMAP placement | https://patchwork.freedesktop.org/patch/670413/
[RFC,v2,6/8] drm/amdgpu/ttm: Initialize AMDGPU_PL_MMIO_REMAP Heap | https://patchwork.freedesktop.org/patch/670414/
[RFC,v2,7/8] drm/amdgpu/ttm: Allocate/Free 4K MMIO_REMAP Singleton BO | https://patchwork.freedesktop.org/patch/670417/
[RFC,v2,8/8] drm/amdgpu/gem: Return Handle to MMIO_REMAP Singleton in GEM_CREATE | https://patchwork.freedesktop.org/patch/670416/
v4: Updated review comments from v3. (Alex/Christian)
https://patchwork.freedesktop.org/series/153610/
v5: In patch: drm/amdgpu/gem: Return Handle to MMIO_REMAP Singleton in GEM_CREATE | https://patchwork.freedesktop.org/patch/671576/
- Drop early -EINVAL for AMDGPU_GEM_DOMAIN_MMIO_REMAP; let the
MMIO_REMAP fast-path handle it and return the singleton handle.
v6: Updated review comments from v5. (Christian)
https://patchwork.freedesktop.org/series/153209/#rev3
v7: Updated review comments from v6. (Christian)
https://patchwork.freedesktop.org/series/153209/#rev4
* Only compilation tested so far (x86_64, defconfig + amdgpu enabled).
Cc: Christian König <christian.koenig@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Srinivasan Shanmugam (8):
drm/ttm: Bump TTM_NUM_MEM_TYPES to 9 (Prep for AMDGPU_PL_MMIO_REMAP)
drm/amdgpu/uapi: Introduce AMDGPU_GEM_DOMAIN_MMIO_REMAP
drm/amdgpu/ttm: Add New AMDGPU_PL_MMIO_REMAP Placement
drm/amdgpu: Wire up MMIO_REMAP placement and User-visible strings
drm/amdgpu: Implement TTM handling for MMIO_REMAP placement
drm/amdgpu/ttm: Initialize AMDGPU_PL_MMIO_REMAP Heap
drm/amdgpu/ttm: Allocate/Free 4K MMIO_REMAP Singleton
drm/amdgpu/gem: Return Handle to MMIO_REMAP Singleton in GEM_CREATE
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c | 1 +
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 57 ++++++++++++
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 13 +++
drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 2 +
.../gpu/drm/amd/amdgpu/amdgpu_res_cursor.h | 2 +
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 87 ++++++++++++++++++-
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 3 +-
include/drm/ttm/ttm_resource.h | 2 +-
include/uapi/drm/amdgpu_drm.h | 8 +-
10 files changed, 169 insertions(+), 7 deletions(-)
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v7 1/8] drm/ttm: Bump TTM_NUM_MEM_TYPES to 9 (Prep for AMDGPU_PL_MMIO_REMAP)
2025-09-02 14:52 [PATCH v7 0/8] drm/amdgpu: add MMIO-remap singleton BO for HDP flush v7 Srinivasan Shanmugam
@ 2025-09-02 14:52 ` Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 2/8] drm/amdgpu/uapi: Introduce AMDGPU_GEM_DOMAIN_MMIO_REMAP Srinivasan Shanmugam
` (6 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Srinivasan Shanmugam @ 2025-09-02 14:52 UTC (permalink / raw)
To: Christian König, Alex Deucher; +Cc: amd-gfx, Srinivasan Shanmugam
Increase TTM_NUM_MEM_TYPES from 8 to 9 to accommodate the upcoming
AMDGPU_PL_MMIO_REMAP placement.
Cc: Alex Deucher <alexander.deucher@amd.com>
Suggested-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
---
include/drm/ttm/ttm_resource.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/drm/ttm/ttm_resource.h b/include/drm/ttm/ttm_resource.h
index e52bba15012f..f49daa504c36 100644
--- a/include/drm/ttm/ttm_resource.h
+++ b/include/drm/ttm/ttm_resource.h
@@ -36,7 +36,7 @@
#include <drm/ttm/ttm_kmap_iter.h>
#define TTM_MAX_BO_PRIORITY 4U
-#define TTM_NUM_MEM_TYPES 8
+#define TTM_NUM_MEM_TYPES 9
struct dmem_cgroup_device;
struct ttm_device;
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v7 2/8] drm/amdgpu/uapi: Introduce AMDGPU_GEM_DOMAIN_MMIO_REMAP
2025-09-02 14:52 [PATCH v7 0/8] drm/amdgpu: add MMIO-remap singleton BO for HDP flush v7 Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 1/8] drm/ttm: Bump TTM_NUM_MEM_TYPES to 9 (Prep for AMDGPU_PL_MMIO_REMAP) Srinivasan Shanmugam
@ 2025-09-02 14:52 ` Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 3/8] drm/amdgpu/ttm: Add New AMDGPU_PL_MMIO_REMAP Placement Srinivasan Shanmugam
` (5 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Srinivasan Shanmugam @ 2025-09-02 14:52 UTC (permalink / raw)
To: Christian König, Alex Deucher; +Cc: amd-gfx, Srinivasan Shanmugam
Add a new GEM domain bit AMDGPU_GEM_DOMAIN_MMIO_REMAP to allow
userspace to request the MMIO remap (HDP flush) page via GEM_CREATE.
- include/uapi/drm/amdgpu_drm.h:
* define AMDGPU_GEM_DOMAIN_MMIO_REMAP
* include the bit in AMDGPU_GEM_DOMAIN_MASK
v2: Add early reject in amdgpu_gem_create_ioctl() (Alex).
Cc: Christian König <christian.koenig@amd.com>
Suggested-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 3 +++
include/uapi/drm/amdgpu_drm.h | 8 ++++++--
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index e3f65977eeee..d3c369742124 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -465,6 +465,9 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
/* always clear VRAM */
flags |= AMDGPU_GEM_CREATE_VRAM_CLEARED;
+ if (args->in.domains & AMDGPU_GEM_DOMAIN_MMIO_REMAP)
+ return -EINVAL;
+
/* create a gem object to contain this object in */
if (args->in.domains & (AMDGPU_GEM_DOMAIN_GDS |
AMDGPU_GEM_DOMAIN_GWS | AMDGPU_GEM_DOMAIN_OA)) {
diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h
index bdedbaccf776..fc44e301adbb 100644
--- a/include/uapi/drm/amdgpu_drm.h
+++ b/include/uapi/drm/amdgpu_drm.h
@@ -103,6 +103,8 @@ extern "C" {
*
* %AMDGPU_GEM_DOMAIN_DOORBELL Doorbell. It is an MMIO region for
* signalling user mode queues.
+ *
+ * %AMDGPU_GEM_DOMAIN_MMIO_REMAP MMIO remap page (special mapping for HDP flushing).
*/
#define AMDGPU_GEM_DOMAIN_CPU 0x1
#define AMDGPU_GEM_DOMAIN_GTT 0x2
@@ -111,13 +113,15 @@ extern "C" {
#define AMDGPU_GEM_DOMAIN_GWS 0x10
#define AMDGPU_GEM_DOMAIN_OA 0x20
#define AMDGPU_GEM_DOMAIN_DOORBELL 0x40
+#define AMDGPU_GEM_DOMAIN_MMIO_REMAP 0x80
#define AMDGPU_GEM_DOMAIN_MASK (AMDGPU_GEM_DOMAIN_CPU | \
AMDGPU_GEM_DOMAIN_GTT | \
AMDGPU_GEM_DOMAIN_VRAM | \
AMDGPU_GEM_DOMAIN_GDS | \
AMDGPU_GEM_DOMAIN_GWS | \
- AMDGPU_GEM_DOMAIN_OA | \
- AMDGPU_GEM_DOMAIN_DOORBELL)
+ AMDGPU_GEM_DOMAIN_OA | \
+ AMDGPU_GEM_DOMAIN_DOORBELL | \
+ AMDGPU_GEM_DOMAIN_MMIO_REMAP)
/* Flag that CPU access will be required for the case of VRAM domain */
#define AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED (1 << 0)
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v7 3/8] drm/amdgpu/ttm: Add New AMDGPU_PL_MMIO_REMAP Placement
2025-09-02 14:52 [PATCH v7 0/8] drm/amdgpu: add MMIO-remap singleton BO for HDP flush v7 Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 1/8] drm/ttm: Bump TTM_NUM_MEM_TYPES to 9 (Prep for AMDGPU_PL_MMIO_REMAP) Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 2/8] drm/amdgpu/uapi: Introduce AMDGPU_GEM_DOMAIN_MMIO_REMAP Srinivasan Shanmugam
@ 2025-09-02 14:52 ` Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 4/8] drm/amdgpu: Wire up MMIO_REMAP placement and User-visible strings Srinivasan Shanmugam
` (4 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Srinivasan Shanmugam @ 2025-09-02 14:52 UTC (permalink / raw)
To: Christian König, Alex Deucher; +Cc: amd-gfx, Srinivasan Shanmugam
Introduce a kernel-internal TTM placement type AMDGPU_PL_MMIO_REMAP
for the HDP flush MMIO remap page
Plumbing added:
- amdgpu_res_cursor.{first,next}: treat MMIO_REMAP like DOORBELL
- amdgpu_ttm_io_mem_reserve(): return BAR bus address + offset
for MMIO_REMAP, mark as uncached I/O
- amdgpu_ttm_io_mem_pfn(): PFN from register BAR
- amdgpu_res_cpu_visible(): visible to CPU
- amdgpu_evict_flags()/amdgpu_bo_move(): non-migratable
- amdgpu_ttm_tt_pde_flags(): map as SYSTEM
- amdgpu_bo_mem_stats_placement(): report AMDGPU_PL_MMIO_REMAP
- amdgpu_fdinfo: print “mmioremap” bucket label
Cc: Alex Deucher <alexander.deucher@amd.com>
Suggested-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
index 2309df3f68a9..bb17987f0447 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
@@ -34,7 +34,8 @@
#define AMDGPU_PL_OA (TTM_PL_PRIV + 2)
#define AMDGPU_PL_PREEMPT (TTM_PL_PRIV + 3)
#define AMDGPU_PL_DOORBELL (TTM_PL_PRIV + 4)
-#define __AMDGPU_PL_NUM (TTM_PL_PRIV + 5)
+#define AMDGPU_PL_MMIO_REMAP (TTM_PL_PRIV + 5)
+#define __AMDGPU_PL_NUM (TTM_PL_PRIV + 6)
#define AMDGPU_GTT_MAX_TRANSFER_SIZE 512
#define AMDGPU_GTT_NUM_TRANSFER_WINDOWS 2
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v7 4/8] drm/amdgpu: Wire up MMIO_REMAP placement and User-visible strings
2025-09-02 14:52 [PATCH v7 0/8] drm/amdgpu: add MMIO-remap singleton BO for HDP flush v7 Srinivasan Shanmugam
` (2 preceding siblings ...)
2025-09-02 14:52 ` [PATCH v7 3/8] drm/amdgpu/ttm: Add New AMDGPU_PL_MMIO_REMAP Placement Srinivasan Shanmugam
@ 2025-09-02 14:52 ` Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 5/8] drm/amdgpu: Implement TTM handling for MMIO_REMAP placement Srinivasan Shanmugam
` (3 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Srinivasan Shanmugam @ 2025-09-02 14:52 UTC (permalink / raw)
To: Christian König, Alex Deucher; +Cc: amd-gfx, Srinivasan Shanmugam
Wire up the conversions and strings for the new MMIO_REMAP placement:
* amdgpu_mem_type_to_domain() maps AMDGPU_PL_MMIO_REMAP -> domain
* amdgpu_bo_placement_from_domain() accepts the new domain
* amdgpu_bo_mem_stats_placement() and amdgpu_bo_print_info() report it
* res cursor supports the new placement
* fdinfo prints "mmioremap" for the new placement
Cc: Christian König <christian.koenig@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c | 1 +
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 13 +++++++++++++
drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 2 ++
drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h | 2 ++
4 files changed, 18 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c
index 91d638098889..b349bb3676d5 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.c
@@ -70,6 +70,7 @@ void amdgpu_show_fdinfo(struct drm_printer *p, struct drm_file *file)
[AMDGPU_PL_GWS] = "gws",
[AMDGPU_PL_OA] = "oa",
[AMDGPU_PL_DOORBELL] = "doorbell",
+ [AMDGPU_PL_MMIO_REMAP] = "mmioremap",
};
unsigned int hw_ip, i;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index 122a88294883..fe486988a738 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -153,6 +153,14 @@ void amdgpu_bo_placement_from_domain(struct amdgpu_bo *abo, u32 domain)
c++;
}
+ if (domain & AMDGPU_GEM_DOMAIN_MMIO_REMAP) {
+ places[c].fpfn = 0;
+ places[c].lpfn = 0;
+ places[c].mem_type = AMDGPU_PL_MMIO_REMAP;
+ places[c].flags = 0;
+ c++;
+ }
+
if (domain & AMDGPU_GEM_DOMAIN_GTT) {
places[c].fpfn = 0;
places[c].lpfn = 0;
@@ -1545,6 +1553,8 @@ uint32_t amdgpu_bo_mem_stats_placement(struct amdgpu_bo *bo)
return AMDGPU_PL_OA;
case AMDGPU_GEM_DOMAIN_DOORBELL:
return AMDGPU_PL_DOORBELL;
+ case AMDGPU_GEM_DOMAIN_MMIO_REMAP:
+ return AMDGPU_PL_MMIO_REMAP;
default:
return TTM_PL_SYSTEM;
}
@@ -1628,6 +1638,9 @@ u64 amdgpu_bo_print_info(int id, struct amdgpu_bo *bo, struct seq_file *m)
case AMDGPU_PL_DOORBELL:
placement = "DOORBELL";
break;
+ case AMDGPU_PL_MMIO_REMAP:
+ placement = "MMIO REMAP";
+ break;
case TTM_PL_SYSTEM:
default:
placement = "CPU";
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
index 87523fcd4386..656b8a931dae 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
@@ -167,6 +167,8 @@ static inline unsigned amdgpu_mem_type_to_domain(u32 mem_type)
return AMDGPU_GEM_DOMAIN_OA;
case AMDGPU_PL_DOORBELL:
return AMDGPU_GEM_DOMAIN_DOORBELL;
+ case AMDGPU_PL_MMIO_REMAP:
+ return AMDGPU_GEM_DOMAIN_MMIO_REMAP;
default:
break;
}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
index 50fcd86e1033..be2e56ce1355 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
@@ -91,6 +91,7 @@ static inline void amdgpu_res_first(struct ttm_resource *res,
break;
case TTM_PL_TT:
case AMDGPU_PL_DOORBELL:
+ case AMDGPU_PL_MMIO_REMAP:
node = to_ttm_range_mgr_node(res)->mm_nodes;
while (start >= node->size << PAGE_SHIFT)
start -= node++->size << PAGE_SHIFT;
@@ -153,6 +154,7 @@ static inline void amdgpu_res_next(struct amdgpu_res_cursor *cur, uint64_t size)
break;
case TTM_PL_TT:
case AMDGPU_PL_DOORBELL:
+ case AMDGPU_PL_MMIO_REMAP:
node = cur->node;
cur->node = ++node;
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v7 5/8] drm/amdgpu: Implement TTM handling for MMIO_REMAP placement
2025-09-02 14:52 [PATCH v7 0/8] drm/amdgpu: add MMIO-remap singleton BO for HDP flush v7 Srinivasan Shanmugam
` (3 preceding siblings ...)
2025-09-02 14:52 ` [PATCH v7 4/8] drm/amdgpu: Wire up MMIO_REMAP placement and User-visible strings Srinivasan Shanmugam
@ 2025-09-02 14:52 ` Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 6/8] drm/amdgpu/ttm: Initialize AMDGPU_PL_MMIO_REMAP Heap Srinivasan Shanmugam
` (2 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Srinivasan Shanmugam @ 2025-09-02 14:52 UTC (permalink / raw)
To: Christian König, Alex Deucher; +Cc: amd-gfx, Srinivasan Shanmugam
Implement TTM-level behavior for AMDGPU_PL_MMIO_REMAP so it behaves as a
CPU-visible IO page:
* amdgpu_evict_flags(): mark as unmovable
* amdgpu_res_cpu_visible(): consider CPU-visible
* amdgpu_bo_move(): use null move when src/dst is MMIO_REMAP
* amdgpu_ttm_io_mem_reserve(): program base/is_iomem/caching using
the device's mmio_remap_* metadata
* amdgpu_ttm_io_mem_pfn(): return PFN for the remapped HDP page
* amdgpu_ttm_tt_pde_flags(): set AMDGPU_PTE_SYSTEM for this mem type
v2:
- Drop HDP-specific comment; keep generic remap (Alex).
v3:
- Fix indentation in amdgpu_res_cpu_visible (Christian).
- Use adev->rmmio_remap.bus_addr for MMIO_REMAP bus/PFN calculations
(Alex).
v4:
- Drop unnecessary (resource_size_t) casts in MMIO_REMAP io-mem paths
(Alex)
Cc: Christian König <christian.koenig@amd.com>
Suggested-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 27ab4e754b2a..42f97d568059 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -123,6 +123,7 @@ static void amdgpu_evict_flags(struct ttm_buffer_object *bo,
case AMDGPU_PL_GWS:
case AMDGPU_PL_OA:
case AMDGPU_PL_DOORBELL:
+ case AMDGPU_PL_MMIO_REMAP:
placement->num_placement = 0;
return;
@@ -447,7 +448,8 @@ bool amdgpu_res_cpu_visible(struct amdgpu_device *adev,
return false;
if (res->mem_type == TTM_PL_SYSTEM || res->mem_type == TTM_PL_TT ||
- res->mem_type == AMDGPU_PL_PREEMPT || res->mem_type == AMDGPU_PL_DOORBELL)
+ res->mem_type == AMDGPU_PL_PREEMPT || res->mem_type == AMDGPU_PL_DOORBELL ||
+ res->mem_type == AMDGPU_PL_MMIO_REMAP)
return true;
if (res->mem_type != TTM_PL_VRAM)
@@ -538,10 +540,12 @@ static int amdgpu_bo_move(struct ttm_buffer_object *bo, bool evict,
old_mem->mem_type == AMDGPU_PL_GWS ||
old_mem->mem_type == AMDGPU_PL_OA ||
old_mem->mem_type == AMDGPU_PL_DOORBELL ||
+ old_mem->mem_type == AMDGPU_PL_MMIO_REMAP ||
new_mem->mem_type == AMDGPU_PL_GDS ||
new_mem->mem_type == AMDGPU_PL_GWS ||
new_mem->mem_type == AMDGPU_PL_OA ||
- new_mem->mem_type == AMDGPU_PL_DOORBELL) {
+ new_mem->mem_type == AMDGPU_PL_DOORBELL ||
+ new_mem->mem_type == AMDGPU_PL_MMIO_REMAP) {
/* Nothing to save here */
amdgpu_bo_move_notify(bo, evict, new_mem);
ttm_bo_move_null(bo, new_mem);
@@ -629,6 +633,12 @@ static int amdgpu_ttm_io_mem_reserve(struct ttm_device *bdev,
mem->bus.is_iomem = true;
mem->bus.caching = ttm_uncached;
break;
+ case AMDGPU_PL_MMIO_REMAP:
+ mem->bus.offset = mem->start << PAGE_SHIFT;
+ mem->bus.offset += adev->rmmio_remap.bus_addr;
+ mem->bus.is_iomem = true;
+ mem->bus.caching = ttm_uncached;
+ break;
default:
return -EINVAL;
}
@@ -646,6 +656,8 @@ static unsigned long amdgpu_ttm_io_mem_pfn(struct ttm_buffer_object *bo,
if (bo->resource->mem_type == AMDGPU_PL_DOORBELL)
return ((uint64_t)(adev->doorbell.base + cursor.start)) >> PAGE_SHIFT;
+ else if (bo->resource->mem_type == AMDGPU_PL_MMIO_REMAP)
+ return ((uint64_t)(adev->rmmio_remap.bus_addr + cursor.start)) >> PAGE_SHIFT;
return (adev->gmc.aper_base + cursor.start) >> PAGE_SHIFT;
}
@@ -1355,7 +1367,8 @@ uint64_t amdgpu_ttm_tt_pde_flags(struct ttm_tt *ttm, struct ttm_resource *mem)
if (mem && (mem->mem_type == TTM_PL_TT ||
mem->mem_type == AMDGPU_PL_DOORBELL ||
- mem->mem_type == AMDGPU_PL_PREEMPT)) {
+ mem->mem_type == AMDGPU_PL_PREEMPT ||
+ mem->mem_type == AMDGPU_PL_MMIO_REMAP)) {
flags |= AMDGPU_PTE_SYSTEM;
if (ttm->caching == ttm_cached)
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v7 6/8] drm/amdgpu/ttm: Initialize AMDGPU_PL_MMIO_REMAP Heap
2025-09-02 14:52 [PATCH v7 0/8] drm/amdgpu: add MMIO-remap singleton BO for HDP flush v7 Srinivasan Shanmugam
` (4 preceding siblings ...)
2025-09-02 14:52 ` [PATCH v7 5/8] drm/amdgpu: Implement TTM handling for MMIO_REMAP placement Srinivasan Shanmugam
@ 2025-09-02 14:52 ` Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 7/8] drm/amdgpu/ttm: Allocate/Free 4K MMIO_REMAP Singleton Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 8/8] drm/amdgpu/gem: Return Handle to MMIO_REMAP Singleton in GEM_CREATE Srinivasan Shanmugam
7 siblings, 0 replies; 13+ messages in thread
From: Srinivasan Shanmugam @ 2025-09-02 14:52 UTC (permalink / raw)
To: Christian König, Alex Deucher; +Cc: amd-gfx, Srinivasan Shanmugam
Add a one-page TTM range manager for AMDGPU_PL_MMIO_REMAP via
amdgpu_ttm_init_on_chip(). This only registers the placement with TTM;
no BO is allocated in this patch.
The singleton 4K remap BO is created and freed in the following patch.
This split follows to separate heap bring-up from BO allocation.
Cc: Christian König <christian.koenig@amd.com>
Suggested-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 42f97d568059..1a68ba17a62d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -2021,6 +2021,13 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
return r;
}
+ /* Initialize MMIO-remap pool (single page 4K) */
+ r = amdgpu_ttm_init_on_chip(adev, AMDGPU_PL_MMIO_REMAP, 1);
+ if (r) {
+ dev_err(adev->dev, "Failed initializing MMIO-remap heap.\n");
+ return r;
+ }
+
/* Initialize preemptible memory pool */
r = amdgpu_preempt_mgr_init(adev);
if (r) {
@@ -2083,6 +2090,7 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev)
}
amdgpu_bo_free_kernel(&adev->mman.sdma_access_bo, NULL,
&adev->mman.sdma_access_ptr);
+
amdgpu_ttm_fw_reserve_vram_fini(adev);
amdgpu_ttm_drv_reserve_vram_fini(adev);
@@ -2104,6 +2112,7 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev)
ttm_range_man_fini(&adev->mman.bdev, AMDGPU_PL_GWS);
ttm_range_man_fini(&adev->mman.bdev, AMDGPU_PL_OA);
ttm_range_man_fini(&adev->mman.bdev, AMDGPU_PL_DOORBELL);
+ ttm_range_man_fini(&adev->mman.bdev, AMDGPU_PL_MMIO_REMAP);
ttm_device_fini(&adev->mman.bdev);
adev->mman.initialized = false;
dev_info(adev->dev, "amdgpu: ttm finalized\n");
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v7 7/8] drm/amdgpu/ttm: Allocate/Free 4K MMIO_REMAP Singleton
2025-09-02 14:52 [PATCH v7 0/8] drm/amdgpu: add MMIO-remap singleton BO for HDP flush v7 Srinivasan Shanmugam
` (5 preceding siblings ...)
2025-09-02 14:52 ` [PATCH v7 6/8] drm/amdgpu/ttm: Initialize AMDGPU_PL_MMIO_REMAP Heap Srinivasan Shanmugam
@ 2025-09-02 14:52 ` Srinivasan Shanmugam
2025-09-03 7:40 ` Christian König
2025-09-02 14:52 ` [PATCH v7 8/8] drm/amdgpu/gem: Return Handle to MMIO_REMAP Singleton in GEM_CREATE Srinivasan Shanmugam
7 siblings, 1 reply; 13+ messages in thread
From: Srinivasan Shanmugam @ 2025-09-02 14:52 UTC (permalink / raw)
To: Christian König, Alex Deucher; +Cc: amd-gfx, Srinivasan Shanmugam
Add mmio_remap bookkeeping to amdgpu_device and introduce
amdgpu_ttm_mmio_remap_bo_init()/fini() to manage a kernel-owned,
one-page (4K) BO in AMDGPU_GEM_DOMAIN_MMIO_REMAP.
Bookkeeping:
- adev->rmmio_remap.bo : kernel-owned singleton BO
The BO is allocated during TTM init when a remap bus address is available
(adev->rmmio_remap.bus_addr) and PAGE_SIZE <= AMDGPU_GPU_PAGE_SIZE (4K),
and freed during TTM fini.
v2:
- Check mmio_remap bus address (adev->rmmio_remap.bus_addr) instead of
rmmio_base. (Alex)
- Skip quietly if PAGE_SIZE > AMDGPU_GPU_PAGE_SIZE or no bus address
(no warn). (Alex)
- Use `amdgpu_bo_create()` (not *_kernel) - Only with this The object
is stored in adev->mmio_remap.bo and will later be exposed to
userspace via a GEM handle. (Christian)
v3:
- Remove obvious comment before amdgpu_ttm_mmio_remap_bo_fini() call.
(Alex)
v4:
- Squash bookkeeping into this patch (Christian)
Suggested-by: Christian König <christian.koenig@amd.com>
Suggested-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 59 +++++++++++++++++++++++++
2 files changed, 60 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index ddd472e56f69..24501d3fbefe 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -752,6 +752,7 @@ typedef void (*amdgpu_block_wreg_t)(struct amdgpu_device*, uint32_t, uint32_t, u
struct amdgpu_mmio_remap {
u32 reg_offset;
resource_size_t bus_addr;
+ struct amdgpu_bo *bo;
};
/* Define the HW IP blocks will be used in driver , add more if necessary */
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 1a68ba17a62d..f38bc9542cd6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1854,6 +1854,59 @@ static void amdgpu_ttm_pools_fini(struct amdgpu_device *adev)
adev->mman.ttm_pools = NULL;
}
+/**
+ * amdgpu_ttm_mmio_remap_bo_init - Allocate the singleton 4K MMIO_REMAP BO
+ * @adev: amdgpu device
+ *
+ * Allocates a one-page (4K) GEM BO in AMDGPU_GEM_DOMAIN_MMIO_REMAP when the
+ * hardware exposes a remap base (adev->rmmio_remap.bus_addr) and the host
+ * PAGE_SIZE is <= AMDGPU_GPU_PAGE_SIZE (4K). The BO is created as a regular
+ * GEM object (amdgpu_bo_create).
+ *
+ * Return:
+ * * 0 on success or intentional skip (feature not present/unsupported)
+ * * negative errno on allocation failure
+ */
+static int amdgpu_ttm_mmio_remap_bo_init(struct amdgpu_device *adev)
+{
+ struct amdgpu_bo_param bp;
+ int r;
+
+ /* Skip if HW doesn't expose remap, or if PAGE_SIZE > AMDGPU_GPU_PAGE_SIZE (4K). */
+ if (!adev->rmmio_remap.bus_addr || PAGE_SIZE > AMDGPU_GPU_PAGE_SIZE)
+ return 0;
+
+ memset(&bp, 0, sizeof(bp));
+
+ /* Create exactly one GEM BO in the MMIO_REMAP domain. */
+ bp.type = ttm_bo_type_device; /* userspace-mappable GEM */
+ bp.size = AMDGPU_GPU_PAGE_SIZE; /* 4K */
+ bp.byte_align = AMDGPU_GPU_PAGE_SIZE;
+ bp.domain = AMDGPU_GEM_DOMAIN_MMIO_REMAP;
+ bp.flags = 0;
+ bp.resv = NULL;
+ bp.bo_ptr_size = sizeof(struct amdgpu_bo);
+
+ r = amdgpu_bo_create(adev, &bp, &adev->rmmio_remap.bo);
+ if (r)
+ return r;
+
+ return 0;
+}
+
+/**
+ * amdgpu_ttm_mmio_remap_bo_fini - Free the singleton MMIO_REMAP BO
+ * @adev: amdgpu device
+ *
+ * Frees the kernel-owned MMIO_REMAP BO if it was allocated by
+ * amdgpu_ttm_mmio_remap_bo_init().
+ */
+static void amdgpu_ttm_mmio_remap_bo_fini(struct amdgpu_device *adev)
+{
+ amdgpu_bo_unref(&adev->rmmio_remap.bo);
+ adev->rmmio_remap.bo = NULL;
+}
+
/*
* amdgpu_ttm_init - Init the memory management (ttm) as well as various
* gtt/vram related fields.
@@ -2028,6 +2081,11 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
return r;
}
+ /* Allocate the singleton MMIO_REMAP BO (4K) if supported */
+ r = amdgpu_ttm_mmio_remap_bo_init(adev);
+ if (r)
+ return r;
+
/* Initialize preemptible memory pool */
r = amdgpu_preempt_mgr_init(adev);
if (r) {
@@ -2091,6 +2149,7 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev)
amdgpu_bo_free_kernel(&adev->mman.sdma_access_bo, NULL,
&adev->mman.sdma_access_ptr);
+ amdgpu_ttm_mmio_remap_bo_fini(adev);
amdgpu_ttm_fw_reserve_vram_fini(adev);
amdgpu_ttm_drv_reserve_vram_fini(adev);
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v7 8/8] drm/amdgpu/gem: Return Handle to MMIO_REMAP Singleton in GEM_CREATE
2025-09-02 14:52 [PATCH v7 0/8] drm/amdgpu: add MMIO-remap singleton BO for HDP flush v7 Srinivasan Shanmugam
` (6 preceding siblings ...)
2025-09-02 14:52 ` [PATCH v7 7/8] drm/amdgpu/ttm: Allocate/Free 4K MMIO_REMAP Singleton Srinivasan Shanmugam
@ 2025-09-02 14:52 ` Srinivasan Shanmugam
2025-09-03 7:37 ` Christian König
7 siblings, 1 reply; 13+ messages in thread
From: Srinivasan Shanmugam @ 2025-09-02 14:52 UTC (permalink / raw)
To: Christian König, Alex Deucher; +Cc: amd-gfx, Srinivasan Shanmugam
Enable userspace to obtain a handle to the kernel-owned MMIO_REMAP
singleton when AMDGPU_GEM_DOMAIN_MMIO_REMAP is requested via
amdgpu_gem_create_ioctl().
Validate the fixed 4K constraint: if PAGE_SIZE > AMDGPU_GPU_PAGE_SIZE
return -EINVAL; when provided, size and alignment must equal
AMDGPU_GPU_PAGE_SIZE.
If the singleton BO is not available, return -ENODEV.
v2:
- Drop READ_ONCE() on adev->mmio_remap.bo (use a plain pointer load).
The pointer is set `bo = adev->mmio_remap.bo;` ie., The pointer is
written once during init and not changed while IOCTLs run. There’s no
concurrent writer in this execution path, so a normal read is safe.
(Alex)
v3:
- Drop early -EINVAL for AMDGPU_GEM_DOMAIN_MMIO_REMAP; let the
MMIO_REMAP fast-path (For MMIO_REMAP, if asked, we don’t allocate a
new BO — we just check size/alignment, grab the one pre-made BO,
return a handle) handle it and return the singleton handle.
v4:
- Return -EOPNOTSUPP if the singleton isn’t available; drop PAGE_SIZE
check from IOCTL; inline the MMIO_REMAP fast-path and keep
size/alignment validation there. (Christian)
v5:
- Reword comments (no “===”), explain why the singleton is returned.
- Pass &args->in to amdgpu_gem_get_mmio_remap_handle() (drop local
‘size’) (Christian)
Cc: Christian König <christian.koenig@amd.com>
Suggested-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 58 ++++++++++++++++++++++++-
1 file changed, 56 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
index d3c369742124..7676eafbedbf 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
@@ -424,6 +424,47 @@ const struct drm_gem_object_funcs amdgpu_gem_object_funcs = {
.vm_ops = &amdgpu_gem_vm_ops,
};
+/**
+ * amdgpu_gem_get_mmio_remap_handle - Create a GEM handle for the MMIO_REMAP BO
+ * @file_priv: DRM file of the caller
+ * @adev: amdgpu device
+ * @in: GEM create input parameters from userspace (size/alignment fields may be unset (0))
+ * @handle: returned GEM handle for userspace (output)
+ *
+ * Creates a GEM handle to the kernel-owned singleton MMIO_REMAP buffer object
+ * (adev->rmmio_remap.bo). The BO is expected to be allocated during TTM init
+ * when the hardware exposes a remap base and PAGE_SIZE <= 4K.
+ *
+ * Although @in can specify size or alignment, this BO is fixed and unique;
+ * those fields are only validated, not used for allocation.
+ *
+ * drm_gem_handle_create() acquires the handle reference, which will be dropped
+ * by GEM_CLOSE in userspace.
+ *
+ * Returns 0 on success,
+ * -EOPNOTSUPP if the singleton BO is not available on this system,
+ * or a negative errno from drm_gem_handle_create() / validation.
+ */
+static int amdgpu_gem_get_mmio_remap_handle(struct drm_file *file_priv,
+ struct amdgpu_device *adev,
+ const struct drm_amdgpu_gem_create_in *in,
+ u32 *handle)
+{
+ struct amdgpu_bo *bo = adev->rmmio_remap.bo;
+
+ if (!bo)
+ return -EOPNOTSUPP;
+
+ /* MMIO_REMAP is a fixed 4K page; enforce only if userspace specified them. */
+ if (in->bo_size != AMDGPU_GPU_PAGE_SIZE)
+ return -EINVAL;
+ if (in->alignment != AMDGPU_GPU_PAGE_SIZE)
+ return -EINVAL;
+
+ /* drm_gem_handle_create() gets the ref; GEM_CLOSE will drop it */
+ return drm_gem_handle_create(file_priv, &bo->tbo.base, handle);
+}
+
/*
* GEM ioctls.
*/
@@ -465,8 +506,21 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
/* always clear VRAM */
flags |= AMDGPU_GEM_CREATE_VRAM_CLEARED;
- if (args->in.domains & AMDGPU_GEM_DOMAIN_MMIO_REMAP)
- return -EINVAL;
+ /*
+ * MMIO_REMAP fast-path:
+ * For AMDGPU_GEM_DOMAIN_MMIO_REMAP we expose a single global, fixed 4K page
+ * via one shared BO. Don’t allocate a new BO; return a handle to that singleton.
+ */
+ if (args->in.domains & AMDGPU_GEM_DOMAIN_MMIO_REMAP) {
+ r = amdgpu_gem_get_mmio_remap_handle(filp, adev,
+ &args->in,
+ &handle);
+ if (r)
+ return r;
+
+ args->out.handle = handle;
+ return 0;
+ }
/* create a gem object to contain this object in */
if (args->in.domains & (AMDGPU_GEM_DOMAIN_GDS |
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v7 8/8] drm/amdgpu/gem: Return Handle to MMIO_REMAP Singleton in GEM_CREATE
2025-09-02 14:52 ` [PATCH v7 8/8] drm/amdgpu/gem: Return Handle to MMIO_REMAP Singleton in GEM_CREATE Srinivasan Shanmugam
@ 2025-09-03 7:37 ` Christian König
2025-09-03 11:44 ` SRINIVASAN SHANMUGAM
0 siblings, 1 reply; 13+ messages in thread
From: Christian König @ 2025-09-03 7:37 UTC (permalink / raw)
To: Srinivasan Shanmugam, Alex Deucher; +Cc: amd-gfx
On 02.09.25 16:52, Srinivasan Shanmugam wrote:
> Enable userspace to obtain a handle to the kernel-owned MMIO_REMAP
> singleton when AMDGPU_GEM_DOMAIN_MMIO_REMAP is requested via
> amdgpu_gem_create_ioctl().
>
> Validate the fixed 4K constraint: if PAGE_SIZE > AMDGPU_GPU_PAGE_SIZE
> return -EINVAL; when provided, size and alignment must equal
> AMDGPU_GPU_PAGE_SIZE.
>
> If the singleton BO is not available, return -ENODEV.
>
> v2:
> - Drop READ_ONCE() on adev->mmio_remap.bo (use a plain pointer load).
> The pointer is set `bo = adev->mmio_remap.bo;` ie., The pointer is
> written once during init and not changed while IOCTLs run. There’s no
> concurrent writer in this execution path, so a normal read is safe.
> (Alex)
>
> v3:
> - Drop early -EINVAL for AMDGPU_GEM_DOMAIN_MMIO_REMAP; let the
> MMIO_REMAP fast-path (For MMIO_REMAP, if asked, we don’t allocate a
> new BO — we just check size/alignment, grab the one pre-made BO,
> return a handle) handle it and return the singleton handle.
>
> v4:
> - Return -EOPNOTSUPP if the singleton isn’t available; drop PAGE_SIZE
> check from IOCTL; inline the MMIO_REMAP fast-path and keep
> size/alignment validation there. (Christian)
>
> v5:
> - Reword comments (no “===”), explain why the singleton is returned.
> - Pass &args->in to amdgpu_gem_get_mmio_remap_handle() (drop local
> ‘size’) (Christian)
>
> Cc: Christian König <christian.koenig@amd.com>
> Suggested-by: Alex Deucher <alexander.deucher@amd.com>
> Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 58 ++++++++++++++++++++++++-
> 1 file changed, 56 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> index d3c369742124..7676eafbedbf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> @@ -424,6 +424,47 @@ const struct drm_gem_object_funcs amdgpu_gem_object_funcs = {
> .vm_ops = &amdgpu_gem_vm_ops,
> };
>
> +/**
> + * amdgpu_gem_get_mmio_remap_handle - Create a GEM handle for the MMIO_REMAP BO
> + * @file_priv: DRM file of the caller
> + * @adev: amdgpu device
> + * @in: GEM create input parameters from userspace (size/alignment fields may be unset (0))
> + * @handle: returned GEM handle for userspace (output)
> + *
> + * Creates a GEM handle to the kernel-owned singleton MMIO_REMAP buffer object
> + * (adev->rmmio_remap.bo). The BO is expected to be allocated during TTM init
> + * when the hardware exposes a remap base and PAGE_SIZE <= 4K.
> + *
> + * Although @in can specify size or alignment, this BO is fixed and unique;
> + * those fields are only validated, not used for allocation.
> + *
> + * drm_gem_handle_create() acquires the handle reference, which will be dropped
> + * by GEM_CLOSE in userspace.
> + *
> + * Returns 0 on success,
> + * -EOPNOTSUPP if the singleton BO is not available on this system,
> + * or a negative errno from drm_gem_handle_create() / validation.
> + */
> +static int amdgpu_gem_get_mmio_remap_handle(struct drm_file *file_priv,
> + struct amdgpu_device *adev,
> + const struct drm_amdgpu_gem_create_in *in,
> + u32 *handle)
> +{
> + struct amdgpu_bo *bo = adev->rmmio_remap.bo;
> +
> + if (!bo)
> + return -EOPNOTSUPP;
> +
> + /* MMIO_REMAP is a fixed 4K page; enforce only if userspace specified them. */
> + if (in->bo_size != AMDGPU_GPU_PAGE_SIZE)
> + return -EINVAL;
> + if (in->alignment != AMDGPU_GPU_PAGE_SIZE)
> + return -EINVAL;
You misunderstood me on teams :(
Only the size must be exactly AMDGPU_GPU_PAGE_SIZE. The alignment can also be smaller than that, just not larger.
In other words the check here is probably best written as "if (in->alignment <= AMDGPU_GPU_PAGE_SIZE)".
Apart from that the patch is Reviewed-by: Christian König <christian.koenig@amd.com>.
Regards,
Christian.
> +
> + /* drm_gem_handle_create() gets the ref; GEM_CLOSE will drop it */
> + return drm_gem_handle_create(file_priv, &bo->tbo.base, handle);
> +}
> +
> /*
> * GEM ioctls.
> */
> @@ -465,8 +506,21 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
> /* always clear VRAM */
> flags |= AMDGPU_GEM_CREATE_VRAM_CLEARED;
>
> - if (args->in.domains & AMDGPU_GEM_DOMAIN_MMIO_REMAP)
> - return -EINVAL;
> + /*
> + * MMIO_REMAP fast-path:
> + * For AMDGPU_GEM_DOMAIN_MMIO_REMAP we expose a single global, fixed 4K page
> + * via one shared BO. Don’t allocate a new BO; return a handle to that singleton.
> + */
> + if (args->in.domains & AMDGPU_GEM_DOMAIN_MMIO_REMAP) {
> + r = amdgpu_gem_get_mmio_remap_handle(filp, adev,
> + &args->in,
> + &handle);
> + if (r)
> + return r;
> +
> + args->out.handle = handle;
> + return 0;
> + }
>
> /* create a gem object to contain this object in */
> if (args->in.domains & (AMDGPU_GEM_DOMAIN_GDS |
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v7 7/8] drm/amdgpu/ttm: Allocate/Free 4K MMIO_REMAP Singleton
2025-09-02 14:52 ` [PATCH v7 7/8] drm/amdgpu/ttm: Allocate/Free 4K MMIO_REMAP Singleton Srinivasan Shanmugam
@ 2025-09-03 7:40 ` Christian König
0 siblings, 0 replies; 13+ messages in thread
From: Christian König @ 2025-09-03 7:40 UTC (permalink / raw)
To: Srinivasan Shanmugam, Alex Deucher; +Cc: amd-gfx
On 02.09.25 16:52, Srinivasan Shanmugam wrote:
> Add mmio_remap bookkeeping to amdgpu_device and introduce
> amdgpu_ttm_mmio_remap_bo_init()/fini() to manage a kernel-owned,
> one-page (4K) BO in AMDGPU_GEM_DOMAIN_MMIO_REMAP.
>
> Bookkeeping:
> - adev->rmmio_remap.bo : kernel-owned singleton BO
>
> The BO is allocated during TTM init when a remap bus address is available
> (adev->rmmio_remap.bus_addr) and PAGE_SIZE <= AMDGPU_GPU_PAGE_SIZE (4K),
> and freed during TTM fini.
>
> v2:
> - Check mmio_remap bus address (adev->rmmio_remap.bus_addr) instead of
> rmmio_base. (Alex)
> - Skip quietly if PAGE_SIZE > AMDGPU_GPU_PAGE_SIZE or no bus address
> (no warn). (Alex)
> - Use `amdgpu_bo_create()` (not *_kernel) - Only with this The object
> is stored in adev->mmio_remap.bo and will later be exposed to
> userspace via a GEM handle. (Christian)
>
> v3:
> - Remove obvious comment before amdgpu_ttm_mmio_remap_bo_fini() call.
> (Alex)
>
> v4:
> - Squash bookkeeping into this patch (Christian)
>
> Suggested-by: Christian König <christian.koenig@amd.com>
> Suggested-by: Alex Deucher <alexander.deucher@amd.com>
> Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 +
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 59 +++++++++++++++++++++++++
> 2 files changed, 60 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index ddd472e56f69..24501d3fbefe 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -752,6 +752,7 @@ typedef void (*amdgpu_block_wreg_t)(struct amdgpu_device*, uint32_t, uint32_t, u
> struct amdgpu_mmio_remap {
> u32 reg_offset;
> resource_size_t bus_addr;
> + struct amdgpu_bo *bo;
> };
>
> /* Define the HW IP blocks will be used in driver , add more if necessary */
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 1a68ba17a62d..f38bc9542cd6 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -1854,6 +1854,59 @@ static void amdgpu_ttm_pools_fini(struct amdgpu_device *adev)
> adev->mman.ttm_pools = NULL;
> }
>
> +/**
> + * amdgpu_ttm_mmio_remap_bo_init - Allocate the singleton 4K MMIO_REMAP BO
> + * @adev: amdgpu device
> + *
> + * Allocates a one-page (4K) GEM BO in AMDGPU_GEM_DOMAIN_MMIO_REMAP when the
> + * hardware exposes a remap base (adev->rmmio_remap.bus_addr) and the host
> + * PAGE_SIZE is <= AMDGPU_GPU_PAGE_SIZE (4K). The BO is created as a regular
> + * GEM object (amdgpu_bo_create).
> + *
> + * Return:
> + * * 0 on success or intentional skip (feature not present/unsupported)
> + * * negative errno on allocation failure
> + */
> +static int amdgpu_ttm_mmio_remap_bo_init(struct amdgpu_device *adev)
> +{
> + struct amdgpu_bo_param bp;
> + int r;
> +
> + /* Skip if HW doesn't expose remap, or if PAGE_SIZE > AMDGPU_GPU_PAGE_SIZE (4K). */
> + if (!adev->rmmio_remap.bus_addr || PAGE_SIZE > AMDGPU_GPU_PAGE_SIZE)
> + return 0;
> +
> + memset(&bp, 0, sizeof(bp));
> +
> + /* Create exactly one GEM BO in the MMIO_REMAP domain. */
> + bp.type = ttm_bo_type_device; /* userspace-mappable GEM */
> + bp.size = AMDGPU_GPU_PAGE_SIZE; /* 4K */
> + bp.byte_align = AMDGPU_GPU_PAGE_SIZE;
> + bp.domain = AMDGPU_GEM_DOMAIN_MMIO_REMAP;
> + bp.flags = 0;
> + bp.resv = NULL;
> + bp.bo_ptr_size = sizeof(struct amdgpu_bo);
> +
> + r = amdgpu_bo_create(adev, &bp, &adev->rmmio_remap.bo);
> + if (r)
> + return r;
> +
> + return 0;
> +}
> +
> +/**
> + * amdgpu_ttm_mmio_remap_bo_fini - Free the singleton MMIO_REMAP BO
> + * @adev: amdgpu device
> + *
> + * Frees the kernel-owned MMIO_REMAP BO if it was allocated by
> + * amdgpu_ttm_mmio_remap_bo_init().
> + */
> +static void amdgpu_ttm_mmio_remap_bo_fini(struct amdgpu_device *adev)
> +{
> + amdgpu_bo_unref(&adev->rmmio_remap.bo);
> + adev->rmmio_remap.bo = NULL;
> +}
> +
> /*
> * amdgpu_ttm_init - Init the memory management (ttm) as well as various
> * gtt/vram related fields.
> @@ -2028,6 +2081,11 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
> return r;
> }
>
> + /* Allocate the singleton MMIO_REMAP BO (4K) if supported */
> + r = amdgpu_ttm_mmio_remap_bo_init(adev);
> + if (r)
> + return r;
> +
> /* Initialize preemptible memory pool */
> r = amdgpu_preempt_mgr_init(adev);
> if (r) {
> @@ -2091,6 +2149,7 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev)
> amdgpu_bo_free_kernel(&adev->mman.sdma_access_bo, NULL,
> &adev->mman.sdma_access_ptr);
>
> + amdgpu_ttm_mmio_remap_bo_fini(adev);
> amdgpu_ttm_fw_reserve_vram_fini(adev);
> amdgpu_ttm_drv_reserve_vram_fini(adev);
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v7 8/8] drm/amdgpu/gem: Return Handle to MMIO_REMAP Singleton in GEM_CREATE
2025-09-03 7:37 ` Christian König
@ 2025-09-03 11:44 ` SRINIVASAN SHANMUGAM
2025-09-03 13:19 ` Alex Deucher
0 siblings, 1 reply; 13+ messages in thread
From: SRINIVASAN SHANMUGAM @ 2025-09-03 11:44 UTC (permalink / raw)
To: Christian König, Alex Deucher; +Cc: amd-gfx
[-- Attachment #1: Type: text/plain, Size: 4401 bytes --]
On 9/3/2025 1:07 PM, Christian König wrote:
> On 02.09.25 16:52, Srinivasan Shanmugam wrote:
>> Enable userspace to obtain a handle to the kernel-owned MMIO_REMAP
>> singleton when AMDGPU_GEM_DOMAIN_MMIO_REMAP is requested via
>> amdgpu_gem_create_ioctl().
>>
>> Validate the fixed 4K constraint: if PAGE_SIZE > AMDGPU_GPU_PAGE_SIZE
>> return -EINVAL; when provided, size and alignment must equal
>> AMDGPU_GPU_PAGE_SIZE.
>>
>> If the singleton BO is not available, return -ENODEV.
>>
>> v2:
>> - Drop READ_ONCE() on adev->mmio_remap.bo (use a plain pointer load).
>> The pointer is set `bo = adev->mmio_remap.bo;` ie., The pointer is
>> written once during init and not changed while IOCTLs run. There’s no
>> concurrent writer in this execution path, so a normal read is safe.
>> (Alex)
>>
>> v3:
>> - Drop early -EINVAL for AMDGPU_GEM_DOMAIN_MMIO_REMAP; let the
>> MMIO_REMAP fast-path (For MMIO_REMAP, if asked, we don’t allocate a
>> new BO — we just check size/alignment, grab the one pre-made BO,
>> return a handle) handle it and return the singleton handle.
>>
>> v4:
>> - Return -EOPNOTSUPP if the singleton isn’t available; drop PAGE_SIZE
>> check from IOCTL; inline the MMIO_REMAP fast-path and keep
>> size/alignment validation there. (Christian)
>>
>> v5:
>> - Reword comments (no “===”), explain why the singleton is returned.
>> - Pass &args->in to amdgpu_gem_get_mmio_remap_handle() (drop local
>> ‘size’) (Christian)
>>
>> Cc: Christian König<christian.koenig@amd.com>
>> Suggested-by: Alex Deucher<alexander.deucher@amd.com>
>> Signed-off-by: Srinivasan Shanmugam<srinivasan.shanmugam@amd.com>
>> ---
>> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 58 ++++++++++++++++++++++++-
>> 1 file changed, 56 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
>> index d3c369742124..7676eafbedbf 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
>> @@ -424,6 +424,47 @@ const struct drm_gem_object_funcs amdgpu_gem_object_funcs = {
>> .vm_ops = &amdgpu_gem_vm_ops,
>> };
>>
>> +/**
>> + * amdgpu_gem_get_mmio_remap_handle - Create a GEM handle for the MMIO_REMAP BO
>> + * @file_priv: DRM file of the caller
>> + * @adev: amdgpu device
>> + * @in: GEM create input parameters from userspace (size/alignment fields may be unset (0))
>> + * @handle: returned GEM handle for userspace (output)
>> + *
>> + * Creates a GEM handle to the kernel-owned singleton MMIO_REMAP buffer object
>> + * (adev->rmmio_remap.bo). The BO is expected to be allocated during TTM init
>> + * when the hardware exposes a remap base and PAGE_SIZE <= 4K.
>> + *
>> + * Although @in can specify size or alignment, this BO is fixed and unique;
>> + * those fields are only validated, not used for allocation.
>> + *
>> + * drm_gem_handle_create() acquires the handle reference, which will be dropped
>> + * by GEM_CLOSE in userspace.
>> + *
>> + * Returns 0 on success,
>> + * -EOPNOTSUPP if the singleton BO is not available on this system,
>> + * or a negative errno from drm_gem_handle_create() / validation.
>> + */
>> +static int amdgpu_gem_get_mmio_remap_handle(struct drm_file *file_priv,
>> + struct amdgpu_device *adev,
>> + const struct drm_amdgpu_gem_create_in *in,
>> + u32 *handle)
>> +{
>> + struct amdgpu_bo *bo = adev->rmmio_remap.bo;
>> +
>> + if (!bo)
>> + return -EOPNOTSUPP;
>> +
>> + /* MMIO_REMAP is a fixed 4K page; enforce only if userspace specified them. */
>> + if (in->bo_size != AMDGPU_GPU_PAGE_SIZE)
>> + return -EINVAL;
>> + if (in->alignment != AMDGPU_GPU_PAGE_SIZE)
>> + return -EINVAL;
> You misunderstood me on teams :(
>
> Only the size must be exactly AMDGPU_GPU_PAGE_SIZE. The alignment can also be smaller than that, just not larger.
>
> In other words the check here is probably best written as "if (in->alignment <= AMDGPU_GPU_PAGE_SIZE)".
Hi Christian,
Thanks a lot for all your quick reviews and feedback's onto this series.
Just to double check "if (in->alignment <= AMDGPU_GPU_PAGE_SIZE)".
"<="is rejecting for buffer alignment "#define BUFFER_ALIGN (4*1024)" in
IGT, so is that is that this check should be lesser than 4K
if (in->alignment < AMDGPU_GPU_PAGE_SIZE)atleast for this MMIO_REMAP BO case?
Best regards,
Srini
[-- Attachment #2: Type: text/html, Size: 5463 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v7 8/8] drm/amdgpu/gem: Return Handle to MMIO_REMAP Singleton in GEM_CREATE
2025-09-03 11:44 ` SRINIVASAN SHANMUGAM
@ 2025-09-03 13:19 ` Alex Deucher
0 siblings, 0 replies; 13+ messages in thread
From: Alex Deucher @ 2025-09-03 13:19 UTC (permalink / raw)
To: SRINIVASAN SHANMUGAM; +Cc: Christian König, Alex Deucher, amd-gfx
On Wed, Sep 3, 2025 at 7:54 AM SRINIVASAN SHANMUGAM
<srinivasan.shanmugam@amd.com> wrote:
>
>
> On 9/3/2025 1:07 PM, Christian König wrote:
>
> On 02.09.25 16:52, Srinivasan Shanmugam wrote:
>
> Enable userspace to obtain a handle to the kernel-owned MMIO_REMAP
> singleton when AMDGPU_GEM_DOMAIN_MMIO_REMAP is requested via
> amdgpu_gem_create_ioctl().
>
> Validate the fixed 4K constraint: if PAGE_SIZE > AMDGPU_GPU_PAGE_SIZE
> return -EINVAL; when provided, size and alignment must equal
> AMDGPU_GPU_PAGE_SIZE.
>
> If the singleton BO is not available, return -ENODEV.
>
> v2:
> - Drop READ_ONCE() on adev->mmio_remap.bo (use a plain pointer load).
> The pointer is set `bo = adev->mmio_remap.bo;` ie., The pointer is
> written once during init and not changed while IOCTLs run. There’s no
> concurrent writer in this execution path, so a normal read is safe.
> (Alex)
>
> v3:
> - Drop early -EINVAL for AMDGPU_GEM_DOMAIN_MMIO_REMAP; let the
> MMIO_REMAP fast-path (For MMIO_REMAP, if asked, we don’t allocate a
> new BO — we just check size/alignment, grab the one pre-made BO,
> return a handle) handle it and return the singleton handle.
>
> v4:
> - Return -EOPNOTSUPP if the singleton isn’t available; drop PAGE_SIZE
> check from IOCTL; inline the MMIO_REMAP fast-path and keep
> size/alignment validation there. (Christian)
>
> v5:
> - Reword comments (no “===”), explain why the singleton is returned.
> - Pass &args->in to amdgpu_gem_get_mmio_remap_handle() (drop local
> ‘size’) (Christian)
>
> Cc: Christian König <christian.koenig@amd.com>
> Suggested-by: Alex Deucher <alexander.deucher@amd.com>
> Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 58 ++++++++++++++++++++++++-
> 1 file changed, 56 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> index d3c369742124..7676eafbedbf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
> @@ -424,6 +424,47 @@ const struct drm_gem_object_funcs amdgpu_gem_object_funcs = {
> .vm_ops = &amdgpu_gem_vm_ops,
> };
>
> +/**
> + * amdgpu_gem_get_mmio_remap_handle - Create a GEM handle for the MMIO_REMAP BO
> + * @file_priv: DRM file of the caller
> + * @adev: amdgpu device
> + * @in: GEM create input parameters from userspace (size/alignment fields may be unset (0))
> + * @handle: returned GEM handle for userspace (output)
> + *
> + * Creates a GEM handle to the kernel-owned singleton MMIO_REMAP buffer object
> + * (adev->rmmio_remap.bo). The BO is expected to be allocated during TTM init
> + * when the hardware exposes a remap base and PAGE_SIZE <= 4K.
> + *
> + * Although @in can specify size or alignment, this BO is fixed and unique;
> + * those fields are only validated, not used for allocation.
> + *
> + * drm_gem_handle_create() acquires the handle reference, which will be dropped
> + * by GEM_CLOSE in userspace.
> + *
> + * Returns 0 on success,
> + * -EOPNOTSUPP if the singleton BO is not available on this system,
> + * or a negative errno from drm_gem_handle_create() / validation.
> + */
> +static int amdgpu_gem_get_mmio_remap_handle(struct drm_file *file_priv,
> + struct amdgpu_device *adev,
> + const struct drm_amdgpu_gem_create_in *in,
> + u32 *handle)
> +{
> + struct amdgpu_bo *bo = adev->rmmio_remap.bo;
> +
> + if (!bo)
> + return -EOPNOTSUPP;
> +
> + /* MMIO_REMAP is a fixed 4K page; enforce only if userspace specified them. */
> + if (in->bo_size != AMDGPU_GPU_PAGE_SIZE)
> + return -EINVAL;
>
> + if (in->alignment != AMDGPU_GPU_PAGE_SIZE)
> + return -EINVAL;
>
> You misunderstood me on teams :(
>
> Only the size must be exactly AMDGPU_GPU_PAGE_SIZE. The alignment can also be smaller than that, just not larger.
>
> In other words the check here is probably best written as "if (in->alignment <= AMDGPU_GPU_PAGE_SIZE)".
>
> Hi Christian,
>
> Thanks a lot for all your quick reviews and feedback's onto this series.
>
> Just to double check "if (in->alignment <= AMDGPU_GPU_PAGE_SIZE)". " <=" is rejecting for buffer alignment "#define BUFFER_ALIGN (4*1024)" in IGT, so is that is that this check should be lesser than 4K
>
> if (in->alignment < AMDGPU_GPU_PAGE_SIZE) atleast for this MMIO_REMAP BO case?
if (alignment > AMDGPU_GPU_PAGE_SIZE)
return -EINVAL;
Alex
>
> Best regards,
> Srini
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2025-09-03 13:19 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-02 14:52 [PATCH v7 0/8] drm/amdgpu: add MMIO-remap singleton BO for HDP flush v7 Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 1/8] drm/ttm: Bump TTM_NUM_MEM_TYPES to 9 (Prep for AMDGPU_PL_MMIO_REMAP) Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 2/8] drm/amdgpu/uapi: Introduce AMDGPU_GEM_DOMAIN_MMIO_REMAP Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 3/8] drm/amdgpu/ttm: Add New AMDGPU_PL_MMIO_REMAP Placement Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 4/8] drm/amdgpu: Wire up MMIO_REMAP placement and User-visible strings Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 5/8] drm/amdgpu: Implement TTM handling for MMIO_REMAP placement Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 6/8] drm/amdgpu/ttm: Initialize AMDGPU_PL_MMIO_REMAP Heap Srinivasan Shanmugam
2025-09-02 14:52 ` [PATCH v7 7/8] drm/amdgpu/ttm: Allocate/Free 4K MMIO_REMAP Singleton Srinivasan Shanmugam
2025-09-03 7:40 ` Christian König
2025-09-02 14:52 ` [PATCH v7 8/8] drm/amdgpu/gem: Return Handle to MMIO_REMAP Singleton in GEM_CREATE Srinivasan Shanmugam
2025-09-03 7:37 ` Christian König
2025-09-03 11:44 ` SRINIVASAN SHANMUGAM
2025-09-03 13:19 ` Alex Deucher
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).