xref: /rockchip-linux_mpp/osal/test/mpp_dmabuf_test.c (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1 /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2 /*
3  * Copyright (c) 2023 Rockchip Electronics Co., Ltd.
4  */
5 
6 #define MODULE_TAG "mpp_dmabuf_test"
7 
8 #include <string.h>
9 #include <errno.h>
10 
11 #include "mpp_log.h"
12 #include "mpp_buffer.h"
13 #include "mpp_common.h"
14 #include "mpp_dmabuf.h"
15 
main()16 int main()
17 {
18     MppBufferGroup grp = NULL;
19     MppBuffer buf = NULL;
20     RK_S32 fd = -1;
21     RK_U8 *ptr = NULL;
22     MPP_RET ret = MPP_NOK;
23 
24     mpp_logi("mpp dmabuf test start\n");
25 
26     do {
27         ret = mpp_buffer_group_get_internal(&grp, MPP_BUFFER_TYPE_DMA_HEAP | MPP_BUFFER_FLAGS_CACHABLE);
28         if (ret) {
29             mpp_loge("get dmaheap buffer group failed ret %d\n", ret);
30             break;
31         }
32 
33         ret = mpp_buffer_get(grp, &buf, SZ_1M);
34         if (ret) {
35             mpp_loge("get 1M dmaheap buffer failed ret %d\n", ret);
36             break;
37         }
38 
39         fd = mpp_buffer_get_fd(buf);
40         ptr = mpp_buffer_get_ptr(buf);
41 
42         ret = mpp_dmabuf_sync_begin(fd, 0, MODULE_TAG);
43         if (ret) {
44             mpp_loge("get dmaheap buffer sync begin failed ret %d\n", ret);
45             break;
46         }
47 
48         ptr[0] = 'a';
49         ptr[1] = 'b';
50         ptr[2] = 'c';
51         ptr[3] = 'd';
52 
53         mpp_logi("ioctl begin cpu access         success\n");
54 
55         ret = mpp_dmabuf_sync_end(fd, 0, MODULE_TAG);
56         if (ret) {
57             mpp_loge("get dmaheap buffer sync begin failed ret %d\n", ret);
58             break;
59         }
60 
61         mpp_logi("ioctl end cpu access           success\n");
62 
63         ret = mpp_dmabuf_sync_partial_begin(fd, 0, 0, SZ_512K, MODULE_TAG);
64         mpp_logi("ioctl begin cpu access partial %s\n", ret ? "failed" : "success");
65 
66         ret = mpp_dmabuf_sync_partial_end(fd, 0, 0, SZ_512K, MODULE_TAG);
67         mpp_logi("ioctl end cpu access partial   %s\n", ret ? "failed" : "success");
68 
69         ret = mpp_dmabuf_set_name(fd, "dmabuf_test", MODULE_TAG);
70         mpp_logi("ioctl set name                 %s\n", ret ? "failed" : "success");
71 
72         ret = mpp_dmabuf_sync_partial_support();
73         mpp_logi("ioctl sync partial             %s\n", ret ? "YES" : "NO");
74 
75         ret = MPP_OK;
76     } while (0);
77 
78     if (buf) {
79         mpp_buffer_put(buf);
80         buf = NULL;
81     }
82 
83     if (grp) {
84         mpp_buffer_group_put(grp);
85         grp = NULL;
86     }
87 
88     mpp_logi("mpp dmabuf test done %s\n", ret ? "failed" : "success");
89 
90     return 0;
91 }
92