drm-misc-next for 6.19: UAPI Changes: - panfrost: Add PANFROST_BO_SYNC ioctl - panthor: Add PANTHOR_BO_SYNC ioctl Core Changes: - atomic: Add drm_device pointer to drm_private_obj - bridge: Introduce drm_bridge_unplug, drm_bridge_enter, and drm_bridge_exit - dma-buf: Improve sg_table debugging - dma-fence: Add new helpers, and use them when needed - dp_mst: Avoid out-of-bounds access with VCPI==0 - gem: Reduce page table overhead with transparent huge pages - panic: Report invalid panic modes - sched: Add TODO entries - ttm: Various cleanups - vblank: Various refactoring and cleanups - Kconfig cleanups - Removed support for kdb Driver Changes: - amdxdna: Fix race conditions at suspend, Improve handling of zero tail pointers, Fix cu_idx being overwritten during command setup - ast: Support imported cursor buffers - - panthor: Enable timestamp propagation, Multiple improvements and fixes to improve the overall robustness, notably of the scheduler. - panels: - panel-edp: Support for CSW MNE007QB3-1, AUO B140HAN06.4, AUO B140QAX01.H Signed-off-by: Dave Airlie <airlied@redhat.com> [airlied: fix mm conflict] From: Maxime Ripard <mripard@redhat.com> Link: https://patch.msgid.link/20251212-spectacular-agama-of-abracadabra-aaef32@penduick
Showing the changes to include/uapi (2 of 103 files). Show all
Unified · Split
| @@ -24,6 +24,8 @@ extern "C" { · 23 unmodified lines | ||
| 24 | 24 | #define DRM_PANFROST_SET_LABEL_BO 0x09 |
| 25 | 25 | #define DRM_PANFROST_JM_CTX_CREATE 0x0a |
| 26 | 26 | #define DRM_PANFROST_JM_CTX_DESTROY 0x0b |
| 27 | +#define DRM_PANFROST_SYNC_BO 0x0c | |
| 28 | +#define DRM_PANFROST_QUERY_BO_INFO 0x0d | |
| 27 | 29 | |
| 28 | 30 | #define DRM_IOCTL_PANFROST_SUBMIT DRM_IOW(DRM_COMMAND_BASE + DRM_PANFROST_SUBMIT, struct drm_panfrost_submit) |
| 29 | 31 | #define DRM_IOCTL_PANFROST_WAIT_BO DRM_IOW(DRM_COMMAND_BASE + DRM_PANFROST_WAIT_BO, struct drm_panfrost_wait_bo) |
| @@ -35,6 +37,8 @@ extern "C" { · 5 unmodified lines | ||
| 35 | 37 | #define DRM_IOCTL_PANFROST_SET_LABEL_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_PANFROST_SET_LABEL_BO, struct drm_panfrost_set_label_bo) |
| 36 | 38 | #define DRM_IOCTL_PANFROST_JM_CTX_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_PANFROST_JM_CTX_CREATE, struct drm_panfrost_jm_ctx_create) |
| 37 | 39 | #define DRM_IOCTL_PANFROST_JM_CTX_DESTROY DRM_IOWR(DRM_COMMAND_BASE + DRM_PANFROST_JM_CTX_DESTROY, struct drm_panfrost_jm_ctx_destroy) |
| 40 | +#define DRM_IOCTL_PANFROST_SYNC_BO DRM_IOWR(DRM_COMMAND_BASE + DRM_PANFROST_SYNC_BO, struct drm_panfrost_sync_bo) | |
| 41 | +#define DRM_IOCTL_PANFROST_QUERY_BO_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_PANFROST_QUERY_BO_INFO, struct drm_panfrost_query_bo_info) | |
| 38 | 42 | |
| 39 | 43 | /* |
| 40 | 44 | * Unstable ioctl(s): only exposed when the unsafe unstable_ioctls module |
| @@ -120,9 +124,12 @@ struct drm_panfrost_wait_bo { · 79 unmodified lines | ||
| 120 | 124 | __s64 timeout_ns; |
| 121 | 125 | }; |
| 122 | 126 | |
| 123 | −/* Valid flags to pass to drm_panfrost_create_bo */ | |
| 127 | +/* Valid flags to pass to drm_panfrost_create_bo. | |
| 128 | + * PANFROST_BO_WB_MMAP can't be set if PANFROST_BO_HEAP is. | |
| 129 | + */ | |
| 124 | 130 | #define PANFROST_BO_NOEXEC 1 |
| 125 | 131 | #define PANFROST_BO_HEAP 2 |
| 132 | +#define PANFROST_BO_WB_MMAP 4 | |
| 126 | 133 | |
| 127 | 134 | /** |
| 128 | 135 | * struct drm_panfrost_create_bo - ioctl argument for creating Panfrost BOs. |
| @@ -228,6 +235,13 @@ enum drm_panfrost_param { · 99 unmodified lines | ||
| 228 | 235 | DRM_PANFROST_PARAM_SYSTEM_TIMESTAMP, |
| 229 | 236 | DRM_PANFROST_PARAM_SYSTEM_TIMESTAMP_FREQUENCY, |
| 230 | 237 | DRM_PANFROST_PARAM_ALLOWED_JM_CTX_PRIORITIES, |
| 238 | + DRM_PANFROST_PARAM_SELECTED_COHERENCY, | |
| 239 | +}; | |
| 240 | + | |
| 241 | +enum drm_panfrost_gpu_coherency { | |
| 242 | + DRM_PANFROST_GPU_COHERENCY_ACE_LITE = 0, | |
| 243 | + DRM_PANFROST_GPU_COHERENCY_ACE = 1, | |
| 244 | + DRM_PANFROST_GPU_COHERENCY_NONE = 31, | |
| 231 | 245 | }; |
| 232 | 246 | |
| 233 | 247 | struct drm_panfrost_get_param { |
| @@ -301,6 +315,66 @@ struct drm_panfrost_set_label_bo { · 67 unmodified lines | ||
| 301 | 315 | __u64 label; |
| 302 | 316 | }; |
| 303 | 317 | |
| 318 | +/* Valid flags to pass to drm_panfrost_bo_sync_op */ | |
| 319 | +#define PANFROST_BO_SYNC_CPU_CACHE_FLUSH 0 | |
| 320 | +#define PANFROST_BO_SYNC_CPU_CACHE_FLUSH_AND_INVALIDATE 1 | |
| 321 | + | |
| 322 | +/** | |
| 323 | + * struct drm_panthor_bo_flush_map_op - BO map sync op | |
| 324 | + */ | |
| 325 | +struct drm_panfrost_bo_sync_op { | |
| 326 | + /** @handle: Handle of the buffer object to sync. */ | |
| 327 | + __u32 handle; | |
| 328 | + | |
| 329 | + /** @type: Type of sync operation. */ | |
| 330 | + __u32 type; | |
| 331 | + | |
| 332 | + /** | |
| 333 | + * @offset: Offset into the BO at which the sync range starts. | |
| 334 | + * | |
| 335 | + * This will be rounded down to the nearest cache line as needed. | |
| 336 | + */ | |
| 337 | + __u32 offset; | |
| 338 | + | |
| 339 | + /** | |
| 340 | + * @size: Size of the range to sync | |
| 341 | + * | |
| 342 | + * @size + @offset will be rounded up to the nearest cache line as | |
| 343 | + * needed. | |
| 344 | + */ | |
| 345 | + __u32 size; | |
| 346 | +}; | |
| 347 | + | |
| 348 | +/** | |
| 349 | + * struct drm_panfrost_sync_bo - ioctl argument for syncing BO maps | |
| 350 | + */ | |
| 351 | +struct drm_panfrost_sync_bo { | |
| 352 | + /** Array of struct drm_panfrost_bo_sync_op */ | |
| 353 | + __u64 ops; | |
| 354 | + | |
| 355 | + /** Number of BO sync ops */ | |
| 356 | + __u32 op_count; | |
| 357 | + | |
| 358 | + __u32 pad; | |
| 359 | +}; | |
| 360 | + | |
| 361 | +/** BO comes from a different subsystem. */ | |
| 362 | +#define DRM_PANFROST_BO_IS_IMPORTED (1 << 0) | |
| 363 | + | |
| 364 | +struct drm_panfrost_query_bo_info { | |
| 365 | + /** Handle of the object being queried. */ | |
| 366 | + __u32 handle; | |
| 367 | + | |
| 368 | + /** Extra flags that are not coming from the BO_CREATE ioctl(). */ | |
| 369 | + __u32 extra_flags; | |
| 370 | + | |
| 371 | + /** Flags passed at creation time. */ | |
| 372 | + __u32 create_flags; | |
| 373 | + | |
| 374 | + /** Will be zero on return. */ | |
| 375 | + __u32 pad; | |
| 376 | +}; | |
| 377 | + | |
| 304 | 378 | /* Definitions for coredump decoding in user space */ |
| 305 | 379 | #define PANFROSTDUMP_MAJOR 1 |
| 306 | 380 | #define PANFROSTDUMP_MINOR 0 |
| @@ -144,6 +144,16 @@ enum drm_panthor_ioctl_id { · 143 unmodified lines | ||
| 144 | 144 | * pgoff_t size. |
| 145 | 145 | */ |
| 146 | 146 | DRM_PANTHOR_SET_USER_MMIO_OFFSET, |
| 147 | + | |
| 148 | + /** @DRM_PANTHOR_BO_SYNC: Sync BO data to/from the device */ | |
| 149 | + DRM_PANTHOR_BO_SYNC, | |
| 150 | + | |
| 151 | + /** | |
| 152 | + * @DRM_PANTHOR_BO_QUERY_INFO: Query information about a BO. | |
| 153 | + * | |
| 154 | + * This is useful for imported BOs. | |
| 155 | + */ | |
| 156 | + DRM_PANTHOR_BO_QUERY_INFO, | |
| 147 | 157 | }; |
| 148 | 158 | |
| 149 | 159 | /** |
| @@ -245,6 +255,26 @@ enum drm_panthor_dev_query_type { · 95 unmodified lines | ||
| 245 | 255 | DRM_PANTHOR_DEV_QUERY_GROUP_PRIORITIES_INFO, |
| 246 | 256 | }; |
| 247 | 257 | |
| 258 | +/** | |
| 259 | + * enum drm_panthor_gpu_coherency: Type of GPU coherency | |
| 260 | + */ | |
| 261 | +enum drm_panthor_gpu_coherency { | |
| 262 | + /** | |
| 263 | + * @DRM_PANTHOR_GPU_COHERENCY_ACE_LITE: ACE Lite coherency. | |
| 264 | + */ | |
| 265 | + DRM_PANTHOR_GPU_COHERENCY_ACE_LITE = 0, | |
| 266 | + | |
| 267 | + /** | |
| 268 | + * @DRM_PANTHOR_GPU_COHERENCY_ACE: ACE coherency. | |
| 269 | + */ | |
| 270 | + DRM_PANTHOR_GPU_COHERENCY_ACE = 1, | |
| 271 | + | |
| 272 | + /** | |
| 273 | + * @DRM_PANTHOR_GPU_COHERENCY_NONE: No coherency. | |
| 274 | + */ | |
| 275 | + DRM_PANTHOR_GPU_COHERENCY_NONE = 31, | |
| 276 | +}; | |
| 277 | + | |
| 248 | 278 | /** |
| 249 | 279 | * struct drm_panthor_gpu_info - GPU information |
| 250 | 280 | * |
| @@ -301,7 +331,16 @@ struct drm_panthor_gpu_info { · 50 unmodified lines | ||
| 301 | 331 | */ |
| 302 | 332 | __u32 thread_max_barrier_size; |
| 303 | 333 | |
| 304 | − /** @coherency_features: Coherency features. */ | |
| 334 | + /** | |
| 335 | + * @coherency_features: Coherency features. | |
| 336 | + * | |
| 337 | + * Combination of drm_panthor_gpu_coherency flags. | |
| 338 | + * | |
| 339 | + * Note that this is just what the coherency protocols supported by the | |
| 340 | + * GPU, but the actual coherency in place depends on the SoC | |
| 341 | + * integration and is reflected by | |
| 342 | + * drm_panthor_gpu_info::selected_coherency. | |
| 343 | + */ | |
| 305 | 344 | __u32 coherency_features; |
| 306 | 345 | |
| 307 | 346 | /** @texture_features: Texture features. */ |
| @@ -310,8 +349,12 @@ struct drm_panthor_gpu_info { · 2 unmodified lines | ||
| 310 | 349 | /** @as_present: Bitmask encoding the number of address-space exposed by the MMU. */ |
| 311 | 350 | __u32 as_present; |
| 312 | 351 | |
| 313 | − /** @pad0: MBZ. */ | |
| 314 | − __u32 pad0; | |
| 352 | + /** | |
| 353 | + * @select_coherency: Coherency selected for this device. | |
| 354 | + * | |
| 355 | + * One of drm_panthor_gpu_coherency. | |
| 356 | + */ | |
| 357 | + __u32 selected_coherency; | |
| 315 | 358 | |
| 316 | 359 | /** @shader_present: Bitmask encoding the shader cores exposed by the GPU. */ |
| 317 | 360 | __u64 shader_present; |
| @@ -638,6 +681,15 @@ struct drm_panthor_vm_get_state { · 320 unmodified lines | ||
| 638 | 681 | enum drm_panthor_bo_flags { |
| 639 | 682 | /** @DRM_PANTHOR_BO_NO_MMAP: The buffer object will never be CPU-mapped in userspace. */ |
| 640 | 683 | DRM_PANTHOR_BO_NO_MMAP = (1 << 0), |
| 684 | + | |
| 685 | + /** | |
| 686 | + * @DRM_PANTHOR_BO_WB_MMAP: Force "Write-Back Cacheable" CPU mapping. | |
| 687 | + * | |
| 688 | + * CPU map the buffer object in userspace by forcing the "Write-Back | |
| 689 | + * Cacheable" cacheability attribute. The mapping otherwise uses the | |
| 690 | + * "Non-Cacheable" attribute if the GPU is not IO coherent. | |
| 691 | + */ | |
| 692 | + DRM_PANTHOR_BO_WB_MMAP = (1 << 1), | |
| 641 | 693 | }; |
| 642 | 694 | |
| 643 | 695 | /** |
| @@ -1040,6 +1092,101 @@ struct drm_panthor_set_user_mmio_offset { · 396 unmodified lines | ||
| 1040 | 1092 | __u64 offset; |
| 1041 | 1093 | }; |
| 1042 | 1094 | |
| 1095 | +/** | |
| 1096 | + * enum drm_panthor_bo_sync_op_type - BO sync type | |
| 1097 | + */ | |
| 1098 | +enum drm_panthor_bo_sync_op_type { | |
| 1099 | + /** @DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH: Flush CPU caches. */ | |
| 1100 | + DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH = 0, | |
| 1101 | + | |
| 1102 | + /** @DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH_AND_INVALIDATE: Flush and invalidate CPU caches. */ | |
| 1103 | + DRM_PANTHOR_BO_SYNC_CPU_CACHE_FLUSH_AND_INVALIDATE = 1, | |
| 1104 | +}; | |
| 1105 | + | |
| 1106 | +/** | |
| 1107 | + * struct drm_panthor_bo_sync_op - BO map sync op | |
| 1108 | + */ | |
| 1109 | +struct drm_panthor_bo_sync_op { | |
| 1110 | + /** @handle: Handle of the buffer object to sync. */ | |
| 1111 | + __u32 handle; | |
| 1112 | + | |
| 1113 | + /** @type: Type of operation. */ | |
| 1114 | + __u32 type; | |
| 1115 | + | |
| 1116 | + /** | |
| 1117 | + * @offset: Offset into the BO at which the sync range starts. | |
| 1118 | + * | |
| 1119 | + * This will be rounded down to the nearest cache line as needed. | |
| 1120 | + */ | |
| 1121 | + __u64 offset; | |
| 1122 | + | |
| 1123 | + /** | |
| 1124 | + * @size: Size of the range to sync | |
| 1125 | + * | |
| 1126 | + * @size + @offset will be rounded up to the nearest cache line as | |
| 1127 | + * needed. | |
| 1128 | + */ | |
| 1129 | + __u64 size; | |
| 1130 | +}; | |
| 1131 | + | |
| 1132 | +/** | |
| 1133 | + * struct drm_panthor_bo_sync - BO map sync request | |
| 1134 | + */ | |
| 1135 | +struct drm_panthor_bo_sync { | |
| 1136 | + /** | |
| 1137 | + * @ops: Array of struct drm_panthor_bo_sync_op sync operations. | |
| 1138 | + */ | |
| 1139 | + struct drm_panthor_obj_array ops; | |
| 1140 | +}; | |
| 1141 | + | |
| 1142 | +/** | |
| 1143 | + * enum drm_panthor_bo_extra_flags - Set of flags returned on a BO_QUERY_INFO request | |
| 1144 | + * | |
| 1145 | + * Those are flags reflecting BO properties that are not directly coming from the flags | |
| 1146 | + * passed are creation time, or information on BOs that were imported from other drivers. | |
| 1147 | + */ | |
| 1148 | +enum drm_panthor_bo_extra_flags { | |
| 1149 | + /** | |
| 1150 | + * @DRM_PANTHOR_BO_IS_IMPORTED: BO has been imported from an external driver. | |
| 1151 | + * | |
| 1152 | + * Note that imported dma-buf handles are not flagged as imported if they | |
| 1153 | + * where exported by panthor. Only buffers that are coming from other drivers | |
| 1154 | + * (dma heaps, other GPUs, display controllers, V4L, ...). | |
| 1155 | + * | |
| 1156 | + * It's also important to note that all imported BOs are mapped cached and can't | |
| 1157 | + * be considered IO-coherent even if the GPU is. This means they require explicit | |
| 1158 | + * syncs that must go through the DRM_PANTHOR_BO_SYNC ioctl (userland cache | |
| 1159 | + * maintenance is not allowed in that case, because extra operations might be | |
| 1160 | + * needed to make changes visible to the CPU/device, like buffer migration when the | |
| 1161 | + * exporter is a GPU with its own VRAM). | |
| 1162 | + */ | |
| 1163 | + DRM_PANTHOR_BO_IS_IMPORTED = (1 << 0), | |
| 1164 | +}; | |
| 1165 | + | |
| 1166 | +/** | |
| 1167 | + * struct drm_panthor_bo_query_info - Query BO info | |
| 1168 | + */ | |
| 1169 | +struct drm_panthor_bo_query_info { | |
| 1170 | + /** @handle: Handle of the buffer object to query flags on. */ | |
| 1171 | + __u32 handle; | |
| 1172 | + | |
| 1173 | + /** | |
| 1174 | + * @extra_flags: Combination of enum drm_panthor_bo_extra_flags flags. | |
| 1175 | + */ | |
| 1176 | + __u32 extra_flags; | |
| 1177 | + | |
| 1178 | + /** | |
| 1179 | + * @create_flags: Flags passed at creation time. | |
| 1180 | + * | |
| 1181 | + * Combination of enum drm_panthor_bo_flags flags. | |
| 1182 | + * Will be zero if the buffer comes from a different driver. | |
| 1183 | + */ | |
| 1184 | + __u32 create_flags; | |
| 1185 | + | |
| 1186 | + /** @pad: Will be zero on return. */ | |
| 1187 | + __u32 pad; | |
| 1188 | +}; | |
| 1189 | + | |
| 1043 | 1190 | /** |
| 1044 | 1191 | * DRM_IOCTL_PANTHOR() - Build a Panthor IOCTL number |
| 1045 | 1192 | * @__access: Access type. Must be R, W or RW. |
| @@ -1086,6 +1233,10 @@ enum { · 40 unmodified lines | ||
| 1086 | 1233 | DRM_IOCTL_PANTHOR(WR, BO_SET_LABEL, bo_set_label), |
| 1087 | 1234 | DRM_IOCTL_PANTHOR_SET_USER_MMIO_OFFSET = |
| 1088 | 1235 | DRM_IOCTL_PANTHOR(WR, SET_USER_MMIO_OFFSET, set_user_mmio_offset), |
| 1236 | + DRM_IOCTL_PANTHOR_BO_SYNC = | |
| 1237 | + DRM_IOCTL_PANTHOR(WR, BO_SYNC, bo_sync), | |
| 1238 | + DRM_IOCTL_PANTHOR_BO_QUERY_INFO = | |
| 1239 | + DRM_IOCTL_PANTHOR(WR, BO_QUERY_INFO, bo_query_info), | |
| 1089 | 1240 | }; |
| 1090 | 1241 | |
| 1091 | 1242 | #if defined(__cplusplus) |