Re: [PATCH 18/24] drm/virtio: implement blob resources: hypercall interface

2020-08-13 Thread kernel test robot
Hi Gurchetan,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on drm-intel/for-linux-next]
[also build test WARNING on drm-tip/drm-tip linus/master next-20200814]
[cannot apply to tegra-drm/drm/tegra/for-next drm/drm-next 
drm-exynos/exynos-drm-next v5.8]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:
https://github.com/0day-ci/linux/commits/Gurchetan-Singh/Blob-prerequisites-blob-resources/20200814-104250
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
config: parisc-randconfig-s031-20200813 (attached as .config)
compiler: hppa-linux-gcc (GCC) 9.3.0
reproduce:
wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.2-168-g9554805c-dirty
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 
CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=parisc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot 


sparse warnings: (new ones prefixed by >>)

   drivers/gpu/drm/virtio/virtgpu_vq.c:1210:23: sparse: sparse: incorrect type 
in assignment (different base types) @@ expected restricted __le64 
[usertype] offset @@ got unsigned long long [usertype] offset @@
   drivers/gpu/drm/virtio/virtgpu_vq.c:1210:23: sparse: expected restricted 
__le64 [usertype] offset
   drivers/gpu/drm/virtio/virtgpu_vq.c:1210:23: sparse: got unsigned long 
long [usertype] offset
>> drivers/gpu/drm/virtio/virtgpu_vq.c:1286:35: sparse: sparse: incorrect type 
>> in assignment (different base types) @@ expected restricted __le32 @@
>>  got restricted __le64 [usertype] @@
>> drivers/gpu/drm/virtio/virtgpu_vq.c:1286:35: sparse: expected restricted 
>> __le32
>> drivers/gpu/drm/virtio/virtgpu_vq.c:1286:35: sparse: got restricted 
>> __le64 [usertype]

