From b11296bd3e6fdf093e31dcaa2eb50f81ce5e581e Mon Sep 17 00:00:00 2001 From: Christian Gmeiner Date: Fri, 13 Sep 2024 19:19:30 +0200 Subject: [PATCH] broadcom/simulator: Add support for asahi based systems MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dumb buffers do not work with the asahi kernel driver. So use asahi ioctl to create proper buffers. Signed-off-by: Christian Gmeiner Reviewed-by: Alejandro PiƱeiro Part-of: --- src/broadcom/simulator/v3d_simulator.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/broadcom/simulator/v3d_simulator.c b/src/broadcom/simulator/v3d_simulator.c index 04ea4194a25..1898cd6b709 100644 --- a/src/broadcom/simulator/v3d_simulator.c +++ b/src/broadcom/simulator/v3d_simulator.c @@ -61,6 +61,7 @@ #include "util/u_math.h" #include +#include "asahi/lib/unstable_asahi_drm.h" #include "drm-uapi/amdgpu_drm.h" #include "drm-uapi/i915_drm.h" #include "drm-uapi/v3d_drm.h" @@ -102,6 +103,7 @@ static struct v3d_simulator_state { enum gem_type { GEM_I915, GEM_AMDGPU, + GEM_ASAHI, GEM_DUMB }; @@ -277,6 +279,16 @@ v3d_create_simulator_bo_for_gem(int fd, int handle, unsigned size) sim_bo->mmap_offset = map.out.addr_ptr; break; } + case GEM_ASAHI: + { + struct drm_asahi_gem_mmap_offset gem_mmap_offset = { + .handle = handle + }; + + ret = drmIoctl(fd, DRM_IOCTL_ASAHI_GEM_MMAP_OFFSET, &gem_mmap_offset); + sim_bo->mmap_offset = gem_mmap_offset.offset; + break; + } default: { struct drm_mode_map_dumb map = { @@ -564,6 +576,17 @@ v3d_simulator_create_bo_ioctl(int fd, struct drm_v3d_create_bo *args) args->handle = create.out.handle; break; } + case GEM_ASAHI: + { + struct drm_asahi_gem_create create = { + .size = args->size, + }; + + ret = drmIoctl(fd, DRM_IOCTL_ASAHI_GEM_CREATE, &create); + + args->handle = create.handle; + break; + } default: { struct drm_mode_create_dumb create = { @@ -1180,6 +1203,8 @@ v3d_simulator_init(int fd) sim_file->gem_type = GEM_I915; else if (version && strncmp(version->name, "amdgpu", version->name_len) == 0) sim_file->gem_type = GEM_AMDGPU; + else if (version && strncmp(version->name, "asahi", version->name_len) == 0) + sim_file->gem_type = GEM_ASAHI; else sim_file->gem_type = GEM_DUMB; drmFreeVersion(version);