min_t(u64, size, sizeof(ras_mask))) ?
                        -EFAULT : 0;
        }
+       case AMDGPU_INFO_VIDEO_CAPS: {
+               const struct amdgpu_video_codecs *codecs;
+               struct drm_amdgpu_info_video_caps *caps;
+               int r;
+
+               switch (info->video_cap.type) {
+               case AMDGPU_INFO_VIDEO_CAPS_DECODE:
+                       r = amdgpu_asic_query_video_codecs(adev, false, &codecs);
+                       if (r)
+                               return -EINVAL;
+                       break;
+               case AMDGPU_INFO_VIDEO_CAPS_ENCODE:
+                       r = amdgpu_asic_query_video_codecs(adev, true, &codecs);
+                       if (r)
+                               return -EINVAL;
+                       break;
+               default:
+                       DRM_DEBUG_KMS("Invalid request %d\n",
+                                     info->video_cap.type);
+                       return -EINVAL;
+               }
+
+               caps = kzalloc(sizeof(*caps), GFP_KERNEL);
+               if (!caps)
+                       return -ENOMEM;
+
+               for (i = 0; i < codecs->codec_count; i++) {
+                       int idx = codecs->codec_array[i].codec_type;
+
+                       switch (idx) {
+                       case AMDGPU_VIDEO_CODEC_TYPE_MPEG2:
+                       case AMDGPU_VIDEO_CODEC_TYPE_MPEG4:
+                       case AMDGPU_VIDEO_CODEC_TYPE_MPEG4_AVC:
+                       case AMDGPU_VIDEO_CODEC_TYPE_VC1:
+                       case AMDGPU_VIDEO_CODEC_TYPE_HEVC:
+                       case AMDGPU_VIDEO_CODEC_TYPE_JPEG:
+                       case AMDGPU_VIDEO_CODEC_TYPE_VP9:
+                       case AMDGPU_VIDEO_CODEC_TYPE_AV1:
+                               caps->codec_info[idx].valid = 1;
+                               caps->codec_info[idx].max_width =
+                                       codecs->codec_array[i].max_width;
+                               caps->codec_info[idx].max_height =
+                                       codecs->codec_array[i].max_height;
+                               caps->codec_info[idx].max_pixels_per_frame =
+                                       codecs->codec_array[i].max_pixels_per_frame;
+                               caps->codec_info[idx].max_level =
+                                       codecs->codec_array[i].max_level;
+                               break;
+                       default:
+                               break;
+                       }
+               }
+               r = copy_to_user(out, caps,
+                                min((size_t)size, sizeof(*caps))) ? -EFAULT : 0;
+               kfree(caps);
+               return r;
+       }
        default:
                DRM_DEBUG_KMS("Invalid request %d\n", info->query);
                return -EINVAL;
 
 #define AMDGPU_INFO_VRAM_LOST_COUNTER          0x1F
 /* query ras mask of enabled features*/
 #define AMDGPU_INFO_RAS_ENABLED_FEATURES       0x20
+/* query video encode/decode caps */
+#define AMDGPU_INFO_VIDEO_CAPS                 0x21
+       /* Subquery id: Decode */
+       #define AMDGPU_INFO_VIDEO_CAPS_DECODE           0
+       /* Subquery id: Encode */
+       #define AMDGPU_INFO_VIDEO_CAPS_ENCODE           1
 
 /* RAS MASK: UMC (VRAM) */
 #define AMDGPU_INFO_RAS_ENABLED_UMC                    (1 << 0)
                struct {
                        __u32 type;
                } sensor_info;
+
+               struct {
+                       __u32 type;
+               } video_cap;
        };
 };
 
        __u32 pad;
 };
 
+/* query video encode/decode caps */
+#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2                 0
+#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4                 1
+#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1                   2
+#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC             3
+#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC                  4
+#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG                  5
+#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9                   6
+#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1                   7
+#define AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_COUNT                 8
+
+struct drm_amdgpu_info_video_codec_info {
+       __u32 valid;
+       __u32 max_width;
+       __u32 max_height;
+       __u32 max_pixels_per_frame;
+       __u32 max_level;
+       __u32 pad;
+};
+
+struct drm_amdgpu_info_video_caps {
+       struct drm_amdgpu_info_video_codec_info codec_info[AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_COUNT];
+};
+
 /*
  * Supported GPU families
  */