vim +1286 drivers/gpu/drm/virtio/virtgpu_vq.c

  1260  
  1261  void virtio_gpu_cmd_set_scanout_blob(struct virtio_gpu_device *vgdev,
  1262   uint32_t scanout_id,
  1263   struct virtio_gpu_object *bo,
  1264   struct drm_framebuffer *fb,
  1265   uint32_t width, uint32_t height,
  1266   uint32_t x, uint32_t y)
  1267  {
  1268  uint32_t i;
  1269  struct virtio_gpu_set_scanout_blob *cmd_p;
  1270  struct virtio_gpu_vbuffer *vbuf;
  1271  uint32_t format = 
virtio_gpu_translate_format(fb->format->format);
  1272  
  1273  cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p));
  1274  memset(cmd_p, 0, sizeof(*cmd_p));
  1275  
  1276  cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_SET_SCANOUT_BLOB);
  1277  cmd_p->resource_id = cpu_to_le32(bo->hw_res_handle);
  1278  cmd_p->scanout_id = cpu_to_le32(scanout_id);
  1279  
  1280  cmd_p->format = cpu_to_le32(format);
  1281  cmd_p->width  = cpu_to_le32(fb->width);
  1282  cmd_p->height = cpu_to_le32(fb->height);
  1283  
  1284  for (i = 0; i < 4; i++) {
  1285  cmd_p->strides[i] = cpu_to_le32(fb->pitches[i]);
> 1286  cmd_p->offsets[i] = cpu_to_le64(fb->offsets[i]);

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org


.config.gz
Description: application/gzip
___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel


[PATCH 18/24] drm/virtio: implement blob resources: hypercall interface

2020-08-13 Thread Gurchetan Singh
This implements the blob hypercall interface.

Signed-off-by: Gurchetan Singh 
Acked-by: Tomeu Vizoso 
---
 drivers/gpu/drm/virtio/virtgpu_drv.h | 15 +++
 drivers/gpu/drm/virtio/virtgpu_vq.c  | 65 
 2 files changed, 80 insertions(+)

diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h 
b/drivers/gpu/drm/virtio/virtgpu_drv.h
index 61f57b04525b..fe9bb95a408b 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
@@ -35,6 +35,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -382,6 +383,20 @@ int virtio_gpu_cmd_map(struct virtio_gpu_device *vgdev,
 void virtio_gpu_cmd_unmap(struct virtio_gpu_device *vgdev,
  struct virtio_gpu_object *bo);
 
+void
+virtio_gpu_cmd_resource_create_blob(struct virtio_gpu_device *vgdev,
+   struct virtio_gpu_object *bo,
+   struct virtio_gpu_object_params *params,
+   struct virtio_gpu_mem_entry *ents,
+   uint32_t nents);
+void
+virtio_gpu_cmd_set_scanout_blob(struct virtio_gpu_device *vgdev,
+   uint32_t scanout_id,
+   struct virtio_gpu_object *bo,
+   struct drm_framebuffer *fb,
+   uint32_t width, uint32_t height,
+   uint32_t x, uint32_t y);
+
 /* virtgpu_display.c */
 void virtio_gpu_modeset_init(struct virtio_gpu_device *vgdev);
 void virtio_gpu_modeset_fini(struct virtio_gpu_device *vgdev);
diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c 
b/drivers/gpu/drm/virtio/virtgpu_vq.c
index 09db56c69424..de4356a183d2 100644
--- a/drivers/gpu/drm/virtio/virtgpu_vq.c
+++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
@@ -1228,3 +1228,68 @@ void virtio_gpu_cmd_unmap(struct virtio_gpu_device 
*vgdev,
 
virtio_gpu_queue_ctrl_buffer(vgdev, vbuf);
 }
+
+void
+virtio_gpu_cmd_resource_create_blob(struct virtio_gpu_device *vgdev,
+   struct virtio_gpu_object *bo,
+   struct virtio_gpu_object_params *params,
+   struct virtio_gpu_mem_entry *ents,
+   uint32_t nents)
+{
+   struct virtio_gpu_resource_create_blob *cmd_p;
+   struct virtio_gpu_vbuffer *vbuf;
+
+   cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p));
+   memset(cmd_p, 0, sizeof(*cmd_p));
+
+   cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB);
+   cmd_p->hdr.ctx_id = cpu_to_le32(params->ctx_id);
+   cmd_p->resource_id = cpu_to_le32(bo->hw_res_handle);
+   cmd_p->blob_mem = cpu_to_le32(params->blob_mem);
+   cmd_p->blob_flags = cpu_to_le32(params->blob_flags);
+   cmd_p->blob_id = cpu_to_le64(params->blob_id);
+   cmd_p->size = cpu_to_le64(params->size);
+   cmd_p->nr_entries = cpu_to_le32(nents);
+
+   vbuf->data_buf = ents;
+   vbuf->data_size = sizeof(*ents) * nents;
+
+   virtio_gpu_queue_ctrl_buffer(vgdev, vbuf);
+   bo->created = true;
+}
+
+void virtio_gpu_cmd_set_scanout_blob(struct virtio_gpu_device *vgdev,
+uint32_t scanout_id,
+struct virtio_gpu_object *bo,
+struct drm_framebuffer *fb,
+uint32_t width, uint32_t height,
+uint32_t x, uint32_t y)
+{
+   uint32_t i;
+   struct virtio_gpu_set_scanout_blob *cmd_p;
+   struct virtio_gpu_vbuffer *vbuf;
+   uint32_t format = virtio_gpu_translate_format(fb->format->format);
+
+   cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p));
+   memset(cmd_p, 0, sizeof(*cmd_p));
+
+   cmd_p->hdr.type = cpu_to_le32(VIRTIO_GPU_CMD_SET_SCANOUT_BLOB);
+   cmd_p->resource_id = cpu_to_le32(bo->hw_res_handle);
+   cmd_p->scanout_id = cpu_to_le32(scanout_id);
+
+   cmd_p->format = cpu_to_le32(format);
+   cmd_p->width  = cpu_to_le32(fb->width);
+   cmd_p->height = cpu_to_le32(fb->height);
+
+   for (i = 0; i < 4; i++) {
+   cmd_p->strides[i] = cpu_to_le32(fb->pitches[i]);
+   cmd_p->offsets[i] = cpu_to_le64(fb->offsets[i]);
+   }
+
+   cmd_p->r.width = cpu_to_le32(width);
+   cmd_p->r.height = cpu_to_le32(height);
+   cmd_p->r.x = cpu_to_le32(x);
+   cmd_p->r.y = cpu_to_le32(y);
+
+   virtio_gpu_queue_ctrl_buffer(vgdev, vbuf);
+}
-- 
2.24.1

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel