FLAGS FOR CREATE_BO(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… Flags for CREATE_BO πŸ’…

okay bestie, welcome to the Kernel API Manual β€” this is the page about the flags you can pass to CREATE_BO, and honestly it's shorter than your fave's attention span so we'll be done in a sec 🫢

Quick housekeeping note first, and it's a real one: we say "device" here to mean the GPU, because some fonts make CPU and GPU look way too much alike and we are not doing that confusion today πŸ’€


✨ Device mapping options ✨

  • DRM_PVR_BO_BYPASS_DEVICE_CACHE β€” tells the device that when it accesses this memory, it should skip the cache entirely. Why would you want that? Two moods: either the buffer gets regularly updated by the CPU (eg free lists), or it's only touched once so caching it is literally not worth the effort (eg partial render buffers). And ngl, by default the device already flushes its memory caches after every job, so for coherency you don't normally need this at all. It's giving "nice to have, not mandatory" πŸ’…
  • DRM_PVR_BO_PM_FW_PROTECT β€” this one says only the Parameter Manager (PM) and/or the firmware processor is allowed to access this memory when it's mapped to the device. Very exclusive. VIP list only πŸ‘‘. Important: it is not valid to specify this flag together with DRM_PVR_BO_ALLOW_CPU_USERSPACE_ACCESS β€” those two do not coexist, periodt.

πŸ¦‹ CPU mapping options πŸ¦‹

  • DRM_PVR_BO_ALLOW_CPU_USERSPACE_ACCESS β€” lets userspace map this memory and actually get in there and access the contents. Very "come on in, the water's fine" 🌊. But: it is not valid to specify this flag together with DRM_PVR_BO_PM_FW_PROTECT β€” same forbidden combo as above, just from the other direction πŸ™ˆ
fr fr, those two flags are mutually exclusive in both directions. Don't try it, the kernel will not be amused 😭

🌈 SEE ALSO 🌈

Okay this list is long bestie, but every single one of these is iconic in its own way, so here we go πŸŽ€

  • Kernel file ./include/uapi/drm/pvr_drm.h
  • PowerVR UAPI(9)
  • struct drm_pvr_obj_array(9)
  • DRM_PVR_OBJ_ARRAY(9)
  • PowerVR IOCTL interface(9)
  • PVR_IOCTL(9)
  • PowerVR IOCTL DEV_QUERY interface(9)
  • struct drm_pvr_dev_query_gpu_info(9)
  • struct drm_pvr_dev_query_runtime_info(9)
  • struct drm_pvr_dev_query_quirks(9)
  • struct drm_pvr_dev_query_enhancements(9)
  • enum drm_pvr_heap_id(9)
  • struct drm_pvr_heap(9)
  • struct drm_pvr_dev_query_heap_info(9)
  • enum drm_pvr_static_data_area_usage(9)
  • struct drm_pvr_static_data_area(9)
  • struct drm_pvr_dev_query_static_data_areas(9)
  • enum drm_pvr_dev_query(9)
  • struct drm_pvr_ioctl_dev_query_args(9)
  • PowerVR IOCTL CREATE_BO interface(9)
  • struct drm_pvr_ioctl_create_bo_args(9)
  • PowerVR IOCTL GET_BO_MMAP_OFFSET interface(9)
  • struct drm_pvr_ioctl_get_bo_mmap_offset_args(9)
  • PowerVR IOCTL CREATE_VM_CONTEXT and DESTROY_VM_CONTEXT interfaces(9)
  • struct drm_pvr_ioctl_create_vm_context_args(9)
  • struct drm_pvr_ioctl_destroy_vm_context_args(9)
  • PowerVR IOCTL VM_MAP and VM_UNMAP interfaces(9)
  • struct drm_pvr_ioctl_vm_map_args(9)
  • struct drm_pvr_ioctl_vm_unmap_args(9)
  • PowerVR IOCTL CREATE_CONTEXT and DESTROY_CONTEXT interfaces(9)
  • enum drm_pvr_ctx_priority(9)
  • enum drm_pvr_ctx_type(9)
  • struct drm_pvr_ioctl_create_context_args(9)
  • struct drm_pvr_ioctl_destroy_context_args(9)
  • PowerVR IOCTL CREATE_FREE_LIST and DESTROY_FREE_LIST interfaces(9)
  • struct drm_pvr_ioctl_create_free_list_args(9)
  • struct drm_pvr_ioctl_destroy_free_list_args(9)
  • PowerVR IOCTL CREATE_HWRT_DATASET and DESTROY_HWRT_DATASET interfaces(9)
  • struct drm_pvr_create_hwrt_geom_data_args(9)
  • struct drm_pvr_create_hwrt_rt_data_args(9)
  • struct drm_pvr_ioctl_create_hwrt_dataset_args(9)
  • struct drm_pvr_ioctl_destroy_hwrt_dataset_args(9)
  • PowerVR IOCTL SUBMIT_JOBS interface(9)
  • Flags for the drm_pvr_sync_op object.(9)
  • struct drm_pvr_sync_op(9)
  • Flags for SUBMIT_JOB ioctl geometry command.(9)
  • Flags for SUBMIT_JOB ioctl fragment command.(9)
  • Flags for SUBMIT_JOB ioctl compute command.(9)
  • Flags for SUBMIT_JOB ioctl transfer command.(9)
  • enum drm_pvr_job_type(9)
  • struct drm_pvr_hwrt_data_ref(9)
  • struct drm_pvr_job(9)
  • struct drm_pvr_ioctl_submit_jobs_args(9)

And that's the whole page, bestie β€” you ate that πŸ’– This one lives over in ./include/uapi/drm and the version vibe is October 2026 ⭐ Go forth and flag responsibly, iykyk 🧚

πŸ“¦ where this page comes from